|
Модераторы: Daevaorn |
|
DProf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.9.2012 Репутация: нет Всего: 1 |
Добрый день!
В ходе написания программы на С++ понадобилось найти минимум функции девяти (!) переменных. Подскажите готовые решения (библиотеки, проги) для решения задачи минимизации. Переменные ограничены на известном интервале. Функция нелинейная (хотя может быть и получится ее линеаризовать). В Matlabe вот такие средства встроенные есть. А есть какая нибудь либа на С++ для этого? Информации в интернете по теме очень много, но тяжело найти здравое решение 'из коробки'. Хочется просто импортировать функцию минимизации и не разбираться ни капли в ее особенностях. |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Думаю, сильно зависит от вида функции, от того, как она задана - таблично, в виде полинома, аналитически и т.п.
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
DProf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.9.2012 Репутация: нет Всего: 1 |
Аналитически. Но это уже вопрос о методах решения. Хочется же просто мощную библиотеку на с++. Задача то вполне типичная, но что то не могу найти готового решения на си.
|
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
я тоже так всегда хочу, но почти никогда так не получаецца. Если по теме, то задачи такого рода хорошо решают генетические алгортитмы. готовых либ правда не знаю, (может и есть, просто не изучал этот вопрос). |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
> Аналитически
Т.е. я правильно понимаю, что на входе д.б. что-то типа
а на выходе вектор исков ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
http://ab-initio.mit.edu/wiki/index.php/NLopt
http://www.gnu.org/software/gsl/manual/htm...nimization.html http://devernay.free.fr/hacks/cminpack/index.html http://people.sc.fsu.edu/~jburkardt/cpp_sr...78/toms178.html Честно говоря, ни одну не пробовал, так что на Ваш страх и риск -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
DProf |
|
||||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.9.2012 Репутация: нет Всего: 1 |
Много проще, минимизируемую функцию можно прямо в код вставить, она заранее известна. За ссылки на либы спасибо. Пробовать буду. |
||||
|
|||||
math64 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
В общем случае не определишь.
Например функция, почти всюду равная 0, но маленьких в окрестностях x0 равная -1. Причем, её можно сделать гладкой и бесконечно дифференцирумой (как exp(-1/x^2) вблизи 0). |
|||
|
||||
DProf |
|
||||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.9.2012 Репутация: нет Всего: 1 |
Ну допустим я уверен что функция имеет минимум (даже не спрашивайте, почему:) ) в заданной окрестности.
Вы правы. К сожалению. Во всех этих особенностях по ходу придется глубоко копаться. Я ж не математик. Ужас. А функция - это полином второго порядка. Я вот начал подумывать тупо перебрать с мелким шагом все переменные от их возможного минимума до максимума. Скорость работы большого значения не играет. Если разбить интервал на 1 000 000 значений, то это всего то надо 1 000 000 * 9! = 362880000000 раз вычислить значение функции. Это сообщение отредактировал(а) DProf - 18.3.2013, 18:49 |
||||
|
|||||
Фантом |
|
|||
Вы это прекратите! Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
От девяти переменных? Интересно, откуда Вы извлекли такую задачу... Скорее всего, она решается аналитически (или, по крайней мере, допускает существенное уменьшение числа аргументов). Может быть, выложите выражение вместе с границами для переменных? |
|||
|
||||
W4FhLF |
|
|||
found myself Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Заодно надо уточнить какой минимум нужен: локальный или глобальный?
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
feodorv |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Чего-то я сомневаюсь в правильности этой выкладки. 1 000 000 в 9ой степени, мне кажется, ближе к истине... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
math64 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Для полинома наверно, можно найти.
Для полинома с одной переменной решение известно - определить знаки производных от первого порядка и далее на концах отрезка и в середине. По переменам знаков определяем сколько корней имеет производная на каждой половине отрезка, выбираем нужную часть и т.д. Для полинома с девятью переменными нужно найти способ сокращения числа переменных. |
|||
|
||||
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |