Python 调用Gekko solve会产生TypeError:类型为';int';没有len()
我试图用Gekko解决一个最优控制问题。当我尝试调用Python 调用Gekko solve会产生TypeError:类型为';int';没有len(),python,nonlinear-optimization,gekko,Python,Nonlinear Optimization,Gekko,我试图用Gekko解决一个最优控制问题。当我尝试调用m.solve()时,它给出了TypeError:type'int'的对象没有len(),详细信息如下。不管我选择了什么样的目标函数,我都会得到这个错误;然而,在不可微约束方面存在一个问题,我非常确定我的约束是可微的。我可能会因为Gekko而犯这种错误,还有其他原因吗 --------------------------------------------------------------------------- TypeError
m.solve()
时,它给出了TypeError:type'int'的对象没有len()
,详细信息如下。不管我选择了什么样的目标函数,我都会得到这个错误;然而,在不可微约束方面存在一个问题,我非常确定我的约束是可微的。我可能会因为Gekko而犯这种错误,还有其他原因吗
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-25-9f7b73717b27> in <module>
1 from gekko import GEKKO
----> 2 solve_system()
<ipython-input-24-f224d4cff3fc> in solve_system(theta, alpha, rho, chi, L_bar, n, w, delta_inc, xi, phi, tau, kappa, GAMMA, T, SIGMA, BETA, s_init, i_init, r_init)
257 ##### solve model #####
258 m.options.IMODE = 6
--> 259 m.solve()
~\Anaconda3\lib\site-packages\gekko\gekko.py in solve(self, disp, debug, GUI, **kwargs)
1955 # Build the model
1956 if self._model != 'provided': #no model was provided
-> 1957 self._build_model()
1958 if timing == True:
1959 print('build model', time.time() - t)
~\Anaconda3\lib\site-packages\gekko\gk_write_files.py in _build_model(self)
54 model += '\t%s' % variable
55 if not isinstance(variable.VALUE.value, (list,np.ndarray)):
---> 56 if not (variable.VALUE==None):
57 i = 1
58 model += ' = %s' % variable.VALUE
~\Anaconda3\lib\site-packages\gekko\gk_operators.py in __len__(self)
23 return self.name
24 def __len__(self):
---> 25 return len(self.value)
26 def __getitem__(self,key):
27 return self.value[key]
~\Anaconda3\lib\site-packages\gekko\gk_operators.py in __len__(self)
142
143 def __len__(self):
--> 144 return len(self.value)
145
146 def __getitem__(self,key):
TypeError: object of type 'int' has no len()
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
1从gekko进口gekko
---->2解算系统()
在Soelvy系统(θ,α,ρ,chi,Layar,n,w,deltaixin,席,φ,τ,kappa,γ,t,sigma,beta,ssi-nIT,ii-nIT,rsi-iIT)
257求解模型#####
258 m.options.IMODE=6
-->259 m.solve()
求解中的~\Anaconda3\lib\site packages\gekko\gekko.py(self、disp、debug、GUI、**kwargs)
1955年#建立模型
1956年如果自成一体。_模型!='提供的':#未提供模型
->1957自我构建模型()
1958如果正时==真:
1959打印('build model',time.time()-t)
~\Anaconda3\lib\site packages\gekko\gk\u write\u files.py in\u build\u model(self)
54型号+='\t%s'%变量
55如果不存在(variable.VALUE.VALUE,(list,np.ndarray)):
--->56如果不是(变量值==无):
57 i=1
58型号+='=%s'%variable.VALUE
~\Anaconda3\lib\site packages\gekko\gk\u operators.py in\uuuu\u len\uu(self)
23返回自己的名字
24 def____________(自):
--->25返回长度(自身值)
26 def_uugetItem_uu(self,key):
27返回自身值[键]
~\Anaconda3\lib\site packages\gekko\gk\u operators.py in\uuuu\u len\uu(self)
142
143定义长度(自):
-->144返回长度(自身值)
145
146 def_uuugetItem_uuuu(自身,密钥):
TypeError:类型为“int”的对象没有len()
我确实在约束中调用了一个外部(但可微)函数。然而,删除它并只是在没有函数的情况下进行工作并不能解决问题。我非常感谢你们能提供的任何意见。谢谢大家! 此错误可能是因为在Gekko表达式中使用了Numpy数组或Python列表
将numpy导入为np
x=np.数组([0,1,2,3])#numpy数组
y=[2,3,4,5]#python列表
从gekko进口gekko
m=GEKKO()
m、 最小化(x)#错误,使用Gekko参数或Var
m、 方程(m.sum(x)=5)#误差,使用Gekko参数或Var
可以通过切换到Gekko参数或变量来避免此错误。Gekko可以使用Python列表或Numpy数组进行初始化
xg=m.Param(x)
yg=m.Var(y)
m、 最小化(xg)
m、 方程(m.sum(yg)==5)
m、 解决()
您能否发布显示问题的代码?下面是一些关于创建一个最小的、可复制的示例问题的技巧:这正是问题所在——我使用的是Numpy数组而不是Gekko变量。非常感谢你!