NLopt 最小工作示例因“RoundoffLimited”而失败

问题描述 投票:0回答:1

我正在尝试 NLopt 并创建了以下最小工作示例,该示例始终失败并显示

 RoundoffLimited: NLopt roundoff-limited
:

import numpy as np
import nlopt

dim = 1

def obj_func(x, grad):
    return float( (x[0]-0.5)**2 )


opt = nlopt.opt(nlopt.LN_COBYLA, dim)
opt.set_min_objective(obj_func)
lb = np.zeros(dim)
ub = np.ones(dim)
opt.set_lower_bounds(lb)
opt.set_upper_bounds(ub)
opt.set_ftol_rel(1e-6)
x0 = np.random.uniform(low=lb, high=ub)

xopt = opt.optimize(x0)

我完全不知道我在这里做错了什么,因为基本上所有其他 MWE 看起来都很相似。

python numpy nonlinear-optimization rounding-error nlopt
1个回答
0
投票

您需要提供有关绝对收敛标准的信息,在您的情况下可能是:

opt.set_ftol_abs(1e-10)

最终代码如下所示:

import numpy as np
import nlopt

dim = 1

def obj_func(x, grad):
    return (x[0] - 0.5)**2

opt = nlopt.opt(nlopt.LN_COBYLA, dim)
opt.set_min_objective(obj_func)
lb = np.zeros(dim)
ub = np.ones(dim)
opt.set_lower_bounds(lb)
opt.set_upper_bounds(ub)
opt.set_ftol_abs(1e-10)
x0 = np.random.uniform(low=lb, high=ub)

xopt = opt.optimize(x0)
print(xopt)
#[0.50000118]
© www.soinside.com 2019 - 2024. All rights reserved.