前提・実現したいこと
Pythonでシフトの自動作成プログラム(pulpを使用)を作成しています。
対象となるシフトは、「各クラスを担当する講師」を自身が担当することができる「授業科目(曜日、時間帯、何週目かによって異なる)」に自動的に振り分けることを目的としています。
「同時間帯に異なる教室で開催される授業には割り振らない」という制約条件を実装中に以下のエラーメッセージが発生しました。
「同時間帯に異なる教室で開催される授業には割り振らない」を実装する方針としては、「同時間帯に開催される授業」のIndex(各授業のコマに相当)を取得し、そのIndexから取得した1行リスト同士(割り振られた講師(担当:1、担当なし:0))の内積がゼロになることを制約条件とすることで実現しようとしています。
Pulpでは非線形問題は解けないとのことですが、該当の箇所は1行のnp.arrayの内積で線形な計算に思えます。
発生している問題・エラーメッセージ
TypeError: Non-constant expressions cannot be multiplied
該当のソースコード
# mは目的関数 # 列 28,29,33は同時間帯に開催される授業を示す # V_Scheduleはシフトを示す変数 V_Schedule = np.array(addbinvars(C_Class, C_Teacher)) for i,r in df_Schedule[[28, 29, 33]].iterrows(): for i2, r2 in df_Schedule[[28, 29, 33]].iterrows(): if i != i2 and r.equals(r2): m += lpDot(V_Schedule[i], V_Schedule[i2]) == 0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/17 03:34