使用 Gekko 的 MINLP 中的初始条件敏感性问题

计算科学 壁虎
2021-12-21 14:58:17

在 Gekko 的 MINLP 问题中,我遇到了对初始条件敏感的问题。我的测试用例是找到使得所以解决方案是的初始值设置但是我得到不同的解决方案,具体取决于这些初始值是什么。这里有些例子:abπa/b=π2/6a=2b=6aba0b0

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}')
0个回答
没有发现任何回复~