Pyomo 和条件目标函数

2023-11-30

是否可以(如果可以的话如何)使用具有条件表达式的目标函数?

更改文档中的示例,我想要一个如下表达式:

def objective_function(model):
   return model.x[0] if model.x[1] < const else model.x[2]

model.Obj = Objective(rule=objective_function, sense=maximize)

可以像这样直接建模吗?或者我是否必须考虑某种转换(如果是的话,这会是什么样子)?

只需执行上面的命令就会出现如下错误消息:

Evaluating Pyomo variables in a Boolean context, e.g.
    if expression <= 5:
is generally invalid.  If you want to obtain the Boolean value of the
expression based on the current variable values, explicitly evaluate the
expression using the value() function:
    if value(expression) <= 5:
or
    if value(expression <= 5):

我认为这是因为 Pyomo 认为我想获取一个值,而不是带有变量的表达式。


表达这一点的一种方法是使用逻辑析取。您可以查看 Pyomo.GDP 文档以了解用法,但它看起来像:

m.helper_var = Var()
m.obj = Objective(expr=m.helper_var)
m.lessthan = Disjunct()
m.lessthan.linker = Constraint(expr=m.helper_var == m.x[0])
m.lessthan.constr = Constraint(expr=m.x[1] < const)
m.greaterthan = Disjunct()
m.greaterthan.linker = Constraint(expr=m.helper_var == m.x[2])
m.greaterthan.constr = Constraint(expr=m.x[1] >= const)
m.lessthanorgreaterthan = Disjunction(expr=[m.lessthan, m.greaterthan])
# some kind of transformation (convex hull or big-M)

您还可以使用互补约束来表述这一点。

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

Pyomo 和条件目标函数 的相关文章

随机推荐

  • SQL Server - 对值来自另一个表的列进行 CHECK 约束

    如何在列上设置 CHECK 约束 使其可接受的值范围来自另一个表 而无需硬编码 这是一个简化的示例 OneManyTable RoleID TaskID 10 Val1 10 Val2 20 Val1 20 Val2 MetaDataTab
  • javascript等待php完成功能并刷新页面

    我有以下案例 我有下拉菜单 可以从其中选择网站的货币并使用 onchange 事件触发 javascript 函数 Changecurrency 通过使用jquery的changecurrency 函数 我触发php文件 以便根据下拉选择的
  • Spark 迭代/递归算法 - 打破 Spark 沿袭

    我有一个递归 Spark 算法 它将 10 天的滑动窗口应用于数据集 原始数据集是从按日期分区的 Hive 表加载的 在每次迭代中 一组复杂的操作将应用于包含十天窗口的数据集 然后 最后一个日期被插入到原始 Hive 表中 下一个日期从 H
  • Python 老化时间,第 2 部分:时区 [重复]

    这个问题在这里已经有答案了 继我之前的问题之后 Python 老化时间 我现在遇到了一个关于时区的问题 事实证明它并不总是 0200 因此 当 strptime 尝试这样解析它时 它会抛出异常 我想过用 6 或其他什么方法去掉 0200 但
  • 为什么标记不出现?

    我拥有的 一个 RecyclerView 其中包含餐厅 酒吧等的图像 单击这些图像时会将您带到地图 我想要的 当点击它们时 您会看到一张带有标记的地图 其中标记有您周围的所述地点 我的问题 我在另一个应用程序中执行此操作 但另一个应用程序直
  • ILogger 未注入 Durable Functions v2.0

    目前我正在尝试添加一个ILogger or ILogger lt gt 到 Azure Durable Function 以便在活动函数中使用日志记录 登录编排函数工作正常 并被注入到方法本身中 但尝试构造函数注入ILogger总是导致空异
  • 强制 L1 缓存上的一些数据

    对这个简单的问题表示歉意 仍在与这里的一些内存概念作斗争 问题是 假设我有一个预先计算好的数组 A 我想重复访问它 有没有办法告诉 C 程序让这个数组尽可能靠近 CPU 缓存以获得最快的访问速度 谢谢 在大多数架构上 无法强制阵列使用 L1
  • 红袜混音和延迟

    我正在使用 SOX 混合音频 命令SOX m voice wav audio wav final wav是我正在使用的 我的目标是延迟 10 秒的 voice wav 如果我尝试使用延迟 10 0 那么我会得到双语音 怎样才能做对呢 htt
  • Android Studio 虚拟设备卡在 G 屏幕上

    被困在这个问题上太久了 在Android Studio上启动了一个新项目基本活动应用程序 制作了一个虚拟设备 但每当我启动它时 它都会转到一个 黑屏 然后我擦除了内存 现在它卡在带有 google G 徽标的屏幕上 下面有一个小加载栏 多斯
  • 制作更薄的 UITabBar

    我希望能够通过删除每个项目的标题并回收它们占用的垂直空间来缩小 UITabBar 的高度 就像 Tweetie 2 那样 这似乎无法在 xib 中或以编程方式设置 我是否必须子类化 UITabBar 并推出自己的 自己滚 我确信 Tweet
  • 短路逻辑求值运算符

    是否有短路逻辑运算符 特别是短路AND和短路OR 我可以用在WHEREMySQL 5 5 中的子句 如果没有 有什么替代方案 我的问题的抽象观点以及为什么我需要这个的解释可以在这个小提琴中找到 http sqlfiddle com 2 97
  • 如何在CSS中仅设置部分文本的样式[重复]

    这个问题在这里已经有答案了 我需要在下拉列表选项中添加上标 我尝试了很多方法但没有任何效果 因此 帮助我了解如何仅设置选项文本的一部分的样式 使其看起来像上标 如果您知道在下拉列表选项中添加上标的任何其他方法 请帮助我 谢谢 在 HTML
  • 为什么相同的输入返回两个不同的 MD5 哈希值?

    好吧 我有两个文件 它们是完全相同的 第一个文件是 http iadsonline com servconfig php 第二个文件是 http xzerox info servconfig php 但是 当我使用 md5 file 获取他
  • 创建时CYPHER存储相同标签的节点关系顺序

    我有多个源自一个节点的关系 这些关系中的每一个都具有相同的标签 这些关系指向一个子节点 不一定是唯一的 在获取通过此关系标签链接到父级的所有子节点后 我通过名为 trueindex 的关系属性对它们进行排序 然后 我有一个节点数组 我的客户
  • 预处理器中的 C# 宏定义

    C 是否能够像 C 编程语言中使用预处理器语句那样定义宏 我想简化某些重复语句的常规输入 如下所示 Console WriteLine foo 不 C 不支持像 C 那样的预处理器宏 另一方面 Visual Studio 有snippets
  • 片段中的 AdMob

    我正在我的应用程序中插入 AdMob 但我有一个问题 当我在 Eclipse 中插入一些相关代码时 我可以在fragment 03中看到一条关于 构造函数 AdRequest 不可见 的错误消息 以及 错误 解析 XML 时出错 未绑定前缀
  • 获取上周六的日期和下周五的日期

    我想根据今天的日期获取上周六的日期 所以如果我们是周二 那么想要的日期将是 3 天前 另外 如果今天是星期六 那么这将被算作上一个星期六 例如 today Tuesday 09 July 2019 previous saturday gt
  • 内联成员函数和普通成员函数有什么区别?

    内联成员函数 函数体内联 和其他普通成员函数 函数体在单独的 cpp文件中 有什么区别吗 例如 class A void member and Header file hpp class B void member Implementati
  • C++多索引映射实现

    我正在 C 11 中实现多索引映射 我希望针对特定功能对其进行优化 我目前正在尝试解决的问题是不要多次存储关键元素 但让我解释一下 问题源于对直方图进行排序以将它们叠加在不同的组合中 直方图有名称 可以分为标记 属性 以下是我希望我的属性图
  • Pyomo 和条件目标函数

    是否可以 如果可以的话如何 使用具有条件表达式的目标函数 更改文档中的示例 我想要一个如下表达式 def objective function model return model x 0 if model x 1 lt const els