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