簡體   English   中英

如何修復 Python Gekko APMoniter 求解器錯誤:沒有等式的方程

[英]How to fix Python Gekko APMoniter solver error: Equation without an equality

我知道這聽起來很簡單,但我正在為應該可以工作的高中 class 編寫一些代碼。 基本上,我正在解決一個非常受限的定義金字塔的方程組。 問題是求解器說我的一個方程沒有一個等式,盡管看起來它們都有。

我已經嘗試了幾乎所有的東西。 我重新輸入了方程式並仔細檢查了所有語法。 我已經有 2 天了同樣的錯誤,我非常卡住

#sorry that the equations are messy but, they all have only one equality.

from gekko import GEKKO
V = 20
S = 30
t1 = 0.1
t2 = 0.2
t3 = 0.3
t4 = 0.05
t5 = 0.6
t6 = 0.2
t7 = 0.1


m = GEKKO()
x1= m.Var(value = 0)
x2= m.Var(value = 0)
x3= m.Var(value = 0)
y1= m.Var(value = 0)
y2= m.Var(value = 0)
y3= m.Var(value = 0)
z1= m.Var(value = 0)
z2= m.Var(value = 0)
z3= m.Var(value = 0)
t8= m.Var(value = 0)
t9= m.Var(value = 0)
t10= m.Var(value = 0)
t11= m.Var(value = 0)
t12= m.Var(value = 0)
m.Equations([
            V == z3*(x1*y2 - x2*y1) + y3*(x2*z1 - x1*z3) + x3*(y1*z3 - y2*z1),\
            S == 0.5 * m.sqrt(((x1*y2-x2*y1)**2)+((x2*z1-x1*z2)**2)+((x1*y2-x2*y1)**2)) + 0.5 * m.sqrt(((x1*y3-x3*y1)**2)+((x3*z1-x1*z3)**2)+((y1*z3-y3*z1)**2))+ 0.5 * m.sqrt(((x1*y3-x3*y1)**2)+((x3*z1-x1*z3)**2)+((y1*z3-y3*z1)**2)),\
            t1 == [m.acos(x1*x2+y1*y2+z1*z2)/((m.sqrt((x1**2) +(y1**2) + (z1**2)))*(m.sqrt((x2**2) +(y2**2) + (z2**2))))],\
            t2 == [m.acos(x1*x3+y1*y3+z1*z3)/((m.sqrt((x1**2) +(y1**2) + (z1**2)))*(m.sqrt((x3**2) +(y3**2) + (z3**2))))],\
            t3 == [m.acos(x2*x3+y2*y3+z2*z3)/((m.sqrt((x2**2) +(y2**2) + (z2**2)))*(m.sqrt((x3**2) +(y3**2) + (z3**2))))],\
            t4 == [m.acos((x1*(x1-x3)) +(y1*(y1-y3)) +(z1*(z1-z3))/((m.sqrt((x1**2) + (y1**2)+(z1**2))) * (m.sqrt((x1-x3)**2  + (y1-y3)**2 + (z1-z3)**2))))],\
            t5 == [m.acos((x1*(x1-x2))+ (y1*(y1-y2))+(z1*(z1-z2))/((m.sqrt((x1**2) + (y1**2) + (z1**2)))*(m.sqrt((x1-x2)**2 + (y1-y2)**2 +(z1-z2)**2))))],\
            t6 == [m.acos((x2*(x1-x2))+ (y2*(y1-y2))+(z2*(z1-z2))/((m.sqrt((x2**2) +(y2**2) + (z2**2)))*(m.sqrt((x1-x2)**2 +(y1-y2)**2 +(z1-z2)**2))))],\
            t7 == [m.acos((x2*(x2-x3))+ (y2*(y2-y3))+(z2*(z2-z3))/((m.sqrt((x2**2) +(y2**2) + (z2**2)))*(m.sqrt((x2-x3)**2 +(y2-y3)**2 +(z2-z3)**2))))],\
            t8 == [m.acos((x3*(x2-x3))+ (y3*(y2-y3))+(z3*(z2-z3))/((m.sqrt((x3**2) +(y3**2) + (z3**2)))*(m.sqrt((x2-x3)**2 +(y2-y3)**2 +(z2-z3)**2))))],\
            t9 == [m.acos((x1*(x1-x3))+ (y1*(y1-y3))+(z1*(z1-z3))/((m.sqrt((x1**2) +(y1**2) + (z1**2)))*(m.sqrt((x1-x3)**2 +(y1-y3)**2 +(z1-z3)**2))))],\
            t10 == [m.acos(((x1-x3) * (x2-x3) + (y1-y3) * (y2-y3) + (z1-z3) * (z2-z3)) /(m.sqrt((x1-x3)**2 + (y1-y3)**2 + (z1-z3)**2) * m.sqrt((x2-x3)**2 +(y2-y3)**2 + (z2-z3)**2)))],\
            t11 == [m.acos(((x1-x3)* (x1-x2) + (y1-y3)*(y1-y2) +(z1-z3)*(z1-z2))/(m.sqrt((x1-x3)**2 + (y1-y3)**2 + (z1-z3)**2)* m.sqrt((x1-x2)**2 +(y1-y2)**2 +(z1-z2)**2)))],\
            t12 == [m.acos(((x1-x2) *(x2-x3)+(y1-y2)*(y2-y3) +(z1-z2)*(z2-z3))/(m.sqrt((x1-x2)**2 +(y1-y2)**2 + (z1-z2)**2)* m.sqrt((x2-x3)**2 +(y2-y3)**2 +(z2-z3)**2)))] ])
m.solve(disp = True)
print("vector a:",x1.value,y1.value,z1.value, " vector b:",x2.value,y2.value,z2.value," vector c:",x3.value,y4.value,z3.value,)

錯誤是:異常:@error:方程式定義方程式沒有等式(=)或不等式(>,<)false

但我不知道哪個方程不滿足要求。

問題是方程中的額外括號:

t1 == [m.acos(....)]

您可以通過刪除等式右側定義列表的括號來解決此問題。

t1 == m.acos(....)

下面是一個修改后的腳本,它仍然返回一個不可行的解決方案,但有一些額外的東西可以幫助您診斷問題。

  • 命名變量,以便 infeasibilities.txt 文件更具可讀性
  • 用 \ 包裹方程,使其更具可讀性
  • 檢查所有方程,例如第二個方程,第 3 部分。它應該是+ 0.5 * m.sqrt(((x2*y3-x3*y2)**2)嗎?它目前看起來像是該方程第 2 部分的副本.
  • 使用lb (下限)和ub (上限)對變量設置實際界限。 例如,如果它是一個距離,那么下限可能是 0.01 或其他一些小數。
  • 包括更好的初始猜測值。 從零開始可能意味着方程最初是在無窮大或 NaN 處計算的。
from gekko import GEKKO
V = 20
S = 30
t1 = 0.1
t2 = 0.2
t3 = 0.3
t4 = 0.05
t5 = 0.6
t6 = 0.2
t7 = 0.1

m = GEKKO(remote=False)
x1= m.Var(value = 0.11, lb=0.01, ub=2.0, name='x1')
x2= m.Var(value = 0.12, lb=0.01, ub=2.0, name='x2')
x3= m.Var(value = 0.13, lb=0.01, ub=2.0, name='x3')
y1= m.Var(value = 0.14, lb=0.01, ub=2.0, name='y1')
y2= m.Var(value = 0.15, lb=0.01, ub=2.0, name='y2')
y3= m.Var(value = 0.16, lb=0.01, ub=2.0, name='y3')
z1= m.Var(value = 0.17, lb=0.01, ub=2.0, name='z1')
z2= m.Var(value = 0.18, lb=0.01, ub=2.0, name='z2')
z3= m.Var(value = 0.19, lb=0.01, ub=2.0, name='z3')
t8= m.Var(value = 0.20, lb=0.01, ub=2.0, name='t8')
t9= m.Var(value = 0.21, lb=0.01, ub=2.0, name='t9')
t10= m.Var(value = 0.22, lb=0.01, ub=2.0, name='t10')
t11= m.Var(value = 0.23, lb=0.01, ub=2.0, name='t11')
t12= m.Var(value = 0.24, lb=0.01, ub=2.0, name='t12')
m.Equations([
            V == z3*(x1*y2 - x2*y1) + y3*(x2*z1 - x1*z3) + x3*(y1*z3 - y2*z1),\
            S == 0.5 * m.sqrt(((x1*y2-x2*y1)**2)+((x2*z1-x1*z2)**2)+((x1*y2-x2*y1)**2)) \
               + 0.5 * m.sqrt(((x1*y3-x3*y1)**2)+((x3*z1-x1*z3)**2)+((y1*z3-y3*z1)**2)) \
               + 0.5 * m.sqrt(((x1*y3-x3*y1)**2)+((x3*z1-x1*z3)**2)+((y1*z3-y3*z1)**2)),\
            t1 == m.acos(x1*x2+y1*y2+z1*z2)/((m.sqrt((x1**2) +(y1**2) \
                  + (z1**2)))*(m.sqrt((x2**2) +(y2**2) + (z2**2)))),\
            t2 == m.acos(x1*x3+y1*y3+z1*z3)/((m.sqrt((x1**2) +(y1**2) \
                  + (z1**2)))*(m.sqrt((x3**2) +(y3**2) + (z3**2)))),\
            t3 == m.acos(x2*x3+y2*y3+z2*z3)/((m.sqrt((x2**2) +(y2**2) \
                  + (z2**2)))*(m.sqrt((x3**2) +(y3**2) + (z3**2)))),\
            t4 == m.acos((x1*(x1-x3)) +(y1*(y1-y3)) +(z1*(z1-z3))/  \
                  ((m.sqrt((x1**2) + (y1**2)+(z1**2))) * (m.sqrt((x1-x3)**2  \
                  + (y1-y3)**2 + (z1-z3)**2)))),\
            t5 == m.acos((x1*(x1-x2))+ (y1*(y1-y2))+(z1*(z1-z2))/ \
                  ((m.sqrt((x1**2) + (y1**2) + (z1**2)))*(m.sqrt((x1-x2)**2 \
                  + (y1-y2)**2 +(z1-z2)**2)))),\
            t6 == m.acos((x2*(x1-x2))+ (y2*(y1-y2))+(z2*(z1-z2))/ \
                  ((m.sqrt((x2**2) +(y2**2) + (z2**2)))*(m.sqrt((x1-x2)**2 \
                  +(y1-y2)**2 +(z1-z2)**2)))),\
            t7 == m.acos((x2*(x2-x3))+ (y2*(y2-y3))+(z2*(z2-z3))/ \
                  ((m.sqrt((x2**2) +(y2**2) + (z2**2)))*(m.sqrt((x2-x3)**2 \
                  +(y2-y3)**2 +(z2-z3)**2)))),\
            t8 == m.acos((x3*(x2-x3))+ (y3*(y2-y3))+(z3*(z2-z3))/ \
                  ((m.sqrt((x3**2) +(y3**2) + (z3**2)))*(m.sqrt((x2-x3)**2 \
                  +(y2-y3)**2 +(z2-z3)**2)))),\
            t9 == m.acos((x1*(x1-x3))+ (y1*(y1-y3))+(z1*(z1-z3))/ \
                  ((m.sqrt((x1**2) +(y1**2) + (z1**2)))*(m.sqrt((x1-x3)**2 \
                  +(y1-y3)**2 +(z1-z3)**2)))),\
            t10 == m.acos(((x1-x3) * (x2-x3) + (y1-y3) * (y2-y3) + (z1-z3) * (z2-z3)) / \
                  (m.sqrt((x1-x3)**2 + (y1-y3)**2 + (z1-z3)**2) * m.sqrt((x2-x3)**2 \
                  +(y2-y3)**2 + (z2-z3)**2))),\
            t11 == m.acos(((x1-x3)* (x1-x2) + (y1-y3)*(y1-y2) +(z1-z3)*(z1-z2))/ \
                  (m.sqrt((x1-x3)**2 + (y1-y3)**2 + (z1-z3)**2)* \
                  m.sqrt((x1-x2)**2 +(y1-y2)**2 +(z1-z2)**2))),\
            t12 == m.acos(((x1-x2) *(x2-x3)+(y1-y2)*(y2-y3) +(z1-z2)*(z2-z3))/ \
                  (m.sqrt((x1-x2)**2 +(y1-y2)**2 + (z1-z2)**2)* \
                  m.sqrt((x2-x3)**2 +(y2-y3)**2 +(z2-z3)**2)))])
m.open_folder()
m.options.SOLVER = 1
m.solve(disp = True)
print("vector a:",x1.value,y1.value,z1.value, \
      " vector b:",x2.value,y2.value,z2.value, \
      " vector c:",x3.value,y4.value,z3.value,)

m.open_folder()命令打開運行目錄,您可以在其中找到infeasibilities.txt文件。 您還可以打開gk_model0.apm文件來查看您的方程式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM