我正在尝试寻找一种算法来优化调度事件,给定一组时隙。每个事件(a,b)是2个用户之间的会议,每个时隙是固定的时间量。 例如。一组可能的事件可以是:[(1,2),(1,3),(4,2),(4,3),(3,1)],有4个可能的时隙。所有事件都必须在某个时间段安排,但是,每个用户的等待时间应该最小化(两个事件之间的时间),同时,等待时间段内的用户数量应该最大化。
你知道这个问题的任何可能的算法或启发式吗?
问候
答案 0 :(得分:2)
听起来像是Job Shop Scheduling(video)和会议安排(video)的组合,具有公平性约束。两者都是NP完全的。
对本地搜索使用简单的贪婪构造启发式(例如First Fit Decreasing)(例如Tabu Search)。对于这些用例,本地搜索比遗传算法获得更好的结果,并且更具可扩展性(参见proof的研究竞赛)。
对于公平约束"每个用户的等待时间应最小化",惩罚等待时间平方:
答案 1 :(得分:1)
您可以通过简单的方法获得一个比随机更好的解决方案:
不幸的是,我不是一个专家,试图将问题减少到已知的NP问题,例如旅行商问题。这可能是一个多项式时间解决方案,但对我来说并不明显。如果没有人提出,请继续阅读:
如果列表不是太大,你可以强制检查每个排列。对于每个排列,安排所有会议(并行独立会议),然后汇总每个用户的最后一次会议时间。那是排列的得分。取最低分的排列。
您可以使用随机起点而不是蛮力,而是向局部最小值发展。系统发育学软件like phyml使用这种技术来搜索最大似然进化树,它具有类似的因子搜索空间。
如果您能够有效地计算掉掉掉掉的分数变化,那么从头开始重新计算排列分数将是一个很大的加速。
这类似于genetic algorithm。你应该阅读一下,看看这些想法是否有效。