# 変数を定義(各医師が各日に働くかどうか) x = LpVariable.dicts("x", (doctors, days), cat='Binary')
# 目的関数を定義(医師の働く日数を最小化) prob += lpSum(x[doctor][day] for doctor in doctors for day in days)
# 制約を定義 for day in days: prob += lpSum(x[doctor][day] for doctor in doctors) >= 2# 1日に最低2人の医師が必要
for doctor in doctors: prob += lpSum(x[doctor][day] for day in days) <= 4# 各医師は1週間に最大4日しか働けない prob += lpSum(x[doctor][day] for day in days) >= 2# 各医師は1週間に最低2日は働く必要があります
# 問題を解く prob.solve()
# 結果を表示 for v in prob.variables(): print(v.name, "=", v.varValue)
import matplotlib.pyplot as plt import numpy as np
# 結果を配列に格納 result = np.zeros((len(doctors), len(days))) for v in prob.variables(): doctor, day = v.name.split("_")[1:] result[doctors.index(doctor)][days.index(day)] = v.varValue