如何在 lambda 和 gekko 中使用 If...else

2023-12-22

场景如下: 我想最大限度地降低运行电机的成本。我有 X 个电机,每个电机都有一个下限和一个上限。它不能超过上限,也不能低于下限,除非它与 0 一致。

当这些电机必须达到 Y 的功率时,我必须找到一种方法来最小化这些电机的成本。 并非每个电机都必须处于活动状态,但如果处于活动状态,则必须达到其下限。

我试图最小化该函数的成本,并且我有一个代码片段。

prices = {
'Motor2': lambda y: (1/(np.poly1d(np.loadtxt("path_to_txt"))(y*1000)/100)) * 7048),
'Motor3': lambda z: (1/(np.poly1d(np.loadtxt("path_to_txt"))(z*1000)/100)) * 1674),
'Motor4': lambda a: (1/(np.poly1d(np.loadtxt("path_to_txt"))(a*1000)/100)) * 1637),
'Motor5': lambda b: (1/(np.poly1d(np.loadtxt("path_to_txt"))(b*1000)/100)) * 6354),
'Motor6': lambda c: (1/(np.poly1d(np.loadtxt("path_to_txt"))(c*1000)/100)) * 2634),
'Motor7': lambda d: (1/(np.poly1d(np.loadtxt("path_to_txt"))(d*1000)/100)) * 1654),
'Motor8': lambda e: (1/(np.poly1d(np.loadtxt("path_to_txt"))(e*1000)/100)) * 1354),
'Motor9': lambda x: (1/(np.poly1d(np.loadtxt("path_to_txt"))(x*1000)/100)) * 7048),
'Motor10': lambda f:(1/(np.poly1d(np.loadtxt("path_to_txt"))(f*1000)/100)) * 1629)

}

这些是给定电机的价格。 我想给它一个参数,如果电机速度(y、z、a、b 等)为 0,那么我希望成本为零。

我尝试过两种不同的方法: 第一个是这样的:

'Motor2': lambda y: (1/(np.poly1d(np.loadtxt("path_to_txt"))(y*1000)/100)) * 7048) if y > 0 else 0

当到达 Gekko 最小化方法时,会返回以下错误:

类型错误:“int”类型的对象没有 len()

另一个是带有 model.if3/if2 的那个 这部分看起来像这样:

'Motor2': lambda y: model.if3(y-2.1,(1/(np.poly1d(np.loadtxt("Path_to_txt"))(y*1000)/100))* 70848,0),

我尝试更改 if3、if2 内的顺序,但它要么表明它们不是最佳解决方案,要么给出错误的解决方案。

2.1 是电机处于活动状态时必须运行的下限。

txt-t 包含 a^3 + b^2 + c^1 + 常数

所以我的问题是,如何使用 if...else 语句或任何其他方法来解决这个问题?

先感谢您

编辑1: 这是完整的错误跟踪:

Traceback (most recent call last):
File "path_file\file.py", line 56, in <module>
model.Minimize(sum(prices[motor](xx[motor]) for motor in 
power_ranges))
File "path_file\file.py", line 56, in <genexpr>
model.Minimize(sum(prices[motor](xx[motor]) for motor in 
power_ranges))
File "path_file\file.py", line 35, in <lambda>
'Motor2': lambda y: (1/(np.poly1d(np.loadtxt("path_to_txt_motor2") 
(y*1000)/100))* 70848 if y > 0 else 0,
File "path_to_anaconda\gekko\gk_operators.py", line 25, in __len__
return len(self.value)
File "path_to_anaconda\gekko\gk_operators.py", line 144, in __len__
return len(self.value)
TypeError: object of type 'int' has no len()

您提出的第二种方法是正确的。我建议m.if3()有一个开关点(例如0.1)不接近下限(例如2.1)。引用您之前问题中的完整脚本:如何在 GEKKO 中实现 OR 约束 https://stackoverflow.com/questions/76414258/how-to-implement-or-constraint-in-gekko不要在 lambda 函数中添加一个小值来避免被零除,而是使用m.if3()函数代替:

prices = {
    'Motor1': lambda x: model.if3(x-0.1,0,(x ** 2)/x*5000),
    'Motor2': lambda y: (y ** 1 / 0.45) * 5500,
    'Motor3': lambda z: (z * 0.45) * 5100,
    'Motor4': lambda a: (a / 0.45) * 5200,
}

这是解决问题的完整脚本m.if3()功能:

from gekko import GEKKO

power_ranges = {
    'Motor1': (0.6, 1.1),
    'Motor2': (2.1, 6),
    'Motor3': (1, 1.94),
    'Motor4': (1, 1.94),
}

model = GEKKO()

prices = {
    'Motor1': lambda x: model.if3(x-0.1,0,(x ** 2)/x*5000),
    'Motor2': lambda y: (y ** 1 / 0.45) * 5500,
    'Motor3': lambda z: (z * 0.45) * 5100,
    'Motor4': lambda a: (a / 0.45) * 5200,
}

# Define decision variables
x = {}; y = {}; z = {}
for motor in power_ranges:
    x[motor] = model.Var(lb=power_ranges[motor][0],
                         ub=power_ranges[motor][1])
    y[motor] = model.Var(lb=0, ub=1, integer=True)
    z[motor] = model.Intermediate(x[motor]*y[motor])    

# Define objective function
model.Minimize(sum(prices[motor](z[motor]) \
                for motor in power_ranges))

# Define the "or" constraint
for motor in power_ranges:
    model.Equation(z[motor] >= power_ranges[motor][0] * y[motor])
    model.Equation(z[motor] <= power_ranges[motor][1] * y[motor])

# Define power constraint
model.Equation(sum(z[motor] for motor in power_ranges) == 4.7)

# Solve the optimization problem
model.options.SOLVER = 1
model.solve()

# Print the solution
if model.options.APPSTATUS == 1:
    print("Optimal solution found:")
    for motor in power_ranges:
        print(f"{motor}: {round(float(z[motor].value[0]), 2)}")
    print(f"Total cost: {round(float(model.options.OBJFCNVAL), 2)}")
else:
    print("No optimal solution found.")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 lambda 和 gekko 中使用 If...else 的相关文章

  • 如何读取通过追加行不断更新的文件?

    在我的终端中我正在运行 curl user dhelm 12345 https stream twitter com 1 1 statuses sample json gt raw data txt curl 的输出是实时流式 Twitte
  • 分组符号最大长度平衡子序列

    将 B 视为分组符号 和 的序列 如果 B 的长度为 0 或 B 具有以下形式之一 则称 B 为平衡序列 X Y 或 X Y 或 X Y 其中 X 和 Y 本身是平衡的 平衡示例 现在的问题是找到一种有效的算法来找到给定输入的最大长度平衡子
  • 访问默认 lambda 参数中的模板类参数

    我正在写一个简单的通用池 模板类在构造函数中采用一个参数 该参数是一个工厂函数 用于根据需要实例化池中的对象 template
  • Python Pandas 从宽到长的格式更改以及列标题拆分

    我有一个包含以下列标题和行示例的表 Subject Test1 Result1 Test1 Result2 Test2 Result1 Test2 Result2 0 John 10 0 5 20 0 3 我想将其改造成 Subject l
  • [python]没有属性“TessBaseAPI”

    当我编译代码时出现错误 import tessercat api tesseract TessBaseAPI 错误是 AttributeError 模块 对象没有属性 TessBaseAPI 我已经安装了tesseract via pip
  • S3 选择检索 CSV 中的标头

    我尝试使用以下代码从存储在 S 存储桶中的 CSV 中获取记录子集 s3 boto3 client s3 bucket bucket file name file sql stmt SELECT S FROM s3object S LIMI
  • 为什么我不能“string”.print()?

    我的理解print 在 Python 和 Ruby 以及其他语言 中 它是字符串 或其他类型 上的方法 因为它的语法非常常用 打印 嗨 works 那么为什么不呢 hi print 在 Python 中或 hi print在红宝石工作 当你
  • 使用Python进行图像识别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 就是我想识别图像中的字母 可能是 bmp或 jpg 例如 这是一个包含字母 S 的 bmp 图像 我想做的是使用Pyth
  • 使用 python-docx 在 docx 文件中查找所有“正常”样式且字体大小不是 11 的文本

    到目前为止我的实现 from docx api import Document import pandas as pd from docx shared import Pt texts sizes document Document new
  • 获取 HTML 代码的结构

    我正在使用 BeautifulSoup4 我很好奇是否有一个函数可以返回 HTML 代码的结构 有序标签 这是一个例子 h1 Simple example h1 p This is a simple example of html page
  • 将 for 循环替换为 pyspark 中的并行进程

    我在脚本中使用 for 循环来为 size DF 数据帧 的每个元素调用函数 但这需要很多时间 我尝试通过地图删除 for 循环 但没有得到任何输出 size DF 是我从表中获取的大约 300 个元素的列表 用于 import call
  • Bottle 是否可以处理没有并发的请求?

    起初 我认为 Bottle 会并发处理请求 所以我编写了如下测试代码 import json from bottle import Bottle run request response get post import time app B
  • django 中的“管理器”是什么?

    我已经阅读了Django官方中的定义文档 https docs djangoproject com en dev topics db managers 我仍然对什么感到困惑Manager does 文档说它们允许您操作数据库表 模型 但我仍
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • 无法在 Windows 服务器上使 SVN 预提交脚本失败

    我正在编写一个 SVN pre commit bat 文件 该文件调用 Python 脚本来查询我们的问题跟踪系统 以确定用户提供的问题跟踪 ID 是否处于正确的状态 例如 打开 状态 并与正确的关联项目 SVN 服务器运行 Windows
  • 为什么 tesseract 无法从这个简单的图像中读取文本?

    我在 pytesseract 上阅读了大量的帖子 但我无法让它从一个简单的图像中读取文本 它返回一个空字符串 这是图像 我尝试过缩放它 灰度化它 调整对比度 阈值 模糊 以及其他帖子中所说的一切 但我的问题是我不知道 OCR 想要更好地工作
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org
  • C 变量声明的效率 [重复]

    这个问题在这里已经有答案了 例如 在 C 中声明一个变量需要多长时间int x or unsigned long long var 我想知道它是否会让我的代码在类似的事情中更快 for conditions int var 0 code 这
  • 将字典写入 csv 时遇到问题,其中键作为标题,值作为列

    我有一本字典 看起来像 mydict foo 1 2 bar 3 4 asdf 5 6 我正在尝试将其写入 CSV 文件 使其看起来像 foo bar asdf 1 3 5 2 4 6 我花了最后一个小时寻找解决方案 我发现的最接近的解决方
  • 将自定义属性添加到 Tk 小部件

    我的主要目标是向小部件添加隐藏标签或字符串之类的内容 以在其上保存简短信息 我想到创建一个新的自定义 Button 类 在本例中我需要按钮 它继承所有旧选项 这是代码 form tkinter import class NButton Bu

随机推荐

  • 如何使用 PHP 确定文件年龄?

    有什么方法可以使用 PHP 确定文件夹中图像的文件年龄 我想删除超过 2 小时的旧文件 是否可以在上传到文件夹时在其文件名中添加时间戳名称 如果是这样 请给我一个例子 thanks if time filemtime filename gt
  • 如何知道missModalViewControllerAnimated何时启动以及何时完成?

    有没有办法知道dismissModalViewControllerAnimated何时启动以及何时完成 例如viewWillAppear和viewDidAppear的习惯用法 与其他动画不同 这个动画似乎没有委托来告诉您 是的 而且比你想象
  • Sklearn Chi2 用于特征选择

    我正在学习 chi2 用于特征选择 并遇到了类似的代码this https chrisalbon com machine learning feature selection chi squared for feature selectio
  • 如何让 Mockito 模拟另一个文件中的常量?

    编辑 我正在测试的方法调用在另一个类中定义的这个常量 所以我想测试该方法是否独立于其他类定义常量的方式工作 嘲笑它是我能想到的第一件事 但我对如何以干净 安全的方式测试它的其他想法持开放态度 类 方法和变量名称已泛化 我正在尝试弄清楚如何编
  • 带 wamp 的国际扩展 php_intl.dll

    我想使用Moodle 但在安装过程中出现错误 应该安装并启用 php extension gt intl gt 以获得最佳结果 Intl 扩展用于改进国际化支持 例如区域设置感知排序 当我点击链接时 我收到上面的错误消息 http docs
  • C - 删除递归函数中的重复结果

    我必须创建一个递归函数 告诉您可以将多少美分变成零钱的方法 使用 25 美分 10 分 5 分 5 分 5 分硬币 到目前为止 我有一个递归函数可以做到这一点 但是它多次计算相同的组合 所以数字太大了 如何删除重复的组合 Code incl
  • PHP cURL 如何添加用户代理值或克服服务器阻止 cURL 请求?

    我正在传输一个对象数组 我有一个自己的服务器上的 cURL 客户端 提交者 and 监听别人服务器上的脚本 哪一个不在我的控制之下 然后我认为他们正在阻止传入的 cURL 请求因为当我用普通 HTML 测试时
  • 如何阻止无效用户的 git 提交?

    我正在运行一个gitlab https www gitlab com gitlab ce git 服务器 我的大多数用户都运行 3 个版本中的 1 个版本的 git git 1 7 1 centos 用户 git 1 7 9 其他人 git
  • Firefox 特定 CSS 导致 Visual Studio 中出现多个错误

    在 Visual Studio 2012 中 我尝试在我的外部样式表之一中使用以下 Firefox 特定 CSS moz document url prefix span4 ul li a focus border none span12
  • .Net 和 PHP Rijndael 加密不匹配

    起初我以为这是填充 因为 mcrypt 使用零填充 但我更改了 php 以使用 PKCS7 并得到了相同的精确结果 有人可以帮忙吗 我认为这与php中的填充有关 Net 的测试输出 Key d88f92e4fa27f6d45b49446c7
  • 跟踪图像中的一条线 MATLAB

    我正在编写一个程序来计算示波器输出的一些内容 但随着程序现在的运行 我只需将图像导入 MATLAB 然后使用 ginput 查找生成的曲线上各个区域的坐标 有没有一种方法可以让我拍摄这张图片 并让 ginput 或类似的东西自动沿着亮绿色曲
  • 同步 SQL Server 数据库

    我有一个新的想法和问题想问你 我们有一个本地 内部的 CRM 应用程序 我们使用 24X7 的应用程序类型 我们还在同一个 CRM 数据库 即 OLTP 上进行计费和工资管理 对于 SSRS 报告也进行同样的操作 看起来每当我们在前端进行操
  • 捕获异常 C#

    什么是正确的做法 捕获从最具体到最一般或相反的异常 如果我写 try catch Exception e catch NullReferenceException nre NullReferenceException nre 会被捕获吗 t
  • 接口中的构造函数?

    我知道不可能在接口中定义构造函数 但我想知道为什么 因为我认为它可能非常有用 因此 您可以确定类中的某些字段是为此接口的每个实现定义的 例如 考虑以下消息类 public class MyMessage public MyMessage S
  • Python json,不必要的斜杠

    我正在创建一个简单的服务器端应用程序 我使用内置模块 json 来创建对客户端的答案 if isinstance obj list tuple return json dumps key o to json for o in obj if
  • 将“carbon.super Profile Service”更改为自定义名称

    我能够成功安装 WSO2 EMM 配置文件 它在我的 iOS 设备上运行正常 现在 当我第一次安装配置文件时 它会显示 carbon super Profile Service 作为配置文件标题 如何更改个人资料标题 这被识别为 EMM 中
  • 在 Javascript/下划线上按对象键降序排序

    我有以下对象数组 其中键是 UTC 格式的日期 Array 1436796000000 Task1 Task2 1437400800000 Task4 Task8 1436968800000 Task3 Task2 143688240000
  • Cassandra Hector:如何使用索引列执行 MultigetSliceQuery?

    是否可以在索引列上使用条件 如 IndexedSlicesQuery 时执行 MultigetSliceQuery 换句话说 IndexedSlicesQuery 对一组特定的键执行 我发现执行此操作的方法是首先对一组键执行 Multige
  • Cloudera Impala 连接到 Tableau 错误

    我正在研究使用 Tableau 连接到 Cloudera Hadoop 我提供服务器和端口详细信息并使用 Impala 进行连接 我能够成功连接 选择默认架构并选择所需的表 此后 当我将维度或度量拖放到行 列时grid 我收到以下错误 Cl
  • 如何在 lambda 和 gekko 中使用 If...else

    场景如下 我想最大限度地降低运行电机的成本 我有 X 个电机 每个电机都有一个下限和一个上限 它不能超过上限 也不能低于下限 除非它与 0 一致 当这些电机必须达到 Y 的功率时 我必须找到一种方法来最小化这些电机的成本 并非每个电机都必须