前提・実現したいこと
pulpを用いてシフトの作成を行いたいと思っています.
以下のデータを用いて, アルバイトの希望出勤日数と実際の出勤日数の差を最小とする目的関数を作成したいです.
#日付の一覧 day = pd.date_range("2019-12-01", "2019-12-07") #アルバイトの集合 n_member = 10 member = pd.Series(f"member{i+1}" for i in range(n_member)) #シフトの一覧 shift = (["9:00-14:00", "14:00-19:00", "19:00-23:00", "休み"]) #希望出勤日 kibou = pd.DataFrame([[1, 1, 1, 1, 1, 0, 0], [1, 1, 1, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1], [0, 1, 1, 1, 1, 1, 0], [1, 1, 1, 0, 1, 0, 0]], index=member, columns=day)
以下のようプログラムを作成したのですが, エラーが起きてしまいます.
python
1#モデルの作成 2prob = LpProblem(sense=LpMinimize) 3 4#変数 5x = [[[LpVariable(f"x{m}{d}{t}", cat=LpBinary)for t in shift] 6 for d in day]for m in member] 7 8#目的関数 9obj = 0 10for m in range(member.size): 11 #希望出勤日数 12 ks = kibou.sum(axis=1) 13 #実際に働いた日数 14 actual = lpSum(x[m][j] for j in range(day.size)) 15 #希望出勤日数と実際に働いた日数の差 16 obj = ks - actual 17 #(制約1)実際に働いた日数が希望出勤日数を超えない制約 18 prob += actual <= ks 19prob += obj
TypeError: Can only add LpConstraintVar, LpConstraint, LpAffineExpression or True objects
どのようにモデルの作成を行えばいいか教えていただきたいです.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/05 14:58