是否有一个很好理解的会议调度方案的算法或解决方案模型?

时间:2012-04-30 02:58:21

标签: algorithm language-agnostic mathematical-optimization linear-programming

我遇到了一个复杂的问题,我想知道是否存在现有且易于理解的解决方案模型,例如旅行商问题。

输入

  • N个时间事件的日历,由开始和结束时间以及地点定义。
  • 每个聚会场所的容量(可以同时容纳的最多人数)
  • 一组(Ai,Aj)对,表示服务员Ai希望与出席者Aj见面,Aj接受该邀请。

输出

  • 对于每个助手A,他将参加的所有活动的计时码表。主要标准是每位服务员应尽可能多地接待接受邀请的服务员,以满足空间限制。

到目前为止,我们考虑使用回溯求解(尝试所有可能的解决方案),并使用线性编程(即定义模型并使用单纯形算法求解)

更新:如果在某些情况下Ai已满足Aj,则他们不再需要见面(他们已经见过面)。

3 个答案:

答案 0 :(得分:3)

您的问题与区间图中的minimum maximal matching problem一样困难,w.l.o.g假设房间容量为2,表示他们只能及时处理一次会议。您可以使用Interval graphs对问题进行建模,每个时间间隔(对于每个人)是一个节点。如果A_i和A的边缘也是如此。 A_j有共同的时间,他们也希望看到对方,将边缘的权重设置为他们应该看到的时间量,。如果您在此图表中找到最小的最大匹配,则可以找到针对受限案例的解决方案。但请注意,此图是n-partite,每个部分都是区间图。

P.S:请注意,如果人们应该相互固定的时间是固定的,那么这比加权的更容易。

答案 1 :(得分:2)

如果您可以访问一个好的MIP求解器(cplex / gurobi通过acedamic计划,但硬币OR和LP_solve是开源的,也不错),我肯定会尝试使用Simplex。我把你的问题看作是一个混合整数程序,我觉得它会有相当强烈的放松,所以分支和削减价格对你来说会有很长的路要走。这些解算器现在提供了非常可扩展的解决方案,尤其是商业解决方案。优点是它们也提供了上限,因此您可以了解解决方案的质量,而启发式则不然。

配方:

将z(i,j)(二进制)定义为变量,表示i和j在{1,2,...,N}中的至少一个事件n中一起。 定义z(i,j,n)(二进制)以指示它们在事件n中一起。 定义z(i,n)表示我正在参加n。 Z(i,j)和z(i,j,m)仅在i和j应该相遇时才存在。

对于每个t,M ^ t是同时保持的时间事件的子集。 因此,如果事件1从9到11,则事件2从10到12,事件3从11到13,然后 M ^ 1 = {事件1,事件2)并且M ^ 2 = {事件2,事件3}。即没有人可以参加1和2,或2和3,但1和3都可以。

Max sum Z(i,j)                      

z(i,j)<= sum_m z(i,j,m)   
(every i,j)(i and j can meet if they are in the same location m at least once)

z(i,j,m)<= z(i,m)   (for every i,j,m) 
(if i and j attend m, then i attends m)

z(i,j,m)<= z(j,m)     (for every i,j,m) 
(if i and j attend m, then j attends m)

sum_i z(i,m) <= C(m)   (for every m) 
(only C(m) persons can visit event m)

sum_(m in M^t) z(i,m) <= 1  (for every t and i)  
(if m and m' are both overlapping time t, then no person can visit them both. )

答案 2 :(得分:1)

正如@SaeedAmiri所指出的,这看起来像一个复杂的问题。

我的猜测是,一旦助手数量增加(可能是数十个),您正在考虑的回溯线性编程选项会爆炸助理)。

如果最优性不是必需的话,也许你应该考虑(meta)启发式方法,或者建立初始模型并看看它如何扩展的约束编程。

为了给您一个更精确的答案,您为什么需要解决这个问题?参与者的典型数量是多少?房间数量?