首页 > 解决方案 > Python 中具有绝对值的 CPLEX 约束

问题描述

我正在尝试在 CPLEX(使用 python)中创建两个约束:一个使用变量 X,另一个使用 abs(X)。就像是:

x > 0
abs(x) > 0

我应该创建一个接收 abs(X) 值的新约束 Y,还是可以将 abs(X) 直接包含在“linear_constraints.add”中?

下面的代码不起作用:

from cplex import Cplex, SparsePair

constraints = [{'abs(X)': 1},{'X': 1}]
exprs = [SparsePair(ind=list(constr.keys()), val=list(constr.values())) for constr in constraints]

model.linear_constraints.add(lin_expr=exprs, names=['constr_1','constr_2'])

有任何想法吗?谢谢你。

标签: pythonvariablesoptimizationconstraintscplex

解决方案


带有 docplex python API 的小例子

from docplex.mp.model import Model

mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')

#absolute value of nbBus40 - nbBus30
mdl.add_constraint(mdl.abs(nbbus40-nbbus30)<=2)

mdl.minimize(nbbus40*500 + nbbus30*400)

mdl.solve(log_output=True,)



for v in mdl.iter_integer_vars():
    print(v," = ",v.solution_value)

推荐阅读