Комментарии 23
Ссылка на исходный код не работает. Исправьте, пожалуйста.
Залил.ру — плохая идея (видел ваш вопрос в Q&A). Через месяц ссылка помрет и ценность статьи резко снизится.
Заведите себе code.google.com аккант что ли. Или блог.
Заведите себе code.google.com аккант что ли. Или блог.
100 лет назад писал «компилятор из текста в BF»: dpaste.org/YMyZ/
кстати, идея: написать транслятор IO-независимых (не требующих чтения данных с порта итп) Assembler x86 в брейнфак. тогда будет возможность писать программы, скажем на Си, и переводить их в брейнфак.
только вот кто этим займется )
кстати, идея: написать транслятор IO-независимых (не требующих чтения данных с порта итп) Assembler x86 в брейнфак. тогда будет возможность писать программы, скажем на Си, и переводить их в брейнфак.
только вот кто этим займется )
Мне вот пока не совсем понятно как реализовывать переходы средствами bf
Только вот… ЗАЧЕМ? )))
Я практически уверен, что такое уже есть. По крайней мере знакомый баловался — написал си-подобный язык (с кучей операторов), переводимый затем в BF.
код/бинарник встудию!
Знакомого я сейчас не найду, а вот на просторах интернетов — например, вот.
Упс, ссылка не сработала. Вот — esolangs.org/wiki/C2BF
Только я заметил, что после нового года секция «ненормального программирования» взбунтовалась?
Просто прочтение этой статьи доставило удовольствие от мысли, что эта статья не зря в «Ненормальном программировании» :)
Как раз на днях заинтересовался вопросами эволюционного программирования, в том числе часто упоминаемыми в этом разрезе BF и лиспом. Спасибо за статью.
Кстати, ваш пример замечательно демонстрирует основной недостаток эволюционного подхода: приходится шаманить с фитнес-функцией.
Кстати, ваш пример замечательно демонстрирует основной недостаток эволюционного подхода: приходится шаманить с фитнес-функцией.
Случайно не работали с Java Evolutionary Computation Toolkit? Меня описание с википедии заинтересовало «представляет собой программный каркас, поддерживающий ряд технологий эволюционных вычислений, таких как: генетические алгоритмы, генетическое программирование,...»
Я тут посмотрел исходники, мне только одному показалось, что алгоритм немного неправильный?
1. Репродукция происходит неправильно. Скрещиваются абсолютно случайные особи. Если я не ошибаюсь, то особи, у которых фитнесс наиболее подходящий должны иметь больший шанс на спаривание.
2. Насколько я понял, одна особь живет только одно поколение. В этом алгоритме особь может прожить на протяжении всего «существования мира», т.к. потомки премешиваются с родителями и отсекается 2-я половина.
3. Следуя из вышеуказаных, нужно сначала подсчитать фитнесс и только потом заниматься репродукцией. И соответственно фитнесс-функция будет считать одно поколение, а не два, и предки будут сразу погибать давая шанс потомкам.
Я только начинаю изучать ГА, если не прав, то поправьте меня.
1. Репродукция происходит неправильно. Скрещиваются абсолютно случайные особи. Если я не ошибаюсь, то особи, у которых фитнесс наиболее подходящий должны иметь больший шанс на спаривание.
2. Насколько я понял, одна особь живет только одно поколение. В этом алгоритме особь может прожить на протяжении всего «существования мира», т.к. потомки премешиваются с родителями и отсекается 2-я половина.
3. Следуя из вышеуказаных, нужно сначала подсчитать фитнесс и только потом заниматься репродукцией. И соответственно фитнесс-функция будет считать одно поколение, а не два, и предки будут сразу погибать давая шанс потомкам.
Я только начинаю изучать ГА, если не прав, то поправьте меня.
Отвечу по пунктам:
1) «Главный бич многих генетических алгоритмов — недостаток разнообразия (diversity) в особях. Достаточно быстро выделяется один-единственный генотип, который представляет собой локальный максимум, а затем все элементы популяции проигрывают ему отбор, и вся популяция «забивается» копиями этой особи. Есть разные способы борьбы с таким нежелательным эффектом; один из них — выбор для размножения не самых приспособленных, но вообще всех особей.»Википедия: Генетический алгоритм
«Отбор усечением (Truncation selection)
Данная стратегия использует отсортированную по убыванию популяцию. Число особей для скрещивания выбирается в соответствии с порогом T∈[0;1]. Порог определяет, какая доля особей, начиная с самой первой (самой приспособленной), будет принимать участие в отборе. В принципе, порог можно задать и равным 1, тогда все особи текущей популяции будут допущены к отбору. Среди особей, допущенных к скрещиванию случайным образом m/2 раз выбираются родительские пары, потомки которых образуют новую популяцию.»
Введение в эволюционное моделирование: Учебное пособие
Что бы оставить число особей популяции постоянной, я в следующее поколение беру только 500 самых приспособленных особей.
2. Генетический алгоритм этого не запрещает.
«После скрещивания и мутации особей необходимо решить проблему о том, какие из новых особей войдут в следующее поколение, а какие нет, и что делать с их предками. Есть два наиболее распространенных способа.
1. Новые особи (потомки) занимают места своих родителей. После чего наступает следующий этап, в котором потомки оцениваются, отбираются, дают потомство и уступают место своим „детям“.
2. Следующая популяция включает в себя как родителей, так и их потомков.» Источник тот же.
3. Третий пункт опирался на предыдущие. После селекции в популяции остаются 500 самых приспособленных особей из потомков и их родителей, которые имеют равные шансы на продолжение рода.
1) «Главный бич многих генетических алгоритмов — недостаток разнообразия (diversity) в особях. Достаточно быстро выделяется один-единственный генотип, который представляет собой локальный максимум, а затем все элементы популяции проигрывают ему отбор, и вся популяция «забивается» копиями этой особи. Есть разные способы борьбы с таким нежелательным эффектом; один из них — выбор для размножения не самых приспособленных, но вообще всех особей.»Википедия: Генетический алгоритм
«Отбор усечением (Truncation selection)
Данная стратегия использует отсортированную по убыванию популяцию. Число особей для скрещивания выбирается в соответствии с порогом T∈[0;1]. Порог определяет, какая доля особей, начиная с самой первой (самой приспособленной), будет принимать участие в отборе. В принципе, порог можно задать и равным 1, тогда все особи текущей популяции будут допущены к отбору. Среди особей, допущенных к скрещиванию случайным образом m/2 раз выбираются родительские пары, потомки которых образуют новую популяцию.»
Введение в эволюционное моделирование: Учебное пособие
Что бы оставить число особей популяции постоянной, я в следующее поколение беру только 500 самых приспособленных особей.
2. Генетический алгоритм этого не запрещает.
«После скрещивания и мутации особей необходимо решить проблему о том, какие из новых особей войдут в следующее поколение, а какие нет, и что делать с их предками. Есть два наиболее распространенных способа.
1. Новые особи (потомки) занимают места своих родителей. После чего наступает следующий этап, в котором потомки оцениваются, отбираются, дают потомство и уступают место своим „детям“.
2. Следующая популяция включает в себя как родителей, так и их потомков.» Источник тот же.
3. Третий пункт опирался на предыдущие. После селекции в популяции остаются 500 самых приспособленных особей из потомков и их родителей, которые имеют равные шансы на продолжение рода.
Спасибо, видимо у меня оч поверхностные знания. Почитаю «Введение в эволюционное моделирование: Учебное пособие», спасибо за источник.
Я, кстати, уже задумывался о недостатке разнообразия. Удобно если просто нужно найти результат, поидее даже быстрее будет. А вот если нужно найти оптимальный — то есть подозрения что резултаты будут однообразными. Вы подтвердили мои подозрения.
Я, кстати, уже задумывался о недостатке разнообразия. Удобно если просто нужно найти результат, поидее даже быстрее будет. А вот если нужно найти оптимальный — то есть подозрения что резултаты будут однообразными. Вы подтвердили мои подозрения.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Выращиваем программы