Вся эта перемена целей, вся эта обрастающая подробностями работа приводит в конце концов к элементарным целям, для достижения которых у нас средства есть.
Итак, от целей к средствам, преодолевая различия! Вы заметили, что ЛЮБОЗАР неравнодушен к различиям. Он только тем и занят, что выясняет, где различия и каковы они.
Своей склонностью к различиям ЛЮБОЗАР похож на каждого из нас.
Девушка перед зеркалом занимается своим туалетом. Еще чуть-чуть туши на ресницы, теперь тени на веки погуще, слегка тронем губы алым карандашом - готово, цель достигнута. Откуда она знает, что все в порядке? Видимо, в ее голове хранится эталон, с которым она и сравнивает свое лицо, глядя в зеркало. Сравнивает, находит различия и умело их ликвидирует.
Скульптор перед глыбой мрамора. Он задумал изваять Нежность. Между его замыслом и неоформленной глыбой есть глубокие различия, и он устраняет эти различия, выбирая своими инструментами лишний мрамор. Исчезают постепенно различия, и является миру Нежность, похожая на нашу девушку/или на воды теплого моря, или на созвездия в морозном ночном небе - только художник знает, на что это будет похоже.
Плановик в главке перед своими ведомостями. Составить план работы отрасли - не до нежностей тут. Одни различия, да какие жестокие! Ну включу я заводу М в план погремушку, и он из прорыва выйдет, зато платиновая дробь вся израсходуется, и завод станет отгружать атомникам ураноразделительные сита без платиновой дроби. Засорятся сита, а прочистить нечем, рекламации пойдут. Как избежать жалоб, как добиться, чтобы и завод М, и завод N, и эта развалина, завод Р, были максимально и полезно загружены? Каковы различия и как их сгладить?
Люди - решатели задач - знают обычно, с какого рода различиями им придется иметь дело в данной задаче и какого сорта различия они встретят в иной житейской проблеме.
ЛЮБОЗАРу тоже необходимо знание различий, особый перечень различий для каждой задачи. Давайте посмотрим, каков этот перечень в задаче "Обезьяна и бананы".
Условия задачи: "В углу клетки, где находится обезьяна, лежит ящик. Под потолком клетки подвешен пучок бананов. Обезьяна может схватить их, только если будет стоять на ящике под ними. Как поступить обезьяне, чтобы достать бананы?".
Задача "Обезьяна и бананы" относится к числу самых популярных в арсенале разработчиков искусственного интеллекта задач. О причинах популярности ее мы поговорим позже, пока просто посмотрим, каковы различия, характерные для нее.
Различия здесь представляют собой просто расстояния: между рукой обезьяны и бананами, между положением ящика и местом подвески бананов, между обезьяной и ящиком. Мы расположили эти три различия в порядке убывающей трудности: поначалу обезьяне легче всего подойти к ящику, а труднее всего схватить бананы.
ЛЮБОЗАР сглаживает различия, производит разумные действия. В этом он тоже сходен с человеком. В житейских ситуациях мы обычно знаем, какого рода действия уместны оправданны, а какие запрещены или бессмысленны. Скажем, если хочешь иметь бананы, уместно взять их рукой, но совсем неуместно запеть во весь голос.
В отличие от человека ЛЮБОЗАР не имеет житейского опыта, он не жил в реальном мире и этим похож на новорожденного ребенка. Один из создателей ЛЮБОЗАРа Г. Саймон пишет: "Если не считать нескольких врожденных рефлексов, у новорожденного нет средств для разумного увязывания информации от органов чувств с действиями. Поэтому для его начального обучения очень важно, чтобы он узнал, что определенные действия или последовательности действий приведут к изменению состояния мира в том виде, в каком он его воспринимает. И пока он не накопил достаточно таких знаний, для него мир чувств и мир действий - два отдельных, совершенно не связанных между собой мира. И только по мере того как опыт помогает ему увязать элементы одного мира с другим, он получает возможность воздействовать на мир целенаправленно".
Чтобы решать задачу, ЛЮБОЗАР, кроме перечня различий, должен располагать еще перечнем допустимых действий. В задаче "Обезьяна и бананы" их четыре: идти, передвинуть ящик, залезть и схватить бананы.
Мало перечислить различия и действия, нужно еще связать их между собой так, как они связаны в реальном мире. В ЛЮБОЗАРе для этого предусмотрена таблица связей, в которой пересекаются действия и различия.
Таблица связей указывает, какое действие уменьшает данное различие, а какое не имеет ни малейшего к нему отношения. Без этой таблицы ЛЮБОЗАР применял бы свои действия наобум, как младенец; с этой таблицей он ближе к предусмотрительному взрослому человеку.
В задаче "Обезьяна и бананы" действие "залезть", например, связано только с различием между обезьяной и ящиком. Впрочем, давая ЛЮБОЗАРу эту задачу, программисты решили немного его запутать, поставили во всех клетках в таблице связей кресты, то есть сказали машине: "Все действия желательны для уменьшения всех различий".
Итак, мы задаем программе перечень различий и действий, а также таблицу связей, свойственных данной задаче. Еще мы указываем ей условия задачи, исходное положение, начальную ситуацию и необходимый результат, конечное положение, желанную цель.
Вот и все, что знает ЛЮБОЗАР. Теперь его выход, его роль.
Он принимается выяснять, получит ли обезьяна бананы, пуская в ход три своих излюбленных метода. Имя первого из них "Преобразую!", имя второго метода "Уменьшаю различия!", третий метод называется "Действую!".
Позвольте мне изложить ход решения задачи "Обезьяна и бананы" подробно, ибо здесь мы проникаем в святая святых Искинта. Итак, пунктуальный репортаж.
1. ЛЮБОЗАР сразу пытается достичь конечную цель - отдать бананы обезьяне в руки. Он использует метод "Преобразую!". Машина сличает две ситуации - начальную и конечную, и вьлделяет, в чем состоят различия: руки обезьяны пусты, а должны быть с бананами.
2. Программа устанавливает, что это самое трудное различие, следовательно, начинать надо с него; новая цель: уменьшить его.
3. Применяется метод "Уменьшаю различия!". С его помощью машина испытывает действие "схватить бананы". Не получается, неприменимо действие. По-человечески говоря, некому хватать эти бананы, а по-машинному - не соблюдены условия применения.
4. Делать нечего, программа берется за более легкое различие: есть - "положение ящика в углу клетки", а должно быть - "положение ящика под бананами".
5. ЛЮБОЗАР пытается уменьшить различие действием - "передвинуть ящик". Не получается, опять неприменимо действие, опять не соблюдены условия.
6. Программа не унывает. Есть еще различие между положениями, обезьяны и ящика. Может, хоть оно поддастся?
7. ЛЮБОЗАР прилагает к исходной ситуации действие "идти", идти обезьяне к ящику. Наконец-то получилось: суровые условия применимости оператора соблюдены. В результате работает метод "Действуй!" и возникает новая ситуация: обезьяна стоит у ящика.
8. ЛЮБОЗАР помнит, конечно, все свои предыдущие шаги и берет реванш за неуспехи. На шаге 5 не представилось возможным передвинуть ящик, а теперь как? Теперь условия применения соблюдены, значит, "Действую!". И ящик вместе с обезьяной оказывается под бананом.
9. Шаг 3 тоже был неуспешным, зато теперь... К сожалению, и теперь ЛЮБОЗАР испытывает неудачу: действие "схватить банан" по-прежнему неуместно, не созрели условия.
10. Какое различие еще сохранилось? Расстояние между руками обезьяны и бананами. Вот что надо свести к нулю!
11. ЛЮБОЗАР применяет действие "залезть". Удачно. Обезьяна оказывается на ящике, расстояние между ее рукой и бананами исчезло.
12. Теперь возврат к шагу 3. Обезьяне удается "схватить бананы".
13. И тем самым обеспечен возврат к шагу 1 не только с бананами, но и с решением задачи в руках.
Решение задачи таково: обезьяна должна подойти к ящику, передвинуть ящик, залезть на него и схватить бананы.
Вполне вероятно, что читатели испытывают в этом месте рассказа глубокое разочарование. Задача-то совершенно пустяковая, любой человек решает ее мгновенно, безо всякого труда, а хваленый ЛЮБОЗАР разводит турусы на колесах. Да ему почти все было известно заранее. Его, как старинную пушку, целый час с дула заряжали: и различия туда засыпали, и действия заложили, и таблицу связей, всю в крестах, не забыли. А как пришлось стрелять - один дым!
Автор и сам смущен. Но по человеческой своей слабости тут же принимается искать оправдания бедному ЛЮБОЗАРу.
Спору нет, программе были известны и различия и действия, но она сама сумела выстроить единственно разумную цепочку. Не разбросала обезьяну и ящик по разным углам клетки, не заставила обезьяну лезть на ящик в месте, далеком от бананов, и многого другого избежала.
ЛЮБОЗАР вырастил дерево целей для задачи "Обезьяна и бананы", точно такое же, какое САИНТ порождала для задач интегрирования. И отсек лишние ветви на этом дереве, превратил пышное ветвеобильное дерево в бамбук - прямолинейный коленчатый ствол, ведущий к успеху.