用python中的Ortools解决最小化问题

2024-06-28 19:49:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解决最小化问题

但结果总是给我零分

我设置的约束是错误的还是代码是错误的

目标函数:

M=80x+60y+55z

承包商:

1。4x+2z<=20

2。4y+z<=15

3。x+y+z<=30

4。0.215x+0.04y+0.367z=0.3(x+y+z)

我在使用Ortools方面没有太多知识,但我写了以下内容:

使用GLOP后端创建线性解算器

solver=pywraplp.solver('main',pywraplp.solver.GLOP\u线性规划)

创建变量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<=20

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())

Tags: 函数lt目标value错误printsolutionsolver
1条回答
网友
1楼 · 发布于 2024-06-28 19:49:36

3点:

  • 您犯了一个常见的错误,您混淆了MIP解算器和LP解算器。请使用CBC、SCIP或CP_SAT作为后端
  • 0似乎是所有变量的最佳值
  • 您可以使用naturalAPI:model.Add(4* x + 2* z <= 20)

相关问题 更多 >