在线性问题中定义多个约束后,获取变量的当前可能接受边界



基于以下简单的线性问题示例,在对变量x应用了一些约束后,您将如何检索变量的可能接受边界?它应该返回两个参数:

  1. 可能的最小值 (61.0(
  2. 最大可能值 (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。如果您正在考虑调试此类问题的更好方法,请随时在此处分享。

提前感谢您的帮助和想法。

罗曼

将其设置为目标。最小化和最大化此变量。

最新更新