Python蒙特卡洛模拟工作或任务轻重缓急策略

本文探讨了如何在待办事项列表中决定优先处理的任务。作者提出利用蒙特卡洛模拟进行风险分析,通过Python构建模型来测试不同策略。模拟考虑了任务的优先级、持续时间和截止日期,旨在找到在时间和任务优化之间的平衡点。通过这种方式,可以量化和比较各种完成任务的策略,以找到最有效的解决方案。
摘要由CSDN通过智能技术生成

像很多人一样,我的待办事项列表中有很多事情。 这就引出了一个明显的问题:如果待办事项列表上有多个任务,你应该先做哪一个?名单上的首要任务式是哪个?最容易做到的是哪个?重要的事情是哪个?或者说你需要使用哪种更复杂的方法来解决它们?

当然,若您有足够的时间来完成任务,一切都会变得轻松。若您没有足够的时间,随之而来的问题是您应该首先解决哪些,以及使用什么策略来优化您的时间?

显然,这在很大程度上取决于您要优化的目标:您是否想完成尽可能多的任务?还是尽可能多地完成高优先级任务?还是尽可能及时的完成任务?

建模工具

蒙特卡洛模拟通过将一系列值(概率分布)替换为具有固有不确定性的任何因素来构建可能结果的模型,从而执行风险分析。 然后它一遍又一遍地计算结果,每次都使用来自概率函数的一组不同的随机值。这就是我们将用来找出在尝试优化待办事项列表时使用的最佳策略的工具。 我们将使用 Python构建蒙特卡罗模拟,在 Jupyter Notebook 上运行。 模拟将测试各种策略,我们将通过我们设计的一组指标来衡量它们的有效性。

模型

我们需要做的第一件事是建立一个模型。这很简单,我们真正需要建模的只是任务。

在大多数待办事项列表中,我们都有任务描述、一些注释和截止日期。 许多还具有附加到任务的优先级。 作为任务建模的一部分,我们还需要指出任务花费的时间以及任务完成的日期。

from recordtype import recordtype

# weight is the priority of the task 
# duration is how long it will take to complete the task 
# due is the due date of the task 
# done is the date when the task is completed (starts with 0, 
# set to whenever the task is done)
Task = recordtype('Task', 'weight duration due done')

我使用记录类型来表示任务。它就像一种可变的命名元组,并且相对简单。要创建任务记录类型,我们需要有一个函数来创建任务。

任务

create_task 函数采用任务数来创建并返回任务列表。对于每项任务,我需要设置权重、截止日期、持续时间和完成日期(完成)。

import numpy as np

def create_tasks(num): 
    tasks = []
    distribution = np.round(np.random.exponential(5,10000))
    for i in range(num):
        weight = np.random.randint(1,100)
        due = np.random.choice(distribution)+1
        duration = np.random.randint(0,due)
        t = Task(weight=weight, duration=duration, due=due, done=0) 
        tasks.append(t)  
    return tasks

统计

初次模拟

蒙特卡洛模拟

算法设计

模拟结果示意图

源代码

详情参阅 - 亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值