如何使用 Pyomo 制作指标函数?

2024-03-11

我正在寻找在 Pyomo 中创建一个简单的指示变量。假设我有一个变量 x,如果 x > 0,则该指示函数将取值 1,否则取 0。

我尝试这样做的方法如下:

model = ConcreteModel()  
model.A = Set(initialize=[1,2,3])
model.B = Set(initialize=['J', 'K'])

model.x = Var(model.A, model.B, domain = NonNegativeIntegers)
model.ix = Var(model.A, model.B, domain = Binary)

def ix_indicator_rule(model, a, b):
    return model.ix[a, b] == int(model.x[a, b] > 0)

model.ix_constraint = Constraint(model.A, model.B,
                             rule = ix_indicator_rule)

我收到的错误消息是这样的Avoid this error by using Pyomo-provided math functions,根据这个链接 https://stackoverflow.com/questions/48171498/finding-pyomo-provided-math-functions被发现于pyomo.environ...但我不知道该怎么做。我尝试过使用validate_PositiveValues(), 像这样:

def ix_indicator_rule(model, a, b):
    return model.ix[a, b] == validate_PositiveValues(model.x[a, b])

model.ix_constraint = Constraint(model.A, model.B,
                             rule = ix_indicator_rule)

没有运气。任何帮助表示赞赏!


您可以通过“big-M http://www.thequestforoptimality.com/bigm-dual/“约束,像这样:

model = ConcreteModel()  
model.A = Set(initialize=[1, 2, 3])
model.B = Set(initialize=['J', 'K'])

# m must be larger than largest allowed value of x, but it should
# also be as small as possible to improve numerical stability
model.m = Param(initialize=1e9)

model.x = Var(model.A, model.B, domain=NonNegativeIntegers)
model.ix = Var(model.A, model.B, domain=Binary)

# force model.ix to be 1 if model.x > 0
def ix_indicator_rule(model, a, b):
    return model.x <= model.ix[a, b] * model.m

model.ix_constraint = Constraint(
    model.A, model.B, rule=ix_indicator_rule
)

但请注意,大 M 约束是片面的。在这个例子中它强制model.ix于何时model.x > 0,但不会强制关闭model.x == 0。您可以通过将不等式翻转为来实现后者(但不能实现前者)model.x >= model.ix[a, b] * model.m。但你不能在同一个模型中同时执行这两项操作。一般来说,您只需选择适合您的型号的版本,例如,如果设置model.ix to 1恶化你的目标函数,那么你会选择上面显示的版本,求解器将负责设置model.ix to 0只要有可能。

Pyomo 还提供析取编程功能(请参阅here https://pyomo.readthedocs.io/en/latest/modeling_extensions/gdp.html and here https://static1.squarespace.com/static/5492d7f4e4b00040889988bd/t/57c06ea8d482e91c235c4ab8/1472229087205/10_GDP.pdf)这可能适合您的需求。 cplex 求解器提供了指标限制 https://www.ibm.com/support/knowledgecenter/SSSA5P_12.6.1/ilog.odms.cplex.help/CPLEX/UsrMan/topics/discr_optim/indicator_constr/01_indicators_title_synopsis.html,但我不知道Pyomo是否支持它们。

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

如何使用 Pyomo 制作指标函数? 的相关文章

  • Pyomo:从 Python 代码访问解决方案

    我有一个想要求解的线性整数程序 我安装了求解器 glpk 感谢这个答案 和pyomo 我写了这样的代码 from pyomo environ import from pyomo opt import SolverFactory a 370
  • 如何在 Winpython 中安装 glpk-solver 和 pyomo

    我想在我的学习中使用 pyomo 我通过安装 pyomoeasy install coopr 安装说明 Pyomo 需要一个求解器才能工作 所以我想安装 GNU 线性编程套件 glpk 网页 pyomo 似乎安装得恰到好处 因为我可以将它导
  • 使用 Pyomo 或 cvxpy 预测建筑物的功率(模型预测控制)

    我有室外温度的数据 8 2 10 13 并且我有我的建筑物的热惯性 8h 限制之一是将我的建筑物的内部温度保持在 20 度以内 我们从平衡状态开始 T in 20 T o 20 但一小时内的 T o 18 因此 Delta T o 18 度
  • 如何使用 pip 安装 Pyomo 的“extras”?

    我写这篇文章是因为我在安装时遇到问题Pyomo using pipMac OSX 10 14 上的 Python 3 6 我正在按照安装说明进行操作here 我可以成功执行第一个命令 pip install pyomo 但是当我遇到麻烦时
  • 无法在 databricks 上安装 pyomo 求解器 ipopt

    使用以下命令在 databricks 上成功安装 pyomo pip install pyomo optional 输出 成功安装 algopy 0 5 7 casadi 3 5 5 dill 0 3 5 1 et xmlfile 1 1
  • 微电网电池调度的约束优化

    给定电力消耗 太阳能电池板发电 价格等输入 全部在给定时间 t 我们有一个电池 我们想要评估它在任何给定时间应该 放电 充电多少 该问题可以表述如下 Pt price of electricity at time t Lt consumpt
  • 未找到 Pyomo Util 模块

    所以我问了一个question一个月前 我对这个问题有一个非常好的答案 我想测试一下这个答案现在是否有效 但我越来越ModuleNotFoundError 我在测试之前做了以下操作 conda install c conda forge p
  • 优化 pyomo 中的 Fortran 函数

    我希望使用 Pyomo 优化 Fortran 函数 目标函数和约束都是用 Fortran 编写的 根据给出的答案here 我们可以用ExternalFunction表达式对象 但即使是最简单的函数我也无法得到结果 下面给出的是一个可重现的示
  • Pyomo:使用python脚本时,有没有快速的方法可以在解决ILP后显示目标值?

    我之前完成了ILP并且运行正常 opt SolverFactory glpk model AbstractModel model obj Objective variables constraints instance model crea
  • 使用不连续索引进行 pyomo 优化

    我正在使用 pyomo 在 python 中进行优化 我计划使用 t start t end 范围内的索引 现在 这些 t start 和 t end 值是 EV 的函数 使得 m pyo ConcreteModel m EV pyo Ra
  • Pyomo:限制迭代次数

    我有一个 Pyomo 模型 最终得到这样的解决 solver SolverFactory ipopt results solver solve model tee False 该模型当前运行了 3000 次迭代才放弃 在我看来 必须有一种方
  • 分析 pyomo 中的解决方案 (.sol) 文件

    我在机器 1 中有一个 pyomo 模型 在机器 2 中有 CPLEX 求解器 我转换 pyomo 模型 ConcreteModel 变成problem lp带有函数的文件model write problem lp 在机器 1 中 然后我
  • 在 PYOMO 中为 2 个变量定义特定值集

    我正在尝试使用多个变量分配材料属性 例如 密度和电导率是材料 1 材料 2 和材料 3 的两个决策变量 我必须输入以下信息 density of material 1 1000 density of material 2 2000 dens
  • Pyomo:使用 if 语句进行约束

    我目前正在努力解决这个问题 我需要最大化这家公司的利润 这就是我目前拥有的代码 from pyomo environ import from pyomo opt import opt solvers SolverFactory ipopt
  • 如何使用 Pyomo 制作指标函数?

    我正在寻找在 Pyomo 中创建一个简单的指示变量 假设我有一个变量 x 如果 x gt 0 则该指示函数将取值 1 否则取 0 我尝试这样做的方法如下 model ConcreteModel model A Set initialize
  • PYOMO:如何将抽象模型与内部数据结合使用

    Hei all 我正在尝试为以下形式的非常简单的 QP 建立一个抽象模型 分钟 x x0 2 s t A x b C x 我想使用抽象模型 因为我需要通过更改参数 主要是 x0 但也可能是 A b C d 来解决 我现在正在努力简单地在模型
  • Python 找不到 Pyomo

    我很困惑为什么 Python 不导入 pyomo 我可以找到该目录并看到它已安装 234 pyomo user pip show pyomo Name Pyomo Version 5 1 1 Summary Pyomo Python Opt
  • Pyomo 中 TransformedPiecewiseLinearFunctionND 的正确用法是什么?

    背景 我正在尝试在 Pyomo 中使用代理模型 给定一组标记为 x y 和 z 的数据 我想将 z 写为 x 和 y 的廉价函数 Issue Pyomo 具有用于多元分段线性函数的工具 看here https pyomo readthedo
  • 获取线性 pyomo 约束的系数

    我想获得线性约束的系数cpyomo 模型的m 例如 对于 m ConcreteModel m x 1 Var m x 2 Var m x 3 Var within Integers m x 4 Var within Integers m c
  • 使用 Pyomo 的旅行推销员

    我正在尝试使用 pyomo 来解决 TSP 问题 我已经使用 python 和 Gurobi 成功实现了 但是我的 Gurobi 许可证已过期 所以我现在想使用 pyomo 和 GLPK 来实现 TSP 问题 这是我到目前为止能想到的 它不

随机推荐

  • 高斯模糊和 FFT

    我正在尝试为学校项目实施高斯模糊 我需要同时实现 CPU 和 GPU 来比较性能 我不太确定我是否理解高斯模糊的工作原理 所以我的问题之一是 如果我理解正确的话 这就是我现在所做的 我使用维基百科中的方程http en wikipedia
  • 实体框架引用不会自动加载

    在 ADO Net 实体框架中 我有一个对象 它有 4 个对其他对象的引用 由于某种原因 当我查询这些引用时 其中两个会自动加载 如预期 并且其中两个始终返回 null 奇怪的是 当我manually要求加载参考文献 他们加载得很好 举个例
  • 使用动词时工作目录不起作用

    Using Start Process when Verb被使用时 Workingdirectory选项不起作用 新的 powershell 始终启动于C WINDOWS system32 为什么是这样 我怎样才能做到这一点而不需要额外的c
  • 如何使用 powershell 循环创建 XML 文件的元素?

    我要创建 xml 文件 我从 ini 文件中选取的 xml 元素 我的 ini 文件超过 1 个 我尝试了这个 但仍然只能创建 1 个元素 我的 ini 文件中有 2 种类型的内容文件 第一 Product Name NB A String
  • 垂直 ViewPager2 与 RecyclerView 滚动问题

    我使用的是 ViewPager2 它有两个垂直方向的片段 当用户向下滑动到第二个片段时 有一个 RecyclerView 以相同的垂直方向滚动内容 问题是当我滚动 RecyclerView 的内容时 有时 ViewPager2 捕获滚动事件
  • 如何将 unicode 字符变成小写字母

    我在 VC MFC 中将 unicode 字符转换为小写字母时遇到问题 我在 CString 变量中有 unicode 字符 所以 使用英语 MakeLower 工作正常 我得到小写字母 但它无法将 unicode 字符转换为小写 我确实尝
  • 如何获得whenComplete和thenCompose的组合效果?

    我试图想出一个具有以下综合效果的 CompletableFuturewhenComplete and thenCompose 具体来说 返回一个CompletionStage而不仅仅是结果 类似于thenCompose 即使前一阶段异常完成
  • 我的程序在打开该活动时给出“应用程序不断停止”的错误是什么?

    应用程序正常打开 但在打开此活动时显示 应用程序不断停止 我不明白有什么问题 也许API级别与calendar get 不兼容 如果是这样我该如何修复它 public class SearchRide extends AppCompatAc
  • PHPUnit生成的测试骨架路径

    是否可以通过 sculpture test 命令告诉 phpunit 将生成的测试框架文件放在哪里 甚至可以告诉 phpunit 重复目录结构吗 以免说我有用于测试的文件lib model SomeClass php我希望 phpstorm
  • 立即在 Android 上显示自动完成功能

    Android 自动完成功能仅在两个字母后启动 如何才能在刚刚选择字段时显示列表 要使自动完成功能在焦点上显示 请添加焦点侦听器并在字段获得焦点时显示下拉菜单 如下所示 editText setOnFocusChangeListener n
  • 使用 HtmlService 在 google apps 脚本中保存状态的位置

    我有以下发布的网络应用程序code gs var queryString function doGet e queryString e queryString logger only works if the return value is
  • 使用 NancyFX 进行模型验证

    我真的很习惯 ASP NET MVC 方法 用相应的属性注释模型 MVC 验证它并更新 ModelState Errors ModelState 在视图上可用 因此可以向用户显示错误 我还没有找到相关信息wiki https github
  • msxml3.dll错误'80072ee2'操作超时

    我有一个经典的 ASP 页面 它读取外部 rss 提要 xml 文档 然后将其显示在网页上 在我的网站转移到新服务器之前 这一切都工作正常 我认为现在是 Windows 2008 我的脚本现在超时了 我认为问题实际上并不是因为我增加了超时值
  • 如何从字符串中删除变音符号(变音符号)?

    如何转换字符串 例如P li lu ou k k p l belsk dy into Prilis zlutoucky kun upel dabelske ody 源字符串采用 Unicode 因此原则上应该可以使用规范化 分解来分隔元音变
  • 如何查看 SQL 2008 锁和阻塞表

    在我的应用程序的 ASP NET 执行期间 SQL 2008 Express 似乎持有一些锁定 我得到 Timeout expired The timeout period elapsed prior to completion of 操作
  • 为什么 Java 类型擦除没有阻止此代码编译

    我有一个类定义了以下两种方法 public Map
  • 如何让 scalac 告诉我是否有未使用的变量?

    我刚刚注意到代码中的一个错误 我创建了一个新变量 但后来未能实际使用它 我以为 scalac 会告诉我我的新变量未被使用 但情况似乎并非如此 在进行少量谷歌搜索 手册页后 我找不到任何有关启用警告的信息 我该怎么做才能启用此类警告 这个东西
  • 使用Javascript读取外部文件

    我有一个可变长度名称的外部文本文件配置文件 txt包含以下格式的信息 Jason Red Tyrannosaurus Zack Black Mastodon Billy Blue Triceratops Trini Yellow Griff
  • 如何手动刷新升压日志?

    我正在使用 boost 1 54 0 中的 Boost Log 看看它是否适合我的应用程序 一般来说 我的缓冲没有问题 所以我不想打开 auto flush 或任何东西 但我注意到在我调用之前记录的消息fork 是重复的 我想知道是否是因为
  • 如何使用 Pyomo 制作指标函数?

    我正在寻找在 Pyomo 中创建一个简单的指示变量 假设我有一个变量 x 如果 x gt 0 则该指示函数将取值 1 否则取 0 我尝试这样做的方法如下 model ConcreteModel model A Set initialize