Чачко Алексей Григорьевич
Шрифт:
Итак, наша задача разделяется на три подзадачи, как симфония делится на три части. Мы и назовем свои подзадачи музыкально: АНДАНТЕ, СКЕРЦО и ФИНАЛ.
АНДАНТЕ. Цель: освободить большое кольцо. Для этого надо предварительно освободить среднее. И - как удачно!
– здесь опять работает наша идея: сослать угнетателей среднего кольца на запасной, в данном случае дальний стержень.
А чтобы изгнать эту пару колец, нужно сначала очистить малое кольцо, отправив маленькое колечко на запасной, теперь средний, стержень.
А маленькое колечко?.. Оно готово к ссылке. А средний стержень?.. Он свободен. Значит, ссылка маленького колечка осуществима сразу. Значит, можно сделать и все остальное!
Мы решили задачу АНДАНТЕ. Задача СКЕРЦО, как и положено, решается мгновенно: переносим большое кольцо с ближнего стержня на дальний; основание пирамиды заложено.
Теперь задача ФИНАЛ. Легко можно убедиться, что она поддается той же уловке - ссылке угнетателей на запасной стержень.
Выходит, дело сделано, мы знаем, как построить "Халойскую башню" с четырьмя кольцами, хотя и не занимались утомительным перебором возможностей. Мы не обследовали дерево возможностей; мы предпочли вырастить иное дерево - дерево целей. Корень дерева - общая цель головоломки - перенести все кольца. От этого корня ответвляются три ствола, три частные цели - наши АНДАНТЕ, СКЕРЦО и ФИНАЛ.
Что касается ствола СКЕРЦО, то он бесплоден - не ррдит никаких новых целей. Гораздо более плодородны АНДАНТЕ и ФИНАЛ: от них отходят цели меньшего масштаба, все более тонкие и конкретные веточки, вплоть до совсем элементарных целей, вроде "перенести маленькое колечко на средний стержень".
На наших глазах из одной головоломки выросло сразу два дерева: дерево возможностей и дерево целей. Дерево целей кажется более стройным, менее ветвистым, подобным корабельной сосне. Мы и растили его, как корабельную сосну, не давая чересчур ветвиться, обозначая на нем лишь разумные, а не все возможные цели.
Дерево целей - надежная опора и в более сложных случаях, когда башня состоит из восьми или 12 колец. Наши приемы - разделение задачи на подзадачи, освобождение и ссылка колец - не подводят и здесь. Мы не убоимся и главной "Ханойской башни", той, что собрана из 64 золотых колец. Ибо наше оружие - эвристики - не тупится о золото.
Они с самого начала имели дело с золотом. Помните, как Гиерон, царь Сиракуз, попросил Архимеда проверить, из чистого ли золота сделана его новая корона или ювелиры сплутовали. Помните, как мучился Архимед - слишком причудливы были контуры короны, чтобы разбить ее на цилиндры и конусы и геометрически вычислить объем. Помните, как в ояин прекрасный день выскочил он из ванны с ликующим криком "Эврика!", то есть "открыл!".
Он открыл, что корона такое же физическое тело, как и его собственное, и если погрузить ее в доверху наполненный водой сосуд, то объем вылившейся из сосуда воды будет равен объему короны. Архимед подарил нам первую эвристику, эвристику, которая работает до сих пор при измерении объемов тел сложной формы.
Мы не погружали в воду "Ханойскую башню" - и форма у нее простая, и объем башни нам знать ни к чему, Для нее мы нашли другие эвристики. Мы начали дело с конца, с цели, и попытались достичь ее сразу. Когда это не удалось, мы решили хотя бы приблизиться к цели и придумали промежуточную цель - освобождение большого кольца.
Это прекрасная эвристика - заменить недостижимую пока конечную цель промежуточной целью, достичь которую гораздо легче. Вся соль тут в том, чтобы почувствовать, что промежуточная цель не уводит в сторону от конечной, а приближает к ней. И еще одну эвристику мы изобрели, имя ей "ссылки лишних колец на запасной стержень". Нам повезло: эта эвристика доставила нас сначала к промежуточной, а потом и к конечной цели.
Вы, конечно, помните, уважаемый читатель, что рассказ о "Ханойской башне" понадобился нам, чтобы разъяснить, какого рода догадки-оценки (теперь мы скажем строже - эвристики) включены в программу САИНТ.
Программа САИНТ, подобно человеку, пытается решить задачу одним махом, заменив данный интеграл элементарным. Если это не получается, она производит алгебраические упрощения и снова пытается решить задачу. Если опять не выходит, САИНТ внимательно смотрит, что за птица-уравнение скрывается под знаком интеграла.
Как живых птиц отличают друг от друга форма клюва, оперение, размер и многие другие черты, так и подинтегральные птицы - алгебраические выражения - имеют каждая свои отличия. Как орнитолог оценивает птенчиков и после оценки надевает на их лапки кольца с перечнем их особенностей, так и САИНТ дотошно оценивает подинтегральное выражение и в памяти ЭВМ приписывает к нему его признаки.
Потом программа САИНТ берется за свой ассортимент эвристик. А он у нее не мал: в программе имеется набор из десяти эвристик, содержится десять драгоценных приемов интегрирования.
САИНТ вдумчиво перебирает эти свои эвристики, оценивает их одну за другой и примеряет каждую из них к подинтегральному выражению: эта не подходит вообще, и эта не подходит, а вот эта срабатывает, и эта годится, и эта тоже.
Программа работает с риском. Может добраться до цели за 3-4 хода, а может закрутиться в череде эвристик: преобразовала, оценила, снова преобразовала, снова оценила... и так без конца. Чтобы проверить успешность работы САИНТа, были взяты 54 задачи, предлагаемые на экзаменах первокурсникам в Массачусетском технологическом институте. Программа решила 52 из них. Две задачи оказались каверзными - память машины перегрузилась промежуточными целями и преобразованиями; САИНТ отпечатал: "Переполнение памяти. Неудача". Но и это неплохо! Ведь КПД САИНТа оказался близким к 96 процентам!