如何在 DOCPLEX (Python) 上使用连续变量进行 IF-THEN 约束?

2023-12-04

我使用 DOCPLEX 构建混合整数线性规划 (MILP) 问题,然后通过 Python 上的 CPLEX 解决该问题。但是,在尝试使用 IF-THEN 约束解决 MILP 问题时,我收到以下错误:

DOcplexException: Model.if_then(), nbBus40 >= 3.0 is not discrete

发生这种情况是因为我已经声明nbbus40变量为连续的,如下代码所示:

from docplex.mp.model import Model

mdl = Model(name='buses')
nbbus40 = mdl.continuous_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')    
mdl.add(mdl.if_then((nbbus40>=3),(nbbus30>=7)))
mdl.minimize(nbbus40*500 + nbbus30*400)

mdl.solve()

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

但是,如果我保留nbbus40变量作为integer,那么我就得到了MILP问题的解,如下图:

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')  
mdl.add(mdl.if_then((nbbus40>=3),(nbbus30>=7)))
mdl.minimize(nbbus40*500 + nbbus30*400)

mdl.solve()

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

RESULT:

nbBus40  =  0
nbBus30  =  10.0

如何在 DOCPLEX 中对连续变量使用 IF-THEN 约束?


复制我的答案here:

不能将连续变量用于 if-then 约束。

原因是:“if”子句可以取 true 或 false 值。根据此,“then”子句是否被激活。如果 nbBus40 是连续的,则 CPLEX 必须区分 nbBus40 >= 3 和 nbBus40

如果 nbBus40 是整数,则要区分的情况可以写为 nbBus40 >= 3 和 nbBus40

解决此问题的典型方法是使用 epsilon 并定义 nbBus40 >= 3 和 nbBus40

你可以这样写你的约束:

 with Model() as m:
     nbBus40 = m.continuous_var()
     nbBus30 = m.continuous_var()
     helper = m.binary_var()

     eps = 1e-3
     m.add(m.if_then(helper == 0, nbBus40 <= 3 - eps))
     m.add(m.if_then(helper == 1, nbBus40 >= 3))
     m.add(m.if_then(helper == 1, nbBus30 >= 7))
     m.solve()

但请注意,拥有这些 ep 经常会带来数值问题。因此,最好避免连续表达式上的 if_then。也许您可以详细说明为什么要考虑少量总线。很可能还有其他方法可以实现您想要的目标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 DOCPLEX (Python) 上使用连续变量进行 IF-THEN 约束? 的相关文章

  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 为什么从 Pandas 1.0 中删除了日期时间?

    我在 pandas 中处理大量数据分析并每天使用 pandas datetime 最近我收到警告 FutureWarning pandas datetime 类已弃用 并将在未来版本中从 pandas 中删除 改为从 datetime 模块
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • Pandas 日期时间格式

    是否可以用零后缀表示 pd to datetime 似乎零被删除了 print pd to datetime 2000 07 26 14 21 00 00000 format Y m d H M S f 结果是 2000 07 26 14
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • 查找字符串的所有不同子字符串

    大家好 我被布置了家庭作业 要求我找到字符串的所有不同子字符串 我已经实现了一种方法 它会告诉您字符串的所有子字符串 但我需要帮助弄清楚如何不计算已经作为子字符串计算过一次的子字符串 因为赋值是为了找到不同的子字符串 public int
  • 如何将 char 变量设置为 Input.GetKey 的 KeyCode?

    我正在尝试制作一个作弊代码系统 我有一个字符数组 我想将玩家输入的任何输入分配给该字符 然后将索引更改为下一个字符并重复该操作 最后 我想将所有字符组合成一个字符串 看看这是否是作弊代码 如果是的话 那么玩家将获得加电或其他什么 我基本上希
  • Python,检查是否按下箭头键

    如何在Python中检查用户是否按下箭头键 我想要这样的东西 if right key pressed do some shit elif left key pressed do other stuff 在终端 或 anacoonda 提示
  • 锚点和成员具有并集的递归查询

    我正在尝试执行递归查询 但锚点和成员 cte 都有一个并集 这可能吗 我得到的错误是 Recursive member of a common table expression mainMenu has multiple recursive
  • 我可以在客户端使用Fetch调用Twitter API吗?

    我试图在 React 应用程序中调用 Twitter API 并收到以下错误 获取 API 无法加载https api twitter com 1 1 account verify credentials json 回复 预检请求未通过访问
  • 可可:场景与视图

    菜鸟问题在这里 我想我已经掌握了三个基本模型 视图 控制器元素的基础知识 有点 但什么是场景呢 我知道 iPad 每个屏幕可以有多个场景 而 iPhone iPod 只能有一个 但是场景与视图有何关系呢 如果我的理解有严重错误 请多多指教
  • 在 VBA 中创建和转置数组

    我希望将一定范围内的值加载到数组中并将该数组转置到另一个位置 不同的工作簿 我正在使用下面的论坛帖子来了解如何做到这一点 http www mrexcel com forum excel questions 629320 applicati
  • 将两个表达式组合成管道

    假设我有以下两个表达式 Expression
  • 如何在单独的线程中打开一个窗口?

    我想做 Window newWindow new Window newWindow Show while true Console Write spin 也就是说 我正在主窗口中进行密集计算 但是这个新窗口 我试图在其中用动画显示繁忙指示器
  • Fortran 派生类型:重载赋值运算符不适用于“PARAMETER”属性

    我正在使用派生类型 双复数 和赋值运算符 的重载 以便可以分配real 8 to bicomplex bicplx 模块的 MWE 如下 MODULE bicplx type bicomplex COMPLEX 16 a COMPLEX 1
  • iOS 范围内的随机数

    我知道我可以使用以下命令获得一个随机数 例如从 0 到 700 arc4random 362 但是我怎样才能得到一个介于 200 到 300 之间的随机数呢 arc4random 100 200
  • 数据表服务器端处理不显示页面上的输出,并且条件不起作用[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在使用 ajax 进行数据表服务器端处理 这是我引用的链接https datatables net examples data sources server side html 我遇到
  • YesodAuthEmail 无法推断出 m ~ HandlerFor site0 [重复]

    这个问题在这里已经有答案了 我正在尝试添加 instance YesodAuthEmail App to the Yesod Postgres脚手架 yesod 版本 1 6 并陷入编译错误 相关代码是 instance YesodAuth
  • R-在循环中引用不同的数据帧

    我是 R 的新手 所以如果我的想法完全错误 请随时告诉我 我有一系列关于发电厂的导入数据框 每年一个 Plant1987 Plant1988 等 我试图将它们最终组合成一个数据框 在此之前 我想向每个数据帧添加一个 年份 变量 我可以对每个
  • PowerBuilder Classic 12/12.5 指南/教程 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我是 PowerBuilder Classic 12 的新手 我很难找到任何可以帮助我入门的好的指南 教程 现在我已经阅读了以下教程http inf
  • ASP 经典 VBscript 参数化 SQL 查询?

    第一篇文章 但感谢您迄今为止从该网站获得的所有帮助 我正在尝试参数化 SQL 查询 query url Request QueryString ID Set rs Server CreateObject ADODB Recordset Se
  • 解组嵌套 JSON 对象

    有a few 问题 on the topic但它们似乎都不涵盖我的情况 因此我正在创建一个新的情况 我有如下 JSON foo bar 1 baz 2 more text 有没有办法解组嵌套的 bar 属性并将其直接分配给结构属性而不创建嵌
  • 读取包含“[”的文件时出现 CONSTRAINT_ERROR

    我正在阅读一个简单的文本文件 一切都按其应有的方式工作 除非遇到开括号 字符 然后我得到一个 CONSTRAINT ERROR 我的职能是 GET FILE CONTENTS function Get File Contents File
  • onShouldStartLoadWithRequest 在 WebView 中加载任何 url 时自动调用 iOS React Native,如何控制它?

    我正在为我的应用程序实施应用程序WebView 我必须打开一些信息页面 并且必须根据网络视图中任何特定位置 包含不同类型的数据 的点击来获取一些数据 但在 iOS 中 加载任何 URL 时onShouldStartLoadWithReque
  • 如何在 DOCPLEX (Python) 上使用连续变量进行 IF-THEN 约束?

    我使用 DOCPLEX 构建混合整数线性规划 MILP 问题 然后通过 Python 上的 CPLEX 解决该问题 但是 在尝试使用 IF THEN 约束解决 MILP 问题时 我收到以下错误 DOcplexException Model