優れたMIPソルバー(acedamicイニシアチブを介したcplex / gurobiですが、coin ORとLP_solveはオープンソースであり、悪くはありません)にアクセスできる場合は、間違いなくシンプレックスを試してみます。私はあなたの問題を混合整数計画法として定式化することを検討しました、そしてそれはかなり強い緩和を持っていると私は感じています、それでブランチアンドカットと価格はあなたにとって大いに役立ちます。これらのソルバーは、今日、特に商用ソリューションで非常にスケーラブルなソリューションを提供します。利点は、上限も提供されるため、ヒューリスティックには当てはまらないソリューション品質のアイデアが得られることです。
処方:
z(i、j)(binary)を、iとjが{1,2、...、N}の少なくとも1つのイベントnに一緒にあることを示す変数として定義します。z(i、j、n)(バイナリ)を定義して、イベントnで一緒になっていることを示します。z(i、n)を定義して、iが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. )