Pulp Solver: Как установить минимальную переменную производительность с помощью цикла - PullRequest
0 голосов
/ 07 января 2020

У меня есть эта фабрика игрушек LP:

# Import the PuLP lib
from pulp import *

# Products list
products = ["car", "bicycle"]

#Profit per product in $
profit = {"car": 8, "bicycle": 12}

# Used resources per product in kgs 
plasticAmount = {"car": 2, "bicycle": 4}
woodAmount    = {"car": 1, "bicycle": 1}
steelAmount   = {"car": 3, "bicycle": 2}


# Setting Problem variables dictionary
x = LpVariable.dicts("products ", products , 0)

# The Objective function : Maximising profit in $
prob += lpSum([profit[i] * x[i] for i in products ]), "Maximise"

# Total Stock amount Constraints in kgs
prob += lpSum([plasticAmount[i] * x[i] for i in  products]) <= 142 ,"MaxPlastic"
prob += lpSum([woodAmount [i]   * x[i] for i in  products]) <= 117 ,"MaxWood"
prob += lpSum([steelAmount[i]   * x[i] for i in  products]) <= 124 ,"MaxSteel"

# This constraints is not working : Minimal production amount should be at least 10 on each products ( need at least 10 Cars and 10 bicycles)
prob += lpSum([x[i] for i in produits]) >= 10 ,"MinProdObjs"
  1. Как мне установить минимальную производственную стоимость 10 для каждого продукта?

  2. Как мне написать это более элегантно, если у меня есть 200 продуктов?

  3. Является ли Lp правильным?

Минимальный производственное ограничение:

prob += lpSum([x[i] for i in produits]) >= 10 ,"MinProdObjs"

просто означает (на самом деле, автомобиль - это «количество автомобилей», а велосипед - это также «количество велосипедов» ... Возможно, имена переменных не так хороши ...) )

prob += car + bicycle >= 10

или

prob += x1 + x2 >= 10

Но все работает не так, как ожидалось ...

1 Ответ

0 голосов
/ 08 января 2020

Если x[p] - это количество единиц, произведенных для продукта p in P, то вы можете просто добавить ограничение в виде:

x[p] >= 10  forall p in P

Переведено в код:

for p in products:
   prob += x[p] >= 10, f"min production units for product {p}"

С вашим ограничением

prob += lpSum([x[i] for i in produits]) >= 10 ,"MinProdObjs"

вы говорите, что вы хотите получить как минимум 10 как производственную стоимость для всех предметов.

Обратите внимание, что ваши переменные являются дробными на данный момент, и вы можете использовать целочисленные.

...