<<<предыдущий список следующий>>>

Это - копия документа, находившегося на http://dz.ru. Авторские права, если не указано иначе, принадлежат Дмитрию Завалишину и/или Евгении Завалишиной. Все изменения, внесенные мной, находятся в этой рамочке.Пожалуйста, прочитайте disclaimer.


08 июля 1998    

Есть. Затянувшаяся пауза растоптана и смята. Онлайн - опять в эфире. Спасибо тем, кто поддержал нас, начиная с Интела, продолжая всеми теми, кто высказал готовность поддержать проект, продолжая всеми теми, кто присылал нам письма и бибикал нам по ICQ со словами поддержки и заканчивая нами самими, упорными и оптимистичными. :-)

На этом позвольте официальную часть закончить и перейти к части значимой. К первому после перерыва номеру электронного журнала dz online. Ура, товарищи. :-)


bigle.jpg (7004 bytes)

Макет корабля
"Бигль", на котором
Дарвин совершил то
самое путешествие

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

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

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

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

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

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

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

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

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

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

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

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

Эволюционные методы в программировании известны давно, но как-то не прижились. Не знаю, почему. А вот в проектировании электронных схем, похоже, дело пойдет. Тут вот какой фокус. Существуют и активно используются в создании тех же компьютеров интереснейшие микросхемы, называемые аббревиатурой FPGA. Field Programmable Gate Array. Штука это очень простая. Внутри микросхемы находится вагон и маленькая тележка некоторых логических элементов, никак между собой не соединенных. То есть соединить их возможно, но для этого в микросхему необходимо загрузить, что называется, прошивку - грубо говоря, план соединений элементов между собой. Матрицы FPGA обладают всеми свойствами электронных схем, ибо ими и являются, но, в отличие от любой другой микросхемы, они позволяют менять свои свойства произвольным образом. Вместо того, чтобы взять кучу мелких микросхем и спаять из них прибор, современный разработчик может взять FPGA и указать ему, как соединить кусочки матрицы, чтобы получить искомое безо всякой пайки.

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

adrian_tompson.jpg (4290 bytes)Нетрудно это все заметить, читая эту вот статью. Практика показала, что заметить все это, не читая статей, оказалось достаточно трудно. Если применение эволюционных методов в программировании обсуждалось еще с десяток лет тому назад, и соответствующие этюды публиковались в журналах, то додуматься до переноса метода на микросхемы оказалось нелегко. Но вот додумались же. Конкретно говоря, лавры победителя принадлежат Адриану Томпсону, сотруднику Сассекского университета (см. фото справа).

Снизойдем от абстракций к конкретике. Что сделал Томпсон? Ерунду, в общем. Он сделал устройство, которое отличает произносимую в микрофон команду "Go" от команды "Stop". И все.

Фокус только в том, что устройство на самом деле создала эволюция, а не человек. Никто на свете не знает, как оно работает. Никто не проектировал его схемы. Никто не в курсе, каковы даже физические основы ее функционирования!! Несмотря на то, что FPGA создана человеком и физика ее работы безусловно известна, тот режим, в который загнала человечье изделие эволюция, неизвестен никому. Выяснилось это, когда Томпсон стал разбираться в творении природы, эволюционно созданной прошивке для FPGA. Напомню, прошивка указывает матрице, в каком порядке и как соединить имеющиеся в ней логические цепи. Поэтому казалось поначалу, что созданная эволюцией прошивка может быть проанализирована, и метод извлечен на свет Божий. Только вот хрен-то. Как это все работает - ученые пока не поняли. Мало того, когда из схемы попытались исключить элементы, выход которых вообще никуда не подключен (и, следовательно, они не могут влиять на работу цепей), прошивка перестала работать. Это не мистика, это просто межэлементные емкости и индуктивные связи. Одна фигня - человек не умеет ими пользоваться. Это баснословно сложно, если танцевать от нашей любимой печки - от вычислений и традиционного проектирования. То есть не просто сложно - это за гранью возможного. А для эволюции - пустяк. Она не знает, глупая, что человек не предполагал использовать межэлементные емкости в работе схемы, и использует. Она все использует, что вообще есть в материале.

И последнее. По оценкам специалистов, чтобы сделать на базе FPGA систему распознавания этих самых двух слов известными методами, нужно использовать микросхему, по крайней мере, на порядок больше. Так-то.


Подведя черту (см. строкой выше), сделаем первичные выводы.

Поясню последнее. Дело в том, что эволюционные методы в принципе не требуют от "пользователя" понимания сути процесса. Требуется только предоставить системе предикат, позволяющий ей отличить хороший результат от плохого. Далее - вопрос времени и пригодности материала. Если данный материал (тварь Божья с данной сложностью мозга, микросхема с данным количеством элементов, чорт лысый с данной степенью сложности) вообще способен эту задачу решить - эволюция вытрясет из него решение. Кстати, чтобы научить FPGA отличать сигнал в 1 килогерц от сигнала в 10 килогерц, Томпсону потребовалось всего 4100 поколений эволюции.


Подведя вторую черту, сделаем вторичные выводы. Но сначала - три закона от Азимова.

  1. Робот не может причинить вреда человеку.
  2. Робот должен выполнять приказы человека, если это не противоречит закону 1.
  3. Робот должет стремиться к минимизации вреда себе, если это не противоречит законам 1 и 2.

Азимов полагал, что эти три закона необходимы и достаточны для того, чтобы роботы были применимы и безопасны.

Теперь - выводы.

То есть если уважаемый читатель находит, что можно - я хотел бы узнать, как вы это себе мыслите.


prev top next
Infocom Ranker www.reklama.ru. The Banner Network.

Copyright c dz online, 1996-1998, Designed by Denis A. Kim