Обсуждение статьи "Методы оптимизации библиотеки Alglib (Часть II)" - страница 4

 
Maxim Dmitrievsky #:

Смотрел здесь тестовые ф-ии. По картинкам совпадают.

С многомерными пока не понял прикол, надо разбираться.

Это первая статья в серии. Мысль не стоит на месте, был изменён тестовый набор функций в сторону усложнения и противодействия фейковым успехам методов и ложноположительным результатам, которые инициализируются нулём. Поэтому нужно смотреть последние статьи, к примеру эту.

Ни гитхабе вегда актуальные исходники.

Тестирование градиентных методов:

https://www.mql5.com/ru/forum/475597/page2#comment_55006029

GitHub - JQSakaJoo/Population-optimization-algorithms-MQL5: Population optimization algorithms
GitHub - JQSakaJoo/Population-optimization-algorithms-MQL5: Population optimization algorithms
  • JQSakaJoo
  • github.com
https://t.me/+vazsAAcney4zYmZi A list of implemented optimization algorithms (M - is a modified improved version, joo - is an algorithm of my development):
 
Andrey Dik #:

Это первая статья в серии. Мысль не стоит на месте, был изменён тестовый набор функций в сторону усложнения и противодействия фейковым успехам методов, которые инициализируются нулём, и вообще в сторону противодействия ложноположительным результатам. Поэтому нужно смотреть последние статьи, к примеру эту.

Ни гихабе вегда актуальные исходники.

Ну понятно. Если будет время и желание - сделаю для многомерных.

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

 
Добавлена ф-я  Multivariate Megacity LBFGS

Результат для 1000 измерений. Потраченное зря серверное время - 9 минут.

Вроде бы ошибок нет, сделано по лекалам статьи.


 
Andrey Dik #:

Это первая статья в серии. Мысль не стоит на месте, был изменён тестовый набор функций в сторону усложнения и противодействия фейковым успехам методов и ложноположительным результатам, которые инициализируются нулём. Поэтому нужно смотреть последние статьи, к примеру эту.

Ни гитхабе вегда актуальные исходники.

Тестирование градиентных методов:

https://www.mql5.com/ru/forum/475597/page2#comment_55006029

Там эта ф-я в инклуднике, она используется?

Это та же самая ф-я, как определить правильные границы? Так понял, что взята какая-то ее часть.

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

//——————————————————————————————————————————————————————————————————————————————
class C_Megacity : public C_Function
{
  public: //===================================================================
  C_Megacity ()
  {
    fuName = "Megacity";

    //границы функции
    xMinRange = -10.0; xMaxRange = -2;
    yMinRange = -10.5; yMaxRange = 10;

    //координаты максимума
    globalMaxFunValue = 1.0; //12.0
    xGlobalMax        = -3.1357545740179393;
    yGlobalMax        = 2.006136371058429;

    //координаты минимума
    globalMinFunValue = 0.0; //-1
    xGlobalMin        = -9.5;
    yGlobalMin        = -7.5;
  }

  double Core (double x, double y)
  {
    double a = MathSin (MathSqrt (MathAbs (x - 1.13) + MathAbs (y - 2.0)));
    double b = MathCos (MathSqrt (MathAbs (MathSin (x))) + MathSqrt (MathAbs (MathSin (y - 2.0))));
    double f = a + b;

    double res = floor (MathPow (f, 4)) -
                 floor (2 * exp (-(pow (x + 9.5, 2) + pow (y + 7.5, 2)) / 0.4));

    return Scale (res, -1.0, 12.0, 0.0, 1.0);
  }
};
 
globalMaxFunValue = 1.0; //12.0

Для 25-мерного случая найден. Не знаю где ошибки.


 
Maxim Dmitrievsky #:

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

Нет, не сложнее. На вашей функции сколько небоскребов выше 50% от мин и макс функции? А на моей сколько? На какой поверхности проще попасть выше 50% по высоте, если случайно раскидать точки? - на вашей. Поэтому, подчеркну ещё раз, границы заданы неверно.

Вот здесь об этом сказано: https://www.mql5.com/ru/articles/13923#tag3

По вашему коду я получил такой результат:

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

И возникает вопрос, почему 100 000, почему не 1 000 000 000?


Не нужно стеснятся, ставьте миллиард, но почему-то не показываете количество обращений к целевой функции, сколько там было обращений? В рейтинговых испытаниях разрешено только 10 000 обращений к целевой функции, а в случае с градиентными методами (где алгоритм может попытаться сделать и гораздо больше обращений к ФФ), в коде есть отсечка, при превышении лимита выдается минимальное значение целевой (методы ищут минимум, поэтому значение реверсировано):

// Увеличение счетчика запусков функции и контроль ограничений----------------
  numberLaunches++;
  if (numberLaunches >= maxNumbLaunchesAllowed)
  {
    fi.Set (0, DBL_MAX);
    CAlglib::MinNLCRequestTermination (state);
    return;
  }

Всё это было описано ранее в статьях.

Популяционные алгоритмы оптимизации: Алгоритмы эволюционных стратегий (Evolution Strategies, (μ,λ)-ES и (μ+λ)-ES)
Популяционные алгоритмы оптимизации: Алгоритмы эволюционных стратегий (Evolution Strategies, (μ,λ)-ES и (μ+λ)-ES)
  • www.mql5.com
В этой статье будет рассмотрена группа алгоритмов оптимизации, известных как "Эволюционные стратегии" (Evolution Strategies или ES). Они являются одними из самых первых популяционных алгоритмов, использующих принципы эволюции для поиска оптимальных решений. Будут представлены изменения, внесенные в классические варианты ES, а также пересмотрена тестовая функция и методика стенда для алгоритмов.
 
Как получить такую же поверхность, был задан вопрос. В инклуднике ее нет. При увеличении размерности задачи увеличивается кол-во итераций, это естественно. Сравнивать надо по времени выполнения до схождения к одному и тому же максимуму, если стоит задача получить серебряную пулю для всех случаев жизни. 
 
Maxim Dmitrievsky #:
Как получить такую же поверхность, был задан вопрос. В инклуднике ее нет. При увеличении размерности задачи увеличивается кол-во итераций, это естественно. Сравнивать надо по времени выполнения, если стоит задача получить серебряную пулю для всех случаев жизни. 

В классе есть методы GetMinRangeX   (), GetMaxRangeX   (), GetMinRangeY   (), GetMaxRangeY   (), с помощью которых можно запросить границы (ну и просто в коде соответствующих тестовых функций можно посмотреть границы).

На практике всегда есть ограничение на максимальное допустимое количество обращений к целевой, в испытаниях принят лимит в 10 000 обращений.

Если нет лимита ни по вычислительным ресурсам, ни по времени, то лучше вообще не использовать алгоритмы оптимизации и сделать простой полный перебор, но так никогда не бывает в реальной жизни. Тестирование и сравнение методов проводится при лимите в 10 000 обращений к целевой. Весь смысл сравнения алгоритмов в том, чтобы понять, какие алгоритмы получают результат лучше и с меньшим обращении к целевой. Соответственно, чем больше требуется алгоритму обращений к целевой для достижения сопоставимых результатов, тем алгоритм считается слабее на соответствующем типе задач.

К сожалению, от вас ускользают очень тонкие моменты, все из которых подробно описаны в статьях о методах оптимизации.

 
Какой-нибудь конкретный критерий оценки кач-ва оптимизации есть?) если алгоритму нужно больше итераций это плохо?

Сравнить скорость поиска оптимума с полным перебором - норм сравнение.
 
Maxim Dmitrievsky #:
Сравнить скорость поиска оптимума с полным перебором - норм сравнение.

Есть же ситуации, когда полный перебор не найдет оптимум, потому что узлы сетки перебора не попадают на него.