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