Первые шаги к ПО

Анализируя предысторию создания «Автоматического математика», стало понятно, что математические успехи его старой программы так же, как и неудача с эвристиками, отчасти объясняются тем, он пользовался языком программирования Лисп. Математические операции — например определение, является ли число простым — можно записать на Лиспе всего в две или три строки, и возможности AM в основном базировались на эффективности выразительных средств этого языка по отношению к математическим понятиям. Но применительно к эвристикам Лисп совсем не таков: программирование на этом языке лишь одной эвристики часто требует нескольких страниц программных кодов. Любая попытка обработать столь сложные программы неизбежно приводила к тому, что «Автоматическому математику» приходилось рассматривать столь большое число возможностей и предлагать такое количество новых понятий, что подавляющая часть результатов оказывалась бесполезной.

Чтобы справиться с этими затруднениями, некто Ленат разработал новый язык программирования под названием RLL — (Representation Language Language — язык представления языков). Этот язык позволял задавать эвристические правила в более компактной форме, чем Лисп. Вместо того чтобы записывать правила в объемистых программных модулях Лиспа, Ленат разбил сложные предложения типа «если-то» на базисные понятия, фреймы, причем модификаторам, определяющим основные признаки понятий, соответствовали слоты фреймов.

Используя этот метод представления информации, Ленат вложил в синтаксис и словарь нового языка, предназначенного для программы «Эвриско», свою точку зрения на эвристики, подобно тому как Маккарти создавал Лисп для программирования математических и логических взаимосвязей. В результате «Эвриско» мог расчленять обширные предложения «если-то» и проверять все их элементы, пытаясь определить, что делает эти предложения истинными или ложными.

Первоначально Ленат снабдил «Эвриско» 150 эвристиками, которые можно было применять в любой области исследований. Несколько из этих эвристик представляли собой то, что Ленат назвал «метаправилами», — эвристики, предназначенные для образования новых эвристик. Вот один из примеров: «Если исполнение эвристического правила дается дорогой ценой, то сделать новое, более конкретное правило, которое, возможно, будет использоваться менее часто, но принесет столь же полезные результаты».

Все остальные правила в «Эвриско», как и в предыдущей программе Лената, предназначались для переработки данных, помогая программе определять новые понятия и оценивать их значение. Так, Ленат создал новое правило, позволяющее экономить машинное время. Это правило применялось только в тех случаях, когда программа, сталкиваясь с двумя очень похожими понятиями, должна была решить, какое из них рассматривать первым. В такой ситуации выбиралось то из понятий, которое требовало меньше машинного времени или не вызывало необходимости обращаться к пользователю. «Эвриско» мог принимать такие решения, так как Ленат предусмотрел в программе учет числа вопросов к пользователю и среднего времени счета для каждой из эвристик.

Для проверки «Эвриско» Ленат выбрал сравнительно малоразработанные области знаний, где был шанс открыть нечто действительно новое, а не просто повторять старые открытия. Кроме того, выбирались области, открывающие столь огромное число подлежащих рассмотрению возможностей, что человеческий разум не в состоянии справиться с ними.
Обоим названным критериям вполне соответствовала разработка наиболее эффективных интегральных схем для компьютеров. Хотя в то время уже существовали СБИС (сверхбольшие интегральные схемы) с сотнями тысяч транзисторов и других элементов на одном тонком слое кремния, инженеры стремились вместить в схему еще больше элементов. Одна из идей обеспечения более высокой плотности заключалась в так называемом многослойном конструировании. Вместо размещения элементов в одной плоскости, как это делалось обычно, предлагалось изготавливать схемы, состоящие из нескольких слоев.

Человеку трудно наглядно представить сложную трехмерную электронную схему, а программа «Эвриско» легко обучилась находить пути в лабиринтах этих крошечных миров. Прежде всего в программу закладывалась информация об основных компонентах схемы. Далее, чтобы найти оптимальнсг размещение, «Эвриско» пытался разместить эти компоненты в пространстве различными способами, проверяя пригодность каждого варианта. За первые же несколько часов работы программа предложила ряд новых вариантов размещения элементов в схеме, о которых инженеры и не помышляли.