python - 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'])
有任何想法吗?谢谢你。
解决方案
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)
推荐阅读
- python - 使用保存的 sklearn 模型进行预测
- javascript - 地理位置导出 lat 和 lng
- python - 将 Dask 列转换为 datetime 类型的新 Dask 列
- sql - 删除现有的日志文件并在 sql server 中创建新的日志文件
- java - 使用 Visual Studio 2017 开发/调试/编译 Java 程序
- python - 在输入管道中使用 TensorFlow 特征列
- r - 使用 grepl 匹配从到数据集的列中的字符串
- c# - 多个混合 .NET 项目中的相同程序集版本(相同的解决方案)
- javascript - 如何在javascript中组合连续日期?
- php - Codeigniter Setfrom 中的 PHP Mailer 不会向 gmail、hotmail、ymail 发送电子邮件,但 setfrom 会将其他自定义业务电子邮件发送到例如 abc@ab.com