我希望在 Python 的 NLOPT 中使用增强拉格朗日方法 (LD_AUGLAG) 来解决另一个优化策略的子问题。但是,为此,我需要知道拉格朗日乘数的最终值和终止时的惩罚参数。
我查看了 NLOPT 的 Python 版本可用的返回选项,但无法找到这些值的返回选项。
import nlopt
import numpy as np
def myfunc(x, grad):
d = x.size
val = 0.0
for i in range(d):
val += 0.5 * (x[i]**4 - 16.0*x[i]**2 + 5.0*x[i])
return val
def mycons(x, grad):
val = np.dot(x,x) - 30.0
return val
n = 2
x0 = np.zeros(n)
local_opt = nlopt.opt(nlopt.LN_BOBYQA, n)
local_opt.set_ftol_rel(1e-10)
opt = nlopt.opt(nlopt.LD_AUGLAG, n)
opt.set_local_optimizer(local_opt)
opt.add_inequality_constraint(mycons, 1e-08)
opt.set_min_objective(myfunc)
x1 = opt.optimize(x0)
print(opt.last_optimum_value())
我希望在 opt 对象中可以选择返回拉格朗日乘数的值和终止时使用的惩罚参数。但是,在 NLOPT 中似乎没有这样的选项。