我的一天由算法安排。
请允许我介绍一下鲍勃。鲍勃是一个算法,他刚刚接受了担任我助理的职位。
我不太擅长规划一天的时间,市面上很多号称能帮我解决这个问题的应用程序都没能解决我的问题,通常是由于以下三个主要缺陷:
- 大多数日程规划应用的功能和纸质日程规划应用一样:记录你制定的计划。我不想自己制定计划;应该有人帮我做这件事。
- 他们会在一天之初帮助你制定计划,你需要全天遵循这个计划。但我每天的安排并不固定,所以我的日程需要根据情况随时调整。
- 他们不太擅长处理不同地点之间的转运。
为了解决这些问题,我决定,我口袋里那块每秒能进行百万次运算的硅芯片,应该能帮我做些除了漫无目的地浏览网页之外的事情。它应该能让我一天完成更多的事情,并帮我腾出更多时间去做我想做的事情。这就是我创造Bob的原因。
此外,我想要的是一个不只关注效率的规划算法。我不想重蹈《圆圈》这本书里可怜的琪琪的覆辙,她被一个试图过度优化她一天工作的规划算法逼疯。鲍勃也需要规划休息时间。
鲍勃还很年轻,还在学习新东西,但他已经达到了我认为可以开始日常使用的水平。
Bob 的工作原理是什么?Bob 会接收一系列任务,部分任务来自我的日历(包括工作日历和个人日历),部分来自“日常事务”(例如吃早餐或接孩子),还有一些来自“目标”(一系列可完成的事项)。这些任务会被导入 Bob,他会尝试为接下来的几天制定一个计划,确保我能完成所有计划好的事情。
任务包含的数据比标准日历事件更多,以便更好地进行日程安排。
- “最早开始时间”和“最晚开始时间”。这些时间定义了任务何时可以添加到日程安排中。
- 可完成该任务的地点列表。
- 持续时间。
- 如果这项任务是必要的。
- 优先事项
Bob 使用图遍历来创建最优方案,其中每个节点包含几个不同的内容。
- 剩余任务清单
- 当前计划中无法完成的任务清单
- 得分
- 当前位置
- 现在
鲍勃首先确定我可以去哪些地点完成剩余任务,然后为所有这些行程创建新的叶子节点。接下来,他会判断哪些剩余任务无法完成,以及我何时会到达该地点,并计算该节点的得分。
然后,他会获取当前节点所有剩余任务的列表,这些任务都可以在当前位置完成。他会再次计算我何时能完成任务,更新无法完成的任务列表,并对节点进行评分。
如果任何节点将必需任务添加到无法完成的任务列表中,则该节点被视为已失效,Bob 将不再对其进行分析。
现在我们有了一个活跃叶子节点的列表,从该列表中,我们找到得分最高的节点,然后从上面重新执行该过程。
鲍勃有四种不同的寻找方案的策略。
- 第一个有效方案:该策略寻找第一个满足所有约束条件的方案,但可能会导致一些非必要任务被移除,即使可能存在包含所有任务的方案。这种策略速度最快,但精确度最低。
- 首次完成:此策略与“首次有效”策略功能相同,但仅当找到包含所有任务的计划时才会提前退出。该策略通常会生成相当不错的计划,但可能包含过多的过渡任务。如果找不到包含所有任务的计划,则会切换到“全部有效”策略。
- 全部有效:此策略会探索所有路径,直到路径失效或已完成。然后,它会找到得分最高的方案。如果没有有效的方案,则会切换到“全部”策略。
- 全部路径:此策略会探索所有路径,包括无效路径,最终返回得分最高的路径。即使需要移除一些必要任务,此策略也能创建出可行的计划。
目前的评分系统比较简单,但我计划对其进行大幅扩展。目前,任务完成后得分会增加,任务无法完成时得分会降低。得分的增减幅度取决于任务的优先级和必要性,此外,通勤时间也会影响得分。
被选中进行分析的叶节点是得分最高的那个。这种方法使得前两种策略能够产生不错的结果,但并不能保证它们是最佳的。最终结果取决于评分变量的调整程度。目前,这些变量还没有调整好,但我计划在某个时候为 Bob 创建一个训练算法,该算法会生成各种计划,通过“全部”评分,然后尝试调整变量,以便在通过“首次有效”/“首次完成”运行同一计划时,尽可能用最少的分析节点找到正确的计划。
这种方法还允许我制定任意开始时间的计划,这样,如果我无法按原计划执行,或者任务有所增减,我可以在当天晚些时候重新调整计划。因此,这成为了一个工具,可以帮助我最大限度地利用时间,而无需人为地安排。
鲍勃还可以进行多日计划。他会像往常一样列出每天的任务清单,以及一份“共享”目标清单。然后,他进行同样的计算,将当天的任务和共享目标清单中的所有内容加在一起,共享目标清单中剩余的所有内容则结转到第二天。这个过程会重复进行,直到完成所有剩余的任务。
我创建了一个概念验证应用,里面装着 Bob 这个角色。我可以在这个应用里管理任务、制定计划,并用这些计划更新我的日历。
我还想稍后添加一些功能。其中最重要的是“资产”系统。例如,在计算通勤时间时,系统需要知道我是否带了自行车,因为如果我乘坐公共交通工具上班,那么之后再计算自行车通勤时间就没有意义了。这个系统的工作原理是将“资产”与任务和地点关联起来,这样,当 Bob 制定计划时,他就知道需要考虑资产是否存在。资产也可以与任务关联,例如,一个任务可能是取东西,另一个任务可能是送东西。在这种情况下,资产将作为依赖关系,我必须先取走资产才能送东西。这个系统实现起来很简单,但会导致图变得非常庞大,因此在正式启用之前,我需要进行一些优化。
总结一下;我使用 Bob 才几天,但到目前为止,他似乎制定了很好的计划,帮助我完成了更多高效的任务,也安排了休息时间,例如阅读、冥想、玩游戏机等等,并确保我在计划中有时间进行这些活动。
文章来源:https://dev.to/mortenolsen/my-day-is-being-planned-by-an-algorithm-46ja



