线性规划的 Cplex:DOCplex 决策变量是否假定为非负数?
Cplex for Linear Program: Are DOCplex decision variables assumed to be non-negative?
我想使用 docplex 编写一个简单的 LP。假设我有三个变量:x、y 和 z,约束是 4x + 9y - 18.7 <= z。我用代码 model.add_constraint(4 * x + 9 * y - 18.7 <= z)
写了约束。然后我通过 model.minimize(z)
.
将 z 最小化设置为我的 objective
求解模型后得到z = 0.000的结果。任何人都可以向我解释结果吗?我不明白为什么 0 是这个 LP 的最优值。我也试过打印这个模型的细节:
status = optimal
time = 0 s.
problem = LP
z: 0.000; None
objective: z
constraint: 4z+9y-18.700 <= z
当我尝试 model.print_solution()
时,程序打印 z: 0.000; None
我不明白“None”是什么意思,这是否意味着 x 和 y 是 None?
更新:忘记说了,我使用 model.continuous_var()
创建了变量
确实,如果您不给出范围,它们就是非负数。
zoo story中的小例子:
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus40 = mdl.continuous_var(name='nbBus40')
nbbus30 = mdl.continuous_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve(log_output=False,)
print("nbbus40.lb =",nbbus40.lb)
for v in mdl.iter_continuous_vars():
print(v," = ",v.solution_value)
mdlv2 = Model(name='buses2')
nbbus40v2 = mdlv2.continuous_var(-2,200,name='nbBus40')
nbbus30v2 = mdlv2.continuous_var(-2,200,name='nbBus30')
mdlv2.add_constraint(nbbus40v2*40 + nbbus30v2*30 >= 300, 'kids')
mdlv2.minimize(nbbus40v2*500 + nbbus30v2*400)
mdlv2.solve(log_output=False,)
print("nbbus40v2.lb =",nbbus40v2.lb)
for v in mdlv2.iter_continuous_vars():
print(v," = ",v.solution_value)
给予
nbbus40.lb = 0
nbBus40 = 7.5
nbBus30 = 0
nbbus40v2.lb = -2
nbBus40 = 9.0
nbBus30 = -2.0
我想使用 docplex 编写一个简单的 LP。假设我有三个变量:x、y 和 z,约束是 4x + 9y - 18.7 <= z。我用代码 model.add_constraint(4 * x + 9 * y - 18.7 <= z)
写了约束。然后我通过 model.minimize(z)
.
求解模型后得到z = 0.000的结果。任何人都可以向我解释结果吗?我不明白为什么 0 是这个 LP 的最优值。我也试过打印这个模型的细节:
status = optimal
time = 0 s.
problem = LP
z: 0.000; None
objective: z
constraint: 4z+9y-18.700 <= z
当我尝试 model.print_solution()
时,程序打印 z: 0.000; None
我不明白“None”是什么意思,这是否意味着 x 和 y 是 None?
更新:忘记说了,我使用 model.continuous_var()
确实,如果您不给出范围,它们就是非负数。
zoo story中的小例子:
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus40 = mdl.continuous_var(name='nbBus40')
nbbus30 = mdl.continuous_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve(log_output=False,)
print("nbbus40.lb =",nbbus40.lb)
for v in mdl.iter_continuous_vars():
print(v," = ",v.solution_value)
mdlv2 = Model(name='buses2')
nbbus40v2 = mdlv2.continuous_var(-2,200,name='nbBus40')
nbbus30v2 = mdlv2.continuous_var(-2,200,name='nbBus30')
mdlv2.add_constraint(nbbus40v2*40 + nbbus30v2*30 >= 300, 'kids')
mdlv2.minimize(nbbus40v2*500 + nbbus30v2*400)
mdlv2.solve(log_output=False,)
print("nbbus40v2.lb =",nbbus40v2.lb)
for v in mdlv2.iter_continuous_vars():
print(v," = ",v.solution_value)
给予
nbbus40.lb = 0
nbBus40 = 7.5
nbBus30 = 0
nbbus40v2.lb = -2
nbBus40 = 9.0
nbBus30 = -2.0