我正在尝试使用np.inner
来执行(30,34)维数组与Gekko方程中(34,34)
维数的Gekko数组的内积,但它抛出了错误,“方程没有等式(=)或不等式(>,<)”。在Gekko方程中不允许使用numpy函数吗?如果不是,那么执行np.inner
、np.diag
等操作的替代方案是什么?
发布于 2020-07-21 01:28:06
Gekko数组允许像np.diag
和np.inner
这样的块操作。限制条件是,您需要由Gekko对结果进行符号化求值,以便进行自动微分,因此某些函数是不允许的。下面是一个使用np.dot
和求和函数的示例。
from gekko import GEKKO
import numpy as np
m = GEKKO(remote=False)
ni = 3; nj = 2; nk = 4
# solve AX=B
A = m.Array(m.Var,(ni,nj),lb=0)
X = m.Array(m.Var,(nj,nk),lb=0)
AX = np.dot(A,X)
B = m.Array(m.Var,(ni,nk),lb=0)
# equality constraints
m.Equations([AX[i,j]==B[i,j] for i in range(ni) \
for j in range(nk)])
m.Equation(5==m.sum([m.sum([A[i][j] for i in range(ni)]) \
for j in range(nj)]))
m.Equation(2==m.sum([m.sum([X[i][j] for i in range(nj)]) \
for j in range(nk)]))
# objective function
m.Minimize(m.sum([m.sum([B[i][j] for i in range(ni)]) \
for j in range(nk)]))
m.solve()
print(A)
print(X)
print(B)
这是用np.trace()
定义目标函数的另一个例子:Gekko optimization package and numpy inverse function,我建议你尝试一个最小的例子,如果你遇到任何问题,就修改你的问题。
https://stackoverflow.com/questions/62958625
复制