Solve "TypeError: must be real number, not GK_Operators"

Solve "TypeError: must be real number, not GK_Operators"

我在求解非线性不等式系统时收到错误“TypeError:必须是实数,而不是 GK_Operators”。我应该在哪个地方编辑才能得到答案?

from gekko import GEKKO
import math

m = GEKKO(remote=False)
x1,x2,lambda1_L,lambda2_L,lambda1_U,lambda2_U,mu1,mu2,mu3,mu4,mu5,mu6,mu7,mu8,W1=[m.Var(1) for i in range(15)] 
sigma_p = math.sqrt(0.028573*x1*x1+0.03129*x2*x2+0.020231*x1*x2)
A= (0.028573*x1+0.010115*x2)/sigma_p
B=(0.03129*x2+0.010115*x1)/sigma_p
m.Equations([292.7182*lambda1_L+(2.25*A-0.025926)*lambda2_L + 446.444*lambda1_U+(2.25*A-0.040535)*lambda2_U-446.444*mu1-0.405858*mu2+(2*A-0.057146*x1-0.020231*x2)*mu3+mu4-mu5+mu6==0,\
            272.9655*lambda1_L+(2.25*B-0.03633)*lambda2_L+513.4587*lambda1_U+(2.25*B-0.051024)*lambda2_U-513.4587*mu1-0.466781*mu2+(2*B-0.06258*x2-0.020231*x1)*mu3+mu4-mu7+mu8==0,\
            mu1*(W1-446.444*x1-513.4587*x2-33)==0,\
            mu2*(0.13-0.405858*x1-0.466781*x2)<=0,\
            mu3*(x1+x2-1)==0,\
            mu5*(0.03-x1)<=0,\
            mu6*(x1-0.38)<=0,\
            mu7*(0.05-x2)<=0,\
            mu8*(x2-0.42)<=0])
m.solve(disp=False)
print(x1.value,x2.value,lambda1_L.value,lambda2_L.value,lambda1_U.value,lambda2_U.value,mu1.value,mu2.value,mu3.value,mu4.value,mu5.value,mu6.value,mu7.value,mu8.value,W1.value)
TypeError                                 Traceback (most recent call last)
<ipython-input-12-1e6244268d90> in <module>
      1 m = GEKKO(remote=False)
      2 x1,x2,lambda1_L,lambda2_L,lambda1_U,lambda2_U,mu1,mu2,mu3,mu4,mu5,mu6,mu7,mu8,W1=[m.Var(1) for i in range(15)]
----> 3 sigma_p = math.sqrt(0.028573*x1*x1+0.03129*x2*x2+0.020231*x1*x2)
      4 A= (0.028573*x1+0.010115*x2)/sigma_p
      5 B=(0.03129*x2+0.010115*x1)/sigma_p

TypeError                                 Traceback (most recent call last)
<ipython-input-12-1e6244268d90> in <module>
      1 m = GEKKO(remote=False)
      2 x1,x2,lambda1_L,lambda2_L,lambda1_U,lambda2_U,mu1,mu2,mu3,mu4,mu5,mu6,mu7,mu8,W1=[m.Var(1) for i in range(15)]
----> 3 sigma_p = math.sqrt(0.028573*x1*x1+0.03129*x2*x2+0.020231*x1*x2)
      4 A= (0.028573*x1+0.010115*x2)/sigma_p
      5 B=(0.03129*x2+0.010115*x1)/sigma_p

TypeError: must be real number, not GK_Operators

问题已通过使用 gekko 版本的平方根而不是 math 版本的平方根解决。

sigma_p = m.sqrt(0.028573*x1*x1+0.03129*x2*x2+0.020231*x1*x2)

Gekko 为基于梯度的优化器执行方程式的自动微分,而数学包仅 returns 一个数字。错误来自不知道如何处理 gekko 变量的 math 包。

from gekko import GEKKO
import math

m = GEKKO(remote=False)
x = [m.Var(1) for i in range(15)]
x1,x2,lambda1_L,lambda2_L,lambda1_U,lambda2_U, \
  mu1,mu2,mu3,mu4,mu5,mu6,mu7,mu8,W1 = x
sigma_p = m.sqrt(0.028573*x1*x1+0.03129*x2*x2+0.020231*x1*x2)
A= (0.028573*x1+0.010115*x2)/sigma_p
B=(0.03129*x2+0.010115*x1)/sigma_p
m.Equations([292.7182*lambda1_L+(2.25*A-0.025926)*lambda2_L \
               +446.444*lambda1_U+(2.25*A-0.040535)*lambda2_U-446.444*mu1\
               -0.405858*mu2+(2*A-0.057146*x1-0.020231*x2)*mu3+mu4-mu5+mu6==0,\
             272.9655*lambda1_L+(2.25*B-0.03633)*lambda2_L+513.4587*lambda1_U \
               +(2.25*B-0.051024)*lambda2_U-513.4587*mu1-0.466781*mu2 \
               +(2*B-0.06258*x2-0.020231*x1)*mu3+mu4-mu7+mu8==0,\
             mu1*(W1-446.444*x1-513.4587*x2-33)==0,\
             mu2*(0.13-0.405858*x1-0.466781*x2)<=0,\
             mu3*(x1+x2-1)==0,\
             mu5*(0.03-x1)<=0,\
             mu6*(x1-0.38)<=0,\
             mu7*(0.05-x2)<=0,\
             mu8*(x2-0.42)<=0])
m.solve(disp=True)
print(x)

虽然这样得到了解,但自由度可能有问题。有 6 个自由度但没有 objective 函数来指导这些值的选择。我建议包括某种类型的 m.Minimize()m.Maximize() 表达式来指导自由度的选择。

 Number of state variables:             20
 Number of total equations: -            9
 Number of slack variables: -            5
 ---------------------------------------
 Degrees of freedom       :              6

因为没有objective函数,求解器returns一个可行解(不一定是最优解)。由于自由度,可能有无限多的潜在解决方案。

 ----------------------------------------------
 Steady State Optimization with APOPT Solver
 ----------------------------------------------
 
 Iter    Objective  Convergence
    0  1.78380E+00  1.00000E+00
    1  2.20431E-01  4.77059E-01
    2  3.35310E-03  2.18830E-02
    3  4.73856E-04  2.05371E-03
    4  1.03342E-02  3.99540E-04
    5  2.02200E-03  4.93012E-03
    6  3.78386E-04  9.64651E-04
    7  7.16183E-22  1.67425E-04
    8  2.37863E-25  2.59737E-12
    9  2.37863E-25  2.59737E-12
 Successful solution
 
 ---------------------------------------------------
 Solver         :  APOPT
 Solution time  :   7.500000006984919E-003 sec
 Objective      :   0.000000000000000E+000
 Successful solution
 ---------------------------------------------------
 

[[0.39019890594], [0.41982360358], [0.059780756266], [0.99937364895], 
 [-0.03984160433], [0.99941169604], [-1.8636381477e-32], [0.88946533859], 
 [2.0930945006e-27], [0.99733039744], [0.81887700372], [-0.066019044556], 
 [0.81623113522], [3.7911033817], [1.0320500392]]