前提・実現したいこと
以下のプログラムで、各メンバーに対してすべてのシフトパターンを比較し、各メンバーのシフトを決定するということを行いたいです。
各データ(shift, Day1kiboutime)は、0が出勤しない時間帯を表し、1がshiftの場合出勤時間、Day1kiboutimeの場合出勤可能時間を表しています。
該当のソースコード
import numpy as np import pandas as pd from pulp import LpBinary, LpMinimize, LpProblem, LpVariable, lpSum, value #アルバイトの集合 n_member = 5 member = pd.Series(f"member{m+1}" for m in range(n_member)) #日にちの集合 n_day = 7 day = pd.Series(f"day{d+1}" for d in range(n_day)) #時刻の集合 n_time = 9 time = pd.Series(f"{t+12}時" for t in range(n_time)) #t時 : t時~t+1時 #シフト番号 n_shiftnumber = 6 shiftnumber = pd.Series(f"shift{sn+1}" for sn in range(n_shiftnumber)) #シフトの一覧(直書き) shift = pd.DataFrame([[0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1], [1, 1, 1, 0, 0, 0, 1, 1, 1]], index=shiftnumber, columns=time) #希望出勤時間(Day1) Day1kiboutime = pd.DataFrame([[0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0], [1, 1, 1, 0, 0, 0, 1, 1, 1], [1, 1, 1, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0]], index=member, columns=time)
Day1kiboutimeとshiftの組み合わせが4つあります。((Day1kiboutime,shift)=(0,0),(0,1),(1,0),(1,1))
見方としては、(Day1kiboutime,shift)=(0,0)の場合、希望出勤時間が0、シフトの出勤時間も0という見方です。
今回行いたいことは、(Day1kiboutime,shift)=(0,1)の時(希望出勤時間が0のとき、シフトの出勤時間が1)を不可にするシフト行いたいです。
私自身が思いついた方法として、Day1kiboutime - shift が0以上の場合可能にすればよいと思い以下のプログラムを試しました。しかしエラーが発生してしまいました。
試したこと
#(制約) for m in range(member.size): for s in range(shiftnumber.size): prob += (Day1kiboutime.iloc[m,t] - shift.iloc[s,t] for t in range(time.size)) >= 0
発生している問題・エラーメッセージ
prob += (Day1kiboutime.iloc[m,t] - shift.iloc[s,t] for t in range(time.size)) >= 0 TypeError: '>=' not supported between instances of 'generator' and 'int'
このエラーメッセージの意味、また、改善方法を教えていただきたく思い、質問させていただきました。ご教授いただけると幸いです。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/15 08:08