我有一个复杂的问题,我想知道是否存在一个现有的、理解得很好的解决模型,或者是否适用,比如旅行推销员问题。
输入
(Ai,Aj) )表示乘务员Ai希望与Aj (服务人员)见面,Aj接受了邀请。输出
A,他将参加的所有活动的短图。主要的标准是,每个服务员应该满足尽可能多的服务人员接受他的邀请,满足空间限制。到目前为止,我们考虑的是回溯求解(尝试所有可能的解决方案),并使用线性规划(即定义模型,用单纯形算法求解)。
更新:如果Ai在某些情况下已经遇到了Aj,那么他们就不需要再见面了(他们已经见过了)。
发布于 2012-04-30 10:54:01
正如@SaeedAmiri所指出的,这看起来是一个复杂的问题。
我的猜测是,您正在考虑的回溯和线性规划选项将在助理数量增加一点时就会爆炸(可能是几十个助手的顺序)。
也许您应该考虑一种(元)启发式方法,如果优化不是一个需求,或者约束编程来构建一个初始模型,看看它是如何扩展的。
为了给你一个更精确的答案,你为什么需要解决这个问题?典型的出席人数是多少?房间的数目?
发布于 2012-04-30 09:42:00
您的问题与区间图中的最小最大匹配问题一样困难,w.l.o.g假设房间容量是2,意味着它们只能及时处理一次会议。您可以使用区间图对问题进行建模,每个间隔(针对每个人)都是一个节点。边也是如果A_i和A_j有共同的时间,并且他们也想看到对方,将边的权重设置为他们应该看到对方的时间,。如果在此图中找到最小最大匹配,则可以找到受限情况的解决方案。但是请注意,这个图是n-部图,而且每个部分也是区间图。
请注意,如果人们应该在一起的时间是固定的,这将比加权时间更容易。
发布于 2012-05-15 21:05:39
如果您能够访问一个好的MIP解决程序(cplex/gurobi通过acedamic主动访问,但硬币或和LP_solve是开源的,而且也不错),我肯定会尝试简单。我看了一下把你的问题写成一个混合整数程序,我的感觉是它会有很强的放松,所以分支,削减和价格将对你有很大的帮助。这些解决方案提供了显著的可扩展的解决方案,尤其是商业解决方案。优点是,它们还提供了一个上限,因此您可以了解解决方案的质量,而这不是启发式的情况。
提法:
将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 = {event 1,event 2)和M^2 = {event 2,event 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. )https://stackoverflow.com/questions/10378002
复制相似问题