|
|
||
|---|---|---|
| .. | ||
| Diophantine.ipynb | ||
| Genetic.ipynb | ||
| README.md | ||
README.md
Генетические алгоритмы
Тест перед лекцией
Генетические алгоритмы (GA) основаны на эволюционном подходе к искусственному интеллекту, где методы эволюции популяции используются для получения оптимального решения заданной задачи. Они были предложены в 1975 году Джоном Генри Холландом.
Генетические алгоритмы базируются на следующих идеях:
- Валидные решения задачи могут быть представлены в виде генов
- Скрещивание позволяет объединить два решения, чтобы получить новое валидное решение
- Отбор используется для выбора более оптимальных решений с помощью некоторой функции приспособленности
- Мутации вводятся для дестабилизации оптимизации и выхода из локального минимума
Если вы хотите реализовать генетический алгоритм, вам потребуется следующее:
- Найти способ кодирования решений задачи с помощью генов g∈Γ
- На множестве генов Γ необходимо определить функцию приспособленности fit: Γ→R. Меньшие значения функции соответствуют лучшим решениям.
- Определить механизм скрещивания, чтобы объединить два гена и получить новое валидное решение crossover: Γ2→Γ.
- Определить механизм мутации mutate: Γ→Γ.
Во многих случаях скрещивание и мутация представляют собой достаточно простые алгоритмы для манипуляции генами как числовыми последовательностями или битовыми векторами.
Конкретная реализация генетического алгоритма может варьироваться в зависимости от задачи, но общая структура выглядит следующим образом:
- Выбрать начальную популяцию G⊂Γ
- Случайным образом выбрать одну из операций, которая будет выполнена на этом шаге: скрещивание или мутация
- Скрещивание:
- Случайным образом выбрать два гена g1, g2 ∈ G
- Вычислить скрещивание g=crossover(g1,g2)
- Если fit(g)<fit(g1) или fit(g)<fit(g2) - заменить соответствующий ген в популяции на g.
- Мутация - выбрать случайный ген g∈G и заменить его на mutate(g)
- Повторять с шага 2, пока не будет достигнуто достаточно малое значение fit или пока не будет достигнут лимит на количество шагов.
Типичные задачи
Задачи, которые обычно решаются с помощью генетических алгоритмов:
- Оптимизация расписания
- Оптимальная упаковка
- Оптимальная нарезка
- Ускорение полного перебора
✍️ Упражнения: Генетические алгоритмы
Продолжите обучение в следующих ноутбуках:
Перейдите в этот ноутбук, чтобы увидеть два примера использования генетических алгоритмов:
- Справедливое разделение сокровищ
- Задача о 8 ферзях
Заключение
Генетические алгоритмы используются для решения множества задач, включая логистику и задачи поиска. Эта область вдохновлена исследованиями, которые объединили темы психологии и компьютерных наук.
🚀 Задание
"Генетические алгоритмы легко реализовать, но их поведение сложно понять." источник Проведите исследование, чтобы найти реализацию генетического алгоритма, например, для решения головоломки Судоку, и объясните, как он работает, в виде схемы или блок-схемы.
Тест после лекции
Обзор и самостоятельное изучение
Посмотрите это отличное видео, в котором рассказывается, как компьютер может научиться играть в Super Mario, используя нейронные сети, обученные генетическими алгоритмами. Мы узнаем больше о том, как компьютеры учатся играть в такие игры в следующем разделе.
Задание: Диофантово уравнение
Ваша цель — решить так называемое Диофантово уравнение — уравнение с целыми корнями. Например, рассмотрим уравнение a+2b+3c+4d=30. Вам нужно найти целые корни, которые удовлетворяют этому уравнению.
Это задание вдохновлено этой статьей.
Подсказки:
- Вы можете рассматривать корни в интервале [0;30]
- В качестве гена можно использовать список значений корней
Используйте Diophantine.ipynb как отправную точку.