gpt4 book ai didi

python - 如何使用 Python Gekko 修复 IPOPT 中的局部不可行性?

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:34 25 4
gpt4 key购买 nike

我在 IPOPT (v3.12.10) 中遇到本地不可行错误。

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

我还使用 m.options.SOLVER=1 对 APOPT 求解器进行了尝试,但得到了类似的错误。

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])

如何在不添加目标函数的情况下避免失败的解决方案?

最佳答案

x=0y=0z=0 的起点需要不同的初始猜测才能收敛到解决方案.

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

因为存在很多解,不同的初始猜测值会得到不同的解。您尝试的目标函数 m.Obj(-z) 提高了收敛性,但也使解决方案独一无二。

GEKKO 中的所有解决方案选项都是基于梯度的非线性规划求解器,包括 APOPT、BPOPT、IPOPT 等。所有这些求解器生成的解只能保证是局部最小值或最大值。他们都使用 Karush-Kuhn-Tucker conditions以确定何时找到最佳解决方案。通过从 x=0y=0z=0 开始,第二个 KKT 条件(No Feasible Descent)得到满足,但是第一个条件不满足(可行约束)。这会导致您在求解器报告局部不可行性时观察到的错误。该点也称为函数导数为零的驻点。

关于python - 如何使用 Python Gekko 修复 IPOPT 中的局部不可行性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58576605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com