2013-07-22 3 views
0

Я пытаюсь добавить некоторые ограничения равенства и неравенства к моей проблеме минимизации. Я использую API nlopt Python.Векторнозначные ограничения в NLOpt

В частности, я хотел бы добавить vector-valued constraints. Мой код выглядит следующим образом, например:

def eqconstr(result,x,grad): 
    if grad.size > 0: 
      print "gradient to be implemented" 
    for i in range(len(x)): 
      if condition: result[i] = 0. 

initvect = # some initial guess of the parameters 
opt = nlopt.opt(nlopt.LN_PRAXIS,len(initvect)) 
opt.set_min_objective(function) 

tol = np.asarray([0.1]*len(initvect)) 
opt.add_equality_mconstraint(eqconstr, tol) # this is the call of the constraints (!!!) 

opt.set_lower_bounds(-1.) # other parameters to set. not important for this question 
opt.set_upper_bounds(1.) 
opt.set_initial_step([0.1]*len(initvect)) 
opt.set_xtol_abs(10e-6) 
opt.set_ftol_abs(10e-6) 
res = opt.optimize(initvect) 

Это следует точно инструкциям в nlopt вики. Теперь, если я запускаю это я получаю:

Traceback (most recent call last): 
    File "main.py", line 158, in <module> 
    opt.add_equality_mconstraint(eqconstr, tol) 
    File "/usr/local/lib/python2.7/dist-packages/nlopt.py", line 269, in add_equality_mconstraint 
    def add_equality_mconstraint(self, *args): return _nlopt.opt_add_equality_mconstraint(self, *args) 
ValueError: nlopt invalid argument 

ответ

0

Убедитесь, что функция eqcontr имеет такой же вид, как и вашей целевой функции function. Возможно, опубликуйте его, так что это будет легко понять. Кроме того, я не вижу, где определено condition.

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

  • Нет связанных вопросов^_^