Как исправить локальную неосуществимость в IPOPT с помощью Python Gekko? - PullRequest
2 голосов
/ 27 октября 2019

Я получаю локальную ошибку неосуществимости в IPOPT (v3.12.10).

Converged to a point of local infeasibility. Problem may be infeasible.

Я также пробовал ее с помощью решателя APOPT, используя m.options.SOLVER=1, и получаю похожую ошибку.

No feasible solution

Существует несколько возможных решений этой проблемы с двумя уравнениями и тремя переменными. Решения этой проблемы заключаются в том, что плоскость пересекает сферу.

from gekko import GEKKO
m = GEKKO()
x=m.Var(); y=m.Var(); z=m.Var()
m.Equations([x**2+y**2+z**2==1,x+z==y])
m.options.SOLVER = 3 # APOPT=1, IPOPT=3
m.solve(debug=0) # debug=0 doesn't stop when unsuccessful
print('Solution 1')
print(x.value[0],y.value[0],z.value[0])

Когда я добавляю целевую функцию для максимизации z, тогда IPOPT сходится к решению.

# add objective
m.Obj(-z) # maximize z
m.solve()
print('Solution 2')
print(x.value[0],y.value[0],z.value[0])

Как можноИзбежать неудачного решения без добавления целевой функции?

1 Ответ

2 голосов
/ 28 октября 2019

Начальная точка в x=0, y=0 и z=0 требует другого начального предположения, чтобы сходиться к решению.

x=m.Var(0.01); y=m.Var(); z=m.Var()

Поскольку существует много решений, будет получено другое решениес различными начальными значениями догадки. Целевая функция, которую вы опробовали m.Obj(-z), улучшает сходимость, но также делает решение уникальным.

Все варианты решения в GEKKO являются решателями нелинейного программирования на основе градиента и включают APOPT, BPOPT, IPOPT и другие. Все эти решатели дают решения, которые гарантированно будут иметь локальный минимум или максимум. Все они используют условия Каруша-Куна-Такера , чтобы определить, когда найдено оптимальное решение. Начиная с x=0, y=0 и z=0, второе условие KKT (Нет допустимого спуска) выполняется, но первое условие не выполняется (Возможные ограничения). Это приводит к ошибке, которую вы наблюдали, когда решатель сообщал о локальной невозможности. Точка также называется стационарной точкой, где производная функции равна нулю.

...