[英]Is there a well understood algorithm or solution model for this meeting scheduling scenario?
我有一個復雜的問題,我想知道是否存在或適用現有的解決方案模型,例如Traveling Salesman問題。
輸入 :
(Ai,Aj)
的對,指示出席者Ai
希望與出席者Aj
見面,而Aj
接受了邀請。 輸出 :
A
,他將參加的所有活動的時間表。 主要標准是每位服務員都應與盡可能多的接受邀請的服務員會面,以滿足空間限制。 到目前為止,我們考慮過使用回溯求解(嘗試所有可能的解決方案),以及使用線性編程(即定義模型並使用單純形算法求解)
更新:如果Ai
在某些情況下已經見過Aj
,那么他們就不再需要見面了(他們已經見面了)。
如果您可以使用一個好的MIP求解器(通過Acedamic主動程序進行cplex / gurobi,但是coin OR和LP_solve是開源的,也不錯),我肯定會嘗試一下simplex。 我看過將您的問題表達為混合整數程序,我的感覺是它將有很強的松弛度,因此分支和剪切以及價格對您來說將大有幫助。 這些求解器提供了當今可擴展的解決方案,尤其是商業解決方案。 優勢在於它們還提供了一個上限,因此您可以了解解決方案質量,而啟發式方法則並非如此。
公式:
將z(i,j)(二進制)定義為一個變量,該變量指示在{1,2,...,N}中的至少一個事件n中,i和j在一起。 定義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. )
正如@SaeedAmiri指出的那樣,這似乎是一個復雜的問題。
我的猜測是,您正在考慮的回溯和線性編程選項會隨着助手數量的增加而激增(可能大約為幾十個助手)。
如果最優性不是必需的,也許您應該考慮采用(元)啟發式方法,或者通過約束編程來構建初始模型並查看其縮放比例。
為了給您更精確的答案,您為什么需要解決這個問題? 典型的參加人數是多少? 房間的數量?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.