Сигнатура функции ограничения векторного неравенства NLOpt в C++C++

Программы на C++. Форум разработчиков
Anonymous
Сигнатура функции ограничения векторного неравенства NLOpt в C++

Сообщение Anonymous »

Я работаю над реализацией задачи нелинейной оптимизации с использованием библиотеки NLOpt, и у меня возникли проблемы с определением ограничения векторного неравенства с помощью интерфейса C++.
NLOpt документы, кажется, указывают, что они поддерживают определение функций стоимости, а также функций ограничения равенства и неравенства, которые принимают аргументы std::vector&, а не указатели на массивы (

Код: Выделить всё

double*). См. сигнатуры myvfunc()
и myvconstraint() в разделе «Пример на C++» по следующей ссылке.
До сих пор мне удавалось добиться успеха. написав как мою функцию стоимости, так и мое ограничение равенства со следующими сигнатурами функций:

Код: Выделить всё

double cost_fcn(const std::vector& x, std::vector& grad, void* data);
double eq_constraint(const std::vector& x, std::vector& grad, void* data);
Документация NLOpt также описывает поддержку векторнозначных ограничений равенства и неравенства. Но сигнатуры функций (показанные ниже), которые они предоставляют, имеют формат C (с использованием указателей массива).

Код: Выделить всё

void ineq_constraint(
unsigned m, double *result, unsigned n, const double* x, double* grad, void* f_data);
где m — размерность вектора ограничений, а n — размер пространства параметров.
Это из документации не ясно, что сигнатура функции в стиле C++ поддерживается для векторных ограничений, но я пытался реализовать следующее, и это не работает:

Код: Выделить всё

void ineq_constraint(
std::vector& result, const std::vector& x, std::vector& grad, void* data);
На этом этапе я попытаюсь использовать сигнатуру функции в стиле C, но было бы неплохо получить окончательный ответ относительно того, поддерживает ли NLOpt в настоящее время C++. сигнатура функции стиля для векторных ограничений.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ature-in-c

Вернуться в «C++»