2015-02-17 3 views
3

Когда я запускаю следующий простой пример NLOPT в Python:NLOPT Недопустимый аргумент Python

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' 

ответ

2

Изменяя объявление функции в

def myfunc(x, grad): 
    return -1.0 

все работает. Так NLopt не может обрабатывать задачи, которые возвращают питон integer вместо float

Я чувствую, как NLopt должен быть в состоянии бросить целые значения целевой функции в float. Если это не так, то вместо ValueError: nlopt invalid argument должен быть поднят хотя бы TypeError.

0

Я получил эту ошибку из-за моего объективного типа возвращаемого функцией была numpy.float128 поэтому я установил ошибку, изменив тип возвращаемого значения numpy.float64

Смежные вопросы