有没有什么方法可以从求解器中删除定义的约束,而无需先清除求解器并创建约束?
假设我的问题是最大化 3 个变量的总和,这两个变量有两个约束
约束 1:变量 2 应介于 8 - 10 之间
约束 2:变量 3 应介于 5 - 10 之间
from ortools.linear_solver import pywraplp
solver = pywraplp.Solver('SolveIntegerProblem',
pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)
objective = solver.Objective()
Variable[0] = solver.IntVar(0, 5, variable 0 )
Variable[1] = solver.IntVar(0, 10, variable 1 )
Variable[2] = solver.IntVar(0, 20, variable 2 )
objective.SetCoefficient(Variable[0], 1)
objective.SetCoefficient(Variable[1], 1)
objective.SetCoefficient(Variable[2], 1)
objective.SetMaximization()
constraints.append(solver.Constraint(8,10))
constraints[0].SetCoefficient(variable[1],1)
constraints.append(solver.Constraint(5,10))
constraints[1].SetCoefficient(variable[2],1)
Run Code Online (Sandbox Code Playgroud)
现在,在第二次运行我的代码时,我想删除第 2 号约束,但我找不到任何操作来执行此操作,唯一的方法是清除求解器并从第一个定义约束。
在这个半代码中,约束的数量是有限的,但实际上,在我的真实代码中,约束的数量很多,我无法从一开始就定义它们。
你尝试过使用该MPConstraint::Clear()方法吗?
声明:https://github.com/google/or-tools/blob/9487eb85f4620f93abfed64899371be88d65c6ec/ortools/linear_solver/linear_solver.h#L865
定义: https: //github.com/google/or-tools/blob/9487eb85f4620f93abfed64899371be88d6 5c6ec/或工具/线性解算器/线性解算器.cc#L101
关于 Python swig 包装器MPConstraint作为Constraint对象导出。
src: https: //github.com/google/or-tools/blob/9487eb85f4620f93abfed64899371be88d65c6ec/ortools/linear_solver/python/linear_solver.i#L180
但该方法Constraint::Clear()似乎没有公开
https://github.com/google/or-tools /blob/9487eb85f4620f93abfed64899371be88d65c6ec/ortools/线性_求解器/python/线性_求解器.i#L270
您可以尝试修补swig文件并重新编译make python && make install_python