मैं कोशिश कर रहा हूँ करने के लिए कम से कम लागत के निर्माण के साथ एक उत्पाद के दो मशीनों की है । इस मशीन की लागत एक $30/उत्पाद और मशीन की लागत है $40/उत्पाद.
वहाँ रहे हैं दो की कमी:
- हम को कवर करना होगा एक मांग के 50 उत्पादों प्रति माह (x+y >= 50)
- सस्ते मशीन (एक) कर सकते हैं केवल निर्माण 40 उत्पादों का प्रति माह (x<=40)
तो मैं निम्नलिखित बनाया Pyomo कोड:
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())
यह ठीक काम करता है, के साथ स्पष्ट समाधान x=40;y=10 (लागत = 1600)
हालांकि, अगर हम शुरू करने के लिए मशीन का उपयोग करें बी, वहाँ हो जाएगा एक निश्चित दंड के 300 डॉलर से अधिक की लागत.
मैं के साथ की कोशिश की
def production_cost(m):
if (m.y > 0):
return 30*m.x + 40*m.y + 300
else:
return 30*m.x + 40*m.y
लेकिन मैं प्राप्त निम्न त्रुटि संदेश
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.
मैं नहीं कैसे लागू करने के लिए इस शर्त को शामिल करने के लिए जुर्माना में उद्देश्य समारोह के माध्यम से Pyomo कोड.