İki makineyle bir ürünün üretim maliyetini en aza indirmeye çalışıyorum. Makine A'nın maliyeti 30 $/üründür ve makine B'nin maliyeti 40 $ / üründür.
İki kısıtlama vardır:
- aylık 50 ürün talebini karşılamalıyız (x + y > = 50)
- ucuz makine (A) ayda sadece 40 ürün üretebilir (x
Bu yüzden aşağıdaki Pyomo kodunu oluşturdum:
from pyomo.environ import *
model = ConcreteModel()
model.x = Var(domain=NonNegativeReals)
model.y = Var(domain=NonNegativeReals)
def production_cost(m):
return 30*m.x + 40*m.y
# Objective
model.mycost = Objective(expr = production_cost, sense=minimize)
# Constraints
model.demand = Constraint(expr = model.x + model.y >= 50)
model.maxA = Constraint(expr = model.x <= 40)
# Let's solve it
results = SolverFactory('glpk').solve(model)
# Display the solution
print('Cost=', model.mycost())
print('x=', model.x())
print('y=', model.y())
Bariz çözüm x = 40 ile iyi çalışıyor; y = 10 (Maliyet = 1600)
Bununla birlikte, B makinesini kullanmaya başlarsak, maliyetin üzerinde 300 dolarlık sabit bir ceza olacaktır.
Ben denedim
def production_cost(m):
if (m.y > 0):
return 30*m.x + 40*m.y + 300
else:
return 30*m.x + 40*m.y
Ancak aşağıdaki hata iletisini alıyorum
Rule failed when generating expression for Objective mycost with index
None: PyomoException: Cannot convert non-constant Pyomo expression (0 <
y) to bool. This error is usually caused by using a Var, unit, or mutable
Param in a Boolean context such as an "if" statement, or when checking
container membership or equality. For example,
>>> m.x = Var() >>> if m.x >= 1: ... pass
and
>>> m.y = Var() >>> if m.y in [m.x, m.y]: ... pass
would both cause this exception.
Cezayı Pyomo kodu aracılığıyla nesnel işleve dahil etmek için koşulu nasıl uygulayacağımı bilmiyorum.