基于以下简单的线性问题示例,在对变量x
应用了一些约束后,您将如何检索变量的可能接受边界?它应该返回两个参数:
- 可能的最小值 (61.0(
- 最大可能值 (93.0(
使用x.lb()
和x.ub()
返回在创建变量时分配给变量的边界,但不考虑应用于该变量的约束。
from ortools.linear_solver import pywraplp
# Create the linear solver with the GLOP backend.
solver = pywraplp.Solver('lp_pricing_problem', pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)
# Define a variable with a range from 0 to 1000.
x = solver.NumVar(0, 1000, 'MyVariable')
# Define some constraints on it.
solver.Add(x <= 147)
solver.Add(x <= 93)
solver.Add(x >= 61)
solver.Add(x >= 17)
print(x.lb()) # 0.0
print(x.ub()) # 1000.0
# Minimize x
objective = solver.Objective()
objective.SetCoefficient(x, 1)
objective.SetMinimization()
status = solver.Solve()
# Print the solution
if status == solver.OPTIMAL:
print(x.solution_value()) # 61.0
这个问题的真正目的是理解为什么求解器返回不可行状态,例如,当约束未正确定义时:
solver.Add(x <= 147)
solver.Add(x <= 93)
solver.Add(x >= 61)
solver.Add(x <= 17)
在这种情况下,我希望看到变量x
必须低于或等于 17,同时高于或等于 61。如果您正在考虑调试此类问题的更好方法,请随时在此处分享。
提前感谢您的帮助和想法。
罗曼
将其设置为目标。最小化和最大化此变量。