首页 > 解决方案 > 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)),我不知道要改变什么才能让它工作......

标签: python-3.xtypeerrornonlinear-optimizationmaximizegekko

解决方案


您的xy是特定的 Gekko 变量类型,即使当您显示它们时它们显示为整数。在该特定类型上没有定义 min 函数。因此,当您调用 时min,Python 内置min函数依赖于len,而 Gekko 特定len函数将变量的值作为其参数,因此有效地min调用len(x.value),这不起作用,因为x.value它是一个 int (等效于 for y)。如果您想将目标函数设置为 and 的某个函数xy那么您需要这样做:

m.Obj(<f(x,y)>)

并且 Gekko 会尽量减少f。因此,如果您只想最小化x+y,那么您所需要的就是m.Obj(x+y).


推荐阅读