我试图gekko python通过使用列表array x[]而不是变量来转换优化器中的示例x1.. x4。这是给出结果的代码,但我认为它不正确
from gekko import GEKKO
import numpy as np
# Initialize Model
m = GEKKO(remote=False)
#help(m)
#define parameter
eq = m.Param(value=40)
#initialize variables
x = [m.Var(value=1,lb=1,ub=5) for i in range(4)]
x[1].value=5
x[2].value=5
#Equations
m.Equation(np.prod([x[i] for i in range(0,4)])>=25)
m.Equation(np.sum([x[i]**2 for i in range(0,4)])==eq)
#Objective
m.Obj(x[0]*x[3]*(x[0]+x[1]+x[2])+x[2])
#Set global options
m.options.IMODE = 3 #steady state optimization
#Solve simulation
m.solve() # solve on public server
#Results
print('')
print('Results')
print('x1: ' + str(x[0].value))
print('x2: …Run Code Online (Sandbox Code Playgroud) 我正在尝试解决非线性优化问题。我通过创建下面的代码来复制我的问题。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() …Run Code Online (Sandbox Code Playgroud)