在 Gekko 的 MINLP 问题中,我遇到了对初始条件敏感的问题。我的测试用例是找到和使得。所以解决方案是和。和的初始值设置为和。但是我得到不同的解决方案,具体取决于这些初始值是什么。这里有些例子:
Result 1: a0 = 5, b0 = 5, a = [6.0], b = [585.0], objective = 0.0015337359503
Result 2: a0 = 5, b0 = 6, a = [5.0], b = [185.0], objective = 0.0092263914506
Result 3: a0 = 2, b0 = 6, a = None, b = None, objective = 0.0
Result 4: a0 = 0, b0 = 0, a = [0.0], b = [0.0], objective = 1e+99
Result 5: a0 = 2, b0 = 5, a = [2.0], b = [6.0], objective = 0.0
结果 5 给出了正确的解决方案,但这里似乎存在许多不同的问题。为什么结果 1 和 2 错过了正确的解决方案?为什么求解器在给出正确值时会放弃?(结果 3)。结果 4 发生了什么?我如何设置 Gekko 以在此处找到正确的解决方案,独立于初始值并保持 lb = 0?
import math
from gekko import GEKKO
m = GEKKO(remote = False)
m.options.SOLVER = 1 # MINLP
pi = m.Const(math.pi)
c = m.Const(math.pi**2 / 6)
a0 = 5
b0 = 5
a = m.Var(value = a0, lb = 0, ub = 5000, integer = True)
b = m.Var(value = b0, lb = 0, ub = 5000, integer = True)
m.Obj(abs((pi**a)/(b)-c))
try:
m.solve(disp = False)
except:
a.value = None
b.value = None
print(f'Results: a0 = {a0}, b0 = {b0}, a = {a.value}, \
b = {b.value}, objective = {m.options.objfcnval}')