簡體   English   中英

為什么 GEKKO 對同一個 LINGO NLP 給出不同的解決方案?

[英]Why is GEKKO giving a different solution to the same LINGO NLP?

我正在嘗試使用 python 解決優化問題,我開始研究 GEKKO,因為它解決了非線性程序。 我在 LINGO 中編寫了一個簡單的模型來檢查與我從 GEKKO(相同模型)得到的答案不具有相同價值的答案。

Python代碼: -

from gekko import GEKKO

# Initialize Model

smplmdl = GEKKO()


# Create Variables
x = smplmdl.Array(smplmdl.Var, 3, lb = 0)
a = smplmdl.Array(smplmdl.Var, 3, lb = 0)

Constant_Val = [10, 15, 20]

for i in range(3):
    smplmdl.Equation(x[i]*(sum(a[j] for j in range(3))) == Constant_Val[i])

# Objective Function
smplmdl.Obj(sum(x[i] for i in range(3)))

smplmdl.options.IMODE = 3
smplmdl.solve()
smplmdl.options.OBJFCNVAL

print('x:', x)
print('a:', a)

print(smplmdl.options.OBJFCNVAL)

語言代碼:-

Min = x1 + x2 + x3;

x1*(a1 + a2 + a3) = 10;

x2*(a1 + a2 + a3) = 15;

x3*(a1 + a2 + a3) = 20;

可以簡化模型。

from gekko import GEKKO

# Initialize Model
smplmdl = GEKKO(remote=False)

# Create Variables
x = smplmdl.Array(smplmdl.Var, 3, lb = 0)
a = smplmdl.Array(smplmdl.Var, 3, lb = 0)

Constant_Val = [10, 15, 20]

for i in range(3):
    smplmdl.Equation(x[i]*sum(a) == Constant_Val[i])

# Objective Function
smplmdl.Minimize(sum(x))

# Solve and print solution
smplmdl.solve()
print('x:', x)
print('a:', a)
print(smplmdl.options.OBJFCNVAL)

這給出了解決方案:

x: [[5.7995291433e-05] [8.699293715e-05] [0.00011599058287]]
a: [[57475.93038] [57475.930412] [57475.930377]]
Objective:  0.00026097881145

目標是最小化 x 的總和,IPOPT 獲得的目標函數是2.6e-4 如果 LINGO 給出了不同的解決方案,則可能存在可以調整的求解器容差以實現更好的一致性。 嘗試調整m.options.RTOLm.options.OTOL的殘差和目標函數容差。 對於非凸問題,多開始方法或全局求解器可能更適合此問題。

如果目的是比較 LINGO 和 GEKKO,也許可以嘗試一個簡單的凸優化問題,例如:

from gekko import GEKKO    
import numpy as np
m = GEKKO()
x = m.Array(m.Var,4,value=1,lb=1,ub=5)
x1,x2,x3,x4 = x
# change initial values
x2.value = 5; x3.value = 5
m.Equation(x1*x2*x3*x4>=25)
m.Equation(x1**2+x2**2+x3**2+x4**2==40)
m.Minimize(x1*x4*(x1+x2+x3)+x3)
m.solve()
print(x,m.options.OBJFCNVAL)

暫無
暫無

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

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