【问题标题】:pleas let me know how to put GEKKO Parameter in Variable请让我知道如何将 GEKKO 参数放入变量中
【发布时间】:2020-03-17 07:52:09
【问题描述】:

我想将 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

【问题讨论】:

  • 请给出一个最小但功能齐全的示例(包括所有导入),以便我们提供帮助。

标签: python optimization gekko


【解决方案1】:

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]]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    相关资源
    最近更新 更多