Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调用Gekko solve会产生TypeError:类型为';int';没有len()_Python_Nonlinear Optimization_Gekko - Fatal编程技术网

Python 调用Gekko solve会产生TypeError:类型为';int';没有len()

Python 调用Gekko solve会产生TypeError:类型为';int';没有len(),python,nonlinear-optimization,gekko,Python,Nonlinear Optimization,Gekko,我试图用Gekko解决一个最优控制问题。当我尝试调用m.solve()时,它给出了TypeError:type'int'的对象没有len(),详细信息如下。不管我选择了什么样的目标函数,我都会得到这个错误;然而,在不可微约束方面存在一个问题,我非常确定我的约束是可微的。我可能会因为Gekko而犯这种错误,还有其他原因吗 --------------------------------------------------------------------------- TypeError

我试图用Gekko解决一个最优控制问题。当我尝试调用
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变量。非常感谢你!