如何在 Python 上使用 PuLP GLPK 为混合整数线性规划 (MILP) 的决策变量编写 IF 条件?

2024-01-05

我正在尝试使用 PuLP 上的混合整数线性规划和 Python 上的 GLPK 求解器来解决优化问题。到目前为止,我已经成功解决了带有约束的基本优化问题,例如:

prob = LpProblem("MILP", LpMinimize)
x1 = LpVariable("x1",lowBound=0, cat = 'Binary')
x2 = LpVariable("x2", cat = 'Continuous')
prob += 4*x1 + x2, "Objective Function"
prob += x2 - 4*x1 <= 0
prob += x2 - 2*x1 >= 0
status = prob.solve()
LpStatus[status]
value(x1), value(x2), value(prob.objective)

这给出了最佳结果,其中 x1 = 1.0、x2 = 3.0 且目标函数 = 7.0

我想弄清楚的是如何用一个解决优化问题if例如,以下约束条件:

x1 > 0 IF x2 > 2

或类似的东西:

x1 > 0 IF x2 == 3

基本上,如何将 if 条件语句集成到 MILP 约束中。


您要查找的搜索词是“指示变量”或“big-M 约束”。

据我所知,PULP 不直接支持指示变量,因此大 M 约束是可行的方法。

一个简单的例子: x1 <= 0 IF x2 > 2

from pulp import *

prob = LpProblem("MILP", LpMaximize)
x1 = LpVariable("x1", lowBound=0, upBound=10, cat = 'Continuous')
x2 = LpVariable("x2", lowBound=0, upBound=10, cat = 'Continuous')

prob += 0.5*x1 + x2, "Objective Function"

b1 = LpVariable("b1", cat='Binary')

M1 = 1e6
prob += b1 >= (x1 - 2)/M1

M2 = 1e3
prob += x2 <= M2*(1 - b1)

status = prob.solve()
print(LpStatus[status])
print(x1.varValue, x2.varValue, b1.varValue, pulp.value(prob.objective))

我们想要一个约束x1 <= 0存在时x2 > 2. When x2 <= 2不存在这样的约束(x1可以是正数也可以是负数)。

首先我们创建一个二进制变量:

b1 = LpVariable("b1", cat='Binary')

选择这个来代表条件x2 > 2。实现此目的的最简单方法是添加约束:

M1 = 1e6
prob += b1 >= (x2 - 2)/M1

Here M1是大M值。需要选择这样的值,以便获得最大可能的值x2表达方式(x2-2)/M is <=1。它应该尽可能小,以避免数值/缩放问题。这里可以使用值 10 (x2上限为 10)。

要了解此约束的工作原理,请考虑以下情况,对于 x2x2>2右手边会强制b1大于 0 - 作为二进制变量,它将被强制为 1。

最后,我们需要构建所需的约束:

M2 = 1e3
prob += x1 <= M2*(b1 - 1)

再次为了理解这个约束是如何工作的,请考虑以下情况,如果 b1 为真(1) 约束处于活动状态并变为:x1 <= 0。如果 b1 为假('0'),则约束变为x1 <= M2, 假如M2足够大,这不会有任何影响(这里它可以小到 10x1上限已经为 10。

在上面的完整代码中,如果您改变系数x1在目标函数中你应该注意到b1被激活/去激活并且附加约束应用于x1正如预期的那样。

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

如何在 Python 上使用 PuLP GLPK 为混合整数线性规划 (MILP) 的决策变量编写 IF 条件? 的相关文章

  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 如何通过引用获取对象的大小?

    假设我有一堂课 class Foo 我还有另一个功能 void getf Foo f std cout lt
  • Facebook 点赞按钮 - 隐藏计数?

    In the 设置对话框 http developers facebook com docs reference plugins like对于 Like Button 布局只有两种选择 替代方案1 https web archive org
  • redux框架wordpress调用变量

    我已经通过 wordpress 安装了 redux 插件 非常棒 我一直在使用demo内容来熟悉框架 但我不知道如何调用模板中的数据 我已经使用选项树很长时间了 并发现了这一点 这是我认为正确的呼唤 但我想不是 这是我认为可以上传徽标的代码
  • 策略模式的功能类比是什么?

    免责声明 我不使用函数式语言 只是试图理解 FP 的某些部分 Google 建议使用 lambda 的一阶函数可以提供与策略模式提供的类似功能的文章 然而我们需要以某种方式匹配数据和相应的 lambda 通过 OO 设计 这是自动完成的虚拟
  • Chef服务器密码重置

    我在我的 Linux 机器上安装并运行了我自己的 Chef 服务器 当我访问厨师服务器用户界面时 它询问我用户名和密码 不幸的是我忘记了密码 我知道我的用户名是admin 我怎样才能恢复我的密码 用户界面中也没有忘记密码选项 我更改了默认密
  • 仅针对此过程登录 Windows 网络共享 (SMB)

    在整个用户会话中 例如 登录 Windows 网络共享 SMB 很容易 net use WNetAddConnection2 etc 有没有类似的方法只会影响我当前的流程 也许是某种令牌系统 如果确实没有其他选择 整个会话身份验证是可以的
  • 如何使用 Facebook(或其他 ID)登录我的 ASP.NET 应用程序?

    像 SO 这样的网站如何允许您通过 Facebook OpenID Google Blogger Twitter 等验证自己的身份 我正在编写一个 ASP NET C 站点 除了提供任何其他站点具有的常规普通用户名 密码之外 我希望能够接受
  • 如何禁用“ActiveX 控件可能不安全”弹出窗口

    在 我的电脑 上的 HTML 文件中 我尝试在脚本中使用 Scripting FileSystemObject 如何禁用弹出窗口 此页面上的任何 ActiveX 控件对于脚本编写可能不安全 Internet 选项 安全窗格允许将 初始化并编
  • 是否可以缩短自定义视图名称?

    假设我创建了一个名为的自定义视图MyView并想在 xml 中使用它 视图位于com example包裹 我需要做这样的事情
  • 用逗号分割以及如何从分割中的引号中排除逗号

    蟒蛇2 7代码 cStr aaaa bbbb ccc ddd newStr cStr split print newStr gt aaaa bbbb ccc ddd 但是 我想要这个结果 result aaa bbb ccc ddd 解决方
  • Angular 9 生产构建错误 - 需要伪类或伪元素

    Angular 9 项目 ng 服务工作正常 但是当我进行生产构建时出现以下错误 块 runtime 5d6d7c5bcca533f7263c js 运行时 1 46 kB 条目 渲染 块 1 main d2b72f349c71c888a6
  • Hsqldb 存储过程

    我正在尝试在内存 Hsqldb 数据库中设置一个存储过程以进行测试 我正在使用的存储过程是在 MySql 中开发的 因此我想使用 HSqlDb 设置它以适应我的测试套件 我正在尝试创建该过程的简化版本 但目前还没有任何乐趣 程序是 CREA
  • Tensorflow Metal 插件已注册错误

    我已经使用安装了 Tensorflow 和 Metal 插件pip在 Mac Mini 2020 M1 上 pip3 install tensorflow macos tensorflow metal pip3 uninstall nump
  • 如何限制 while 循环中的项目

    这是我的项目中的 while 循环 div class index a href img width 200 height 171 alt src a div
  • jQuery 多次点击事件

    我被迫使用从外部服务器加载的脚本 该脚本基本上添加了一个元素 div class myClass 并绑定一个click的方法 事情是 在click与元素关联的函数 它们有一个return false声明在最后 我也有自己的脚本 我正在尝试添
  • 如何在 OSX 上卸载 pip?

    我运行了以下命令 easy install pip sudo pip install setuptools no use wheel upgrade 如何反转这两个命令以使我的 python 在 OSX 中恢复到其原始状态 删除 pip 作
  • R Shiny:数据表行的鼠标悬停文本

    有没有办法在将鼠标悬停在数据表显示中的行 记录 上时显示鼠标悬停文本 在 StackOverflow 上解决了一些类似的问题后 我发现了 2 个示例代码 一个显示列单元格的悬停文本 另一个在鼠标悬停时突出显示整行 显示列单元格悬停文本的示例
  • 示例 XSD 失败并显示“错误:未找到元素 X 的声明”

    尽管我是 xml 解析领域的新手 但我能够xsd创建有效的c 并成功编译和链接 但编译器优化 了实例化 所以 从第一步开始 我尝试你好世界CodeSynthesis 中的 xml 示例 http www codesynthesis com
  • 如何查看有关 Firebase JavaScript 客户端正在执行的操作的更多详细信息?

    我想更深入地了解 Firebase JavaScript 客户端库正在做什么 我正在使用 Firebase 开发一个 JavaScript 应用程序 该应用程序必须处理很多复杂性 例如 它必须处理网络中断和间歇性高延迟期 客户端库正在处理这
  • 如何在 Python 上使用 PuLP GLPK 为混合整数线性规划 (MILP) 的决策变量编写 IF 条件?

    我正在尝试使用 PuLP 上的混合整数线性规划和 Python 上的 GLPK 求解器来解决优化问题 到目前为止 我已经成功解决了带有约束的基本优化问题 例如 prob LpProblem MILP LpMinimize x1 LpVari