установить вектор как выходной, nlopt

Я хочу использовать NLopt для моей задачи нелинейной оптимизации. Я тестирую пример кода на странице учебника введите описание ссылки здесь, C ++ пример. Работает хорошо. Но функция, которую я хочу минимизировать, должна возвращать вектор. Что, на странице учебника это имеет

double minf;
nlopt::result result = opt.optimize(x, minf);
printf("found minimum at f(%g,%g) = %g ", x[0],x[1],minf);

Я надеюсь, что minf — это вектор, поэтому я просто поменяю его на одномерный вектор для проверки.

std::vector<double> minf(1);
nlopt::result result = opt.optimize(x, minf);
printf("found minimum at f(%g,%g) = %g ", x[0],x[1],minf[0]);

Тогда это имеет ошибкиnltest2.cpp:44:44: error: no matching function for call to ‘nlopt::opt::optimize(std::vector<double>&, std::vector<double>&)’

Есть ли способ, которым я могу позволить ему перевернуть вектор?
Более того (если вы не можете ответить на этот вопрос, это нормально.) Я надеюсь использовать матричную библиотеку броненосца. Лучше бы я смог (я включил нужный файл h)

mat minf(1,1);
nlopt::result result = opt.optimize(x, minf);
printf("found minimum at f(%g,%g) = %g ", x[0],x[1],minf(1,1));

Это вызывает ошибки, конечно …

Спасибо за Ваш ответ!!

-2

Решение

Фактически, если мы хотим поместить вектор для оптимизации, это становится многоцелевой задачей оптимизации. Я не уверен, что NLopt сможет это сделать. Когда вы хотите оптимизировать вектор, вы можете сделать один из правильных способов — превратить ваш вектор в скаляр. например, вы хотите оптимизировать [x, y], вы можете использовать z = x + y и оптимизировать z. Это может выглядеть неправильно, но иногда это работает. Или используйте более продвинутый способ, называемый «фронт Парето». Смотрите следующий слайд
изменить вектор на скаляр

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]