首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NLOPT无效参数Python

NLOPT无效参数Python
EN

Stack Overflow用户
提问于 2015-02-17 15:28:32
回答 2查看 2.7K关注 0票数 4

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

代码语言:javascript
运行
复制
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)

我收到一个错误:

代码语言:javascript
运行
复制
"ValueError: nlopt invalid argument"

这里提到的唯一建议是:

Reference

下界可能大于上界,或者有一个未知的算法(这里没有这两种算法)。我正在运行以下版本的Python、NLOPT和NumPy

代码语言:javascript
运行
复制
>>> 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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-17 16:26:50

通过将函数声明更改为

代码语言:javascript
运行
复制
def myfunc(x, grad):
    return -1.0

一切都正常。因此,NLopt不能处理返回python integer而不是float的目标。

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

票数 5
EN

Stack Overflow用户

发布于 2018-01-23 15:18:36

由于我的目标函数返回类型是numpy.float128,所以我通过将返回类型更改为numpy.float64来修正这个错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28564976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档