Задать вопрос

Какой алгоритм оптимизации выбрать?

Здравствуйте.
Необходимо выбрать алгоритм поиска минимума функции в 4х координатах (максимальные и минимальные координаты известны). Желательно использовать минимальное значение точек для поиска т.к. каждая точка отнимает примерно 2 часа расчетов значения функции. Предположительно функция имеет один минимум.
Спасибо
  • Вопрос задан
  • 310 просмотров
Подписаться 3 Простой 9 комментариев
Пригласить эксперта
Ответы на вопрос 3
@dmshar
Не пойму.
Вы курс оптимизации изучаете и вам надо сделать такое задание? Тогда вам должны были рассказать о преимуществах и недостатках каждого метода. Примените эти знания, что вам мешает?
Или вы решили решать эту задачу вообще не имея ни малейшего представления о теме? И пришли сюда, что бы вам не зная ни ваших данных, ни вашей функции ни вашей задачи, ни ресурсов вашего компьютера кто-то по озарению ткнул в какой-нибудь метод. И вы ему поверите? По сути в таком случае вы просто попытаетесь переложить на кого-то ответственность за принимаемое решение?
Ну вы же должны понимать, что по таким совершенно неинформативным признаком нельзя объективно выбрать "правильный метод".
А если вдруг ваша функция столь сложна, что каждое значение вычисляется примерно 2 часа (что-то слабо себе это представляю. Вы что, на калькуляторе считаете, или как?) то попробуйте подбирать метод сильно упростив вашу функцию, и попробуйте на этой упрощенной модели проверить несколько методов оптимизации. Это же элементарное и естественное решение любого мало-мальски квалифицированного инженера.
Ответ написан
@AlexSku
не буду отвечать из-за модератора
Мне нравится генетический алгоритм (на Матлабе его ещё можно запустить для целых значений координат, т.е. вы можете ввести дискретизацию сетки).
Но 2 часа расчёта одной точки это либо неправильный алгоритм, либо интерпретатор вместо компилятора. Возможно, сначала надо упростить модель.
Ответ написан
Комментировать
@rPman
В общем случае гуглить - многомерная оптимизация (у тебя всего 4 показателя да еще и значения на известных границах - лафа, это визуализировать проще)

Если собираемые показания с шумом, то с ними бороться можно только повышением количества сбора показаний (вычислений)

Процесс творческий.

К сожалению не существует универсального алгоритма, выше автор дал скрин (срез по 3 показателям, мог бы цветом четвертый визуализировать) очень неудачная функция, большое плато искать на нем минимум - грустно, и все способы крутятся вокруг поиска дополнительной информации о функции.

Как вариант можно попробовать поискать способ упрощения (ускорения вычислений), но это зависит от них самих, например если итоговое значение функции - сумма большого количества внутренних непоследовательных шагов, которые можно пропускать или менять порядок, то можно в качестве промежуточных результатов использовать приблизительное решение, использующее меньшее количество этих шагов, выбранных случайно, а точнее таким способом, чтобы среднее отличие этой упрощенной оценки не отличалось от настоящей.

Так же можно изучать изменение этих промежуточных шагов, из которых вычисляется итоговое значение, как их значение меняется от изменения критериев по отдельности.

Один из простых методов многомерной оптимизации состоит в построении матрицы якобиана, вычисления производной по изменению каждого критерия на минимальный шаг, так вот такую же матрицу можно строить и по этим внутренним шагам, они покажут какой именно критерий в каком случае имеет большее значение а значит его изменение будет иметь большее значение чем пытаться полностью пересчитывать для функцию для каждого критерия

p.s. можно к функции добавить усложнение, которое ведет себя более ярко выраженно в исследуемых точках, грубо говоря 1/(f(x)-a) будет сильнее меняться для значений первоначальной функции рядом с точкой a (осторожно с делением на 0, в этой точке такой подход даст неопределенный результат и для него может понадобиться пересчет), т.е. там где сама функция похоже на плато, возведением в отрицательную степень максимизирует незначительные движения и может помочь найти разницу

upd. посмотри weka, фреймворк написан на java, есть gui, как для выбора алгоритмов так и по визуализации (слабоват), как отправная точка для поиска алгоритмов чтобы и и посмотреть что есть и попробовать, что не понятно, вбиваешь название алгоритма в гугл и ищешь подробности
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы