[英]pleas let me know how to put GEKKO Parameter in Variable
我想将 GEKKO 参数 'N' 放在变量 'Y' 中,但出现如下错误。 我的意思是当优化进行时,参数“N”应该不断变化。 有没有其他方法可以改变N?
from gekko import GEKKO
m = GEKKO()
k = 10
N = m.Param(value=[i+1 for i in range(6)])
Y = m.Array(m.Var, (N, k))
for i in range(N):
for j in range(k):
Y[i, j].value = 0
Y[i, j].lower = 0
Y[i, j].upper = 1
Traceback (most recent call last):
File "C:\Users\johnh\Desktop\test.py", line 6, in <module>
Y = m.Array(m.Var, (N, k))
File "C:\Python37\lib\site-packages\gekko\gekko.py", line 1916,
in Array x = np.ndarray(dim,dtype=object)
TypeError: 'GKParameter' object cannot be interpreted
as an integer
Gekko 要求问题结构(方程)保持不变,但变量值和边界可以改变。 如果您不想要最后几行变量,那么您可以设置一个静态矩阵,然后使用lower=upper=0
打开或关闭每一行。 当下限和上限相等时,该变量固定在该值上并且不被优化器使用。
from gekko import GEKKO
m = GEKKO()
k = 3
N = 6
Y = m.Array(m.Var, (N, k))
for i in range(N):
for j in range(k):
Y[i, j].value = 0
Y[i, j].lower = 0
if i<N:
Y[i, j].upper = 1
else:
Y[i, j].upper = 0
m.Maximize(Y[i,j])
m.solve(disp=False)
print('Problem: ' + str(i))
print(Y)
这会产生 6 个解决方案,其中Y
的值最大化。
Problem: 0
[[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]]
Problem: 1
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]]
Problem: 2
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]]
每次通过循环,它都会用多一行变量来求解。
Problem: 3
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]]
Problem: 4
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]]
Problem: 5
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.