まず第一に、あなたの質問には非常に重要な情報、つまり目的が欠けています。
目的は、学生がコースを受講することによって得られる総効用が最大になるように学生をコースに割り当てることだと思います。この場合、任意のコースを受講することによって任意の学生が得ることができるすべての効用が知られています。あなたの質問から、共同効用も知られていることも理解しています。したがって、損失という名前の新しい「パラメーター」を定義して、損失(k,l)が、学生がコースkとlを同時に受講した場合の「失われた効用」の量を意味するようにすることができます。これらの値は、与えられたデータを使用して簡単に計算できます。次に、次の方法で問題を解決できます。
w (i,k)を、コースkを受講することによって学生iが得る効用の量を決定するパラメーターとします。
x (i,k)を、生徒iがコースkを受講するかどうかを決定する整数バイナリ変数とします。
u (i,k)を、学生がコースを受講することで得られる実際の効用を決定する変数とします。
目的関数:
- すべての学生とコースのsumof(u(i,k))を最大化します。
条件:
x(i,k) * w(i,k) >= u(i,k) (すべての学生とコース)
これにより、コース k の学生 i の最大効用が、想定された (与えられた、可能な最大の) 効用を超えることができないことが保証されます。これにより、 x(i,k)がゼロのときにu(i,k)がゼロに設定されることも保証されます。
x(i,k) w(i,k) + x(i,l) w(i,l) ) >= u(i,k) + u(i,l) - すべての損失(k,l) 「コースペア」と全学生
これにより、学生が 2 つのコースを同時に受講することで得られる効用の合計が、結合効用を超えることができないことが保証されます。