根据以下线性问题的简单示例,在对变量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



这个问题的真正目的是理解为什么在例如未正确定义约束的情况下求解器返回INFEASIBLE状态:

solver.Add(x <= 147)
solver.Add(x <= 93)
solver.Add(x >= 61)
solver.Add(x <= 17)


在这种情况下,我希望变量x必须小于或等于17,同时大于或等于61。如果您想找到一种调试此类问题的更好方法,请不要请随时在此处分享。

在此先感谢您的帮助和想法。

罗曼

最佳答案

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

10-08 15:59