Pull to refresh

Comments 23

Ссылка на исходный код не работает. Исправьте, пожалуйста.
Сделал зеркало на ifolder. Если предложите на какой обменник залить, залью.
Да, спасибо, теперь работает. Из идей могу предложить гуглокод.
Залил.ру — плохая идея (видел ваш вопрос в Q&A). Через месяц ссылка помрет и ценность статьи резко снизится.

Заведите себе code.google.com аккант что ли. Или блог.
Спасибо, создал на code.google.com
100 лет назад писал «компилятор из текста в BF»: dpaste.org/YMyZ/
кстати, идея: написать транслятор IO-независимых (не требующих чтения данных с порта итп) Assembler x86 в брейнфак. тогда будет возможность писать программы, скажем на Си, и переводить их в брейнфак.
только вот кто этим займется )
Мне вот пока не совсем понятно как реализовывать переходы средствами bf
Только вот… ЗАЧЕМ? )))
Я практически уверен, что такое уже есть. По крайней мере знакомый баловался — написал си-подобный язык (с кучей операторов), переводимый затем в BF.
Знакомого я сейчас не найду, а вот на просторах интернетов — например, вот.
Только я заметил, что после нового года секция «ненормального программирования» взбунтовалась?
Тут просто цепная реакция похоже:)
Увидев много «ненормального программирования» решил тоже написать.
К 13-му числу безумие должно достигнуть вселенских масштабов)
Просто прочтение этой статьи доставило удовольствие от мысли, что эта статья не зря в «Ненормальном программировании» :)
Как раз на днях заинтересовался вопросами эволюционного программирования, в том числе часто упоминаемыми в этом разрезе BF и лиспом. Спасибо за статью.

Кстати, ваш пример замечательно демонстрирует основной недостаток эволюционного подхода: приходится шаманить с фитнес-функцией.
Случайно не работали с Java Evolutionary Computation Toolkit? Меня описание с википедии заинтересовало «представляет собой программный каркас, поддерживающий ряд технологий эволюционных вычислений, таких как: генетические алгоритмы, генетическое программирование,...»
Спасибо, почитал описание на википедии, впечатлён.
Я тут посмотрел исходники, мне только одному показалось, что алгоритм немного неправильный?
1. Репродукция происходит неправильно. Скрещиваются абсолютно случайные особи. Если я не ошибаюсь, то особи, у которых фитнесс наиболее подходящий должны иметь больший шанс на спаривание.
2. Насколько я понял, одна особь живет только одно поколение. В этом алгоритме особь может прожить на протяжении всего «существования мира», т.к. потомки премешиваются с родителями и отсекается 2-я половина.
3. Следуя из вышеуказаных, нужно сначала подсчитать фитнесс и только потом заниматься репродукцией. И соответственно фитнесс-функция будет считать одно поколение, а не два, и предки будут сразу погибать давая шанс потомкам.

Я только начинаю изучать ГА, если не прав, то поправьте меня.
Отвечу по пунктам:
1) «Главный бич многих генетических алгоритмов — недостаток разнообразия (diversity) в особях. Достаточно быстро выделяется один-единственный генотип, который представляет собой локальный максимум, а затем все элементы популяции проигрывают ему отбор, и вся популяция «забивается» копиями этой особи. Есть разные способы борьбы с таким нежелательным эффектом; один из них — выбор для размножения не самых приспособленных, но вообще всех особей.»Википедия: Генетический алгоритм

«Отбор усечением (Truncation selection)
Данная стратегия использует отсортированную по убыванию популяцию. Число особей для скрещивания выбирается в соответствии с порогом T∈[0;1]. Порог определяет, какая доля особей, начиная с самой первой (самой приспособленной), будет принимать участие в отборе. В принципе, порог можно задать и равным 1, тогда все особи текущей популяции будут допущены к отбору. Среди особей, допущенных к скрещиванию случайным образом m/2 раз выбираются родительские пары, потомки которых образуют новую популяцию.»
Введение в эволюционное моделирование: Учебное пособие

Что бы оставить число особей популяции постоянной, я в следующее поколение беру только 500 самых приспособленных особей.

2. Генетический алгоритм этого не запрещает.

«После скрещивания и мутации особей необходимо решить проблему о том, какие из новых особей войдут в следующее поколение, а какие нет, и что делать с их предками. Есть два наиболее распространенных способа.
1. Новые особи (потомки) занимают места своих родителей. После чего наступает следующий этап, в котором потомки оцениваются, отбираются, дают потомство и уступают место своим „детям“.
2. Следующая популяция включает в себя как родителей, так и их потомков.» Источник тот же.

3. Третий пункт опирался на предыдущие. После селекции в популяции остаются 500 самых приспособленных особей из потомков и их родителей, которые имеют равные шансы на продолжение рода.
Спасибо, видимо у меня оч поверхностные знания. Почитаю «Введение в эволюционное моделирование: Учебное пособие», спасибо за источник.
Я, кстати, уже задумывался о недостатке разнообразия. Удобно если просто нужно найти результат, поидее даже быстрее будет. А вот если нужно найти оптимальный — то есть подозрения что резултаты будут однообразными. Вы подтвердили мои подозрения.
Sign up to leave a comment.

Articles