python - NLOPT 无效参数 Python

标签 python numpy nlopt

当我在 python 中运行以下简单的 NLOPT 示例时:

import numpy as np
import nlopt 

n = 2
localopt_feval_max = 10
lb = np.array([-1, -1])
ub = np.array([1, 1])


def myfunc(x, grad):
    return -1

opt = nlopt.opt(nlopt.LN_NELDERMEAD, n)

opt.set_lower_bounds(lb)
opt.set_upper_bounds(ub)
opt.set_maxeval(localopt_feval_max)

opt.set_min_objective(myfunc)
opt.set_xtol_rel(1e-8)
x0 = np.array([0,0])

x = opt.optimize(x0)

我得到一个错误:

"ValueError: nlopt invalid argument"

此处引用给出的唯一建议:

http://ab-initio.mit.edu/wiki/index.php/NLopt_Python_Reference

是下限可能大于上限,或者存在未知算法(这里都不是这种情况)。我正在运行以下版本的 Python、NLOPT 和 NumPy

>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> nlopt.__version__
'2.4.2'
>>> np.__version__
'1.8.2'

最佳答案

通过将函数声明更改为

def myfunc(x, grad):
    return -1.0

一切正常。所以 NLopt 无法处理返回 python integer 而不是 float

的目标

我觉得 NLopt 应该能够将整数目标函数值转换为 float。如果不是这样,那么至少应该引发 TypeError 而不是 ValueError: nlopt invalid argument

关于python - NLOPT 无效参数 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564976/

相关文章:

python - numpy 数值微分

optimization - 具有单变量优化的 NLopt

r - 将参数传递给 r 中的 nloptr

python - Homebrew NLopt Python

python matplotlib时钟信号类型图帮助:

python - 定期切片 2D numpy 数组

python - 如何使用 numpy 从当前列中减去前一行列并使用该值在数组中创建一个新维度?

python - 使用 pd.DataFrame.to_excel 时旋转单元格的文本?

python - 在 Spyder IPython 控制台中自动关闭括号和引号?

python - tensorflow 中的谱范数 2x2 矩阵