私は次の問題を最小限に抑えようとしています: ラップトップ、電話、タブレットの生産には在庫(1アイテムあたり1ドル) 10ドル/時間)。特定の月のガジェットの最小数の制約として機能する、満たされるべき需要スキームがあります。これに加えて、最大20000時間の生産と月間3,000時間の労働時間があります。PuLP最小化されたLpVariableのUpperBound値を表示
問題はpython/pulpが私に(1つの例外を除いて)LpVariablesに挿入されているすべての上限値であることを示しています:最小限のコストではありません!
from pulp import *
# Define the LP problem: minimize costs
prob = LpProblem("Minimize costs of production and inventory", LpMinimize)
# Demand schemes
demand_laptops = [75, 125, 1000, 1500, 1000, 500, 1250, 1500, 1000, 500, 500, 400, 300] # Demand laptops
demand_phones = [120, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000] # Demand phones
demand_tablets = [50, 2000, 3000, 2000, 3000, 4000, 5000, 2000, 3000, 4000, 5000, 4000, 5000] # Demand tablets
# Defining variables: normal production hours and overtime production hours.
production_laptop = {x: LpVariable("Production hours for laptop in month {}".format(x), 0, 20000)
for x in range(1, 13)}
production_phone = {x: LpVariable("Production hours for phone in month {}".format(x), 0, 20000)
for x in range(1, 13)}
production_tablet = {x: LpVariable("Production hours for tablet in month {}".format(x), 0, 20000)
for x in range(1, 13)}
overtime_laptop = {x: LpVariable("Overtime hours for laptop in month {}".format(x), 0, 3000)
for x in range(1, 13)}
overtime_phone = {x: LpVariable("Overtime hours for phone in month {}".format(x), 0, 3000)
for x in range(1, 13)}
overtime_tablet = {x: LpVariable("Overtime hours for tablet in month {}".format(x), 0, 3000)
for x in range(1, 13)}
# defining a list of names for the inventory of products
inventory_laptops = {x: "inventory of laptops in month {}".format(x)
for x in range(1, 13)}
inventory_phones = {x: "inventory of phones in month {}".format(x)
for x in range(1, 13)}
inventory_tables = {x: "inventory of tablets in month {}".format(x)
for x in range(1, 13)}
# Inventory (to be minimized)
inventory_laptops[1] = demand_laptops[0] + (1/5) * production_laptop[1] + (1/5) * overtime_laptop[1] - demand_laptops[1]
inventory_laptops[2] = inventory_laptops[1] + (1/5) * production_laptop[2] + (1/5) * overtime_laptop[2] - demand_laptops[2]
inventory_laptops[3] = inventory_laptops[2] + (1/5) * production_laptop[3] + (1/5) * overtime_laptop[3] - demand_laptops[3]
inventory_laptops[4] = inventory_laptops[3] + (1/5) * production_laptop[4] + (1/5) * overtime_laptop[4] - demand_laptops[4]
inventory_laptops[5] = inventory_laptops[4] + (1/5) * production_laptop[5] + (1/5) * overtime_laptop[5] - demand_laptops[5]
inventory_laptops[6] = inventory_laptops[5] + (1/5) * production_laptop[6] + (1/5) * overtime_laptop[6] - demand_laptops[6]
inventory_laptops[7] = inventory_laptops[6] + (1/5) * production_laptop[7] + (1/5) * overtime_laptop[7] - demand_laptops[7]
inventory_laptops[8] = inventory_laptops[7] + (1/5) * production_laptop[8] + (1/5) * overtime_laptop[8] - demand_laptops[8]
inventory_laptops[9] = inventory_laptops[8] + (1/5) * production_laptop[9] + (1/5) * overtime_laptop[9] - demand_laptops[9]
inventory_laptops[10] = inventory_laptops[9] + (1/5) * production_laptop[10] + (1/5) * overtime_laptop[10] - demand_laptops[10]
inventory_laptops[11] = inventory_laptops[10] + (1/5) * production_laptop[11] + (1/5) * overtime_laptop[11] - demand_laptops[11]
inventory_laptops[12] = inventory_laptops[11] + (1/5) * production_laptop[12] + (1/5) * overtime_laptop[12] - demand_laptops[12]
inventory_phones[1] = demand_phones[0] + (1/2) * production_phone[1] + (1/2) * overtime_phone[1] - demand_phones[1]
inventory_phones[2] = inventory_phones[1] + (1/2) * production_phone[2] + (1/2) * overtime_phone[2] - demand_phones[2]
inventory_phones[3] = inventory_phones[2] + (1/2) * production_phone[3] + (1/2) * overtime_phone[3] - demand_phones[3]
inventory_phones[4] = inventory_phones[3] + (1/2) * production_phone[4] + (1/2) * overtime_phone[4] - demand_phones[4]
inventory_phones[5] = inventory_phones[4] + (1/2) * production_phone[5] + (1/2) * overtime_phone[5] - demand_phones[5]
inventory_phones[6] = inventory_phones[5] + (1/2) * production_phone[6] + (1/2) * overtime_phone[6] - demand_phones[6]
inventory_phones[7] = inventory_phones[6] + (1/2) * production_phone[7] + (1/2) * overtime_phone[7] - demand_phones[7]
inventory_phones[8] = inventory_phones[7] + (1/2) * production_phone[8] + (1/2) * overtime_phone[8] - demand_phones[8]
inventory_phones[9] = inventory_phones[8] + (1/2) * production_phone[9] + (1/2) * overtime_phone[9] - demand_phones[9]
inventory_phones[10] = inventory_phones[9] + (1/2) * production_phone[10] + (1/2) * overtime_phone[10] - demand_phones[10]
inventory_phones[11] = inventory_phones[10] + (1/2) * production_phone[11] + (1/2) * overtime_phone[11] - demand_phones[11]
inventory_phones[12] = inventory_phones[11] + (1/2) * production_phone[12] + (1/2) * overtime_phone[12] - demand_phones[12]
inventory_tables[1] = demand_tablets[0] + (1/4) * production_tablet[1] + (1/4) * overtime_tablet[1] - demand_tablets[1]
inventory_tables[2] = inventory_tables[1] + (1/4) * production_tablet[2] + (1/4) * overtime_tablet[2] - demand_tablets[2]
inventory_tables[3] = inventory_tables[2] + (1/4) * production_tablet[3] + (1/4) * overtime_tablet[3] - demand_tablets[3]
inventory_tables[4] = inventory_tables[3] + (1/4) * production_tablet[4] + (1/4) * overtime_tablet[4] - demand_tablets[4]
inventory_tables[5] = inventory_tables[4] + (1/4) * production_tablet[5] + (1/4) * overtime_tablet[5] - demand_tablets[5]
inventory_tables[6] = inventory_tables[5] + (1/4) * production_tablet[6] + (1/4) * overtime_tablet[6] - demand_tablets[6]
inventory_tables[7] = inventory_tables[6] + (1/4) * production_tablet[7] + (1/4) * overtime_tablet[7] - demand_tablets[7]
inventory_tables[8] = inventory_tables[7] + (1/4) * production_tablet[8] + (1/4) * overtime_tablet[8] - demand_tablets[8]
inventory_tables[9] = inventory_tables[8] + (1/4) * production_tablet[9] + (1/4) * overtime_tablet[9] - demand_tablets[9]
inventory_tables[10] = inventory_tables[9] + (1/4) * production_tablet[10] + (1/4) * overtime_tablet[10] - demand_tablets[10]
inventory_tables[11] = inventory_tables[10] + (1/4) * production_tablet[11] + (1/4) * overtime_tablet[11] - demand_tablets[11]
inventory_tables[12] = inventory_tables[11] + (1/4) * production_tablet[12] + (1/4) * overtime_tablet[12] - demand_tablets[12]
# Constraints to meet demand scheme
prob += demand_laptops[0] + (1/5) * production_laptop[1] + (1/5) * overtime_laptop[1] >= demand_laptops[1]
prob += inventory_laptops[1] + (1/5) * production_laptop[2] + (1/5) * overtime_laptop[2] >= demand_laptops[2]
prob += inventory_laptops[2] + (1/5) * production_laptop[3] + (1/5) * overtime_laptop[3] >= demand_laptops[3]
prob += inventory_laptops[3] + (1/5) * production_laptop[4] + (1/5) * overtime_laptop[4] >= demand_laptops[4]
prob += inventory_laptops[4] + (1/5) * production_laptop[5] + (1/5) * overtime_laptop[5] >= demand_laptops[5]
prob += inventory_laptops[5] + (1/5) * production_laptop[6] + (1/5) * overtime_laptop[6] >= demand_laptops[6]
prob += inventory_laptops[6] + (1/5) * production_laptop[7] + (1/5) * overtime_laptop[7] >= demand_laptops[7]
prob += inventory_laptops[7] + (1/5) * production_laptop[8] + (1/5) * overtime_laptop[8] >= demand_laptops[8]
prob += inventory_laptops[8] + (1/5) * production_laptop[9] + (1/5) * overtime_laptop[9] >= demand_laptops[9]
prob += inventory_laptops[9] + (1/5) * production_laptop[10] + (1/5) * overtime_laptop[10] >= demand_laptops[10]
prob += inventory_laptops[10] + (1/5) * production_laptop[11] + (1/5) * overtime_laptop[11] >= demand_laptops[11]
prob += inventory_laptops[11] + (1/5) * production_laptop[12] + (1/5) * overtime_laptop[12] >= demand_laptops[12]
prob += demand_phones[0] + (1/2) * production_phone[1] + (1/2) * overtime_phone[1] >= demand_phones[1]
prob += inventory_phones[1] + (1/2) * production_phone[2] + (1/2) * overtime_phone[2] >= demand_phones[2]
prob += inventory_phones[2] + (1/2) * production_phone[3] + (1/2) * overtime_phone[3] >= demand_phones[3]
prob += inventory_phones[3] + (1/2) * production_phone[4] + (1/2) * overtime_phone[4] >= demand_phones[4]
prob += inventory_phones[4] + (1/2) * production_phone[5] + (1/2) * overtime_phone[5] >= demand_phones[5]
prob += inventory_phones[5] + (1/2) * production_phone[6] + (1/2) * overtime_phone[6] >= demand_phones[6]
prob += inventory_phones[6] + (1/2) * production_phone[7] + (1/2) * overtime_phone[7] >= demand_phones[7]
prob += inventory_phones[7] + (1/2) * production_phone[8] + (1/2) * overtime_phone[8] >= demand_phones[8]
prob += inventory_phones[8] + (1/2) * production_phone[9] + (1/2) * overtime_phone[9] >= demand_phones[9]
prob += inventory_phones[9] + (1/2) * production_phone[10] + (1/2) * overtime_phone[10] >= demand_phones[10]
prob += inventory_phones[10] + (1/2) * production_phone[11] + (1/2) * overtime_phone[11] >= demand_phones[11]
prob += inventory_phones[11] + (1/2) * production_phone[12] + (1/2) * overtime_phone[12] >= demand_phones[12]
prob += demand_tablets[0] + (1/4) * production_tablet[1] + (1/4) * overtime_tablet[1] >= demand_tablets[1]
prob += inventory_phones[1] + (1/4) * production_tablet[2] + (1/4) * overtime_tablet[2] >= demand_tablets[2]
prob += inventory_phones[2] + (1/4) * production_tablet[3] + (1/4) * overtime_tablet[3] >= demand_tablets[3]
prob += inventory_phones[3] + (1/4) * production_tablet[4] + (1/4) * overtime_tablet[4] >= demand_tablets[4]
prob += inventory_phones[4] + (1/4) * production_tablet[5] + (1/4) * overtime_tablet[5] >= demand_tablets[5]
prob += inventory_phones[5] + (1/4) * production_tablet[6] + (1/4) * overtime_tablet[6] >= demand_tablets[6]
prob += inventory_phones[6] + (1/4) * production_tablet[7] + (1/4) * overtime_tablet[7] >= demand_tablets[7]
prob += inventory_phones[7] + (1/4) * production_tablet[8] + (1/4) * overtime_tablet[8] >= demand_tablets[8]
prob += inventory_phones[8] + (1/4) * production_tablet[9] + (1/4) * overtime_tablet[9] >= demand_tablets[9]
prob += inventory_phones[9] + (1/4) * production_tablet[10] + (1/4) * overtime_tablet[10] >= demand_tablets[10]
prob += inventory_phones[10] + (1/4) * production_tablet[11] + (1/4) * overtime_tablet[11] >= demand_tablets[11]
prob += inventory_phones[11] + (1/4) * production_tablet[12] + (1/4) * overtime_tablet[12] >= demand_tablets[12]
# Objective function: inventory costs and overtime costs (10 per hour)
prob += sum(inventory_laptops) + sum(inventory_phones) + sum(inventory_tables) + (10 * (sum(overtime_laptop) + sum(overtime_phone) + sum(overtime_tablet)))
# Solve the problem
prob.solve()
print("Status:", LpStatus[prob.status])
for v in prob.variables():
print(v.name, "=", v.varValue)
print("total costs:", value(prob.objective))
これは私に次のような結果が得られます。
Status: Optimal
Overtime_hours_for_laptop_in_month_1 = 3000.0
Overtime_hours_for_laptop_in_month_10 = 3000.0
Overtime_hours_for_laptop_in_month_11 = 3000.0
Overtime_hours_for_laptop_in_month_12 = 3000.0
Overtime_hours_for_laptop_in_month_2 = 3000.0
Overtime_hours_for_laptop_in_month_3 = 3000.0
Overtime_hours_for_laptop_in_month_4 = 3000.0
Overtime_hours_for_laptop_in_month_5 = 3000.0
Overtime_hours_for_laptop_in_month_6 = 3000.0
Overtime_hours_for_laptop_in_month_7 = 3000.0
Overtime_hours_for_laptop_in_month_8 = 3000.0
Overtime_hours_for_laptop_in_month_9 = 3000.0
Overtime_hours_for_phone_in_month_1 = 3000.0
Overtime_hours_for_phone_in_month_10 = 3000.0
Overtime_hours_for_phone_in_month_11 = 3000.0
Overtime_hours_for_phone_in_month_12 = 3000.0
Overtime_hours_for_phone_in_month_2 = 3000.0
Overtime_hours_for_phone_in_month_3 = 3000.0
Overtime_hours_for_phone_in_month_4 = 3000.0
Overtime_hours_for_phone_in_month_5 = 3000.0
Overtime_hours_for_phone_in_month_6 = 3000.0
Overtime_hours_for_phone_in_month_7 = 3000.0
Overtime_hours_for_phone_in_month_8 = 3000.0
Overtime_hours_for_phone_in_month_9 = 3000.0
Overtime_hours_for_tablet_in_month_1 = 0.0
Overtime_hours_for_tablet_in_month_10 = 3000.0
Overtime_hours_for_tablet_in_month_11 = 3000.0
Overtime_hours_for_tablet_in_month_12 = 3000.0
Overtime_hours_for_tablet_in_month_2 = 3000.0
Overtime_hours_for_tablet_in_month_3 = 3000.0
Overtime_hours_for_tablet_in_month_4 = 3000.0
Overtime_hours_for_tablet_in_month_5 = 3000.0
Overtime_hours_for_tablet_in_month_6 = 3000.0
Overtime_hours_for_tablet_in_month_7 = 3000.0
Overtime_hours_for_tablet_in_month_8 = 3000.0
Overtime_hours_for_tablet_in_month_9 = 3000.0
Production_hours_for_laptop_in_month_1 = 20000.0
Production_hours_for_laptop_in_month_10 = 20000.0
Production_hours_for_laptop_in_month_11 = 20000.0
Production_hours_for_laptop_in_month_12 = 20000.0
Production_hours_for_laptop_in_month_2 = 20000.0
Production_hours_for_laptop_in_month_3 = 20000.0
Production_hours_for_laptop_in_month_4 = 20000.0
Production_hours_for_laptop_in_month_5 = 20000.0
Production_hours_for_laptop_in_month_6 = 20000.0
Production_hours_for_laptop_in_month_7 = 20000.0
Production_hours_for_laptop_in_month_8 = 20000.0
Production_hours_for_laptop_in_month_9 = 20000.0
Production_hours_for_phone_in_month_1 = 20000.0
Production_hours_for_phone_in_month_10 = 20000.0
Production_hours_for_phone_in_month_11 = 20000.0
Production_hours_for_phone_in_month_12 = 20000.0
Production_hours_for_phone_in_month_2 = 20000.0
Production_hours_for_phone_in_month_3 = 20000.0
Production_hours_for_phone_in_month_4 = 20000.0
Production_hours_for_phone_in_month_5 = 20000.0
Production_hours_for_phone_in_month_6 = 20000.0
Production_hours_for_phone_in_month_7 = 20000.0
Production_hours_for_phone_in_month_8 = 20000.0
Production_hours_for_phone_in_month_9 = 20000.0
Production_hours_for_tablet_in_month_1 = 7800.0
Production_hours_for_tablet_in_month_10 = 20000.0
Production_hours_for_tablet_in_month_11 = 20000.0
Production_hours_for_tablet_in_month_12 = 20000.0
Production_hours_for_tablet_in_month_2 = 20000.0
Production_hours_for_tablet_in_month_3 = 20000.0
Production_hours_for_tablet_in_month_4 = 20000.0
Production_hours_for_tablet_in_month_5 = 20000.0
Production_hours_for_tablet_in_month_6 = 20000.0
Production_hours_for_tablet_in_month_7 = 20000.0
Production_hours_for_tablet_in_month_8 = 20000.0
Production_hours_for_tablet_in_month_9 = 20000.0
__dummy = None
total costs: None
誰かが私が間違っているのを教えすることはできますか?
これはこれと今後の問題に多大な影響を与えます。どうもありがとう! – Jeroen