前提・実現したいこと
ある企業で各社員について出社したときと休んでいる時の業務が与えられているとして、会社の業務が最大化するような問題を実装してみたいと思っています。
制約として
・各社員が5日以上は出社する
・一日に4人以上は出社する
発生している問題・エラーメッセージ
エラーメッセージは出ないですが、値が出力されません。
該当のソースコード
Python
1import pulp 2import sys 3import numpy as np 4 5#オフィスワークの業務効率 6o=[2,5,2,3,6,7,8,65,4,7,2] 7#テレワークの業務効率 8r=[1,4,2,3,2,7,8,6,4,7,10] 9#交通費 10c=[603,400,603,909,703,200,307,400,077,1102,602,360,520,2208] 11 12#従業員数 13employee_num = 10 14weekday_num = 7 15 16data = [] 17for i in range(employee_num): 18 data += [[o[i],r[i],c[i]]] 19 20print(data) 21cc = [] 22owc = [] 23odc = [] 24 25def main(): 26 problem = pulp.LpProblem("miximize", pulp.LpMaximize) 27 28 variable = [[None for _ in range(weekday_num)] for _ in range(employee_num)] 29 for i in range(employee_num): 30 for d in range(weekday_num): 31 variable[i][d] = pulp.LpVariable(f"x({i},{d})",0 ,1,pulp.LpInteger) 32 33 efi = None 34 for i in range(employee_num): 35 for d in range(weekday_num): 36 efi += variable[i][d] * data[i][0] + (1 - variable[i][d]) * data[i][1] 37 38 problem += efi # 目的関数 39 cc = [0,0,0,0,0] 40 owc = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 41 odc = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 42 # 制約1本目 43 44 for d in range(weekday_num): 45 for i in range(employee_num): 46 cc[d] += variable[i][d] * data[i][2] 47 problem += cc[d] <= 5000 48 49 # 制約2本目 50 51 for i in range(employee_num): 52 for d in range(weekday_num): 53 if variable[i][d] == 1: 54 owc[i] += 1 55 problem += owc[i] >= 2 56 57 # 制約3本目 58 59 for d in range(weekday_num): 60 for i in range(employee_num): 61 if variable[i][d] == 1: 62 owc[d] += 1 63 problem += odc[d] >= 2 64 65 print(problem) 66 status = problem.solve() 67 print(status) 68 print("Obj.value", problem.objective.value()) 69 70 71if __name__=="__main__": 72 main()
試したこと
出社なら1、リモートなら0の関数がうまく言っていないのかなと感じましたが、修正の見当がつきませんでした。
補足情報(FW/ツールのバージョンなど)
Python3.7
Jupyter Notebook 6.0.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/06/25 06:33