В этой серии статей вы узнаете, как генетические алгоритмы (также называемые эволюционными алгоритмами) могут помочь вам в решении нелинейных задач!
В первой части этой серии (здесь) я представил вопрос оптимизации нелинейных задач, которые не являются дифференцируемыми и для которых стандартные оптимизирующие библиотеки бесполезны.
Если вы знакомы с генетическими алгоритмами, то знаете, что они имитируют процесс естественного отбора, оставляя особей, наиболее приспособленных к окружающей среде.
В примерах, которые я буду использовать в этих статьях, это можно перевести следующим образом: индивидуальные характеристики (комбинация значений, установленных для каждой функции) взаимодействие с окружающей средой ( нелинейная модель) которая определяет судьбу человека (чем ближе результат регрессии к цели, тем выше шансы на выживание!)
Сначала мы изучили очень простую методологию, которая заключалась в применении максимально возможного числа решений (= индивидуумов) к нелинейной модели и выборе лучших из них.
Однако этот метод может потребовать больших вычислительных мощностей и времени по мере увеличения количества функций и уровня сложности модели.
Прежде чем мы перейдем к перестановкам и мутациям (которые являются традиционными методами), я хотел бы предложить альтернативную технику, которую я использую с хорошими результатами.
Тем не менее, имейте в виду, что я использую этот метод оптимизации для задач промышленного моделирования, и он может (вероятно) потерпеть неудачу в других областях.
Я немного изменю первоначальный подход максимизации числа потенциальных решений, постепенно уменьшая исследуемую вселенную.
Давайте объясним основную идею одной единственной функцией: 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
Чтобы понять разницу с моделью, описанной в первой статье, сравним их производительность (первая колонка соответствует количеству созданных особей):
Мы можем ясно видеть, что этот новый метод способен достигать меньшего расстояния от цели, чем предыдущий, с меньшим количеством участников!
Вы заинтересованы в изучении других методов для достижения оптимального решения?
Следуйте этому исследованию с помощью:
Статьи Пьера-Луи Бескона на Medium
Наука о данных, машинное обучение и инновацииpl-bescond.medium.com