如何从任务池中排序任务以最小化时间成本?
Posted
技术标签:
【中文标题】如何从任务池中排序任务以最小化时间成本?【英文标题】:How to order Tasks from a Pool of Tasks to minimize time costs? 【发布时间】:2020-11-15 22:57:28 【问题描述】:我正在尝试解决我目前遇到的问题,并了解如何继续的任何帮助/提示/提示。
首先,我将向您解释这个问题以及我如何尝试解决它。
基本问题: 有一个任务池需要完成(池中大约有 50 个任务)。 从一项任务更改为一项新任务需要成本(时间)。 有一个 nxn-Matrix(ChangeCostMatrix) 显示转移每个任务的成本。 成本是不对称的(从 T1 到 T5 的成本 = 5,从 T5 到 T1 的成本 = 2)。
据我了解,这是(不对称)旅行商问题,文献中有很好的描述。 现在我将问题描述为高级问题,我不知道如何解决它。
高级问题: 用任务计划接下来的 50 小时(大约可以解决 20 个任务),使成本最小化。 这意味着从 50 个任务中取出 20 个任务,并最大限度地降低成本,从而解决尽可能多的任务。每个任务都需要一些时间来完成。该时间存储在 TaskDurationMatrix 中。
池中的每个任务都有一个日期或时间,直到它需要完成。在大多数情况下,这将导致假设有 10 个任务需要在接下来的 50 小时内解决。 将给出一个起始任务,从哪里开始最佳游览。
总结一下,我尝试解决以下任务: 用任务计划接下来的 50 小时,从开始任务开始,解决所有需要解决的任务并执行额外任务,从而将时间成本降至最低。
输入:
任务池 n = 50 StartingTask 即 T4 TimePeriod 即 50 小时 TaskDurationMatrix(1 x n):T4:1h,T5:1.5h ... AsymmetricChangeCostMatrix(n x n): T1 - T3: 3h, T3 -T1 2h输出:
时间段的任务顺序:StartikgTask -> T15 -> T11 -> T7 -> T23 -> T14 -> T18...显然这是一项优化任务。 有谁知道我可以如何处理这类任务,并告诉我可以从哪里开始或需要进入哪个领域?
【问题讨论】:
对如何在此处设置目标函数感到有些困惑。有哪些元素?如果您有大约 10 项必需的任务,并且有时间在 50 小时内完成大约 20 项,并且您正在努力减少时间……为什么要完成 10 项以上的任务? 是的,您理解正确,但目标是尽可能多地从池中吸收并完成所需的任务。从一个任务转移到另一个任务有不同的时间成本。目标是最小化任务之间的总时间。 【参考方案1】:您可以实现biased random-key genetic algorithm (BRKGA)。 BRKGA 是用于构建遗传优化算法的通用框架。一个非通用位是解码器,它将由 0 到 1 之间的几个实数组成的染色体变成问题的解决方案。在这种特殊情况下,您可以指定每个任务的染色体有一个编号,并通过选择 (1) 所需任务 (2) 底部 k 其他任务并使用比较器对任务进行排序来将染色体解释为任务序列比较相应的等位基因。
【讨论】:
感谢您的帮助。好的,我浏览了幻灯片,我想我明白了基本的想法。但老实说,我现在什至不知道从哪里开始。根据我的理解,解码器取决于问题。我是否使用我输入的所有信息来设置解码器? @HumanAreKind 解码器需要将 [0, 1] 中具有真实条目的向量转换为解决方案。如果我们有五个任务 T1、T2、T3、T4、T5,其中 T1 和 T2 是强制性的,那么我们首先通过向量条目对它们进行排序。例如,如果向量是[0.4, 0.7, 0.2, 0.3, 0.1],那么顺序是T5 (0.1), T3 (0.2), T4 (0.3), T1 (0.4), T2 (0.7)。我们使用问题信息来评估该顺序中的一组任务需要多长时间,然后只要时间过多,我们就会放弃最后一个非强制性任务(T4,然后是 T3,然后是 T5)。然后报告剩下的目标。以上是关于如何从任务池中排序任务以最小化时间成本?的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试 - 最大化控制资源成本(Java & JS & Python)