"Дмитрий Завалишин. рассуждения о роботостроении" - читать интересную книгу автораСудьба подкинула мне для юбилейного онлайна совершенно забойную тему. Возблагодаря судьбу, начну издалека.
Как вы относитесь к Дарвину? В смысле верю, не верю?.. Напомню вкратце основные положения. Дядька Дарвин решил проблему проблем, ответив на вопрос - как из доисторическиой помойки получился человек. Очень просто - полагал Дарвин. Берем толпу индивидов. Каждый из них обладает какими-либо свойствами, в разной степени полезными для оных индивидов. Скажем, если некая часть тараканов на вашей кухне научится телепортироваться, то это даст им шанс жить дольше, избегая трагических встреч с вашим тапочком. Это значит, что неспособных к телепортации вы перебьете быстрее. Следовательно продвинутые тараканы дадут потомство с большей вероятностью, и таковых в следующем поколении станет больше. А неумех - меньше. Так закрепляется свойство, полезное для вида. А откуда оно берется? Из двух источников. Во-первых, мутации. Тут все просто - в случайный момент времени случайный элемент генотипа случайным образом меняется. В результате может получиться (и часто получается) урод, который, скорее всего, не выживет (таким образом неудачные результаты мутаций редко оказывают влияние на генофонд), а может получиться... ну, тот же паратаракан-телепортатор, не дай Бог. Третий компонент веселья - кроссинговер. Это просто. Берем две цепочки генов, чикаем обе на две части, часть А первой цепочки сшиваем с частью Б второй, оставшееся тоже сшиваем. Что это дает? Это позволяет искать варианты комбинаций генов. Мало отбора по свойствам - разные комбинации умений имеют разную ценность. Слепому таракану способность к телепортации не поможет, согласитесь. Вот. Что мы имеем с гуся? 1.Отбор (берем каждую особь и проверяем на пригодность по отношению к задаче - выжить и дать качественное потомство); 2.Мутации (генерим новые свойства); 3.Скрещивание (варьируем сочетания свойств). Все это, очевидно, работает только при наличии существенного количества индивидов в популяции - должно быть достаточно для того, чтобы генофонд мог стабилизироваться. Что значит "работает" - что оно делает-то? Оно делает одну простую вещь. Генерирует такие особи, какие наиболее приспособлены к решению задачи (см. пункт 1 выше). Причем, отметим, сам механизм решения обладает уникальной особенностью - ему до балды, какую задачу решать! Механизм никак с задачей не связан. Дайте ему оценочную функцию, чтобы он мог проверить, насколько данный индивид пригож, и оставьте на миллиончик лет. Он вам сгенерит популяцию организмов, наиболее хорошо решающих задачу. Еще более кратко - имеем организм, механизм и задачу. Суем организм в механизм, даем механизму задачу (в виде тест-функции) и уходим на миллион лет. Механизм приспасабливает организм к решению задачи. Внимание, приготовились. Быстро заменяем организм на микросхему, а миллион лет на пару дней. Опа? Нет, не проникся, читатель? Методика, с помощью которой природа получила из океана химических веществ окружающее нас богатство живых организмов и нас самих, элементарна до коликов, и применима для решения человеческих задач, включая программирование и проектирование! В самом деле. Чем программа отличается от генотипа? Ничем. Берем тысячу совершенно случайных программ. Берем функцию, которая отвечает на вопрос - насколько точно данная программа вычисляет квадратный корень. Далее запускаем механизм имени Дарвина - проверяем все программы функцией, худшие выкидываем, лучшие размножаем, потом вносим в случайные программы случайные изменения, и некоторые из них случайным образом режем на части и сшиваем крест-накрест. Утверждается, что через некоторое время такого онанизма мы получим программу, вычисляющую квадратный корень. Причем заранее неизвестно, каким именно образом. Эволюционные методы в программировании известны давно, но как-то не прижились. Не знаю, почему. А вот в проектировании электронных схем, похоже, дело |
|
|