В этой серии статей вы узнаете, как генетические алгоритмы (также называемые эволюционными алгоритмами) могут помочь вам в решении нелинейных задач!

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

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

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

Сначала мы изучили очень простую методологию, которая заключалась в применении максимально возможного числа решений (= индивидуумов) к нелинейной модели и выборе лучших из них.

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

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

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

Я немного изменю первоначальный подход максимизации числа потенциальных решений, постепенно уменьшая исследуемую вселенную.

Давайте объясним основную идею одной единственной функцией: X1:

Начальная вселенная этой функции соответствует минимальному и максимальному диапазону наблюдений. Итак, если X1 колеблется от 30 до 50, мы должны создать особей с такими же характеристиками.

Однако вполне вероятно, что оптимальные значения X1 принадлежат меньшему диапазону.

Например, предположим, что X1 соответствует температуре и лучше всего соответствует цели в диапазоне от 35° до 42°. Точная и оптимальная температура будет в конечном счете определяться другими производственными параметрами и/или ограничениями (расход, вязкость и т. д.).

Если мы выберем исходную наблюдаемую Вселенную, 15 возможных значений X1 будут такими:

np.random.randint(30,51,15)
[45, 50, 43, 38, 44, 35, 44, 41, 48, 45, 43, 33, 37, 43, 43]

Тогда как самым разумным выбором будет:

|np.random.randint(35,42,15)
[40, 40, 40, 35, 40, 36, 35, 35, 37, 36, 35, 36, 39, 38, 35]

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

Давайте перейдем к коду!

Как и в первой статье, мы создадим пример регрессии с 10 функциями и обучим случайный лес без тонкой настройки каких-либо гиперпараметров:

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

Нижеприведенная функция выберет людей, которые находятся ближе всего к цели:

Затем мы создаем весь процесс с определенным количеством поколений (здесь 5000, но мы также можем остановить процесс после n итераций без каких-либо улучшений для отдельных лиц).

Каждое поколение будет состоять из 100 особей; только 10 из них передадут свои характеристики следующему.

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

Результат этого процесса:

Generation # / Distance from target
0 : 3.5203594790711463
1 : 0.17245788609726276
2 : 0.021943158326713785
5 : 0.013048357781954678
8 : 0.004585642441860216
20 : 0.0018902165603407184
21 : 0.0000990125205220238
88 : 0.00007448426300271649
161 : 0.00005387409348855954
164 : 0.000027555658107303316
258 : 0.000009524267987615076
284 : 0.0000043455700051708845

Чтобы понять разницу с моделью, описанной в первой статье, сравним их производительность (первая колонка соответствует количеству созданных особей):

Мы можем ясно видеть, что этот новый метод способен достигать меньшего расстояния от цели, чем предыдущий, с меньшим количеством участников!

Вы заинтересованы в изучении других методов для достижения оптимального решения?

Следуйте этому исследованию с помощью: