python-3.x - TypeError:“int”类型的对象在目标函数非线性优化 Gekko 中没有 len()
问题描述
我要最大化我的非线性函数并尝试使用 GEKKO
m=GEKKO()
x=m.Var(value=1,lb=0, ub=50)
y=m.Var(value=1, lb=0, ub=50)
m.Equation(puree*x+cutlet*y==1500)
m.Obj(-min(x,y))
m.solve(disp=False)
x.value
y.value
但我进入 TypeError: object of type 'int' has no len()
了这个字符串m.Obj(-min(x,y))
,我不知道要改变什么才能让它工作......
解决方案
您的x
和y
是特定的 Gekko 变量类型,即使当您显示它们时它们显示为整数。在该特定类型上没有定义 min 函数。因此,当您调用 时min
,Python 内置min
函数依赖于len
,而 Gekko 特定len
函数将变量的值作为其参数,因此有效地min
调用len(x.value)
,这不起作用,因为x.value
它是一个 int (等效于 for y
)。如果您想将目标函数设置为 and 的某个函数x
,y
那么您需要这样做:
m.Obj(<f(x,y)>)
并且 Gekko 会尽量减少f
。因此,如果您只想最小化x+y
,那么您所需要的就是m.Obj(x+y)
.
推荐阅读
- c# - 从 C# 应用程序访问应用程序失败
- angular - 角度未捕获错误:无法解析 ErrorInterceptor 的所有参数
- python - 无法使用请求从下一页获取公司链接
- c# - 使用 c# 从 SharePoint Online 外部获取 SharePoint 列表数据
- ios - 我想为 iMessage 创建一个贴纸应用程序?
- visual-studio-code - VsCode 删除 Ctrl+S 后的“tab”
- python-3.x - 使用对象动态构建列表
- jenkins - 我无法远程访问詹金斯
- javascript - Three.JS - 自定义网格上的光线投射
- sql - Django 将图像数据保存到数据库