- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试解决非线性优化问题。我通过创建下面的代码重复了我的问题。 Python 返回 TypeError: object of type 'int' has no len()
。如何在约束函数中包含 IF 语句?
控制台打印以下内容:
File "<ipython-input-196-8d29d410dcea>", line 1, in <module>
runfile('C:/Users/***/Documents/***/Project/untitled.py', wdir='C:/Users/***/Documents/***/***/Project')
File "C:\Users\***\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 704, in runfile
execfile(filename, namespace)
File "C:\Users\***\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/***/Documents/***/***/Project/untitled.py", line 27, in <module>
m.Equation(Cx(x1,x2,x3,x4) < 0)
File "C:/Users/***/Documents/***/***/Project/untitled.py", line 17, in Cx
if K > 15:
File "C:\Users\***\Anaconda3\lib\site-packages\gekko\gk_operators.py", line 25, in __len__
return len(self.value)
File "C:\Users\***\Anaconda3\lib\site-packages\gekko\gk_operators.py", line 134, in __len__
return len(self.value)
TypeError: object of type 'int' has no len()
from gekko import GEKKO
m = GEKKO()
def Cr(x1,x2,x3,x4):
return (x1*x4*(x1+x2+x3)+x3**2)
def Cw(x1,x2,x3,x4):
return x1*x2*x3*x4
def Ck(x1,x2,x3,x4):
return x1*x2*x3*x4+1
def Cx(x1,x2,x3,x4):
K = Ck(x1,x2,x3,x4)
if K > 15: #Issue here
K = 15
return x1**2+x2**2+x3**2+x4**2 - K
x1 = m.Var(value=1,lb=-5000,ub=5000)
x2 = m.Var(value=1,lb=-5000,ub=5000)
x3 = m.Var(value=1,lb=-5000,ub=5000)
x4 = m.Var(value=1,lb=-5000,ub=5000)
m.Equation(Cw(x1,x2,x3,x4) >= 14)
m.Equation(Cx(x1,x2,x3,x4) < 0)
m.Obj(Cr(x1,x2,x3,x4))
m.solve(disp=False)
print(x1.value)
print(x2.value)
print(x3.value)
print(x4.value)
我希望让 GEKKO 在约束中使用 IF 语句运行,我不关心代码中的优化问题是否有解决方案。提前谢谢你。
最佳答案
(免责声明:我不知道这个库或它能为你做什么)
if 语句使这个问题不可微,这使 NLP 求解器(如 Ipopt)的假设无效。
就 MINLP 求解器(Bonmin、Couenne)而言,这可以通过重新表述来实现(并且当所需的辅助二进制变量已放宽时,所产生的问题是可微分的)。期待 lib 为您做这件事是毫无疑问的。
因此,您似乎需要遵守某些 MINLP 模型的规则,例如 Bonmin here 所描述的.没有“基于 if 的分支”的概念。
要么像 MIP 世界中常见的那样引入指示变量,请参阅 here .忽略开销这个想法是这样的:
K_ = Ck(x1,x2,x3,x4)
I = K_ > 15 (binary variable; see link for formulation idea)
return x1**2+x2**2+x3**2+x4**2 - I*15 - (1-I) * K_
那么这是一个MINLP。
在解释方程式时,您可能无需使用额外的二进制变量(并接触 MINLP)就可以逃脱,例如:
return x1**2+x2**2+x3**2+x4**2 - min(Ck(x1,x2,x3,x4), 15)
这也是不可微分的,但可以很容易地重新表述(有一个怪癖),例如:
return x1**2+x2**2+x3**2+x4**2 - A
# extra constraints
A <= Ck(x1,x2,x3,x4)
A <= 15
如果我们能够强制朝着尽可能大的 A 迈进。这意味着,它必须是目标的一部分:
m.Obj(Cr(x1,x2,x3,x4) + c * A) (if it's a maximization problem)
这将是一个 NLP,但是 c 的值需要注意(它必须足够大)。
关于python - Gekko 非线性优化,约束函数评估 if 语句时出现对象类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436296/
我可以添加一个检查约束来确保所有值都是唯一的,但允许默认值重复吗? 最佳答案 您可以使用基于函数的索引 (FBI) 来实现此目的: create unique index idx on my_tabl
嗨,我在让我的约束在grails项目中工作时遇到了一些麻烦。我试图确保Site_ID的字段不留为空白,但仍接受空白输入。另外,我尝试设置字段显示的顺序,但即使尝试时也无法反射(reflect)在页面上
我似乎做错了,我正在尝试将一个字段修改为外键,并使用级联删除...我做错了什么? ALTER TABLE my_table ADD CONSTRAINT $4 FOREIGN KEY my_field
阅读目录 1、约束的基本概念 2、约束的案例实践 3、外键约束介绍 4、外键约束展示 5、删除
SQLite 约束 约束是在表的数据列上强制执行的规则。这些是用来限制可以插入到表中的数据类型。这确保了数据库中数据的准确性和可靠性。 约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整
我在 SerenityOS project 中偶然发现了这段代码: template void dbgln(CheckedFormatString&& fmtstr, const Parameters
我有表 tariffs,有两列:(tariff_id, reception) 我有表 users,有两列:(user_id, reception) 我的表 users_tariffs 有两列:(use
在 Derby 服务器中,如何使用模式的系统表中的信息来创建选择语句以检索每个表的约束名称? 最佳答案 相关手册是Derby Reference Manual .有许多可用版本:10.13 是 201
我正在使用 z3py 进行编码。请参阅以下示例。 from z3 import * x = Int('x') y = Int('y') s = Solver() s.add(x+y>3) if s.c
非常快速和简单的问题。我正在运行一个脚本来导入数据并声明了一个临时表并将检查约束应用于该表。显然,如果脚本运行不止一次,我会检查临时表是否已经存在,如果存在,我会删除并重新创建临时表。这也会删除并重新
我有一个浮点变量 x在一个线性程序中,它应该是 0或两个常量之间 CONSTANT_A和 CONSTANT_B : LP.addConstraint(x == 0 OR CONSTANT_A <= x
我在使用grails的spring-data-neo4j获得唯一约束时遇到了一些麻烦。 我怀疑这是因为我没有正确连接它,但是存储库正在扫描和连接,并且CRUD正在工作,所以我不确定我做错了什么。 我正
这个问题在这里已经有了答案: Is there a constraint that restricts my generic method to numeric types? (24 个回答) 7年前
我有一个浮点变量 x在一个线性程序中,它应该是 0或两个常量之间 CONSTANT_A和 CONSTANT_B : LP.addConstraint(x == 0 OR CONSTANT_A <= x
在iOS的 ScrollView 中将图像和带有动态文本(动态高度)的标签居中的最佳方法是什么? 我必须添加哪些约束?我真的无法弄清楚它是如何工作的,也许我无法处理它,因为我是一名 Android 开
考虑以下代码: class Foo f class Bar b newtype D d = D call :: Proxy c -> (forall a . c a => a -> Bool) ->
我有一个类型类,它强加了 KnownNat约束: class KnownNat (Card a) => HasFin a where type Card a :: Nat ... 而且,我有几
我知道REST原则上与HTTP无关。 HTTP是协议,REST是用于通过Web传输hypermedia的体系结构样式。 REST可以使用诸如HTTP,FTP等的任何应用程序层协议。关于REST的讨论很
我有这样的情况,我必须在数据库中存储复杂的数据编号。类似于 21/2011,其中 21 是文件编号,但 2011 是文件年份。所以我需要一些约束来处理唯一性,因为有编号为 21/2010 和 21/2
我有一个 MySql (InnoDb) 表,表示对许多类型的对象之一所做的评论。因为我正在使用 Concrete Table Inheritance ,对于下面显示的每种类型的对象(商店、类别、项目)
我是一名优秀的程序员,十分优秀!