针对用户和等待间隔中的最大用户的最低等待时间而言的最优调度系统

时间:2015-08-29 14:21:08

标签: algorithm scheduling

我正在尝试寻找一种算法来优化调度事件,给定一组时隙。每个事件(a,b)是2个用户之间的会议,每个时隙是固定的时间量。 例如。一组可能的事件可以是:[(1,2),(1,3),(4,2),(4,3),(3,1)],有4个可能的时隙。所有事件都必须在某个时间段安排,但是,每个用户的等待时间应该最小化(两个事件之间的时间),同时,等待时间段内的用户数量应该最大化。

你知道这个问题的任何可能的算法或启发式吗?

问候

2 个答案:

答案 0 :(得分:2)

听起来像是Job Shop Schedulingvideo)和会议安排video)的组合,具有公平性约束。两者都是NP完全的。

对本地搜索使用简单的贪婪构造启发式(例如First Fit Decreasing)(例如Tabu Search)。对于这些用例,本地搜索比遗传算法获得更好的结果,并且更具可扩展性(参见proof的研究竞赛)。

对于公平约束"每个用户的等待时间应最小化",惩罚等待时间平方

enter image description here

答案 1 :(得分:1)

您可以通过简单的方法获得一个比随机更好的解决方案:

  1. 首先使用编号较小的用户对每一对进行排序
  2. 按第一用户(主键),第二用户(二级排序键)
  3. 对列表进行排序
  4. 按顺序安排会议,并行安排任何独立会议。 (就像CPU指令调度程序正在寻找独立指令。任何给定的用户仍然会按列出的顺序召开会议。您只是在这里找到允许的重叠。)
  5. 不幸的是,我不是一个专家,试图将问题减少到已知的NP问题,例如旅行商问题。这可能是一个多项式时间解决方案,但对我来说并不明显。如果没有人提出,请继续阅读:

    如果列表不是太大,你可以强制检查每个排列。对于每个排列,安排所有会议(并行独立会议),然后汇总每个用户的最后一次会议时间。那是排列的得分。取最低分的排列。

    您可以使用随机起点而不是蛮力,而是向局部最小值发展。系统发育学软件like phyml使用这种技术来搜索最大似然进化树,它具有类似的因子搜索空间。

    1. 从随机排列开始并评估其得分
    2. 进行一些随机更改,然后评估得分
    3. 如果这不是改进,请尝试另一种排列,直到找到一个。 (也许有一种机制可以记住你已经尝试过这个修改到起始树)。
    4. 从这个新树重复2 ,直到你融入当地最低限度。
    5. 从1 重复一些其他开始猜测,并获得最佳结果。
    6. 如果您能够有效地计算掉掉掉掉的分数变化,那么从头开始重新计算排列分数将是一个很大的加速。

      这类似于genetic algorithm。你应该阅读一下,看看这些想法是否有效。