"Дмитрий Завалишин. рассуждения о роботостроении" - читать интересную книгу автора

Судьба подкинула мне для юбилейного онлайна совершенно забойную тему. Возблагодаря судьбу, начну издалека.

Как вы относитесь к Дарвину? В смысле верю, не верю?.. Напомню вкратце основные положения. Дядька Дарвин
решил проблему проблем, ответив на вопрос - как из доисторическиой помойки получился человек. Очень просто -
полагал Дарвин. Берем толпу индивидов. Каждый из них обладает какими-либо свойствами, в разной степени
полезными для оных индивидов. Скажем, если некая часть тараканов на вашей кухне научится телепортироваться,
то это даст им шанс жить дольше, избегая трагических встреч с вашим тапочком. Это значит, что неспособных к
телепортации вы перебьете быстрее. Следовательно продвинутые тараканы дадут потомство с большей
вероятностью, и таковых в следующем поколении станет больше. А неумех - меньше.

Так закрепляется свойство, полезное для вида. А откуда оно берется? Из двух источников. Во-первых, мутации. Тут
все просто - в случайный момент времени случайный элемент генотипа случайным образом меняется. В результате
может получиться (и часто получается) урод, который, скорее всего, не выживет (таким образом неудачные
результаты мутаций редко оказывают влияние на генофонд), а может получиться... ну, тот же
паратаракан-телепортатор, не дай Бог.

Третий компонент веселья - кроссинговер. Это просто. Берем две цепочки генов, чикаем обе на две части, часть А первой цепочки сшиваем с частью Б второй,
оставшееся тоже сшиваем. Что это дает? Это позволяет искать варианты комбинаций генов. Мало отбора по свойствам - разные комбинации умений имеют
разную ценность. Слепому таракану способность к телепортации не поможет, согласитесь.

Вот. Что мы имеем с гуся?

1.Отбор (берем каждую особь и проверяем на пригодность по отношению к задаче - выжить и дать качественное потомство);
2.Мутации (генерим новые свойства);
3.Скрещивание (варьируем сочетания свойств).

Все это, очевидно, работает только при наличии существенного количества индивидов в популяции - должно быть достаточно для того, чтобы генофонд мог
стабилизироваться.

Что значит "работает" - что оно делает-то? Оно делает одну простую вещь. Генерирует такие особи, какие наиболее приспособлены к решению задачи (см. пункт 1
выше). Причем, отметим, сам механизм решения обладает уникальной особенностью - ему до балды, какую задачу решать! Механизм никак с задачей не связан.
Дайте ему оценочную функцию, чтобы он мог проверить, насколько данный индивид пригож, и оставьте на миллиончик лет. Он вам сгенерит популяцию
организмов, наиболее хорошо решающих задачу.

Еще более кратко - имеем организм, механизм и задачу. Суем организм в механизм, даем механизму задачу (в виде тест-функции) и уходим на миллион лет.
Механизм приспасабливает организм к решению задачи.

Внимание, приготовились.

Быстро заменяем организм на микросхему, а миллион лет на пару дней. Опа? Нет, не проникся, читатель? Методика, с помощью которой природа получила
из океана химических веществ окружающее нас богатство живых организмов и нас самих, элементарна до коликов, и применима для решения
человеческих задач, включая программирование и проектирование!

В самом деле. Чем программа отличается от генотипа? Ничем. Берем тысячу совершенно случайных программ. Берем функцию, которая отвечает на вопрос -
насколько точно данная программа вычисляет квадратный корень. Далее запускаем механизм имени Дарвина - проверяем все программы функцией, худшие
выкидываем, лучшие размножаем, потом вносим в случайные программы случайные изменения, и некоторые из них случайным образом режем на части и
сшиваем крест-накрест. Утверждается, что через некоторое время такого онанизма мы получим программу, вычисляющую квадратный корень. Причем заранее
неизвестно, каким именно образом.

Эволюционные методы в программировании известны давно, но как-то не прижились. Не знаю, почему. А вот в проектировании электронных схем, похоже, дело