1

我希望在 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 中似乎没有这样的选项。

4

0 回答 0