# 目的関数の定義 problem += lpSum(transport_vars[base][enemy] * transport_cost_dict[base][enemy] for base in base_names for enemy in enemy_bases)
# 制約条件の定義 # 各自国の拠点からの輸送量は、自国の拠点の供給量以下である必要がある supply_dict = {"Base1": 100, "Base2": 150, "Base3": 200} for base in base_names: problem += lpSum(transport_vars[base][enemy] for enemy in enemy_bases) <= supply_dict[base]
# 各敵地の拠点への輸送量は、敵地の拠点の需要量以上である必要がある demand_dict = {"Enemy1": 80, "Enemy2": 120, "Enemy3": 100} for enemy in enemy_bases: problem += lpSum(transport_vars[base][enemy] for base in base_names) >= demand_dict[enemy]
# 最適化の実行 problem.solve()
# 結果の出力 print("Optimal Solution:") for base in base_names: for enemy in enemy_bases: print(f"Transport from {base} to {enemy}: {transport_vars[base][enemy].varValue}")
Optimal Solution:
Transport from Base1 to Enemy1: 30.0
Transport from Base1 to Enemy2: 0.0
Transport from Base1 to Enemy3: 70.0
Transport from Base2 to Enemy1: 0.0
Transport from Base2 to Enemy2: 120.0
Transport from Base2 to Enemy3: 30.0
Transport from Base3 to Enemy1: 50.0
Transport from Base3 to Enemy2: 0.0
Transport from Base3 to Enemy3: 0.0
各自国の拠点から敵地の拠点への輸送量が表示されています。
例えば、”Transport from Base1 to Enemy1: 30.0” は、自国の Base1 から敵地の Enemy1 への輸送量が30であることを示しています。
# 目的関数を定義する prob += lpSum([cost[f] * food_vars[f] for f in food]), "Total Cost"
# 制約条件を定義する prob += lpSum([calories[f] * food_vars[f] for f in food]) >= target_calories, "Calories Minimum" prob += lpSum([calories[f] * food_vars[f] for f in food]) <= target_calories + 100, "Calories Maximum" prob += lpSum([protein[f] * food_vars[f] for f in food]) >= target_protein, "Protein Minimum" prob += lpSum([fat[f] * food_vars[f] for f in food]) >= target_fat, "Fat Minimum" prob += lpSum([carbs[f] * food_vars[f] for f in food]) >= target_carbs, "Carbs Minimum"
# 問題を解く prob.solve()
# 結果を表示する print("Status:", LpStatus[prob.status]) for v in prob.variables(): print(v.name, "=", v.varValue) print("Total Cost =", value(prob.objective))
この例では、最小化したい変数を cost[f] * food_vars[f] で表し、目的関数は lpSum([cost[f] * food_vars[f] for f in food]) として定義されています。
# 問題の定義 problem = pulp.LpProblem('school_lunch', pulp.LpMinimize)
# 変数の定義 a = pulp.LpVariable('a', lowBound=0, cat='Continuous') b = pulp.LpVariable('b', lowBound=0, cat='Continuous') c = pulp.LpVariable('c', lowBound=0, cat='Continuous')
# 目的関数の定義 problem += 2 * a + 3 * b + 4 * c
# 制約条件の定義 problem += 700 * a + 600 * b + 800 * c >= 10000 problem += 30 * a + 25 * b + 20 * c >= 500 problem += 10 * a + 15 * b + 20 * c >= 200 problem += 50 * a + 40 * b + 60 * c >= 700
# 結果の出力 print("Status:", LpStatus[status]) print("Optimal Solution:") for v in prob.variables(): print(v.name, "=", v.varValue) print("Optimal Value =", value(prob.objective))
# ②問題を定義する problem = LpProblem("Nurse Scheduling", LpMinimize)
# ③変数を作成する shifts = LpVariable.dicts("Shift", ((n, s) for n inrange(num_nurses) for s inrange(num_shifts)), cat='Binary')
# ④目的関数を設定する problem += lpSum([shifts[(n, s)] for n inrange(num_nurses) for s inrange(num_shifts)])
# ⑤制約条件を設定する for s inrange(num_shifts): problem += lpSum([shifts[(n, s)] for n inrange(num_nurses)]) >= shift_requirements[s] for n inrange(num_nurses): problem += lpSum([shifts[(n, s)] for s inrange(num_shifts)]) == 1 for n inrange(num_nurses): for s inrange(num_shifts): if nurse_preferences[n][s] == 0: problem += shifts[(n, s)] == 0
# ⑥問題を解く status = problem.solve()
# ⑦結果を出力する print("ステータス:", LpStatus[status])
for n inrange(num_nurses): for s inrange(num_shifts): if value(shifts[(n, s)]) == 1: print("看護師{}は、シフト{}に割り当てられました".format(n, s))
# 2. 変数の定義 A = LpVariable("Product A Units", lowBound=0, cat='Integer') B = LpVariable("Product B Units", lowBound=0, cat='Integer') C = LpVariable("Product C Units", lowBound=0, cat='Integer')
# 3. 目的関数の定義 prob += 3000*A + 5000*B + 2000*C
# 4. 制約条件の定義 prob += 3*A + 2*B + 1.5*C <= 1500 prob += 1.5*A + 2.5*B + 3*C <= 3000 prob += A + B + C <= 1000 prob += A >= 1 prob += B >= 1 prob += C >= 1
# 5. 最適化の実行 prob.solve()
# 6. 結果の表示 print("Status:", LpStatus[prob.status]) for v in prob.variables(): print(v.name, "=", v.varValue) print("Total Profit = ", value(prob.objective))
# 問題の初期化 problem = LpProblem("Task Assignment Problem", LpMaximize)
# 変数の定義 staff = ['Staff1', 'Staff2', 'Staff3'] tasks = ['Task1', 'Task2', 'Task3', 'Task4', 'Task5'] x = LpVariable.dicts('x', [(i, j) for i in staff for j in tasks], lowBound=0, upBound=1, cat=LpInteger)
# 目的関数の定義 problem += lpSum([x[i, j] for i in staff for j in tasks])
# 制約条件の定義 for j in tasks: problem += lpSum([x[i, j] for i in staff]) == 1
for i in staff: problem += lpSum([x[i, j] for j in tasks]) <= 2
# 問題の解決 status = problem.solve()
# 結果の出力 print("ステータス:", LpStatus[status]) for i in staff: for j in tasks: if x[i, j].value() == 1: print(i, "は", j, "に割り当てられました。")