【发布时间】:2020-12-11 09:52:36
【问题描述】:
我正在尝试解决最小化问题。
但结果总是给我零。
是我设置的约束有误还是代码有误?
目标函数:
M = 80x+60y+55z
约束:
1. 4x+2z
2. 4y+z
3. x+y+z
4. 0.215x+0.04y+0.367z=0.3(x+y+z)
我对使用 Ortools 的了解不多,但我写了这些:
使用 GLOP 后端创建线性求解器。
求解器 = pywraplp.Solver('main',pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)
创建变量 xyz。
x = solver.IntVar(0.0, solver.infinity(), 'x')
y = solver.IntVar(0.0, solver.infinity(), 'y')
z = solver.IntVar(0.0, solver.infinity(), 'z')
设置约束:(仅显示其余类似)
案例:4x+2z
constraint0 = solver.Constraint(-solver.infinity(), 20)
constraint0.SetCoefficient(x, 4)
constraint0.SetCoefficient(z, 2)
设置约束:(设置最终约束)
案例:0.215x+0.04y+0.367z=0.3(x+y+z)
constraint3 = solver.Constraint(0,-solver.infinity())
constraint3.SetCoefficient(x,-0.0850)
constraint3.SetCoefficient(y,-0.26)
constraint3.SetCoefficient(z,0.067)
创建目标函数
M = 80x+60y+55z
objective = solver.Objective()
objective.SetCoefficient(x, 80)
objective.SetCoefficient(y, 60)
objective.SetCoefficient(z, 55)
objective.SetMinimization()
最后求解方程并输出结果
solver.Solve()
print('Objective value =', objective.Value())
print('x =', x.solution_value())
print('y =', y.solution_value())
print('z =', z.solution_value())
【问题讨论】: