3

我正在尝试使用Gekko 方程中的 Gekkonp.inner维数数组来执行维数 (30,34) 的 numpy 数组的内积,(34,34)但它会抛出错误,即“没有等式 (=) 或不等式 (>,<) 的等式” . 不允许在 Gekko 方程中使用 numpy 函数吗?如果不是,那么执行诸如等操作的替代方法是np.inner什么np.diag

4

1 回答 1

3

Gekko 数组允许像np.diag和一样的Numpy 操作。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 优化包和 numpy 反函数我建议您尝试一个最小示例并在遇到任何问题时修改您的问题。

于 2020-07-21T01:28:06.427 回答