Как стать автором
Обновить

Комментарии 12

Эта статья №4 в Google по запросу «голимые матрицы»
НЛО прилетело и опубликовало эту надпись здесь
Хотелось бы больше деталей, а то получается «Берём песок, старый аккумулятор и немного цветмета — и вот у нас готова хрустальная люстра». Что есть особь, как она записывается на бумаге символами, какой вообще аппарат аналитических выкладок, как происходит мутация — запись формулами и т.д. Всего этого не хватает, а почитал бы с большим удовольствием.
Особь — это просто вектор, содержащий нули или единицы. Мы показываем его в виде изображения. Как раз гифки показывают лучшую особь в каждой эпохе.
«Мутации производились путем изменения значения случайного пикселя у случайной особи на противоположное». Как говорится, берем и меняем.
Что касается аналитических выкладок — не очень понял, о чем вы.
Вот, уже понятнее! Но всё равно, вопросов масса, просто идём по тексту дальше, и по ходу:

> Здесь для всех, кроме «домика», количество мутаций было 100 в среднем на каждую особь, особей в популяции было 100, при размножении популяция увеличивалась в 4 раза.

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

и т.д.
В тексте полно мест, вызывающих массу вопросов у людей не знакомых с генетическими алгоритмами…

Обязательно продолжайте писать про генетику — это очень интересно.
Во все процессы добавлен элемент случайности. Так, при размножении выбирается 4*N раз пара особей (случайно), и у них получается детеныш. Получается он путем случайного скрещивания каких-то элементов векторов — в таком дискретном пространстве это есть аналог среднего арифметического. Опять же мера скрещивания (в какой мере детеныш будет похож на одного из родителей) определяется случайно. Все распределения равномерны.

Далее просто ведется сортировка и отбирается 70% из «топа». Остальные 30% забиваются случайно — я показал, что такие «счастливчики» очень важны, если мы реализуем встряску.

Если что-то еще не понятно, расспрашивайте.
Автор не написал самое главное. Но это не его вина. Практически все про это не пишут.
Самое сложное и нетривиальное (в отличие от самого алгоритма) это правильно выбрать генетический код.

1. Генетический код не обязан представлять решение задачи. Из него достаточно просто (относительно объема вычислений) должно строится решение и желательно, но не обязательно, однозначно.

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

В качестве примера избитая задача коммивояжера. Те, кто выбирают в качестве кода порядок обхода городов глубоко не правы, поскольку такой генетический код не удовлетворяет 2 пункту ни в коем разе.
У меня как раз получается задача ставится очень просто: устремить генетический код к некоторому значению. Я сделал так, что вот есть лучший экземпляр, к нему можно как-то стремиться, а уж по каким требованиям он является лучшим — это не моя забота. Задача очень формализована.

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

Если мы ждем появления буквы А — то ведь все другие варианты тоже должны присутствовать.
Тут случайности контроллируемые. Т.е. на каждом шаге у нас все ближе и ближе к искомой картинке. Тут нет полного перебора всех варинатов
Раз уж реализовали на языке Matlab, не пробовали забавы ради сравнить свою реализацию с реализацией ГА из Global Optimization Toolbox? Вот документация: www.mathworks.com/help/gads/ga.html
www.mathworks.com/help/gads/genetic-algorithm.html

Я когда-то возился с ГА, ради интереса пробовал использовать его для оптимизации параметров стеганографического контейнера, но практического смысла особо не узрел. Надёжнее использовать какой-нибудь pattern search метод, вроде такого:
www.mathworks.com/help/gads/particle-swarm.html
www.norg.uminho.pt/aivaz/pswarm/

я интересовался этой темой в конце 90-х начале 2000-х, и тогда не попадался на глаза прием со «счастливчиками», наоборот, протаскивали «элит» (по блату так сказать). Прям прогресс в демократии :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации