Программа должна будет распознавать такие ситуации, когда, например, робот вот-вот потеряет равновесие или наталкивается на препятствие, вычислять соответствующее действие и выполнять его. Это самая сложная часть исследовательского проекта. Как узнать, когда лучше обойти препятствие слева, а когда — справа, когда перепрыгнуть через него, а когда отпихнуть его в сторону, или пройти прямо по нему, или шагнуть шире, чтобы не наступить на него, или решить, что его преодолеть нельзя и повернуть назад? И как именно в каждом из таких случаев нужно осуществить все эти действия по отсылке бесчисленного количества сигналов в моторы и механизмы в соответствии с обратной связью, полученной от органов чувств?
Разумеется, вы разобьёте задачу на подзадачи. Поворот на один заданный угол похож на поворот на любой другой. Поэтому можно написать подпрограмму для поворота, которая возьмёт на себя весь континуум возможных случаев. Готовую подпрограмму можно будет просто вызывать из остальных частей программы при необходимости поворота, и в этих частях знания о том, что именно требуется для поворота, будут излишними. Задав и решив столько таких подзадач, сколько возможно, вы создадите код или язык , весьма хорошо приспособленный для формулирования движений робота при ходьбе. Каждый вызов одной из подпрограмм — это такая формулировка или команда на данном языке.
До этого момента большая часть того, что вы сделали, относится к «вдохновению»: она требовала творческого мышления. Настало время попотеть. Автоматизировав всё, что вы знаете, как автоматизировать, вы столкнётесь с единственной возможностью для достижения дополнительной функциональности: обратиться к методу проб и ошибок. Однако теперь у вас есть преимущество в виде языка, который был вами адаптирован для передачи роботу инструкций по ходьбе. Поэтому можно начать с программы, простой на этом языке, но очень сложной в плане элементарных команд компьютера и означающей, например, «Идти вперёд; при столкновении с препятствием остановиться». Затем можно запустить эту программу и посмотреть, что будет делать робот. (Или проверить её на компьютерной модели робота.) Если робот споткнётся и упадёт или произойдёт ещё что-то нежелательное, программу можно модифицировать — всё на том же уже созданном вами языке высокого уровня, — устраняя недостатки по мере их выявления. Вдохновения для такого метода нужно меньше, а вот попотеть придётся.
Но есть и альтернативный подход: можно переложить вторую фазу на компьютер, но с использованием так называемого эволюционного алгоритма . С помощью одной и той же компьютерной модели запускается множество пробных версий, в каждой из которых самая первая программа случайным образом немного меняется. Эволюционный алгоритм подвергает каждого смоделированного робота набору тестов, задуманных вами: сколько он может пройти, не упав; насколько хорошо он преодолевает препятствия и пересечённую местность и так далее. В конце каждого прогона остаётся программа, показавшая наилучшие результаты, а остальные отбрасываются. Затем создаётся множество вариантов этой выбранной программы, и процесс повторяется. После тысяч итераций такого «эволюционного» процесса может оказаться, что робот согласно установленным вами критериям ходит достаточно хорошо. Теперь можно писать диссертацию. И вы не только сможете утверждать, что сконструированный вами робот ходит с требуемой степенью ловкости, но и что вы на компьютере реализовали эволюцию .
Такая процедура с успехом осуществлялась уже много раз. Это полезная методика. И, безусловно, она представляет собой «эволюцию» в смысле чередования вариации и отбора. Но эволюция ли это в более важном смысле создания знаний путём вариации и отбора? Когда-нибудь мы достигнем и этого, но я сомневаюсь в том, что на данный момент это уже достигнуто, по той же причине, по которой я сомневаюсь в том, что чатботы обладают интеллектом, пусть и небольшим. Просто потому, что их способностям есть гораздо более очевидное объяснение, а именно творческое мышление программиста.
Исключение возможности того, что в случае «искусственной эволюции» знание было создано программистом, логически эквивалентно проверке, является ли программа искусственным интеллектом, только это задача сложнее, потому что объём знаний, якобы создаваемых в ходе «эволюции», гораздо меньше. Даже если вы сами и есть программист, то не можете судить, вы создали этот относительно небольшой объём знаний или нет. С одной стороны, те знания, которые вы заложили в язык за многие месяцы разработки, будут иметь определённую сферу применимости, потому что в них закодированы некоторые общие истины о законах геометрии, механики и так далее. С другой стороны, вы разрабатывали язык, постоянно учитывая, для выражения какого рода способностей он в итоге будет использоваться.
Читать дальше
Конец ознакомительного отрывка
Купить книгу