首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用m.Equations构造Python (gekko)中的非线性优化问题

用m.Equations构造Python (gekko)中的非线性优化问题
EN

Stack Overflow用户
提问于 2021-05-23 10:04:22
回答 1查看 164关注 0票数 3

我想用Gekko来解决一个优化问题。非线性约束在函数中生成,并作为向量传递.因为有向量,所以我使用m.Equationsm.Array。为了使它尽可能简单,我简化了我的问题,使代码保持简短和简单。我认为我的错误在于我如何使用m.Equations。错误信息是:

异常:@error:方程定义没有等式(=)或不等式(>,<)假停止.

这是我的密码:

代码语言:javascript
复制
import numpy as np
from gekko import GEKKO

def powerf(x):
    U = np.array([[x[2]], [x[3] * m.exp(x[4] * 1j)]])
    G = np.array([[x[0] + x[1] * 1j], [0]])
    L = np.array([[0],[1]])

    y = np.array([[-18.8301*1j, 18.8566*1j], [18.8566*1j, -18.8301*1j]])
    I = np.matmul(y, U)
    Iconj = np.real(I) - np.imag(I) * 1j

    S = np.matmul(np.diagflat(Iconj), U)
    P = np.real(S) - np.real(G) + np.real(L)
    Q = np.imag(S) - np.imag(G) + np.imag(L)
    return np.concatenate((P,Q)).reshape(4,)

m = GEKKO()
x =  m.Array(m.Var,5)
ig = [0,  0,    1,    1,      0]
lb = [0, -2, 0.95, 0.95, -np.pi]
ub = [5,  2, 1.10, 1.10,  np.pi]

for i in range(len(x)):
    x[i].value = ig[i]
    x[i].lower = lb[i]
    x[i].upper = ub[i]

m.Equations([powerf(x) == np.zeros(4,)])
m.Obj(x[0])

m.solve()
EN

回答 1

Stack Overflow用户

发布于 2021-05-24 21:15:36

m.Equations()函数需要一个方程列表。这里有一种方式可以摆出这样的姿势:

代码语言:javascript
复制
y = powerf(x)
m.Equations([y[i]==0 for i in range(4)])

生成的模型可以用m.open_folder()查看。

代码语言:javascript
复制
Model
Variables
    v1 = 0, <= 5, >= 0
    v2 = 0, <= 2, >= -2
    v3 = 1, <= 1.1, >= 0.95
    v4 = 1, <= 1.1, >= 0.95
    v5 = 0, <= 3.141592653589793, >= -3.141592653589793
End Variables
Equations
    ((((((((((-0-18.8301j))*(v3))+((18.8566j)*(((v4)*(exp(((v5)*(1j))))))))-0j))*(v3))+((0)*(((v4)*(exp(((v5)*(1j))))))))-(v1+((v2)*(1j))))+0)=0
    (((((0)*(v3))+((((((18.8566j)*(v3))+(((-0-18.8301j))*(((v4)*(exp(((v5)*(1j))))))))-0j))*(((v4)*(exp(((v5)*(1j))))))))-0)+1)=0
    True
    True
    minimize v1
End Equations

End Model

列表中的方程3和4似乎没有Gekko变量,因此它们返回True。另一件要考虑的事情是,Gekko目前不支持本机虚数,所以这个问题需要修改为虚值和实值的独立变量,例如x_real[i]x_im[i]。目标的一个更易读的形式是m.Minimize(x[0])

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67658487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档