NLOpt документы, кажется, указывают, что они поддерживают определение функций стоимости, а также функций ограничения равенства и неравенства, которые принимают аргументы std::vector&, а не указатели на массивы (
Код: Выделить всё
double*). См. сигнатуры myvfunc()
До сих пор мне удавалось добиться успеха. написав как мою функцию стоимости, так и мое ограничение равенства со следующими сигнатурами функций:
Код: Выделить всё
double cost_fcn(const std::vector& x, std::vector& grad, void* data);
double eq_constraint(const std::vector& x, std::vector& grad, void* data);
Код: Выделить всё
void ineq_constraint(
unsigned m, double *result, unsigned n, const double* x, double* grad, void* f_data);
Это из документации не ясно, что сигнатура функции в стиле C++ поддерживается для векторных ограничений, но я пытался реализовать следующее, и это не работает:
Код: Выделить всё
void ineq_constraint(
std::vector& result, const std::vector& x, std::vector& grad, void* data);
Подробнее здесь: https://stackoverflow.com/questions/790 ... ature-in-c