Библиография

Назад Вниз Вперёд

БИБЛИОГРАФИЯ

Книги

Barr, A., and E.A.Feigenbaum: The Handbook of Artificial Intelligence. Volumes I and
//. HeuristTech Press and William Kaufman, Inc., Los Altos, CA, 1981.
Cohn, P.R. and E.A.Feigenbaum: The Handbook of Artificial Intelligence. Volumes 111.
HeurislTech Press and William Kaufman, Inc., Los Allos, CA, 1981.
Clocksin, W.F. and C.S. Mellish: Programming in PROLOG. Springer-Velarg, New York, Inc.1984.
Graham, Neil: Artificial Intelligence - Making Machines "Think". TAB Books Inc., Blue
Ridge Summit, PA, 1979.
Hayes-Roth, F., D.A. Waterman, and D.B. Lenat: Building Expert Systems. Addison-
Wesley Publishing Co Inc., Reading, MA, 1983.
Lipschutz, S.: Finite Mathematics. McGraw-Hill Book Company, New York, 1966.
Naylor, Chris: Build Your Own Expert System. Halstes Press, a Division of John Willey
and Sons Inc. New York, 1983.
Negoita, C.N.: Expert Systems and Fuzzy Systems. The Benjamin/Cammings Publishing
Co., Menlo
Park, CA, 1985.
Winston, P.H. and B.K.P Horn: LISP. Addison-Wesley Publishing Co. Inc., Reading, MA,1981.

Статьи

Нечёткая логика
Zadeh, L.A. "Making Computer Think Like People". IEEE SPECTRUM vol.21, no. 8,
August 1984,pp.26-32.

Искусственный интеллект
Hayes-Roth, F.: "The Knowledge-Based Expert System: A Tutorial". IEEE
COMPUTER, vol. 17, no. 9, September 1984, pp. 11-28.

Представление знаний (семантические сети, PROLOG и т.д.)
IEEE COMPUTER, vol. 16, no. 10, October 1983

Объектно-ориентированное программирование
Сох, B.J.: "Message/Object Programming: An Evolution Change in Programming
Technology". IEEE SOFTWARE, vol. 1, no. 1, January 1984, pp. 51 -61.
Muge, T.N.: "Object Based Computing and the Ada Language", IEEE CONPUTER, vol.
18, no. 3, March 1985, pp. 11-19.

Проблемные области

Финансовое планирование
Casey, Douglas: Crisis Investing, Pocket Books, Simon & Schuster Publishing Co.. New
York, 1979.
Huang, Stanley: Investment Analysis and Management. Little, Brown & Co., Boston, 1981.
Weinstein, Grace W.: The Lifetime Book. of Money Management. The New American
Library, Inc., New York, 1983

Торговля
Buzzotte, V.R., Lefton, and M. Sherberg: Effective Selling through Psychology. Psyhological Associates, 1981.
Haas, Kenneth and J.W. Ernest: Creative Salesmanship, Understanding Essentials.
Glencoe Publishing Co., Inc. Encino, CA, 1974.

Образование
Brutten, Milton, Silvia Richardson, and Charles Mangel: Something's Wrong with My
Child. Harcourt Brace Jovanovich, New York, 1973.
DeHirsch, Katrina: "Learning Disabilities: An Overview". Bulletin, N.Y. Academy of
Medicine, vol. 50, no. 4, April 1974.
Green, L.J.: Kids Who Hate School; A Survival Handbook on Learning Disabilities.
Humanic Press, Atlanta, GA, 1984
Machalaba, Danielle, "Hidden Handicap; For Americans Unable to Read Well, Life Is a
Series cf Small Crises". Wall Street Jornal, Tuesday, January 17, 1984.
Sanders, Marion: Clinical Assesment of Learning Problems, Allyon & Bacon, Inc.,
Newton, MA, 1978.


Электронная версия книги "Практическое введение в технологию ИИ и ЭС с иллюстрациями на Бейсике"

This page uses frames, but your browser doesn't support them.


Часть 1 "Человеческий и машинный интеллект". Глава 1

Часть 1 ЧЕЛОВЕЧЕСКИЙ И МАШИННЫЙ ИНТЕЛЛЕКТ

• Введение в искусственный интеллект и экспертные системы

• Искусственный интеллект - совокупность средств, наделяющих
компьютеры некоторыми чертами разума

• Экспертные системы - программные комплексы, заменяющие человека
в узких областях интеллектуальной деятельности

• Основные концепции систем искусственного интелллекта

• Простые примеры

ГЛАВА 1

ВВЕДЕНИЕ В СИСТЕМЫ ИСКУССТВЕННОГО
ИНТЕЛЛЕКТА

Что такое искусственный интеллект ?

Искусственный интеллект (ИИ) - это программная система, имитирующая на компьютере мышление человека. Для создания такой системы необходимо изучить процесс мышления человека, решающего определенные задачи или принимающего решения в конкретной области, выделить основные шаги этого процесса и разработать программные средства, воспроизводящие их на компьютере. Следовательно, методы ИИ предполагают простой структурный подход к разработке сложных программных систем принятия решений.

Традиционное программирование

Компьютерные программы, как правило, предназначены для решения строго определённых задач. Приспособить программу к решению новых задач можно, внеся в неё изменения, а для этого её нужно всю внимательно просмотреть. Но подробный просмотр занимает слишком много времени, а при внесении изменений в программе могут возникнуть дополнительные ошибки.
Искусственный интеллект, как следует из самого названия, придаст компьютеру черты разума. Методы ИИ упрощают объединение программ и дают возможность заложить в систему искусственного интеллекта способность к самообучению и накоплению новой, полезной в дальнейшем информации. Человек может накапливать знания, не изменяя способ мышления и не забывая уже известных фактов. Система ИИ работает почти точно так же. После прочтения данной книги читателю станет ясно, что модифицировать программы ИИ значительно проще, чем традиционные программы.

Влияние ИИ на программирование

Методы ИИ предполагают высокую степень независимости отдельных частей программы, каждая из которых реализует определенный шаг решения одной или нескольких задач. Рассмотрим это более подробно. Независимые части программы можно сравнить с отдельными блоками информации в человеческой памяти. Выбирая нужную информацию, человеческий мозг автоматически подключает только относящиеся к делу факты, не перебирая все доступные ему знания.
Одну и ту же задачу можно запрограммировать, используя либо традиционные методы, либо методы искусственного интеллекта. Применение методов искусственного интеллекта позволяет существенно упростить и ускорить разработку программ. В программах обоих типов отдельные части выполняют строго определённые действия, однако программы ИИ обладают особым свойством, похожим на характерное свойство человеческого интеллекта, изменение любой, даже небольшой части информации не влияет на структуру всей программы. Такая гибкость придаст процессу программирования большую эффективность, дает возможность создавать программы, умеющие “понимать”, т.е. обладающие чертами разума.

Человеческое мышление

Искусственный интеллект опирается на знания о процессе человеческого мышления. Конечно, точно неизвестно, как работает человеческий мозг, учёные только начинают постигать сложный механизм интеллекта. Однако для разработки программ искусственного интеллекта имеющихся знаний вполне достаточно.

Цели

В основе человеческой деятельности лежит мышление. Когда утром звонит будильник, мозг человека дает команду руке выключить его. Это не автоматическая реакция, решение конкретной задачи требует определенного ответа мозга. Целью называется конечный результат, на который направлены мыслительные процессы человека. Как только цель (выключить будильник) достигнута, перед человеческим мозгом сразу встают новые цели, например пойти в ванную, почистить зубы, одеться, позавтракать, выйти на автобусную остановку и т.д. Осуществление всех этих целей приводит к достижению главной цели - вовремя попасть на работу. Мысли, ведущие к конечному результату, не случайны, а строго обоснованы. Каждый шаг на пути к главной цели имеет свою локальную цель. Мозг всегда сосредоточен на цели независимо от того, выполняет ли человек простую физическую работу или решает сложную интеллектуальную задачу. Цель заставляет человека думать. Целью может быть, например, следующее:
1. Определить кратчайший путь между Нью-Йорком и Бостоном.
2. Выбрать вино, больше всего подходящее к определенной рыбе.
3. Научиться завязывать шнурки у ботинок.
4. Найти способ оценки успехов ребенка в арифметике.
При проектировании систем ИИ всегда следует помнить о цели, для достижения которой они предназначены. Запомните - люди делают что-либо не потому, что думают, а думают, потому что должны что-либо сделать. Теперь, когда в общих чертах понятен ход человеческих мыслей при достижении цели, рассмотрим, каким образом человек решает множество повседневных задач.

Факты и правила

Человеческий мозг - это огромное хранилище знаний. Человеку свойственно приобретать новые знания и применять их к возникающим ситуациям. В общем интеллект можно представить как совокупность фактов и способов их применения для достижения цели. Отчасти цели достигаются с помощью правил использования всех известных фактов. Приведем несколько примеров фактов и правил их использования.

Пример 1
Факт 1. Зажженная плита - горячая.
Правило 1. ЕСЛИ положить руку на зажженную плиту. ТО можно обжечься.

Пример 2
Факт 2. В час пик на улице много машин.
Правило 2. ЕСЛИ попытаться в час пик перейти шоссе, ТО можно попасть под машину.

Пример 3
Факт За. Тихие, темные улицы опасны.
Факт 36. Пожилые люди обычно не совершают дерзких преступлений.
Факт 3в. Полиция защищает людей от преступников.
Правило За. ЕСЛИ на тихой, темной улице встретится пожилой человек, ТО можно не очень
беспокоиться.
Правило 36. ЕСЛИ на тихой, темной улице вы видите полицейского, ТО можно чувствовать себя в
безопасности.

Пример 4
Факт 4. При сложении двух чисел, сумма которых больше 9, нужен перенос.
Правило 4. ЕСЛИ складывается столбец чисел, сумма которых больше 9, ТО для правильного
выполнения сложения нужно обратиться к факту 4.

Заметим, что в приведённых примерах все правила выражены условным отношением ЕСЛИ-ТО, т.е. ЕСЛИ выполняется некоторое условие, ТО последует определённое действие или какая-либо другая реакция, факты и правила могут быть разной сложности. Обычно при достижении цели люди связывают сложные совокупности и фактов и правил.

Упрощение

Когда человеческий мозг приступает к решению даже самой простой задачи, для выбора нужных действий в его распоряжении имеется огромный объем информации. Например, направляясь на работу, человек выходит из дома и идет на угол улицы. Пока он выбирает момент для перехода улицы, в его мозг поступает самая разнородная информация. Прежде чем пересечь улицу, человек анализирует скорость и объём движения, расстояние до противоположного тротуара, сигналы светофора на перекрёстке. Одновременно его мозг обрабатывает впечатления, не имеющие прямого отношения к переходу улицы, например погодные условия, цвет и модели проезжающих машин, породу и высоту деревьев, растущих у дороги, вид расположенных неподалеку зданий. Несомненно, человек также думает о месте, куда он идет, о том, как скоро ему надо там быть, кого он может встретить и т.д.
Если бы человек, прежде чем шагнуть на проезжую часть, анализировал все факты, имеющие прямое, косвенное или вообще не имеющие никакого отношения к его цели перейти улицу, он простоял бы на тротуаре несколько лет. Каким же образом человеческий мозг из огромного разнообразия фактов и правил быстро выбирает подмножество, подходящее только к конкретной ситуации? Дело в том, что в мозгу существует сложная система, руководящая выбором правильной реакции на конкретную ситуацию. Такой выбор называется упрощением. Механизм упрощения блокирует мысли, не имеющие отношения к решаемой в данный момент задаче. Точно так же как удаление у дерева ненужных веток помогает ему расти, механизм упрощения способствует достижению цели, игнорируя все бесполезные для этого факты. Когда человек сталкивается с какой-то ситуацией, механизм упрощения заставляет его мозг сосредоточиться только на фактах и правилах, нужных для достижения поставленной цели. На рис. 1.1 приведена схема работы механизма упрощения при выборе необходимых правил и фактов. Здесь механизм упрощения используется при выборе правил для ситуации А или Б. В процессе упрощения в соответствии с отношением ЕСЛИ-ТО проверяется некоторое условие. Если условие удовлетворяет состоянию А, выбираются правила для А, если Б - правила для Б. Действие механизма упрощения можно сравнить с действием руководителя учреждения, распределяющего работу в соответствии с ее важностью. Секретарь, машинистка, клерк и другие служащие заняты своими делами. Если же какую-то работу нужно закончить срочно, руководитель должен решить, кто и когда будет ею заниматься.

1_1.gif (3427 bytes)

Рис. 1.1. Работа механизма упрощения

Если не сделать этого, то одни сотрудники будут сидеть без дела, ожидая, пока другие завершат свою часть работы, в то время как кто-то будет тратить драгоценное время, выполняя несрочную работу. Можно проделать огромную работу, но она окажется бессмысленной, если не будет достигнута конечная цель.
Без механизма упрощения человеческий мозг будет парализован, так же как учреждение без руководителя. Человеку при решении каждой задачи нужно будет проверять все известные ему правила. Человеческий мозг, подобно учреждению с полным штатом сотрудников различных профессий, хранит все знания, необходимые для принятия решения, но если требуемую информацию не выбрать вовремя - все знания бесполезны. Механизм упрощения направляет мысль человека в нужное русло, без него жизнь не только замедлится, но станет просто невозможной.

Механизм вывода

Достигая цель, человек не только приходит к решению поставленной перед ним задачи, но одновременно приобретает новые знания. Рассмотрим такой пример:
1. Джон и Мери - родители Джима.
2. Джон и Мери - родители Джейн.
Цель заключается в том, чтобы определить, кем приходятся друг другу Джим и Джейн. Механизм упрощения заставляет человека обратиться к хранящемуся в его мозгу правилу: ЕСЛИ у девочки и мальчика одни и те же родители, ТО мальчик и девочка - брат и сестра. Цель мгновенно достигнута.
Ответ на вопрос о степени родства Джима и Джейн получен из известного ранее правила. Кроме того, в процессе достижения цели получен новый факт: Джим и Джейн - брат и сестра. Часть интеллекта, которая помогает извлекать новые факты, называется механизмом вывода. Именно механизм вывода позволяет человеку учиться на опыте, так как он лает возможность генерировать новые факты из уже существующих, применяя имеющиеся знания к новой ситуации. В следующей главе будет рассмотрено, как механизм вывода помогает обнаружить ошибки в рассуждениях и совершенствовать правила, используемые при достижении целей.

Резюме

Основные идеи, рассмотренные в этой главе, используются на протяжении всей книги при обсуждении процесса создания систем ИИ. Перечислим их еще раз:
1. Цель заставляет человека думать.
2. Человеческий мозг хранит огромное число фактов и правил их использования. Для достижения определенной цели надо только обратиться к нужным фактам и правилам.
3. Механизм упрощения быстро и эффективно выбирает факты и правила, нужные для достижения ближайшей цели.
4. Механизм вывода завершает мыслительный процесс, выполняя заключения на основании правил, отобранных механизмом упрощения, и генерируя новые факты, которые добавляются к знаниям человека.


Часть 1 "Человеческий и машинный интеллект". Глава 2

ГЛАВА 2

РАЗРАБОТКА СИСТЕМ ИСКУССТВЕННОГО
ИНТЕЛЛЕКТА

Для того чтобы можно было говорить об искусственном интеллекте, программная система должна иметь все элементы, составляющие процесс принятия решения человеком, цели, факты, правила, механизмы вывода и упрощения.
В этой книге рассматриваются системы ИИ, основанные на правилах. Все они однотипны; основные компоненты таких систем показаны на рис. 2.1 . Главное отличие системы ИИ от традиционных программных систем заключается в том, что различные компоненты её структуры определяются раздельно и модификация любой её части не затрагивает общей структуры. Благодаря такому подходу можно выделить отдельные составляющие мыслительного процесса человека, решающего задачу, и включить их в систему ИИ. Определив, как человек мыслит на каждой стадии процесса принятия решения, в программу легко можно включить блок, реализующий действия, аналогичные человеческому мышлению на этой же стадии.

Определение целей

При проектировании системы ИИ прежде всего нужно определить цели, для достижения которых она предназначена. Приступая к разработке программы, необходимой для решения некоторой задачи, надо знать, к какому классу относится данная задача, и уметь описать её в нужных терминах.
Вновь обратимся к примеру, рассматривавшемуся в гл. 1 . Предположим, что человек быстро и безопасно перешел улицу. Стоя на автобусной остановке, он за несколько секунд должен решить, ждать ли ему экспресс, или пройти ещё полквартала, где останавливается местный автобус, на котором при определённых обстоятельствах можно добраться быстрее. Какой же автобус выбрать?
Прежде чем принять решение, человек взвешивает различные факторы. Например, через сколько минут прибудет экспресс? В каком автобусе вероятнее всего будут свободные места? Некоторые правила возникают в результате упрощений ("ЕСЛИ мне придется ждать экспресс больше 10 мин, ТО быстрее я доберусь до работы местным автобусом").
В процессе принятия решения постоянно используются правила, в том числе и специальные правила механизма упрощения. Для человека факты и правила, относящиеся к задачам, связанным с работой, не имеют никакого отношения к поездке на работу. Аналогично этому и в системе ИИ несущественными считаются все факты и правила, не относящиеся к достижению сформулированной цели.
Рассмотрим теперь задачу, которая более подробно будет описана в гл. 3 при обсуждении проектов реальных систем ИИ. Цель заключается в том, чтобы определить, есть ли у ребенка трудности при изучении арифметики. Эта задача сильно отличается от предыдущей, но именно поэтому она и выбрана. Задача поможет понять, что основные мыслительные процессы человека остаются одинаковыми при решении многих задач, а одну базовую систему ИИ можно использовать при решении огромного числа задач, какими бы разными они не казались.

2_1.gif (3695 bytes)

Рис.2.1. Компоненты системы ИИ

Последнюю цель можно разбить на подцели, относящиеся к разным разделам арифметики, и сформулировать их следующим образом:

Испытывает ли PERSON трудности при изучении СЛОЖЕНИЯ?
Испытывает ли PERSON трудности при изучении ВЫЧИТАНИЯ?
Испытывает ли PERSON трудности при изучении УМНОЖЕНИЯ?

Переменная PERSON введена для достижения общности. При решении частной задачи ей присваивается имя конкретного ребенка. Ниже приводится предложение языка Бейсик для ввода значения в переменную PERSON:
INPUT “Введите имя ”; PERSON
При выполнении компьютером этого предложения на экране появится надпись:

Введите имя?

В ответ надо ввести имя ребенка, допустим Эндрю Джонс. После этого всякий раз при обращении к переменной PERSON в фактах, правилах или целях будет использоваться имя Эндрю Джонс. Когда переменной присваивается значение, её называют проинициализированной. Теперь уже цель - узнать, есть ли трудности при изучении какого-либо раздела арифметики у Эндрю Джонса.

Определение фактов

Факты - важная часть системы ИИ, без них нельзя достичь цели. Выбирая автобус, человеку требовались только нужные для этого факты. Очевидно, что поскольку у каждой нестандартной ситуации - свой сценарий, у каждой цели - свои факты. Для того чтобы разобраться, как используются факты, рассмотрим одну из подцелей последней задачи:

Испытывает ли PERSON трудности при изучении вычитания?

Вычитание требует определенных математических навыков. Навыки и являются теми фактами, которые рассматриваются при достижении цели. Для выполнения вычитания ребенок должен уметь:
1. Вычитать два числа без переноса (2).
2. Вычитать два числа с переносом в одном столбце (1).
3. Вычитать два числа с переносом в нескольких столбцах (1).
Числа в скобках указывают относительную важность (вес) фактов, использующихся при оценке трудностей, возникающих у ребенка при изучении арифметики. Можно провести аналогию с обычными тестами, в которых одни вопросы важнее других. Каждый факт соответствует определенному навыку, необходимому для правильного выполнения операции вычитания, а отсутствие какого-либо навыка означает, что ребенок полностью вычитания не освоил. Чем больше назначенный факту вес, тем большее значение имеет этот факт при решении задачи. Использование весов фактов для достижения цели кратко поясняется ниже.

Получение данных

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

Может ли PERSON вычесть два числа без переноса?
Может ли PERSON вычесть два числа с переносом в одном столбце?
Может ли PERSON вычесть два числа с переносом в нескольких столбцах?

Точно так же как переменная PERSON заменяется на имя Эндрю Джонс, факты, представленные в виде вопросов, можно заменить на ответы. Факты, содержащие конкретную информацию, становятся данными. Иначе говоря, это ответы в форме “да/нет” на вопросы. Затем данные заносятся в базу данных, и их можно будет использовать при оценке знаний арифметики Эндрю Джонсом. Для вывода вопросов и получения ответов нужна соответствующая программа, например:

5 REM Переменная PERSON — имя ребенка
10 INPUT “Введите имя ребенка”; PERSON
15 REM в S1$ будет храниться ответ (да/нет) на следующий вопрос:
20 PRINT"Умеет ли “;PERSON;” вычитать два числа без переноса"
25 INPUT S1$
30 REM в S2S будет храниться ответ (да/нет) на следующий вопрос:
35 PRINT"Умеет ли “;PERSON;” вычитать два числа с переносом в одном столбце"
40 INPUT S2$
45 REM в S3$ будет храниться ответ (да/нет) на следующий вопрос:
50 РRINТ"Умеет ли “;PERSON;” вычитать дна числа с переносом в нескольких столбцах"
55 INPUT S3$

Программа в режиме диалога выводит на дисплей вопросы, ответы на которые будут использоваться для оценки трудностей при изучении вычитания конкретным ребенком. Ниже приводится весь диалог с компьютером. Прописными буквами пишутся вопросы, задаваемые компьютером, а строчными - возможные ответы пользователя.

ВВЕДИТЕ ИМЯ РЕБЕНКА? эндрю джонс
УМЕЕТ ЭНДРЮ ДЖОНС ВЫЧИТАТЬ ДВА ЧИСЛА БЕЗ ПЕРЕНОСА? да
УМЕЕТ ЭНДРЮ ДЖОНС ВЫЧИТАТЬ ДВА ЧИСЛА С ПЕРЕНОСОМ В ОДНОМ СТОЛБЦЕ? нет
УМЕЕТ ЭНДРЮ ДЖОНС ВЫЧИТАТЬ ДВА ЧИСЛА С ПEPEНOCOM В НЕСКОЛЬКИХ
СТОЛБЦАХ? нет

Теперь, как показано на рис. 2.2 , все проинициализированные переменные становятся частью базы данных. До сих пор все было довольно просто: формулировались факты, необходимые для выполнения вычитания; разрабатывалась программа, задающая вопросы, относящиеся к этим фактам, а полученные ответы сохранялись для последующего анализа. Выбирая между местным автобусом и экспрессом, человеческий мозг автоматически делает то же самое. Человек сам задает себе все необходимые вопросы, опираясь на уже известные ему факты, касающиеся этих автобусов и автобусов вообще. Факты формулируются в виде вопросов, ответы на которые помогают человеку принять окончательное решение. Факты и правила, которые будут обсуждаться в дальнейшем, хранятся в компьютере в так называемой базе знаний.
 Когда человек сталкивается с проблемой, какой выбрать автобус, не все соображения для него равноценны, например, если надо попасть на работу вовремя, он не будет слишком заботиться о том, чтобы сидеть в автобусе. Можно сказать, что человек “взвешивает” различные соображения. Числа в скобках поэтому и называются весами или весовыми факторами фактов.
Ответ “нет” на любой из вопросов (см. рис. 2.2 ) говорит о том, что у Эндрю Джонса нет соответствующего навыка, необходимого для выполнения вычитания, а ответ “да” - что этот навык есть. Получив сумму весовых факторов для отрицательных ответов, можно узнать, как велики у Эндрю Джонса трудности при изучении вычитания, например:

S1$ (2) да 0
S2$ (1) нет 1
S3$ (1) нет 1
Общий весовой фактор = 2

2_2.gif (2344 bytes)

Рис.2.2. Ввод данных

Итоговое число, оценивающее трудности при изучении вычитания у Эндрю Джонса, называется общим весовым фактором. Общий весовой фактор можно использовать, чтобы определить, есть ли у Эндрю Джонса трудности при изучении вычитания и как они велики, т.е. это еще и некоторая количественная оценка. Общий весовой фактор в последнем примере при ответах “нет” на все вопросы имел бы максимальное значение, которое указывало бы на очень серьезные трудности при изучении вычитания. В примере с автобусом наихудший результат получился бы в том случае, если бы пришлось ждать экспресс, всю дорогу до работы стоять и при этом опоздать на работу на час. Рассматривать наихудшие последствия принимаемых решений всегда полезно.

Правила и выводы

Как отмечалось в первой главе, известные факты применяются к возникшей ситуации в соответствии с правилами. Правила в системе ИИ помогают верно оценить данные и достичь цели, например, узнать, есть ли у ребенка трудности при изучении арифметики. Вернемся к примеру с вычитанием и сформулируем правило, позволяющее оценить трудности, возникающие при его изучении:

ЕСЛИ общий весовой фактор больше 1,
ТО у PERSON есть трудности при изучении вычитания.

Результирующий весовой фактор у Эндрю Джонса равен 2, и в соответствии с приведенным выше правилом можно сделать вывод - Эндрю Джонс действительно испытывает трудности при изучении вычитания. Правило обеспечило практическое применение накопленных данных. Значение 1 в правиле называется граничным уровнем решения.
Ранее уже говорилось, что методы ИИ делают программирование более лёгким и гибким, рассмотрим теперь, каким образом это достигается. Вместо того чтобы формулировать правило, можно было бы воспользоваться фактами, охватывающими все возможные варианты, при которых общий весовой фактор больше 1. Ниже приводятся факты, которые, будем надеяться, удовлетворяют поставленному условию, и результирующие факторы для них. Ребёнок не умеет вычитать, если :

1. (S1$=нет) И (S2$=да) И (S3$=да)
общий весовой фактор = 2
2. (S1$=нет) И (S2$=да) И (S3$=нет)
общий весовой фактор = 3
3. (S1$=нет) И (S2$=нет) И (53$=да)
общий весовой фактор = 3
4. (S1$=нет) И (S2$=нет) И (S3$=нет)
общий весовой фактор = 4
5. (S1$=да) И (S2$= нет) И (S3$=нет)
общий весовой фактор = 2

Отметим, что для всех совокупностей фактов общий весовой фактор больше 1. В списке представлено пять различных совокупностей фактов, а сформулированное правило уже включает в себя все эти факты, и их не надо специально программировать. Очевидно, что намного легче запрограммировать одно правило, включающее все факты, чем несколько отдельных фактов, применение которых ограничено. Если бы не было правил, человек все еще стоял бы на углу улицы и анализировал бы огромное число фактов и связанные с ними данные, не зная, что ему делать. Ему не надо было бы думать об автобусе, поскольку он никогда бы не дошел до остановки!
До сих пор разработка программы состояла из:
1. Определения целей.
2. Определения фактов, имеющих отношение к этим целям.
3. Получения данных, соответствующих фактам, характерным для заданной
ситуации или объекта.
4. Оценки данных, используя правила и механизм вывода.
Процесс достижения целей описанным способом называется прямой цепочкой рассуждений, т. е. цепочкой от данных к логическому заключению. Он позволяет логически переходить от одного шага к другому, как представлено на рис. 2.1 .

Верификация целей механизмом вывода

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

ЕСЛИ за выполнение простого арифметического примера на вычитание ребенок
получил самую низкую оценку (единицу),
ТО общий весовой фактор по вычитанию будет у него больше 1.

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

5 REM Оценка за пример на вычитание
10 INPUT “Введите оценку за пример ”;GT
15 REM GS — общий весовой фактор
20 INPUT “Введите общий весовой фактор ”; GS
25 G=GS - GT
30 IF GO THEN VER=1

Ещё одним примером обратной цепочки рассуждений может быть выбор механизма вывода новых данных для подтверждения заключения, которое изначально предполагается верным. Как следует из самого названия, обратная цепочка рассуждений идет в сторону, противоположную прямой цепочке, т.е. от заключения к данным. Обратная цепочка возникает после того, как цель уже достигнута. Рис. 2.3 иллюстрирует прямую и обратную цепочки рассуждений в рассмотренной модели системы ИИ.
Если установлено, что Эндрю Джонс не умеет вычитать, механизм вывода проверит, получил ли он также самый низкий балл за пример на вычитание. Если это так, то цель достигнута верно. Если же оценка Эндрю Джонса за пример на вычитание не очень низкая, значит, для достижения цели не хватает данных и необходимо сделать дополнительные шаги для её повторной проверки, т.е. надо устранить противоречие: с одной стороны, Эндрю Джонс не знает некоторых правил вычитания, а с другой стороны, он имеет удовлетворительную оценку за пример на вычитание.

Упрощение

В мозгу человека, механизм упрощения руководит поиском дополнительных правил для верификации цели до тех пор, пока не будут проверены все возможные способы её достижения. Мозг хранит огромные объемы информации, поэтому для верификации одной цели может существовать много правил, каждое из которых в любой момент может включиться в работу.
Механизм упрощения программы позволяет компьютеру пропустить или обработать какую-то часть данных из базы знаний в зависимости от её важности для достижения определенной цели. Если Эндрю Джонс получил очень хороший балл за простой пример на вычитание, то механизм упрощения пропустит информацию из базы знаний, нужную для оценки арифметических навыков. Но если Эндрю Джонс не справился с примером, то механизм упрощения заставит программу обратиться к этой информации. Такой подход позволяет не рассматривать пути, не ведущие к достижению цели.
Напомним, что механизм упрощения можно представить с помощью набора правил, используемых при работе ( см. гл. 1 ). Для примера с вычитанием можно воспользоваться, скажем, следующим правилом:

ЕСЛИ отметка за пример на вычитание превышает результирующий фактор на 2,
ТО оценивать трудности при вычитании не нужно

На языке Бейсик это правило можно запрограммировать следующим образом:

2_3.gif (3488 bytes)

Рис.2.3. Конфигурация и работа системы ИИ

110 INPUT"Отметка за пример на вычитание"; SS
115 INРUТ"Результирующий весовой фактор"; СL
120 REM если отметка за пример превышает общий
121 REM весовой фактор на 2 или больше,
122 REM не оценивать трудности при вычитании
125 G=SS-(GL+2)
130 IF G=0 THEN GOTO 140
135 GOSUB 1500
140 REM трудности с другими действиями арифметики
145...
.
.
1500 REM оценить трудности при вычитании

И в мозгу человека, и в системах искусственного интеллекта механизм упрощения просто игнорирует ненужные и не относящиеся к делу рассуждения. Правило упрощения для примера с поездкой на работу можно сформулировать так:

ЕСЛИ идет сильный дождь, ТО следует проигнорировать любую дополнительную информацию о местном автобусе или экспрессе и воспользоваться первым же подходящим автобусом.

О том, как обеспечить программу ИИ необходимой информацией, мы поговорим в следующей главе .


Часть 1 "Человеческий и машинный интеллект". Глава 3

ГЛАВА 3

ОБЩИЕ СВЕДЕНИЯ ОБ ЭКСПЕРТНЫХ
СИСТЕМАХ

В предыдущей главе рассматривалось решение задач в системе искусственного интеллекта. Для достижения целей система использовала правила, факты, механизмы вывода и упрощения. Конкретные сферы человеческой деятельности, в которых могут применяться системы ИИ, называются предметными областями. Примерами предметных областей могут служить оценка эффективности обучения и выбор маршрута автобуса. На первый взгляд кажется, что создание единой системы ИИ, охватывающей все предметные области, возможно. Это - глубокое заблуждение. Прежде всего следует учитывать, что для решения всех возможных задач во всех предметных областях необходимо бесконечное число фактов и правил. Даже если бы такая система была создана, понадобилось бы длительное время на наполнение ее знаниями. Более того, сегодня еще нет вычислительной машины, способной хранить и обрабатывать такой объем информации, поэтому пока нужно ограничиться только проблемными областями, в которых объём информации не слишком велик, и ее можно обработать в программе. Хотя в настоящее время возможности технологии ИИ и ограничены, все же, как видно из примеров предыдущей главы, уже сегодня практическое применение систем ИИ реально, и для узких проблемных областей можно разрабатывать работоспособные системы ИИ. Примеры таких проблемных областей приведены на рис. 3.1 .
Исходя из практических соображений для работы надо выбирать проблемные области, в которых объем информации поддается управлению. Система ИИ, созданная для решения задач в конкретной проблемной области, называется экспертной системой. Источником знаний для наполнения экспертных систем служат эксперты в соответствующей предметной области. Весовые факторы, о которых говорилось в гл.2 , тоже выбираются не случайно, они представляют собой знания, полученные в результате исследования проблемной области. Работа всех экспертных систем основана строго на экспертной информации, полученной в конкретной проблемной области.

3_1.gif (3800 bytes)

Рис.3.1. Примеры предметных областей

Эвристические правила

Допустим, что собрана группа экспертов для решения следующей задачи: в реке обнаружены пятна нефти, сбросить которую могло любое из предприятий, расположенных у реки. Цель состоит в том, чтобы точно узнать, какое предприятие сбрасывает нефть, и устранить последствия загрязнения реки. Прежде всего экспертная система, решающая такую задачу, должна уметь выполнять расчёты.
Приблизительно определить место сброса нефти можно, например, используя время растворения нефти в воде, направление и скорость течения реки и т.д. После того как эта информация собрана и определено место сброса нефти (скажем, с точностью до мили), можно воспользоваться специальными правилами, например правилами Э1 иЭ2, описанными ниже, для точного определения виновника. Эти правила называются эвристическими. Их главное отличие от правил, рассмотренных в предыдущих главах, состоит в следующем: эвристические правила формулируются не на основании обычных, признанных знаний, а на основании практических знаний эксперта.

Правило Э1:
ЕСЛИ в верховье реки в пределах одной мили от вычисленного места сброса нефти находится
одно предприятие,
ТО это предприятие и сбросило нефть в реку.
Правило Э2:
ЕСЛИ в верховье реки в пределах одной мили от вычисленного места сброса нефти расположено
несколько предприятий,
ТО предполагается, что нефть сбросило предприятие, использующее наибольшее
количество нефти.

В гл. 1 и 2 описывалось, как упрощение повышает эффективность мышления, сокращая число рассматриваемых вариантов при достижении цели. В экспертных системах механизм упрощения, использующий эвристические правила, называется эвристическим механизмом поиска. На рис. 3.2 приведен пример эвристического механизма поиска, похожий на механизм упрощения, описанный в гл. 2 .

3_2.gif (2745 bytes)

Рис.3.2. Механизм упрощения в экспертной системе

После того как эвристический механизм поиска выделил наиболее вероятного виновника загрязнения воды, для проверки выдвинутой гипотезы экспертная система может использовать другой набор правил. Прежде всего будут рассматриваться наиболее уязвимые места в системе нефтепровода предприятия. Здесь может оказаться полезным такое эвристическое правило:

ЕСЛИ давление в фабричном нефтепроводе на участке 1 меньше давления воды в реке,
ТО следует проверить участок номер 32.

Такое правило может сформулировать только человек, практически знающий именно это предприятие, т.е. оно эвристическое.

Рабочая область

Задача зачастую бывает слишком сложна для одной экспертной системы. Например, при решении задачи с нефтью одна экспертная система способна найти место сброса, но для определения состава нефти нужен уже другой тип экспертизы. Экспертная система, определяющая состав нефти, должна взять часть информации из экспертной системы поиска места сброса нефти. Затем, выполнив свои вычисления и используя для решения задачи эвристический механизм поиска, она в конечном счете может порекомендовать оптимальное химическое вещество, нейтрализующее нефть данного сорта в конкретных условиях. Обмен информацией между экспертными системами осуществляется через рабочую область. Рабочая область - это место в памяти ЭВМ, куда каждая экспертная система помещает свою информацию для использования другой экспертной системой.
Рабочая область представляет собой информационную структуру, доступную всем совместно работающим экспертным системам. Дисциплина использования этой информации каждой экспертной системой зависит от конкретного приложения. Рабочая область подобна школьной доске, на которой секретарь, знающий о болезни учителя, может написать сообщение о слиянии двух классов на один урок. Для совместно работающих экспертных систем идея рабочей области, в которой можно оставить, просмотреть или изменить информацию, очень важна.

Разработать экспертную систему может каждый

При создании экспертной системы группа, состоящая из эксперта и инженера по знаниям, собирает факты, правила и эвристические правила, относящиеся к проблемной области, а затем включает их в программу ИИ. Читатель, возможно, подумал, что его это не касается, он же не инженер по знаниям. Однако тех понятий ИИ, которые были даны в первых двух главах, вполне достаточно для того, чтобы начать разработку своей собственной экспертной системы. Приняв предложенные концепции программирования, можно надеяться на успех еще до окончания чтения этой книги. Тот, кто знает, как ремонтировать автомобили, готовить еду или плавать, может стать инженером по знаниям, способным разработать экспертную систему в одной из этих или сходных проблемных областях.
Во второй части книги мы рассмотрим некоторые методы разработки экспертных систем на персональных компьютерах. В третьей части будет подробно описан ряд известных приложений экспертных систем. Приведенные примеры можно будет использовать как прототипы для создания своих собственных экспертных систем.


Часть 1 "Человеческий и машинный интеллект". Глава 4

ГЛАВА 4

ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

Общение человека и компьютера - это задача, над которой работают множество исследователей. Конечная цель (до которой еще очень далеко) заключается в том, чтобы пользователи могли “разговаривать” с компьютером на естественном языке, например русском, и компьютер отвечал им на том же языке. Можно надеяться, что когда-нибудь в простой беседе люди будут объяснять компьютеру задачу и он сможет ответить им.
Может показаться, что это просто, но только потому, что мы с детства привыкли разговаривать и слышать человеческую речь и воспринимаем как само собой разумеющееся большинство сложных свойств языка. Те, кому доводилось работать с языком Бейсик или другим языком программирования, знают, насколько важно правильно составить программу, чтобы заставить компьютер сделать то, что нужно. Компьютеры умны ровно настолько, насколько такими их сделали люди: поскольку сами по себе они не умеют “думать”, необходимо дать им очень точные инструкции о том, какие действия они должны выполнять вплоть до мельчайших шагов. Человек рождается “запрограммированным” на изучение языка; для него половина дела уже сделана. Чтобы компьютер понимал язык, нужно не только разбить язык на его основные элементы и ввести эту информацию в компьютер, но сначала надо разработать компьютеры и программы, которые смогут воспринимать эту информацию. Для того чтобы общение между человеком и компьютером стало возможным, нужно создать систему обработки естественного языка. Цель настоящей главы - дать некоторое представление об этом важном и увлекательном аспекте искусственного интеллекта.
Давайте посмотрим, насколько трудна эта задача. Представим себе, что есть робот, обладающий искусственным интеллектом, который умеет чинить автомобили.
Ему можно дать одну из следующих команд:
1. Почини машину около дома со спущенной покрышкой.
2. Почини машину около дома с красной занавеской.
Хотя первое предложение интерпретируется двояко, каждый может уловить его смысл - все знают, что у дома не может быть спущенной покрышки. Человек замечает неточность, но ещё важнее то, что он её в уме исправляет; ведь очевидно - спущенная покрышка у машины, а не у дома. Роботу нужно знать нечто большее, чем только значения слов и их связь друг с другом, иначе ему придется искать дом со спущенной покрышкой. Так как оба предложения имеют одинаковую структуру, робот должен знать грамматику, а также уметь соотносить описания и объекты. Важно сознавать, что правила человеческого языка имеют смысл только для людей, а роботу, чтобы понимать, о чем мы говорим, необходимы специальные правила.
Искусственный интеллект, которым обладает наш робот, должен уметь анализировать предложения в их связи с другими предложениями. Возьмём для примера такие два предложения:
1. Джон пьет молоко.
2. Затем он надевает пальто.
Слово “он” во втором предложении относится к слову “Джон” в первом предложении. Без первого предложения второе не имело бы смысла. Все естественные языки называются контекстуальными языками. Иначе говоря, чтобы полностью понять второе предложение, необходимо знать первое, а это и есть контекстуальная зависимость. Языки, в которых интерпретация предложения может быть выполнена без знания других предложений, называются контекстуально независимыми, т.е. безразличными к последовательности событий и дейст вий.
Для того чтобы заставить компьютер понимать человеческую речь, необходимо построить анализатор естественного языка. Основными функциями анализа языка являются:
1. Лексический анализ (анализ слов).
2. Синтаксический анализ (анализ порядка слов в предложении с учётом правил грамматики).
3. Семантический анализ (анализ значения предложения самого по себе и в его связи с другими предложениями).

Лексический анализ

Деление предложения на слова с использованием знаков препинания (при написании) или пауз (в разговоре) называется лексическим анализом. Кроме того, в составе слов можно выделить корни, приставки и окончания. Например, очень простое слово “дорога” можно последовательно разделить на:
дорога (слово)
дорог (корень)
а (окончание).
Слово “предлог” состоит из:
пред (приставка)
лог (корень).
Набор слов можно взять из словаря, но объяснить компьютеру их смысл в общем контексте - более сложная задача.

Синтаксический анализ

Для того чтобы научить компьютер воспринимать человеческий язык, необходимо прежде всего научить его выполнять разбор предложения. Надо перевести правила грамматики и синтаксиса в форму, которую компьютер мог бы понять.
Обычно предложение (П) состоит из группы существительного (ГС) и группы глагола (ГГ), что можно представить как:
П —> ГС,ГГ
 Группа существительного может быть разбита на определение (например, прилагательное, притяжательное местоимение и т.д.) и существительное:
ГС —>0,С
Группу глагола можно разбить на глагол, за которым следует дополнение, выраженное существительным (т.е. другая группа существительного) :
ГГ —>Г,ГС
Группа существительного может быть представлена единственным членом:
ГС —>С
Графически синтаксическая структура предложения может быть представлена в виде “дерева”. Например, предложение: “Старый дровосек рубит деревья” имеет структуру, показанную на рис.4.1 . Предложение разбивается на слова, а слова классифицируются по типу. Слово “старый” - это определение (О), выраженное прилагательным, “дровосек” - существительное (С), “рубит” - глагол (Г) и “деревья” - существительное (С).

Семантический анализ

Разбив предложение на составные части, компьютер проводит его семантический анализ, т.е. пытается понять его смысл. В системах искусственного интеллекта применяется некоторая совокупность правил, позволяющая компьютеру понять смысл предложения:
О С Г С
Старый дровосек рубит деревья
Для интерпретации предложения в базе знаний семантического анализатора должен быть следующий набор правил.

Правило 1:
ЕСЛИ определение стоит на первом месте и за ним идет существительное, ТО
существительное является подлежащим.
Правило 2:
ЕСЛИ за подлежащим идет глагол, ТО этот глагол является сказуемым и поясняет,
что делает подлежащее.
Правило 3:
ЕСЛИ за подлежащим идет сказуемое, а за ним следует существительное, ТО это
существительное является дополнением.
Правило 4:
ЕСЛИ предложение имеет следующий порядок слов: подлежащее, глагол, дополнение,
ТО вся фраза говорит о том, что подлежащее делает (действие, выраженное сказуемым)
по отношению к дополнению.

4_1.gif (2963 bytes)

Рис. 4.1. Синтаксическое дерево предложения

4_2.gif (4025 bytes)

Рис.4.2. Процессор естественного языка

Поясним сказанное на примере. Предположим, что система искусственного интеллекта должна решить следующую задачу: узнать, что делает дровосек и что является объектом его действия. Семантический анализатор обращается к правилу 1 , с помощью которого определяет, что слово “дровосек” - это подлежащее. С помощью правила 2 определяется, что слово “рубит” - это сказуемое. Объект действия, выраженный словом “дерево”, устанавливается с помощью правил 3 и 4 . Данный пример показывает, как процессор естественного языка обрабатывает или “понимает” предложение, используя лексические, синтаксические и семантические правила своей базы знаний.
Процессор естественного языка может служить промежуточным звеном между пользователем и другой системой искусственного интеллекта, позволяя человеку устно общаться с компьютером ( см. рис.4.2 ). По существу, обработка естественного языка может освободить пользователя компьютера от необходимости изучать сложные языки программирования. Если удастся создать программы, которые позволят компьютеру и пользователю общаться на естественном языке, то будет сделан крупнейший шаг на пути создания подлинно “интеллектуального” компьютера.


Часть 2 "Механизм вывода: средство машинного мышления". Глава 5

Часть 2 МЕХАНИЗМ ВЫВОДА : СРЕДСТВО МАШИННОГО
 МЫШЛЕНИЯ

• Подробные сведения о проектировании и использовании экспертных систем

• Средства построения экспертных систем

ГЛАВА 5

ПРЯМАЯ ЦЕПОЧКА РАССУЖДЕНИЙ

Приступим к разработке реальной экспертной системы, предназначенной для решения задач определённого типа. Задачи каждого типа решаются наиболее оптимальными для них методами, и, следовательно, экспертная система должна быть ориентирована на строго конкретную предметную область, иначе она будет бесполезна. Ремонтируя автомобиль, не берут двуручную пилу, а гаечным ключом не рубят деревья.
Рассмотрим такую ситуацию: во время движения у автомобиля перегревается двигатель. Как отреагирует на это водитель? Конечно, он занервничает. Многие с этим сталкивались жарким днём в час пик. Сформулируем задачу в более общем виде. Имеет место ситуация (перегрев двигателя), требуется предсказать её последствие (заглохнет ли мотор ?). Итак, прежде всего зафиксировано возникновение определённого состояния (перегрев двигателя), а затем в работу включаются относящиеся к нему правила:

Правило 1:
ЕСЛИ двигатель перегрелся, ТО мотор заглохнет.

Правило 2:
ЕСЛИ мотор заглохнет, ТО это приведет к денежным затратам и позднему возвращению домой.

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

Пример прямой цепочки рассуждений

Для экспертной системы фондовой биржи можно было бы воспользоваться, например, такими правилами:

10 ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ = ПАДАЮТ,
ТО УРОВЕНЬ ЦЕН НА БИРЖЕ = РАСТЕТ
20 ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ = РАСТУТ,
ТО УРОВЕНЬ ЦЕН НА БИРЖЕ = ПАДАЕТ
30 ЕСЛИ ВАЛЮТНЫЙ КУРС ДОЛЛАРА = ПАДАЕТ,
ТО ПРОЦЕНТНЫЕ СТАВКИ = РАСТУТ
40 ЕСЛИ ВАЛЮТНЫЙ КУРС ДОЛЛАРА = РАСТЕТ,
ТО ПРОЦЕНТНЫЕ СТАВКИ = ПАДАЮТ

Предположим, создана фирма, дающая на основе этих правил консультации в области биржевых операций. Пусть первый клиент фирмы сообщил, что валютный курс доллара падает по отношению к основным валютам других стран, и попросил совета. Цель, очевидно, заключается в выборе правильного поведения на бирже, но останется ли при этом клиент в выигрыше, зависит от пока еще не определённых условий. Напомним, что в системе, реализующей прямую цепочку рассуждений, прогнозы выполняются следующим образом: если возникшая ситуация удовлетворяет условной части правила (части ЕСЛИ), делается логический вывод, определённый в констатирующей части (части ТО). Для приведённого примера необходимо, чтобы в условной части какого-либо правила содержалось бы условие:

ВАЛЮТНЫЙ КУРС ДОЛЛАРА ПАДАЕТ.

Такое условие содержится только в правиле 30 :

30 ЕСЛИ ВАЛЮТНЫЙ КУРС ДОЛЛАРА = ПАДАЕТ, ТО ПРОЦЕНТНЫЕ СТАВКИ = РАСТУТ

В соответствии с этим правилом можно сделать вывод о росте процентных ставок. О ВАЛЮТНОМ КУРСЕ ДОЛЛАРА упоминается еще, в правиле 40 . Но условие, записанное в этом правиле,

40 ЕСЛИ ВАЛЮТНЫЙ КУРС ДОЛЛАРА = РАСТЕТ

не соответствует исходному состоянию падения валютного курса доллара, и поэтому правило 40 в дальнейших рассуждениях не будет участвовать. Рассуждения ещё не закончены, так как правило 30 в свою очередь порождает новую ситуацию:

ПРОЦЕНТНЫЕ СТАВКИ = РАСТУТ

Необходимо проверить, не приведёт ли она к другим выводам. Видно, что в правиле 10

10 ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ = ПАДАЮТ, ТО УРОВЕНЬ ЦЕН НА БИРЖЕ = РАСТЕТ

подходящего условия нет, а в правиле 20

20 ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ = РАСТУТ, ТО УРОВЕНЬ ЦЕН НА БИРЖЕ = ПАДАЕТ

есть. Возникает новая ситуация:

УРОВЕНЬ ЦЕН НА БИРЖЕ = ПАДАЕТ

и рассуждения продолжаются.
Ещё раз выполняется проверка всех правил, но ни в одном правиле в условной части не упоминается уровень цен на бирже, и на этом рассуждения заканчиваются. Клиенту можно сказать следующее:"Когда обменный курс доллара падает, растут процентные ставки и уровень цен на бирже падает".
В реальной жизни такое заключение потребовало бы более сложных правил, однако система, реализующая прямую цепочку рассуждений (впрочем, как и другие системы), оперирует только теми данными, которые есть в базе знаний.
Рассмотренный пример иллюстрирует работу типичной системы прямых рассуждений:
1. Система содержит описание ряда ситуаций.
2. Для каждой ситуации система ищет в базе знаний правила, в условной части которых содержится соответствующее условие.
 3. В соответствии с констатирующей частью (частью ТО) каждое правило может генерировать новые ситуации, которые добавляются к уже существующим.
4. Система обрабатывает каждую вновь сгенерированную ситуацию. При наличии хотя бы одной такой ситуации выполняются действия, начиная с пункта 2. Рассуждения заканчиваются, когда больше нет необработанных ситуаций.

База знаний

Покажем на примере, как эксперт может вводить правила непосредственно в базу знаний и использовать их для принятия решений во время биржевых операций. Все необходимые для работы переменные сведем в таблицу ( см. рис. 5.1 .) Применяя содержащиеся в таблице переменные, относящиеся к фондовой бирже, правила можно записать следующим образом:

10 ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK = РАСТЕТ
20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK = ПАДАЕТ
30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST = РАСТЕТ
40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ
50 ЕСЛИ FEDINT = ПАДАЕТ И FEDMON -ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ

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

Имя переменной | Значение
INTEREST DOLLAR FEDINT FEDMON STOCK | Изменение процентных ставок (рост или падение) Валютный курс доллара Процентные ставки федерального резерва Обращение денег федерального резерва (т.е. добавление или изъятие резервов) Изменение уровня цен на бирже

Рис. 5.1. Таблица имен переменных

Работа с базой знаний

После того как база знаний создана, с ней можно работать. Для работы нужно построить еще несколько полезных для решения поставленной задачи таблиц. По сути дела эти таблицы просто одна из форм представления баз знаний. Ниже все используемые структуры данных описаны подробно. На рис. 5.2 показана база знаний со всеми входящими в нее структурами данных.
 Во-первых, база знаний содержит список переменных условия, т.е. перечень переменных, входящих в условную часть каждого правила. Список этих переменных приводится на рис. 5.3 . Числа (от 1 до 18), расположенные слева от имён переменных, - это индексы элементов массива, содержащего эти имена. Для каждого правила резервируется 4 элемента массива. Элементы массива, не используемые правилом, остаются пустыми.

Правило 10 ЕСЛИ INTEREST=ПАДАЕТ,
ТО STOCK=РАСТЕТ

Правило 20 ЕСЛИ INTEREST "РАСТЕТ,
TO STOCK = ПАДАЕТ

Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST=РАСТЕТ
Правило 40 ЕСЛИ DOLLAR = РАСТЕТ, ТО INTEREST= ПАДАЕТ

Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON = ДОБАВИТЬ,
ТО INTEREST= ПАДАЕТ

         1 INTEREST
2
3
4
5 INTEREST
6
7
8
9 DOLLAR
10
11
12
13 DOLLAR
14
15
16
17 FEDINT
18 FEDMON 		INTEREST
DOLLAR
FEDINT
FEDMON
————————
Список переменных условия

————————
Указатель переменных условия
————————————————
 База знаний

 ———————— Список переменных
условия 		———————————
Очередь переменных логического вывода

Рис.5.2. Структуры данных базы знаний экспертной системы фондовой биржи

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ, ТО STOCK = РАСТЕТ Правило 20 ЕСЛИ INTEREST=РАСТЕТ, ТО STOCK=ПАДАЕТ Правило 30 ЕСЛИ DOLLAR=ПАДАЕТ, ТО INTEREST = РАСТЕТ Правило 40 ЕСЛИ DOLLAR = РАСТЕТ, ТО INTEREST = ПАДАЕТ Правило 50 ЕСЛИ FEDINT = ПАДАЕТ И FEDMON = ДОБАВИТЬ, TO INTEREST = ПАДАЕТ | 1 INTEREST 2 3 4 5 INTEREST 6 7 8 9 DOLLAR 10 11 12 13 DOLLAR 14 15 16 17 FEDINT 18 FEDMON
——————————————— База знаний | ———————— Cписок переменных логического вывода

Рис.5.3. Список переменных условий

Поясним использование списка переменных условия на примере. Предположим, необходимо выяснить влияние на биржу падения курса доллара. Падение курса доллара можно выразить следующим образом::

DOLLAR = ПАДАЕТ

Переменная DOLLAR содержится в условной части правил 30 и 40. Она помещается в структуру данных, называемую очередью переменных логического вывода (см. рис. 5.4) .Поясним назначение очереди переменных вывода. В быту очередь может быть, например, в магазине. Принцип работы очереди - “первым пришел - первого обслужили”. Покупатели встают в конец очереди, очередь продвигается вперед, их обслуживают, и они покидают очередь. Почему же структура данных для хранения переменных логического вывода называется очередью ? Возьмем, например, переменную DOLLAR и посмотрим, в каком из правил, содержащих эту переменную, есть условие DOLLAR = ПАДАЕТ. Такое условие есть в правиле 30:

30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST =РАСТЕТ

срабатывает часть ТО этого правила, и текущей становится новая переменная условия INTEREST. После того как отработаны все правила, содержащие переменную DOLLAR, надо посмотреть, к чему приведет повышение процентных ставок. Для этого придется работать с новой переменной INTEREST, которая и помещается в очередь переменных логического вывода после переменной DOLLAR ( см.рис. 5.5 ).

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK = РАСТЕТ
Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ
Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST=РАСТЕТ
Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ
Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON = ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ

DOLLAR

——————————————— База знаний
————————
Очередь переменных
логического вывода

Рис.5.4. Очередь переменных логического вывода

Переменная DOLLAR после того, как отработаны все правила, содержащие ее в условной части, удаляется из очереди переменных логического вывода (см. рис. 5.6).

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ, ТО STOCK=РАСТЕТ Правило 20 ЕСЛИ INTEREST = РАСТЕТ, ТО STOCK=ПАДАЕТ Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ, ТО INTEREST=РАСТЕТ Правило 40 ЕСЛИ DOLLAR = РАСТЕТ. ТО INTEREST = ПАДАЕТ Правило 50 ЕСЛИ FEDINT = ПАДАЕТ И FEDMON = ДОБАВИТЬ, ТО INTEREST= ПАДАЕТ | 5_5.jpg (5817 bytes)
——————————————— База знаний | ———————— Очередь переменных логического вывода

Рис.5.5. Очередь переменных логического вывода

Выяснив последствия падения курса доллара, посмотрим, что же произойдет при повышении процентных ставок. Для этого из начала очереди выбирается переменная INTEREST, которая обрабатывается аналогично переменной DOLLAR. Когда очередь переменных логического вывода опустеет, прямая цепочка рассуждений закончится и задача будет решена.
Рассмотрим назначение списка переменных и указателя списка переменных условия. Список переменных содержит значения переменных и признак их инициализации. До начала диалога с программой признак инициализации равен NI и всем переменным присвоены пустые значения (см.рис. 5.7). В процессе диалога с системой переменным присваиваются значения, а значение признака меняется на I. На рис. 5.8 показан список переменных после того, как переменным DOLLAR и INTEREST присвоены значения.
В указателе переменных условия хранится информация о правиле, с которым система работает в данное время. Указатель состоит из номера правила и номера условия в правиле, поскольку условная часть правила в общем случае может содержать несколько условий. Система использует указатель, чтобы отследить текущее положение в цепочке рассуждений.

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK=РАСТЕТ
Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ
Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST=РАСТЕТ
Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ
Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON-ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ

INTERSET

——————————————— ————————
 Очередь
База знаний переменных
логического вывода

Рис.5.6. Очередь переменных логического вывода

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK=РАСТЕТ
Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ
Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST=РАСТЕТ
Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ
Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON-ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ
INTERSET
DOLLAR
FEDINT
FEDMON
 | Значение
NI |
NI |
NI |
NI |
———————————————
База знаний 		————————
Cписок переменных
логического вывода

Рис. 5.7. Список переменных

Помните, работа с условной частью правила начинается с выбора переменной из очереди переменных логического вывода. Предположим, что в начале очереди стоит переменная DOLLAR, т.е. надо определить последствия изменения курса доллара. Правило 30 - первое, в условной части которого содержится переменная DOLLAR, оно и включается в работу. Указатель переменных условия устанавливается на правило 30 (см. рис. 5.9).
 В действительности указатель устанавливается на определенную запись в списке переменных условия. В этой записи имеется текущая переменная условия (в данном случае DOLLAR), стоящая в начале очереди переменных логического вывода.
Прежде чем перейти к примеру, обобщающему работу со всеми перечисленными структурами данных, посмотрим на них с другой точки зрения. На протяжении всей книги говорится, что искусственный интеллект - это имитация мыслительного процесса человека, решающего определенные задачи.

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK=РАСТЕТ
Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ
Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST=РАСТЕТ
Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ
Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON-ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ
INTERSET
DOLLAR
FEDINT
FEDMON
 | Значение
I | РАСТЕТ
I | ПАДАЕТ
NI |
NI |
———————————————
База знаний 		————————
Cписок переменных
логического вывода

Рис.5.8. Список переменных

5_9.jpg (42965 bytes)

Рис. 5.9. Указатель переменных условия

Соотнесем введенные структуры данных с особенностями, присущими человеческому мышлению.
Человек, решая задачу, которая заключается в прогнозировании последствий некоторых ситуаций, прежде всего определяет все условия, способные повлиять на конечный результат (список переменных). Затем всем переменным, о которых есть информация, присваиваются значения, т.е. задаются исходные условия (например, DOLLAR = ПАДАЕТ). Из всех правил, имеющих отношение к задаче, выбираются правила с исходными условиями (список переменных условия). Человек формирует в уме из переменных условия очередь переменных вывода и, перебирая соответствующие правила, обдумывает возможные логические выводы (указатель переменных условия).
Конечно, человек выполняет все эти действия автоматически, очень быстро и не так прямолинейно. Очень часто он даже не осознает, что обрабатывает информацию и делает необходимые выводы. Например, когда человек видит, что показатель нагрева двигателя в автомобиле подходит к максимальной отметке, он немедленно делает вывод о том, что мотор может заглохнуть. Причина быстрой работы человеческого мозга - одновременная работа его нейронов. Используя описанные структуры данных и алгоритм прямой цепочки рассуждений, на компьютере также можно быстро решать сложные задачи, содержащие большое количество переменных. Экспертная система, в которой продуманные структуры данных сочетаются с эффективным алгоритмом логического вывода, вполне способна делать осмысленные заключения.

Пример прямой цепочки рассуждений

Для примера воспользуемся базой знаний, разработанной для фондовой биржи и спросим систему прямых рассуждений:

Что будет, если добавить в банковскую систему средства из федерального резервного
банка? Другими словами, FEDMON = ДОБАВИТЬ

Система обратится к базе знаний, содержащей списки, указатели, очереди и расположенной на внешнем носителе ( см. рис. 5.10 ). Поскольку значение переменной FEDMON изначально задано, она помещается в очередь переменных логического вывода. Просмотрев список переменных условия, система определяет, что первый раз переменная FEDMON встречается в условной части правила 50. Указатель переменных условия устанавливается на первое условие правила 50. В списке переменных условия для правила 50 содержатся имена двух переменных FEDINT и FEDMON. Обратившись к списку переменных, система определяет, что переменной FEDMON присвоено значение ДОБАВИТЬ, а значение переменной FEDINT не задано (признак инициализации равен NI). Система запросит у пользователя значение переменной FEDINT:

Растет или падает уровень процентных ставок Федерального резервного банка ?

Предположим, что пользователь ответил: “ПАДАЕТ”; это значение присваивается переменной FEDINT и заносится в список переменных. Номер условия в указателе переменных условия увеличивается и становится равным 2. Теперь все переменные условной части правила 50 проинициализированы и система может приступить к ее анализу.

Правило 10 ЕСЛИ INTEREST=ПАДАЕТ,
ТО STOCK=РАСТЕТ

Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ

Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST=РАСТЕТ

Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ

Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON-ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ

         1 INTEREST
2
3
4
5 INTEREST
6
7
8
9 DOLLAR
10
11
12
13 DOLLAR
14
15
16
17 FEDINT
18 FEDMON
INTERSET
DOLLAR
FEDINT
FEDMON
 | Значение
NI |
NI |
NI |
I | ДОБАВИТЬ
————————
Список переменных условия
50 1
Номер
правила 		Номер
условия
————————
Указатель переменных условий

FEDMON

————————————————
 База знаний

         ——————— Список переменных
условия 		———————————
Очередь переменных
логического вывода

Рис. 5.10. Система, реализующая прямую цепочку рассуждений

Истинны оба условия: и FEDINT=ПАДАЕТ и FEDMON=ДОБАВИТЬ, поэтому, согласно части ТО правила, переменной INTEREST присваивается значение ПАДАЕТ. Переменная INTEREST помещается в очередь переменных логического вывода, поскольку она может стать новым условием (см. рис.5.11) и соответствующим образом изменяется список переменных (см. рис. 5.12).

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK=РАСТЕТ

Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ

Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST =РАСТЕТ

Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ

Правило 50
    ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON = ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ

1 INTEREST
2
3
4
5 INTEREST
6
7
8
9 DOLLAR
10
11
12
13 DOLLAR
14
15
16
17 FEDINT
18 FEDMON

FEDMON
INTERSET
——————————————— ———————— ————————
 Cписок Очередь
База знаний переменных переменных
логического вывода логического вывода

Рис.5.11. Очередь переменных логического вывода

Правило 10
    ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK=РАСТЕТ Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST =РАСТЕТ Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON = ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ

INTEREST

DOLLAR
FEDINT
FEDMON

 | Значение
I | ПАДАЕТ
NI |
I | ПАДАЕТ
I | ДОБАВИТЬ
——————————————— ————————
 Список переменных
База знаний условия

Рис.5.12. Список переменных

Затем система проверяет, нет ли в остальных правилах переменной FEDMON. Если переменная FEDMON не встречается ни в одном из оставшихся правил, она удаляется из очереди переменных логического вывода. Первой в очереди становится переменная INTEREST. Заново анализируя список переменных условия, система находит переменную INTEREST в условной части правила 10. Состояние структур данных в этот момент показаны на рис. 5.13 .
Переменная INTEREST входит в условную часть правил 10 и 20 :

10 ЕСЛИ INTERSET = ПАДАЕТ
ТО STOCK = РАСТЕТ

20 ЕСЛИ INTERSET = РАСТЕТ
ТО STOCK=ПАДАЕТ

5_13.jpg (52448 bytes)

Рис. 5.13. Состояние структур данных системы

но логически выведенному значению переменной INTEREST = ПАДАЕТ удовлетворяет только условие правила 10, Система обращается к части ТО этого правила и присваивает переменной STOCK значение РАСТЕТ, а имя переменной заносится в очередь переменных логического вывода (см. рис. 5.14). Правило 20 отвергнуто, потому что оно содержит условие INTEREST ” РАСТЕТ, а переменная INTEREST уже имеет значение ПАДАЕТ. Переменная INTEREST не встречается больше ни в одном из оставшихся правил и поэтому удаляется из очереди переменных логического вывода.

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK=РАСТЕТ Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST =РАСТЕТ Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON = ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ
INTERSET
STOCK
——————————————— ————————
 База знаний Очередь переменных
логического вывода

Рис. 5.14. Очередь переменных логического вывода

Правило 10 ЕСЛИ INTEREST = ПАДАЕТ,
ТО STOCK=РАСТЕТ Правило 20 ЕСЛИ INTEREST = РАСТЕТ,
ТО STOCK=ПАДАЕТ Правило 30 ЕСЛИ DOLLAR = ПАДАЕТ,
ТО INTEREST =РАСТЕТ Правило 40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INTEREST = ПАДАЕТ Правило 50 ЕСЛИ FEDINT = ПАДАЕТ
И FEDMON = ДОБАВИТЬ,
ТО INTEREST = ПАДАЕТ

STOCK

——————————————— ————————
 Очередь
База знаний переменных
логического вывода

Рис. 5.15. Очередь переменных логического вывода

Переменная STOCK оказывается в начале очереди (см. рис. 5.15). Процесс рассуждений на этом заканчивается, поскольку переменная STOCK не входит в условную часть какого-либо правила. Ответ на поставленный вопрос будет выглядеть следующим образом:

1. Процентные ставки падают.
2. Уровень цен на бирже растет.

Обобщенный алгоритм работы системы

Обобщенный алгоритм работы системы, реализующей прямую цепочку рассуждений, можно свести к следующему:
1. Определить исходное состояние.
2. Занести переменную условия в очередь переменных логического вывода, а ее значение - в список переменных.
3. Просмотреть список переменных и найти ту переменную, имя которой стоит в начале очереди переменных логического вывода. Если переменная найдена, записать в указатель переменных условия номер правила и число 1. Если переменная не найдена, перейти к шагу 6.
4. Присвоить значения непроинициализированным переменным условной части найденного правила (если такие есть). Имена переменных содержатся в списке переменных условия. Проверить все условия правила и в случае их истинности обратиться к части ТО правила.
5. Присвоить значение переменной, входящей в часть ТО правила, и поместить ее в конец очереди переменных логического вывода.
6. Удалить переменную, стоящую в начале очереди переменных логического вывода, если она больше не встречается в условной части какого-либо правила.
7. Закончить процесс рассуждений, как только опустеет очередь переменных логического вывода. Если же в очереди еще есть переменные, вернуться к шагу 3.
Этим алгоритмом можно воспользоваться для программирования на Бейсике простой системы, реализующей прямую цепочку рассуждений.

Пример программы

Программа (листинг 5.1), приведенная в качестве примера, может работать с любой базой знаний. Нужные правила можно вставить между предложениями 1500 и 1610 , а саму программу запустить на выполнение командой RUN.

Пояснение к программе

Программа работает с уже известными правилами фондовой биржы. Так правило:

ЕСЛИ процентные, ставки падают,
ТО уровень цен на бирже растет

запрограммировано предложениями программы 1500 — 1510. А правило

ЕСЛИ валютный курс доллара падает,
ТО процентные ставки растут

-предложениями 1540 - 1550.
Список переменных формируется в предложении 367 . Они представляют собой переменные условия, с которых начинается рассуждение. Список переменных условия формируется в предложениях 407 и 408 . У программе используется ряд сокращений, например, ST = ПАДАЕТ означает, что уровень цен на бирже падает, IN = РАСТЕТ означает, что процентные ставки растут.

Листинг программы

Листинг 5.1

1 REM ****** ПРЯМАЯ ЦЕПОЧКА РАССУЖДЕНИЙ ******************
 2 RFM ***************************************************
10 REM УСЛОВНЫЕ ЧАСТИ ДОПОЛНИТЕЛЬНЫХ ПРАВИЛ
 11 REM ВСТАВИТЬ ПОСЛЕ ПРЕДЛОЖЕНИЯ 1500
 20 REM НАПРИМЕР: 1500 IF (Al=2) AND (A6=6) OR (A3$="YES") THEN S=1
22 REM 1502 RETURN
30 REM 1520 IF (JS=”HET") THEN S=1
32 REM 1522 RETURN
40 REM ЧАСТЬ ТО ЭТИХ ПРАВИЛ ВСЕГДА СОДЕРЖИТ: THEN S=1
50 REM НАЧИНАЯ С ПРЕДЛОЖЕНИЯ 1510 МОЖНО ВСТАВИТЬ ЧАСТИ ТО
 52 REM ПРАВИЛ ПОЛЬЗОВАТЕЛЯ
 200 REM ***** БЛОК ИНИЦИАЛИЗАЦИИ **************************
 210 REM V$— СПИСОК ПЕРЕМЕННЫХ, IN— ПРИЗНАКИ ИНИЦИАЛИЗАЦИИ
 230 REM CV$— ПЕРЕМЕННЫЕ УСЛОВИЯ И ЛОГИЧЕСКОГО ВЫВОДА
 240DIM Q$(10),V$(10),CV$(40),IN(10)
255 FP=1: ВР=1: REM FP и ВР-УКАЗАТЕЛИ НАЧАЛА И КОНЦА ОЧЕРЕДИ
 260 FOR I=1 ТО 10
 270 Q$(I)="": V$(I)="": IN (I)="": SS(I)=0: CS(I)=0
280 NEXT I
340 REM ВВОД ПЕРЕМЕННЫХ, ВХОДЯЩИХ В УСЛОВНЫЕ ЧАСТИ ПРАВИЛ В
 350 REM НУЖНОМ ПОРЯДКЕ (НЕ БОЛЬШЕ 3 ПЕРЕМЕННЫХ НА ПРАВИЛО)
 360 REM ИМЕНА ПЕРЕМЕННЫХ НЕ ДОЛЖНЫ ПОВТОРЯТЬСЯ
 365 REM КОГДА ВВЕДЕНЫ ВСЕ ИМЕНА, НАДО НАЖАТЬ КЛАВИШУ ВК
 367 V$(1)="DO": V$(2)="FT": V$(3)="FM": V$(4)=TN": V$(5)="ST"
368 PRINT"*** СПИСОК ПЕРЕМЕННЫХ ***”
370 FOR I=1 ТО 10
 380 РRINТ”ВВЕДИТЕ ПЕРЕМЕННУЮ";I;
 385 PRINT V$ (I)
395 NEXT I
396 INPUT"ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ" ;I
400 REM ПЕРЕМЕННЫЕ ВВОДЯТСЯ В ПОРЯДКЕ ИХ ПОЯВЛЕНИЯ В ЧАСТЯХ
 401 REM ЕСЛИ ПРАВИЛ
405 REM В ОДНОМ ПРАВИЛЕ МОЖНО ЗАДАТЬ НЕ БОЛЬШЕ 3 ПЕРЕМЕННЫХ
 406 REM КОГДА ВВЕДЕНЫ ВСЕ ПЕРЕМЕННЫЕ, НАЖАТЬ КЛАВИШУ ВК
407 CV$(1)=”IN": CVS(5)="IN":CV$(9)=”D0":CV$(13)=”DO”
408 CV$(17)="FT": CV$(18)="FM"
409 PRINT “*** СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ ***"
410 FOR I=1 ТО 8:РRINT"”УСЛОВИЕ ";I
 420 FOR J=1 ТО 4:1'РRINТ"ПЕРЕМЕННАЯ";.I
 423 K=4*(I-1)+J
424 PRINT CV$ (К)
 430 NEXT J
432 IF I=4 THEN INPUT”ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ВK";Z
 435 NEXT I
450 REM ****** БЛОК ЛОГИЧЕСКОГО ВЫВОДА *****************
 465 REM INPUT”BBЕДИTE ПЕРЕМЕННУЮ ЛОГИЧЕСКОГО ВЫВОДА";С$
 470 REM ЗАМЕНА ПЕРЕМЕННОЙ УСЛОВИЯ (С$) В ОЧЕРЕДИ ПЕРЕМЕННЫХ ВЫВОДА(Q$)
475 Q$(BP)=C$: ВР=ВР+1
 476 REM ПЕРЕДВИНУТЬ НАЗАД УКАЗАТЕЛЬ КОНЦА ОЧЕРЕДИ
 480 REM УСТАНОВИТЬ УКАЗА ТЕЛЬ ПЕРЕМЕННЫХ УСЛОВИЯ, СОСТОЯЩИЙ
 482 REM ИЗ НОМЕРА ПРЕДЛОЖЕНИЯ (SN) И НОМЕРА УСЛОВИЯ (СN)
485 SN=1:CN=1
490 REM ПОИСК НОМЕРА СЛЕДУЮЩЕГО ПРАВИЛА, СОДЕРЖАЩЕГО
 491 REM ПЕРЕМЕННУЮ УСЛОВИЯ, КОТОРАЯ
 492 REM НАХОДИТСЯ В НАЧАЛЕ ОЧЕРЕДИ [Q$(FP)]. НОМЕР ПРАВИЛА
 494 REM РАСПОЛОЖЕН В СПИСКЕ ПЕРЕМЕННЫХ УСЛОВИЯ (СVS)
495 F=1: REM ПОВТОРИТЬ С НАЧАЛА
 496 GOSUB 3000: CN=1: КЕМ УКАЗЫВАЕТ НА ПЕРВОЕ УСЛОВИЕ ПРАВИЛА
 500 IF SN=O THEN GOSlJB 700: REM ПРАВИЛ БОЛЬШЕ НЕТ
 505 I=4*(SN-1)+CN: REM АДРЕС УСЛОВИЯ ПРАВИЛА
 510 V$=CV$(I): REM ПЕРЕМЕННАЯ УСЛОВИЯ
 560 REM ПРАВИЛО СОДЕРЖИТ ДРУГИЕ УСЛОВИЯ ?
 565 IF V$="" THEN GOTO 580: RЕМ В ПРАВИЛЕ УСЛОВИЙ БОЛЬШЕ НЕТ
 570 GOSUB 2400
571 REM ПРОВЕРИТЬ, ПРИСВОЕНО ЛИ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ
 575 CN=CN+1: GOTO 505: REM ПРОВЕРИТЬ СЛЕДУЩЕЕ УСЛОВИЕ ПРАВИЛА
 580 REM УСЛОВИЙ В ПРАВИЛЕ БОЛЬШЕ НЕТ
 585 S=0: ON SN GOSUB 1500,1520,1540,1560,15SO, 1600
590 REM ВЫПОЛНИТЬ ЧАСТЬ ТО ПРАВИЛА ?,Т.Е.S=1
600 IF S=1 THEN GOTO 630: REM ПЕРЕХОД К ЧАСТИ ТО ПРАВИЛА
 605 REM ВЫБОР СЛЕДУЮЩЕГО ЭЛEMEHТА ИЗ
 607 REM СПИСКА ПЕРЕМЕННЫХ УСЛОВИЯ
 610 F=SN+1;GOT0 496
630 REM ЕСЛИ УСЛОВИЕ ИСТИННО - ВЫПОЛНИТЬ ЧАСТЬ ТО ПРАВИЛА
 635 ON SN GOSUB 1510,1530,1550.1570.l590, 1610
650 F=SN+1: GOTO 496: REM ПРАВИЛ БОЛЬШЕ НЕТ
 700 REM СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ ПУСТ (CV$)
705 REM ЕСЛИ В НАЧАЛЕ ОЧЕРЕДИ [Q$(FR)] ЕСТЬ ПЕРЕМЕННАЯ —ОНА
 710 REM УДАЛЯЕТСЯ И НА EE МЕСТО ПОМЕЩАЕТСЯ СЛЕДУЮЩАЯ
 712 REM ПЕРЕМЕННАЯ |Q$(EP+1)].
720 REM ЕСЛИ В ОЧЕРЕДИ НЕТ ПЕРЕМЕННЫХ, ЗАКОНЧИТЬ ПРОГРАММУ
 725 FP=FP+1: REM СЛЕДУЮЩАЯ ПЕРЕМЕННАЯ ИЗ ОЧЕРЕДИ
 730 IF FP=BP THEN STOP
731 REM REM ОЧЕРЕДЬ ПЕРЕМЕННЫХ ВЫВОДА ПУСТА —КОНЕЦ
 735 GOTO 495: REM ПPOBEPKA ТЕКУЩЕЙ ПЕРЕМЕННОЙ УСЛОВИЯ
1490 REM *** УСЛОВНЫЕ ЧАСТИ ПРАВИЛ НАЧИНАЮТСЯ С 1500 ********
1492 REM ПРИМЕРЫ ПРАВИЛ БАЗЫ ЗНАНИЙ ФОНДОВОЙ БИРЖИ
1494 REM ДЛЯ ТОГО ЧТОБЫ ПРИМЕР БЫЛ СОВМЕСТИМ СО ВСЕМИ
 1496 REM ВЕРСИЯМИ БЕЙСИКА ИСПОЛЬЗУЮТСЯ ИМЕНА ПЕРЕМЕННЫХ,
 1497 REM СОСТОЯЩИЕ ИЗ ДВУХ БУКВ.
 1498 REM DOLLAR — DO, STOCK — ST, FEDINT — FT, FEDMON — FM
1499 REM *** ПРАВИЛО 1
 1500 IF IN$="ПАДАЕТ" THEN S=1
1502 RETURN
1505 REM ПЕРЕМЕННАЯ ПОМЕЩАЕТСЯ В ОЧЕРЕДЬ ПЕРЕМЕННЫХ ВЫВОДА
1510 ST$="PACTET": PRINT "ST=PACTET": V$="ST": GOSUB 3100: RETURN
1519 REM *** ПРАВИЛО 2
 1520 IF IN$="PACTET" THEN S=1
1522 RETURN
1530 ST$=ПАДAET": PRINT "ST=ПАДАЕТ": GOSUB 3100: RETURN
1539 REM ** ПРАВИЛО 3
1540 IF D0$="ПАДАЕТ" THEN S=1
1542 RETURN
1545 REM ПОМЕСТИТЬ ПЕРЕМЕННУЮ В ОЧЕРЕДЬ ПЕРЕМЕННЫХ ВЫВОДА
1550 IN$="PACTET": PRINT "IN=PACTET": V$=IN":GOSUB 3100:RETURN
1559 REM ** ПРАВИЛО 4
1560 IF DOS=”PACTET" THEN S=1
1562 RETURN
1565 REM ПОМЕСТИТЬ ПЕРЕМЕННУЮ В ОЧЕРЕДЬ ПЕРЕМЕННЫХ ВЫВОДА
1570 IN$="ПАДАЕТ": PRINT "IN=ПAДАЕТ": V$=IN": GOSUB 3100: RETURN
1579 REM** ПРАВИЛО 5
1580 IF (FТ$="ПАДАЕТ") AND (FМ$="ДОБАВИТЬ **) THEN S=1
1582 RETURN
1585 REM ПОМЕСТИТЬ ПЕРЕМЕННУЮ В ОЧЕРЕДЬ ВЫВОДА
1590 IN$="ПАДАЕТ": PRINT "IN=ПАДАЕТ": V$=”IN": GOSUB 3100):RETURN
1599 REM** ПРАВИЛО 6
1600 IF (QU$="ДA") AND (GR 3.5) THEN S=1
1602 RETURN
1610 РО$="ДА": PRINT "РО=ДА": RETURN
1611 REM ****** КОНЕЦ БАЗЫ ЗНАНИЙ ***************************
1690 REM *** С МЕТКИ 1700 РАСПОЛОЖЕНЫ ПРЕДЛОЖЕНИЯ ВВОДА ***
1699 REM ПРЕДЛОЖЕНИЯ ВВОДА ДЛЯ БАЗЫ ЗНАНИЙ ПРИМЕРА
1705 INPUT "ПРОЦЕНТНЫЕ СТАВКИ РЕЗЕРВА ПАДАЮТ ИЛИ РАСТУТ";FТ$:
RETURN
1710 INPUT "ДОБАВИТЬ ИЛИ ИЗЪЯТЬ PE3EPB";FM$: RETURN
1715 INPUT "ПРОЦЕНТНЫЕ СТАВКИ ПАДАЮТ ИЛИ PACTУT”;IN$
1720 INPUT "УРОВЕНЬ ЦЕН ПАДАЕТ ИЛИ PACTET";ST$: RETURN
1750 REM * КОНЕЦ БЛОКА ВВОДА В БАЗУ ЗНАНИЙ **
1999 REM*** БЛОК ПОДПРОГРАММ ***************************************
2400 REM ПОДПРОГРАММА ПРИСВАИВАЕТ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ (V$)
2402 REM IN — ПРИЗНАК ИНИЦИАЛИЗАЦИИ ПЕРЕМЕННЫХ
 2404 REM IN=0—ПЕРЕМЕННОЙ НЕ ПРИСВОЕНО ЗНАЧЕНИЕ,
2405 REM IN=1 —ПРИСВОЕНО
2405 REM СПИСОК ПЕРЕМЕННЫХ (VL$) СОДЕРЖИТ ПЕРЕМЕННУЮ (V$)
2420 FOR I=1 ТО 10: REM ВЫБОР ПЕРЕМЕННОЙ ИЗ СПИСКА
2430 IF V$=V$(I) THEN GOTO 2445: RЕM ПЕРЕМЕННАЯ НАЙДЕНА
2440 NEXT I
2445 IF IN(I)=1 THEN RETURN: REM ПЕРЕМЕННОЙ УЖЕ ПРИСВОЕНО ЗНАЧЕНИЕ
2450 IF IN(I)=1 THEN RETURN: REM ПЕРЕМЕННОЙ УЖЕ ПРИСВОЕНО ЗНАЧЕНИЕ
2460 REM ВВОД ЗНАЧЕНИЙ ПЕРЕМЕННЫХ НАЧИНАЕТСЯ С МЕТКИ 1700
2464 REM ПОСЛЕ КАЖДОГО ПРЕДЛОЖЕНИЯ INPUT СТОИТ RETURN
2465 IN(I)=1: REM ПРИЗНАК ТОГО, ЧТО ПЕРЕМЕННОЙ ПРИСВОЕНО ЗНАЧЕНИЕ
 2470 ON I GOSUB 1700,1705,1710,1715,1720
2480 RETURN
3000 REM ПОИСК В СПИСКЕ ПЕРЕМЕННЫХ УСЛОВИЯ (CV$) ИМЕНИ ПЕРЕМЕННОЙ, СТОЯЩЕЙ
 3005 REM В НАЧАЛЕ ОЧЕРЕДИ (Q$), ЕСЛИ ТАКОЙ ПЕРЕМЕННОЙ НЕТ, ТО
3010 REM ВОЗВРАЩАЕТСЯ НОМЕР ПРЕДЛОЖЕHИЯ (SN), НАПРИМЕР SN=0.
3015 REM ПОИСК НАЧИНАЕТСЯ С ПРЕДЛОЖЕНИЯ С НОМЕРОМ F
3025FOR SN=F T0 10
3030 FOR CN=1 TO 4
3035 K=(SN-1)*4+CN
3040 IF CV$ (K)=Q$ (FP) THEN RETURN
3045 NEXT CN
3050 NEXT SN,
3055 SN=0: RETURN
3100 REM ПОДПРОГРАММА ПРИСВАИВАЕТ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ (V$) И ПОМЕЩАЕТ ЕЕ В
3105 REM ОЧЕРЕДЬ Q$(BP), ЕСЛИ ЕЕ ТАМ НЕТ.
3110 REM ПОИСК ПЕРЕМЕННОЙ В СПИСКЕ ПЕРЕМЕННЫХ [V$(10)]
3115 FOR I=l TO 10
3117 IF V$=V$(I) THEN GOTO 3125
3120 NEXT I
3125 IN(I)=1: REM ПЕРЕМЕННОЙ ПРИСВОЕНО ЗНАЧЕНИЕ
3130 RЕМ ОПРЕДЕЛИТЬ, ЕСТЬ ЛИ ПЕРЕМЕННАЯ V$ В ОЧЕРЕДИ (Q$)
3135 FOR I=l TO 10: IF V$=Q$(I) THEN RETURN
3140 NEXT I
3155 REM ПЕРЕМЕННОЙ НЕТ В ОЧЕРЕДИ, ПОЭТОМУ ОНА ТУДА ПОМЕЩАЕТСЯ
 3160 Q$(BP)=V$:BP=BP+1
3170 FOR I=l TO 10
3176 NEXT I
3180 RETURN

Примеры выполнения программы

Программа на Бейсике выполняется по команде RUN. Ниже приводится результат выполнения программы.
RUN
****** СПИСОК ПЕРЕМЕННЫХ*****
ВВЕДИТЕ ПЕРЕМЕННУЮ 1 DO
ВВЕДИТЕ ПЕРЕМЕННУЮ 2 FT
ВВЕДИТЕ ПЕРЕМЕННУЮ 3 FM
ВВЕДИТЕ ПЕРЕМЕННУЮ 4 IN
ВВЕДИТЕ ПЕРЕМЕННУЮ 5 ST
ВВЕДИТЕ ПЕРЕМЕННУЮ 6
ВВЕДИТЕ ПЕРЕМЕННУЮ 7
ВВЕДИТЕ ПЕРЕМЕННУЮ 8
ВВЕДИТЕ ПЕРЕМЕННУЮ 9
ВВЕДИТЕ ПЕРЕМЕННУЮ 10
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ВК
*** СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ ***
**УСЛОВИЕ 1
ПЕРЕМЕННАЯ 1 IN
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛОВИЕ 2
ПЕРЕМЕННАЯ 1 IN
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛОВИЕ 3
ПЕРЕМЕННАЯ 1 DO
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛОВИЕ 4
ПЕРЕМЕННАЯ 1DO
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 5
ПЕРЕМЕННАЯ 1 FT
ПЕРЕМЕННАЯ 2FM
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛОВИЕ 6
ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛ ОВИЕ 7
ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛОВИЕ 8
ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4

Рассмотрим пример диалога системы с пользователем
ВВЕДИТЕ УСЛОВНУЮ ПЕРЕМЕННУЮ: DO
КУРС ДОЛЛАРА РАСТЕТ ИЛИ ПАДАЕТ ? РАСТЕТ
IN=ПАДАЕТ
ST=PACTET
Break In 730
Ok

ВВЕДИТЕ ПЕРЕМЕННУЮ УСЛОВИЯ: DO
 КУРС ДОЛЛАРА РАСТЕТ ИЛИ ПАДАЕТ ? ПАДАЕТ
IN=PACTET
ST=ПАДАЕТ
Beak in 730
Ok

ВВЕДИТЕ ПЕРЕМЕННУЮ УСЛОВИЯ: IN
ПРОЦЕНТНАЯ СТАВКА РАСТЕТ ИЛИ ПАДАЕТ ? ПАДАЕТ
ST=PACTET
Break In 730
Ok

ПРОЦЕНТНЫЕ СТАВКИ РЕЗЕРВА РАСТУТ ИЛИ ПАДАЮТ ? РАСТУТ
ДОБАВИТЬ ИЛИ ИЗЪЯТЬ РЕЗЕРВ ? ДОБАВИТЬ
Break in 730
Ok

 Для последних приведенных условий нет выводов, поскольку им не удовлетворяет ни одно правило, т.е.
ЕСЛИ FТ= ПАДАЕТ,
FМ= ДОБАВИТЬ,
ТО IN = ПАДАЕТ

ВВЕДИТЕ ПЕРЕМЕННУЮ УСЛОВИЯ: FM
ПРОЦЕНТНЫЕ СТАВКИ РЕЗЕРВА РАСТУТ ИЛИ ПАДАЮТ ? ПАДАЮТ
IN=ПАДАЕТ
ST=РАСТЕТ
Break in 730
Ok

Вспомогательные таблицы

Для формирования новой базы знаний или модификации существующей полезно использовать приведенную ниже таблицу. Таблица упрощает проверку корректности отношений базы знаний и структур данных экспертной системы. В принципе можно создать специальный компилятор для обработки таких таблиц и автоматически преобразовывать базу знаний в нужные структуры данных. Но эта задача требует полного понимания механизма работы экспертной системы. С помощью таблицы проще создавать и преобразовывать переменные (переменная 11, переменная 12 и т.д.) и значения (значение 11, значение 12 и т.д.) новой базы знаний в предложения программы. В одном правиле можно использовать до трех переменных. Для того чтобы сформировать первую таблицу, необходимо записать правила в формеЕСЛИ-ТО. Затем можно преобразовывать их в другие таблицы и получать фрагменты программы.

55str.jpg (50089 bytes)

Ниже приводится рабочая таблица списка переменных условия (предложения 407 и 408 программы).

56str.jpg (28139 bytes)

Теперь рассмотрим рабочую таблицу списка переменных ( предложение 367 программы). Имена переменных должны быть уникальны.

57str.jpg (10057 bytes)

Рабочая таблица правил, записанных на Бейсике (предложения 1490- 1611 программы). Сначала приводятся заготовк и для условных частей правил, а потом для констатирующих.

Условные части (ЕСЛИ) правил:

58str.jpg (41318 bytes)

Констатирующие части (ТО) правил:

59str.jpg (29730 bytes)


Глава 6.Обратная цепочка рассуждений

ГЛАВА 6

ОБРАТНАЯ ЦЕПОЧКА РАССУЖДЕНИЙ

Предположим, что автомобиль не удалось стронуть с места. В чём же дело - сел аккумулятор или неисправен стартёр ? Рассмотрим задачу в более общем виде: по известному результату (автомобиль не тронулся с места) нужно определить условия, которые к нему привели, т.е. по симптомам найти причины. Она отличается от задачи в предыдущей главе (прямая цепочка рассуждений) тем, что там уже были известны условия (перегрев двигателя), но последствия, к которым они приведут, известны не были. Задача заключалась в предсказании возможного результата. Здесь же результат известен, и нужно найти вызвавшие его причины.
Для решения задачи опять понадобятся правила. Приведем несколько подходящих для выбранного примера правил.

Правило 1:

ЕСЛИ автомобиль не заводится И сел аккумулятор,
ТО не подается ток в стартер

Правило 2:

ЕСЛИ в стартер не подается ток,
ТО автомобиль не тронется с места

Каким же образом можно найти условия, при которых автомобиль не тронется с места ? С помощью обратной цепочки рассуждений. Известный результат (автомобиль не трогается с места) повлечет за собой цепочку рассуждений, которая приведет нас к вызвавшим его причинам. Причины возникают раньше следствий, поэтому в процессе обратной цепочки рассуждений просматриваются логические выводы,устанавливаются условия, которые к ним привели, и определяется, связаны ли эти условия с предыдущими логическими выводами. Например, в приведенной, задаче сначала надо обратиться ко второму правилу, поскольку содержащийся в нем логический вывод: “ТО автомобиль не тронется с места” соответствует реально возникшей ситуации. Обратная цепочка рассуждений всегда начинается со следствия (часть ТО правила). Причина, по которой автомобиль не трогается с места, содержится в условной части правила 2: “ЕСЛИ в стартер не подаётся ток”. Рассуждения продолжаются, так как надо выяснить, почему же в стартер не подаётся ток. Ответ на этот вопрос дает правило
1. В условной части правила записано: “ЕСЛИ автомобиль не заводится И сел аккумулятор”. Если эти условия выполняются, то можно выявить причину, по которой автомобиль не трогается с места. В противном случае придется проверить другие правила, относящиеся к этой ситуации, проследить еще одну цепочку.
Если в правилах, относящихся к проблемной области, не удается найти условную часть с выполняющимися условиями, необходимо обратиться к специалистам и запросить дополнительную информацию. Другими словами, если условные части всех входящих в систему ИИ правил имеют значение “ложь”, то в систему надо добавить логические выводы, которые могут помочь при решении задачи.
Теперь понятно, что здесь слово “цепочка” означает процедуру логической связи ряда правил. В приведенном примере цепочка рассуждений начинается со второго правила и заканчивается на первом. Давайте посмотрим, почему же такая цепочка рассуждений называется обратной. До того как автомобиль не смог стронуться с места, он не завелся и у него сел аккумулятор. Последствия выполнения некоторых условий известны - автомобиль не поехал, осталось определить эти условия, т.е. найти причины, по которым автомобиль не тронулся с места. Обратной цепочка рассуждений называется потому, что начинается с уже происшедшего события и идет к его истокам. Программные средства, работающие по принципу обратной цепочки рассуждений, предназначены для поиска причин по уже известному результату. Ниже приведен пример создания базы знаний и обработки хранящейся в ней информации с использованием обратной цепочки рассуждений. Цепочка выполняется с помощью серии вопросов, которые система ИИ задает человеку. Система, реализующая прямую цепочку рассуждений, на основании имеющихся условий делает возможные логические выводы; система, реализующая обратную цепочку рассуждений по имеющимся выводам, ищет необходимые для них условия.
Хотя реализация обратной цепочки рассуждений не сложнее реализации прямой цепочки рассуждений, в этой главе приводится полный цикл разработки системы ИИ от алгоритма до программы, которую можно применять в реальной экспертной системе.

Разработка базы знаний: дерево решений

Прежде всего поставим задачу, для решения которой будет разрабатываться экспертная система. Подходящей задачей, при решении которой можно использовать обратную цепочку рассуждений, может быть задача, вытекающая из следующей ситуации: к директору крупной технической фирмы пришел человек, желающий устроиться на работу. Директор располагает сведениями о его квалификации, о потребностях фирмы в специалистах и общем положении дел в фирме. Ему нужно решить, какую должность в фирме может занять посетитель.
На первый взгляд задача не очень сложная, но на решение директора влияет много факторов. Допустим, претендент работает в данной области недавно, но уже сделал важное открытие или он закончил учебное заведение с посредственными оценками, но несколько лет работал по специальности. В данной ситуации люди ведут себя по-разному, и хотя для того, чтобы получить работу необходимо, удовлетворять определенным критериям, в биографии претендента могут быть самые различные факты, анализ которых поможет подобрать для него соответствующую должность.
Поскольку в задаче надо выбрать один из нескольких возможных вариантов (должностей), для её решения можно воспользоваться обратной цепочкой рассуждений. В действительности ответ уже существует. Перед директором сидит человек и всеми силами старается произвести на него хорошее впечатление. Если директора этот человек устраивает, для него нужно подобрать подходящую должность. Директору необходимо задать посетителю такие вопросы, ответы на которые дадут возможность сделать правильный выбор.
Итак, задача поставлена. Теперь нужно наглядно ее представить. Для описания подобных задач обычно используются диаграммы, которые называются деревьями решений. Деревья решений дают необходимую наглядность и позволяют проследить ход рассуждений.
Диаграммы называются деревьями решений потому, что, подобно настоящему дереву, имеют ветви. Ветви деревьев решений заканчиваются логическими выводами. Для рассматриваемого примера вывод заключается в том, предложит ли директор должность поступающему на работу, и если да, то какую. Многие задачи сложны, и их непросто представить (или для их решения не собираются использовать экспертную систему). Дерево решений помогает преодолеть эти трудности.
На рис. 6.1 показано дерево решений для примера с приемом на работу. Видно, что диаграмма состоит из кружков и прямоугольников, которые называются вершинами. Каждой вершине присваивается номер. На вершины можно ссылаться по этим номерам. Линии, соединяющие вершины, называются дугами или ветвями. Кружки, содержащие вопросы, называются вершинами решений. Прямоугольники содержат цели диаграммы и означают логические выводы. Линии показывают направление диаграммы. Многие вершины имеют сразу по нескольку ветвей, связывающих их с другими вершинами. Выбор выходящей из вершины ветви определяется проверкой условия, содержащегося в вершине.

6_1.gif (8311 bytes)

Рис. 6.1. Дерево решений для выбора должности

Например, вершина 5 (см.рис.6.2) содержит вопрос, на который есть два возможных ответа, и поэтому у нее два пути в зависимости от среднего балла посетителя за время учёбы, т.е. возможен выбор одной из двух ветвей. Если средний балл равен 3,1, то будет выбран первый путь, так как 3,1 меньше 3,5. В программе под средний балл сначала отводится переменная, а затем ей присваивается значение. Можно сказать, что вершины содержат переменные, а пути - это условия, в соответствии с которыми переменным присваиваются значения. После того как для проблемной области сформулированы правила, эти условия становятся условными частями (ЕСЛИ) правила. Прямоугольники содержат частные или общие выводы. Например, прямоугольник на рис. 6.3 может содержать ответ на вопрос, будет ли посетителю предложена работа. Общая цель системы, в которой реализованы обратные рассуждения, -получить окончательный ответ. Локальной целью может быть содержащийся в прямоугольнике на рис. 6.4 ответ на вопрос, будет ли посетителю предложена должность. Однако эта вершина имеет и исходящие ветви, и, следовательно, через неё может проходить путь к следующему логическому выводу. В последнем случае, поскольку исходящая ветвь не содержит условия и она только одна, говорят, что вершина содержит локальный вывод для другой цели. Локальный вывод - это также составляющая условной части правила. Ниже будет приведён пример, содержащий локальные выводы.

6_2.gif (2225 bytes)

Рис. 6.2.Определение пути к вершине решения

6_3.gif (1331 bytes)

Рис. 6.3.Логический вывод

Преобразование дерева решений в правила

Как мы уже говорили, правило ЕСЛИ-ТО состоит из двух частей. Часть ЕСЛИ может включать несколько условий, которые связываются между собой логическими операторами И, ИЛИ и НЕ. Часть ТО правила включается в работу только в том случае, если истинны все условия в условной части. В дереве решений обеим частям правила соответствуют связанные между собой вершина решения (кружок) и вершина логического вывода (прямоугольник). Условная часть содержит все вершины решения, находящиеся на пути к логическому выводу, т.е. каждая вершина решения на пути к выводу - это одно условие части ЕСЛИ. Вывод же составляет часть ТО правила (см. рис.6.5).

6_4.gif (1654 bytes)

Рис. 6.4.Пример логического вывода

6_5.gif (2454 bytes)

Рис. 6.5.Преобразования части дерева в правило

Для того чтобы найти условия, при которых посетителю может быть предложена работа, нужно просмотреть все пути, ведущие к прямоугольнику 3. К нему ведет только один путь от вершины решения 1, которая содержит вопрос: “Посетитель имеет ученое звание ?”. Правило, соответствующее этому пути, имеет вид:

ЕСЛИ посетитель имеет ученое звание =да,
ТО посетитель, возможно, будет принят на работу = да

Длинную фразу “посетитель имеет ученое звание” можно заменить переменной, принимающей значения “да” или “нет”. В действительности все вершины содержат переменные, имеющие уникальные имена.
Список имен переменных, текст, который они заменяют, и номера вершин приведены в табл. 6.1. Использование переменных вместо полного текста упрощает формирование и запись правил.
Процесс формирования правил для всех возможных логических выводов состоит из следующих шагов:
1. Выбрать из дерева решений вершину вывода (прямоугольник) и зафиксировать её.
2. Найти вершину решения (кружок), расположенную слева от выбранной вершины вывода и сязанную с ней ветвью, и зафиксировать её.

Таблица 6.1
Таблица имён переменных

Имя переменной | Условия | Вершина (ы)
DEGREE | Посетитель имеет ученое звание ? | 1
DESCOVERY | Посетитель сделал важное открытие ? | 4
EXPERIENCE | Каков опыт работы в этой области ? | 7
GRADE | Каков средний балл посетителя за время учебы ? | 5
POSITION | Какая должность предложена посетителю ? | 2,6,8,9,10
QUALIFY | Возможно, посетитель будет принят на работу | 3

З. Повторять шаг 2 до тех пор, пока не будут исчерпаны все вершины решения, расположенные левее зафиксированной вершины вывода, или не встретится новая вершина вывода. Если встретилась вершина вывода, то её надо зафиксировать и прекратить выполнение шага 2. - Выполнение также прекращается, если исчерпаны все вершины.
4. Каждая вершина решения, составляющая путь, - это одна из переменных части ЕСЛИ правила. Значение, связанное с ветвью, представляет собой условие. Переменные условной части правила объединяются логическим оператором И.
5. Выбранный логический вывод перенести в часть ТО правила.

Создание правил

В качестве примера рассмотрим путь, показанный на рис. 6.6. Выполнив описанные шаги, получим:
Вершина вывода 6
Путь 6,4,1
Поскольку используются обратные рассуждения, то выполнение начинается с вывода и дерево решения просматривается в обратную сторону. Применив полученный путь и имена переменных из табл. 6.1, можно создать правило:

ЕСЛИ DEGREE = ДА И DESCOVERY = ДА,
ТО POSITION = НАУЧНЫЙ СОТРУДНИК

Таким образом, если посетитель имеет ученое звание и сделал важное открытие, то ему будет предложена должность научного сотрудника.
Воспользовавшись уже известными принципами, приступим к разработке базы знаний. Читатель может построить базу знаний для своей проблемной области аналогично; ему только надо учесть, что должно быть хотя бы одно правило для каждого пути, ведущего к цели. В табл. 6.2 собраны все правила для дерева решений, показанного на рис.6.1. Номера правил выбраны произвольно и служат только для удобства идентификации.
Правила соответствуют всем шести путям, ведущим к шести возможным целям дерева решений.

6_6.gif (2954 bytes)

Рис. 6.6.Пример пути

Таблица 6.2
Правила ЕСЛИ-ТО

Правило Путь
10 ЕСЛИ DEGREE - НЕТ, ТО POSITION-НЕТ
20 ЕСЛИ DEGREE - ДА, ТО QUALIFY-ДА
30 ЕСЛИ DEGREE - ДА И DISCOVERY - ДА,
ТО POSITION - НАУЧНЫЙ СОТРУДНИК
40 ЕСЛИ QUALIFY- ДА И AVERAGE 3.5 И EXPERIENCE- 2,
ТО POSITION - ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ
50 ЕСЛИ QUALIFY - ДА И AVERAGE - 3.5 И EXPERIENCE 2,
ТО POSITION-НЕТ
60 ЕСЛИ QUALIFY - ДА И AVERAGE - 3.5,
ТО POSITION - ИНЖЕНЕР-КОНСТРУКТОР
1,2
1,3
1,4,6
3,5,7,10
3,5,7,9
3,5,8

Из приведённого примера видно, как удобно применять деревья решений. Они позволяют просто и наглядно формировать правила для базы знаний, а без базы знаний экспертную систему не построить.

Работа с базой знаний

Приступим к реализации обратной цепочки рассуждений. База знаний должна использоваться для определения пути, ведущего к какому-либо логическому выводу. Например, если путь завершается в вершине 9 дерева решений, вывод будет: “Отказать посетителю в работе”. Выводы, содержащиеся в вершинах решения, представляют собой переменные частей ТО правил. Путь, который надо проделать для получения вывода, помогает понять, почему сделан именно такой вывод. Иными словами, часть ТО является решением, а условия части ЕСЛИ - причинами, приведшими к решению.

Правило 10 ЕСЛИ DEGREE=НЕТ, ТО POSITION = НЕТ Правило 20 ЕСЛИ DEGREE ДА, TO QUALIFY = ДА Правило 30 ЕСЛИ DEGREE = ДА И, DISCOVERY = ДА ТО POSITION = НАУЧНЫЙ СОТРУДНИК Правило 40 ЕСЛИ QUALIFY = ДА И, GRADE < 3.5 И EXPERIENCE = 2 ТО POSITION= ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ Правило 50 ЕСЛИ QUALIFY = ДА И GRADE < 3.5 И EXPERIENCE = 2 ТО POSITION = НЕТ Правило 60 ЕСЛИ QUALIFY = ДА И GRADE >= 3.5 ТО POSITION = ИНЖЕНЕР КОНСТРУКТОР | 1 POSITION 2 QUALIFY 3 POSITION 4 POSITION 5 POSITION 6 POSITION ———————— Список логических выводов | 1 INTEREST 2 3 4 5 DEGREE 6 7 8 9 DEGREE 10 DISCOVERY 11 12 13 QUALIFY 14 GRADE 15 EXPERIENCE 16 17 QUALIFY 18 GRADE 19 EXPERIENCE 20 21 QUALIFY 22 GRADE
 | DEGREE DISCOVERY EXPEREIENCE GRADE ——————————— Список переменных Вершина стека
———————————————— База знаний | Номер Номер правила условия ———————————————— Стек логических выводов | ———————— Список переменных условия

Рис. 6.7. База знаний и структуры данных

При создании экспертной системы для упрощения ответа на вопросы и решения поставленной задачи в систему включается ряд полезных таблиц или структур данных. Структуры данных нужны для работы с базой знаний. На рис. 6.7 показаны база знаний и необходимые структуры данных. После определения метода решения выбранного круга задач можно приступить к разработке системы.
Прежде чем начать писать программы, нужно составить алгоритм и создать некоторые специальные структуры данных.

Список логических выводов

Список логических выводов - это структура данных, содержащая упорядоченный список возможных логических выводов. Список состоит из номера правила, логического вывода, связанного с этим правилом, и условий, которые формируют вывод. На каждое правило базы знаний в списке приходится одна запись. На рис. 6.8 приведён полностью сформированный список логических выводов для всех правил базы знаний. Создание записи списка поясним на примере правила 10. Часть ТО правила 10 содержит переменную POSITION, т.е. переменная POSITION связана с логическим выводом правила 10.

Правило 10 ЕСЛИ DEGREE=НЕТ,
ТО POSITION = НЕТ
Правило 20 ЕСЛИ DEGREE ДА,
TO QUALIFY = ДА
Правило 30 ЕСЛИ DEGREE = ДА И,
DISCOVERY = ДА
ТО POSITION = НАУЧНЫЙ
СОТРУДНИК
Правило 40 ЕСЛИ QUALIFY = ДА И,
GRADE < 3.5
И EXPERIENCE = 2
ТО POSITION= ИНЖЕНЕР ПО
ЭКСПЛУАТАЦИИ
Правило 50 ЕСЛИ QUALIFY = ДА И
GRADE < 3.5
И EXPERIENCE = 2
ТО POSITION = НЕТ
Правило 60 ЕСЛИ QUALIFY = ДА И
GRADE >= 3.5
ТО POSITION = ИНЖЕНЕР
КОНСТРУКТОР 		1 POSITION
2 QUALIFY
3 POSITION
4 POSITION
5 POSITION
6 POSITION
————————
Список логических
выводов
————————————————
База знаний

Рис. 6.8. Список логических выводов

Список считается сформированным, когда логический вывод каждого правила помещён в запись с номером, совпадающим с номером правила.
Список логических выводов используется исключительно для поиска вывода по номеру правила. Когда условия части ЕСЛИ истинны, вызывается часть ТО, тем самым переменной логического вывода присваива тся значение. Например, если надо узнать, будет ли посетителю предложена работа, в списке ищется переменная POSITION. Она содержится в первой же записи, т.е. в правиле 10:

ЕСЛИ DEGREE=НЕТ,
ТО POSITION=НЕТ

Посетитель не будет принят на работу, если переменная DEGREE имеет значение НЕТ. Если же переменная DEGREE имеет значение ДА, обращаться к части ТО правила нельзя, поскольку не выполняется условие части ЕСЛИ (DEGREE-ДА). Поэтому надо продолжить поиск правила, содержащего в части ТО переменную POSITION. Однако не будем торопиться, сначала рассмотрим другие структуры данных, а потом опишем их взаимодействие.

Список переменных

Список переменных содержит имена переменных для всех условных частей правил базы знаний и признак их инициализации. Признак инициализации показывает, присвоено ли переменной значение. Список переменных приведён на рис. 6.9. Независимо от того, в скольких условиях встречается переменная, в список переменных она включается всего один раз. В этот список также нельзя включать переменные логического вывода, поскольку их значения определяются с помощью правил. Первоначально предполагается, что переменным значения еще не присвоены и признак инициализации для всех переменных равен NI. По мере того как полученная от посетителя информация передается системе и переменным присваиваются значения, признак инициализации меняется на I.
До того, как правило включено в работу, все переменные, входящие в его условную часть, должны быть проинициализированы. Определить, присвоено ли переменной условия значение, можно, просмотрев список переменных. Если переменная отмечена как NI, то прежде, чем начать работать с правилом, ей надо присвоить значение. Как только от посетителя получена информация и переменной присвоено значение, она помечается как I. После этого значение переменной сравнивается с правой частью соответствующего условия, в которое входит эта переменная. Рассмотрим, например, правило 10:

Правило 10 ЕСЛИ DEGREE=НЕТ,
ТО POSITION = НЕТ
Правило 20 ЕСЛИ DEGREE ДА,
TO QUALIFY = ДА
Правило 30 ЕСЛИ DEGREE = ДА И,
DISCOVERY = ДА
ТО POSITION = НАУЧНЫЙ
СОТРУДНИК
Правило 40 ЕСЛИ QUALIFY = ДА И,
GRADE < 3.5
И EXPERIENCE = 2
ТО POSITION= ИНЖЕНЕР ПО
ЭКСПЛУАТАЦИИ
Правило 50 ЕСЛИ QUALIFY = ДА И
GRADE < 3.5
И EXPERIENCE = 2
ТО POSITION = НЕТ
Правило 60 ЕСЛИ QUALIFY = ДА И
GRADE >= 3.5
ТО POSITION = ИНЖЕНЕР
КОНСТРУКТОР

DEGREE
DISCOVERY
EXPEREIENCE
GRADE

———————————
Список переменных

 | Значение
NI |
NI |
NI |
NI |

————————————————
База знаний

Рис. 6.9. Список переменных

10 ЕСЛИ DEGREE = НЕТ,
ТО POSITION=НЕТ

Переменная DEGREE находится в первой строке списка, но ей еще не присвоено значение (NI), и, значит, обратиться к условной части правила нельзя. Для того чтобы присвоить значение переменной DEGREE, нужно узнать у посетителя, имеет ли он ученое звание. Ответ посетителя и будет значением переменной. Теперь можно приступить к работе с условной частью правила:

ЕСЛИ DEGREE=НЕТ

Часть ТО можно выполнить, если переменная DEGREE имеет значение НЕТ. В любом случае после присвоения переменной DEGREE значения для нее в соответствующей строке списка переменных NI заменяется на I:

Имя переменной Признак Значение
DEGREE I НЕТ

С этого момента, в каком бы правиле в условной части не встретилась переменная DEGREE, она будет считаться проинициализированной. Это означает, как только от посетителя получена информация, ее можно использовать для работы с любыми правилами.

Список переменных условия

Условная часть правила (ЕСЛИ) может содержать несколько переменных. В проектируемой системе в правиле может быть до четырех переменных условия. Хотя переменные могут быть связаны любым из логических операторов (И, ИЛИ, НЕ), здесь рассматривается лишь оператор И как наиболее распространённый. Например, правило 30 состоит из двух условий, связанных оператором И:

ЕСЛИ DEGREE = ДА И DESCOVERY = ДА

А правила 40,50 и т.д. содержат по три условия. Необходимо твердо помнить, если условия части ЕСЛИ правила связаны оператором И, то обратиться к части ТО можно только, когда все переменные условия проинициализированы. Например, в правиле 30:

30 ЕСЛИ DEGREE = ДА И DESCOVERY = ДА,
ТО POSITION = НАУЧНЫЙ СОТРУДНИК

прежде чем обратиться к части ТО, нужно присвоить значения переменным DEGREE и DESCOVERY. Поэтому следует сформировать для всех правил список переменных, входящих в их условные части, чтобы можно было проверить, проинициализирована переменная или нет и только потом приступить к работе с правилом.

Правило 10 ЕСЛИ DEGREE=НЕТ, ТО POSITION = НЕТ Правило 20 ЕСЛИ DEGREE ДА, TO QUALIFY = ДА Правило 30 ЕСЛИ DEGREE = ДА И, DISCOVERY = ДА ТО POSITION = НАУЧНЫЙ СОТРУДНИК Правило 40 ЕСЛИ QUALIFY = ДА И, GRADE < 3.5 И EXPERIENCE = 2 ТО POSITION= ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ Правило 50 ЕСЛИ QUALIFY = ДА И GRADE < 3.5 И EXPERIENCE = 2 ТО POSITION = НЕТ Правило 60 ЕСЛИ QUALIFY = ДА И GRADE >= 3.5 ТО POSITION = ИНЖЕНЕР КОНСТРУКТОР | 1 INTEREST 2 3 4 5 DEGREE 6 7 8 9 DEGREE 10 DISCOVERY 11 12 13 QUALIFY 14 GRADE 15 EXPERIENCE 16 17 QUALIFY 18 GRADE 19 EXPERIENCE 20 21 QUALIFY 22 GRADE
———————————————— База знаний | ———————————————— Список переменных условия

Рис. 6.10. Список переменных условия

Структура данных, содержащая перечень всех переменных для всех условных частей правил, называется списком переменных условия. На рис. 6.10 показан список переменных условия для шести правил рассматриваемой базы знаний. Для простоты программирования предполагается, что каждое правило не может содержать больше четырех переменных условия. Слева от имен переменных даны числа (1-22), указывающие индекс элемента массива (по четыре на правило), в который помещается имя соответствующей переменной. Незанятые элементы массива, отведенные правилу, остаются пустыми. В принципе можно запрограммировать любое число переменных для каждого правила.
Однако при отведении места под переменные условия лучше для каждого правила резервировать одинаковое число элементов массива. Это упростит вычисление индекса первого элемента, отведенного правилу в списке. Его можно вычислить с помощью простой формулы:

4* (номер правила/10 — 1)+1

Например, переменные правила 50 будут размещаться, начиная с 17-го элемента массива:

4* (50/10—1)+1=17

Теперь посмотрим, каким образом три описанные структуры данных соотносятся с мыслительной деятельностью человека в процессе обратной цепочки рассуждений. Прежде всего человек просматривает все возможные пути, способные привести к решению задачи (список логических выводов). Затем он выделяет условия, составляющие эти пути (список переменных и список переменных условия). Такие структуры данных позволяют быстро обрабатывать информацию, не повторяя одни и те же шаги по нескольку раз, потому что значения переменных можно использовать в определенной ситуации для различных логических выводов. Если же при разговоре с человеком, устраивающимся на работу, у директора нет не только компьютера, но даже карандаша и бумаги, ему придется много раз переспрашивать, ведь сразу просто невозможно запомнить. Конечно, в конце концов он примет решение, но затратит много сил и времени.

Стек логических выводов

Обсудим последнюю, четвертую структуру данных - стек логических выводов. Это главная структура, так как в экспертной системе, реализующей обратную цепочку рассуждений, она связывает остальные структуры данных. В стеке логических выводов хранится информация о нужных пользователю логических выводах и о переменных условия, инициализацию которых необходимо проверить. Для того чтобы понять, что такое стек логических выводов, вернемся к правилу 40:

40 ЕСЛИ QUALIFY = ДА условие 1
И AVERAGE < 3.5 условие 2
EXPERIENCE = 2, условие 3
TO POSITION = ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ

Правило состоит из условной части с тремя условиями (1,2,3) и части ТО. Для того чтобы выяснить, можно ли вызвать часть ТО, необходимо проверить все условия. Если все условия истинны, в работу включается часть ТО, согласно которой посетителя предлагается назначить инженером по эксплуатации оборудования. Правило надо отбросить, если хоть одно из условий не выполняется. Каким же образом сохранить трассу проверяемых правил и содержащихся в них условий ? На рис. 6.11 показано как это сделать, используя стек логических выводов.

6_11.jpg (52780 bytes)
Рис. 6.11. Стек логических выводов

Видно, что в настоящий момент проверяется первое условие правила 40:

QUALIFY=ДА

Но значение переменной QUALIFY присваивается в правиле 20:

ЕСЛИ DEGREE = ДА, условие 1
ТО QUALIFY=ДА

Поэтому для определения значения переменной QUALIFY надо обратиться к правилу 20. Правило 20 помещается в стек (см. рис. 6.12). Номер условия указывает, что нужно посмотреть первое условие правила 20:

DEGREE=ДА

Значение переменной DEGREE (ДА или НЕТ) присваивается согласно данным, полученным от посетителя. Переменной QUALIFY можно присвоить значение ДА только, если DEGREE = ДА (таково условие в части ЕСЛИ). Предположим, у посетителя есть ученое звание (DEGREE = ДА), тогда QUALIFY - ДА.

6_12.jpg (54586 bytes)

Рис. 6.12. Стек логических выводов при работе с дополнительным правилом

После этого правило 20 можно удалить из стека. Поскольку QUALIFY = ДА, можно перейти от первого ко второму условию правила 40 (рис.6.13). Такое взаимодействие стека выводов с базой знаний продолжается на протяжении всей цепочки обратных рассуждений.
В заключение повторим, что стек логических выводов хранит информацию о том, какое условие какого правила проверяется в определенный момент времени.

Пример использования базы знаний

Для того чтобы свести воедино все выше сказанное, рассмотрим полный цикл обработки экспертной системой запроса пользователя. Работа начинается с ввода пользователем логического вывода в форме вопроса:

Будет ли посетитель принят на работу ?

6_13.jpg (52651 bytes)

Рис. 6.13. Обновленный стек логических выводов

Система выбирает из таблицы переменных переменную логического вывода POSITION. Затем в стек помещается номер правила, в котором есть такая переменная логического вывода. Список логических выводов просматривается с самого начала (с правила 10), так как переменная POSITION встретилась в первый раз. Система сразу же находит переменную POSITION в правиле 10 и помещает в стек один элемент (см. рис. 6.14). В правиле 10 система находит переменную условия DEGREE и просмотрев список переменных, обнаруживает, что она еще не проинициализирована. Переменной DEGREE нет и в списке переменных логического вывода, поскольку она не входит в часть ТО какого-либо правила. Система запросит информацию:

Посетитель имеет ученое звание ?

Как только полученный ответ будет передан системе, переменной DEGREE присваивается значение, а в списке переменных для нее проставляется признак инициализации (рис.6.15).

6_14.jpg (52840 bytes)

Рис. 6.14. Начальное состояние стека логических выводов

Пусть посетитель ответил на вопрос “ДА”, тогда правило

10 ЕСЛИ DEGREE = НЕТ,
ТО POSITION=НЕТ

из-за противоречия в условии исключается, а соответствующий ему логический вывод удаляется из стека. В поисках нового правила с переменной логического вывода POSITION просмотр списка логических выводов продолжается. Следующим система выбирает правило 30

30 ЕСЛИ DEGREE = ДА И DISCOVERY = ДА,
ТО POSITION = НАУЧНЫЙ СОТРУДНИК

и помещает его в стек (см.рис. 6.16). Теперь система попытается присвоить значения всем переменным условия, входящим в правило 30;список переменных условия приведен на рис. 6.17 .

Правило 10 ЕСЛИ DEGREE=НЕТ,
ТО POSITION = НЕТ
Правило 20 ЕСЛИ DEGREE ДА,
TO QUALIFY = ДА
Правило 30 ЕСЛИ DEGREE = ДА И,
DISCOVERY = ДА
ТО POSITION = НАУЧНЫЙ
СОТРУДНИК
Правило 40 ЕСЛИ QUALIFY = ДА И,
GRADE < 3.5
И EXPERIENCE = 2
ТО POSITION= ИНЖЕНЕР ПО
ЭКСПЛУАТАЦИИ
Правило 50 ЕСЛИ QUALIFY = ДА И
GRADE < 3.5
И EXPERIENCE = 2
ТО POSITION = НЕТ
Правило 60 ЕСЛИ QUALIFY = ДА И
GRADE >= 3.5
ТО POSITION = ИНЖЕНЕР
КОНСТРУКТОР
DEGREE
DISCOVERY
EXPERIENCE
GRADE
 | Значение
I | ДА
NI |
NI |
NI |
______________
Список переменных

————————————————
База знаний

Рис.6.15 Скорректированный список переменных

Номер условия, хранящийся в стеке для правила 30, указывает на переменную DEGREE, которой уже присвоено значение (в списке переменных она отмечена как I), поэтому для первого элемента стека номер условия будет увеличен на единицу. Второй в списке переменных условия для правила 30 стоит переменная DISCOVERY (рис. 6.18).
В списке переменных условия отмечено, что переменной DISCOVERY значение еще не присвоено.а так как DISCOVERY не входит в переменные логического вывода, система опять запросит информацию:

Посетитель сделал важное открытие ?

6_16.jpg (53482 bytes)

Рис. 6.16. Управление стеком логических выводов

Предположим, система получит ответ “Нет”, тогда список переменных будет скорректирован (см. рис. 6.19). Поскольку первые две переменные уже проинициализированы, номер условия в стеке будет увеличен до 3. В правиле 30 третьей переменной условия нет, и, значит, можно приступить к его анализу:

30 ECЛИ DEGREE = ДA И DESCOVERY,
ТО POSITION = НАУЧНЫЙ СОТРУДНИК

Но второе условие правила не выполняется, и, следовательно, логический вывод опять удаляется из стека.

Правило 10 ЕСЛИ DEGREE=НЕТ, ТО POSITION = НЕТ Правило 20 ЕСЛИ DEGREE ДА, TO QUALIFY = ДА Правило 30 ЕСЛИ DEGREE = ДА И, DISCOVERY = ДА ТО POSITION = НАУЧНЫЙ СОТРУДНИК Правило 40 ЕСЛИ QUALIFY = ДА И, GRADE < 3.5 И EXPERIENCE = 2 ТО POSITION= ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ Правило 50 ЕСЛИ QUALIFY = ДА И GRADE < 3.5 И EXPERIENCE = 2 ТО POSITION = НЕТ Правило 60 ЕСЛИ QUALIFY = ДА И GRADE >= 3.5 ТО POSITION = ИНЖЕНЕР КОНСТРУКТОР | 1 INTEREST 2 3 4 5 DEGREE 6 7 8 9 DEGREE 10 DISCOVERY 11 12 13 QUALIFY 14 GRADE 15 EXPERIENCE 16 17 QUALIFY 18 GRADE 19 EXPERIENCE 20 21 QUALIFY 22 GRADE
———————————————— База знаний | —————————— Список переменных условия

Рис. 6.17. Список переменных условия

6_18.jpg (53376 bytes)
Рис. 6.18. Очередное изменение стека логических выводов

Правило 10 ЕСЛИ DEGREE=НЕТ,
ТО POSITION = НЕТ
Правило 20 ЕСЛИ DEGREE ДА,
TO QUALIFY = ДА
Правило 30 ЕСЛИ DEGREE = ДА И,
DISCOVERY = ДА
ТО POSITION = НАУЧНЫЙ
СОТРУДНИК
Правило 40 ЕСЛИ QUALIFY = ДА И,
GRADE < 3.5
И EXPERIENCE = 2
ТО POSITION= ИНЖЕНЕР ПО
ЭКСПЛУАТАЦИИ
Правило 50 ЕСЛИ QUALIFY = ДА И
GRADE < 3.5
И EXPERIENCE = 2
ТО POSITION = НЕТ
Правило 60 ЕСЛИ QUALIFY = ДА И
GRADE >= 3.5
ТО POSITION = ИНЖЕНЕР
КОНСТРУКТОР
DEGREE
DISCOVERY
EXPERIENCE
GRADE
 | Значение
I | ДА
I | НЕТ
NI |
NI |
______________
Список переменных

————————————————
База знаний

Рис. 6.19. Список переменных

Поиск правила с переменной логического вывода POSITION будет продолжен. Следующим система выбирает правило 40:

40 ЕСЛИ QUALIFY = ДА И GRADE < 3.5
И EXPERIENCE = 2,
ТО POSITION = ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ

и помещает его в стек (см. рис. 6.20). Просмотрев условия правила и список переменных, система обнаруживает, что переменной QUALIFY значение еще не присвоено и что, кроме того, эта переменная есть в списке логического вывода правила 20. Система заносит в стек новый элемент (см.рис. 6.21). Правило 20 содержит только одну переменную условия - DEGREE и его можно выполнить, так как переменная DEGREE уже проинициализирована (DEGREE = ДА):

20 ЕСЛИ DEGREE = ДА,
TO QUALIFY = ДА

Согласно правилу 20 переменной QUALIFY присваивается значение ДА (QUALIFY" ДА), и отработанный логический вывод удаляется из стека. Система вернется к правилу 40, увеличит на единицу номер условия (см.рис.6.22) и приступит к работе с переменной GRADE. Переменной GRADE нет в списке выводов, и значение ей еще не присвоено. Система задаст новый вопрос:

6_20.jpg (52014 bytes)
Рис. 6.20. Стек выводов после очередного изменения

6_21.jpg (52241 bytes)
Рис. 6.21. Стек логических выводов с несколькими элементами

6_22.jpg (50742 bytes)

Рис. 6.22. Стек логических выводов после очередного изменения

Каков был средний балл посетителя в учебном заведении ?

Ответ посетителя, скажем 3,0, и задает значение переменной GRADE. На рис. 6.2 3 показаны список переменных и стек логических выводов после того, как номер условия продвинут до трех.
Переменной EXPERIENCE нет в списке логических выводов, и она не проинициализирована, поэтому система опять спросит:

Сколько лет посетитель работал по специальности ?

Пусть системе передан ответ посетителя: 4. Тогда переменной EXPERIENCE присваивается значение 4, признак ее инициализации изменяется на I, а номер условия в стеке продвигается до 4. В правиле 40 переменных условия больше нет, и, значит, можно приступить к проверке условий. Все условия правила
40 ЕСЛИ QUALIFY = ДА И GRADE= 3.0 И ЕХР = 2
истинны, так как

QUALIFY=ДА
GRADE=3.0
EXPERIENCE=2

6_23.jpg (62332 bytes)

Рис. 6.23. Состояние задачи

и в соответствии с частью ТО

ТО POSH ION = ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ

переменной POSITION присваивается значение ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ. Цель достигнута, посетителю будет предложена должность в отделе эксплуатации оборудования.

Замечания по разработке системы

Система, реализующая обратную цепочку рассуждений, должна выполнять следующие шаги:
1. Определить переменную логического вывода.
2. В списке логических выводов искать первое вхождение этой переменной. Если переменная найдена, в стек логических выводов поместить номер соответствующего правила и установить номер условия равным 1. Если переменная не найдена, сообщить пользователю, что ответ найти невозможно.
3. Присвоить значения всем переменным условия из данного правила.
4. Если в списке переменных указано, что какой-либо переменной условия не присвоено значение и ее нет среди переменных логического вывода (ее нет в списке логических выводов), запросить ее значение у пользователя.
5. Если какая-либо переменная условия входит в переменные логического вывода, поместить в стек номер правила, в логический вывод которого она входит, и вернуться к шагу 3.
6. Если из правила нельзя определить значение переменной, удалить соответствующий ему элемент из стека и в списке логических выводов продолжить поиск правила с этой переменной логического вывода.
7. Если такое правило найдено, перейти к шагу 3.
8. Если переменная не найдена ни в одном из оставшихся правил в логическом выводе, правило для предыдущего вывода не верно. Если предыдущего вывода не существует, сообщить пользователю, что ответ получить невозможно. Если предыдущий вывод существует, вернуться к шагу 6.
9. Определить значение переменной из правила, расположенного в начале стека; правило из стека удалить. Если есть еще переменные логического вывода, увеличить значение номера условия и для проверки оставшихся переменных вернуться к шагу 3. Если больше нет переменных логического вывода, сообщить пользователю окончательный вывод.

Экспертная система

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

Пример программы

Давайте рассмотрим как можно настроить приведенную в настоящей главе программу, реализующую обратную цепочку рассуждений, на любую базу знаний. Программа разработана так, что пользователь может вставить в нее свои правила, начиная с предложения 1500 по 1680. Запустить программу можно с помощью команды RUN.

Пояснения к программе

В программе используется база знаний из примера с приемом на работу. Например, предложения программы 1500 и 1510 описывают правило

10 ЕСЛИ DEGREE = НЕТ,
ТО POSITION=НЕТ

А предложения 1560 - 1570 описывают правило:

ЕСЛИ (QUALIFY=ДА) И (GRADE 3,5) И (EXPERIENCE=2),
ТО POSITION = ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ

Все переменные, входящие в список переменных (V$), - переменные условия, а не логического вывода. Список переменных формируется в предложении 367. Система должна присвоить значения всем переменным из списка (предложения программы 1700-1715). Список переменных определен в предложении 367. В предложении 305 формируется список логических выводов, а в предложениях 407-409 - список переменных условия.

Листинг программы

Листинг программы сопровождается примерами ее выполнения. Обратите внимание на то, что ответы системы приводятся в сокращенном виде. Например, РО = НАУЧНЫЙ СОТРУДНИК (или ИНЖЕНЕР-КОНСТРУКТОР, или ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ) означает “Предложить посетителю должность в соответствующем отделе>>,а РО=НЕТ - "Посетителю отказать"; QUALIFY=ДA означает “Посетитель, возможно, будет принят на работу, но пока не известно на какую должность”.

Листинг 6.1

1 REM **** СИСТЕМА ОБРАТНЫХ РАССУЖДЕНИЙ *****************
10 REM НОВЫЕ УСЛОВИЯ ПРАВИЛ ЗАПИСЫВАЮТСЯ В ПРЕДЛОЖЕНИЯХ
11 REM 1500,1520,...
20 REM НАПРИМЕР, 1500 IF (A1=2) AND (A2=6) OR (АЗ$="ДА") THEN S=1
22 REM 1502 RETURN
30 REM 1520 IF (J$="HET") THEN S=1
32REM 1522 RETURN
40 REM ЧАСТЬ ТО ПРИВЕДЕННЫХ ВЫШЕ ПРАВИЛ ВСЕГДА СОДЕРЖИТ
41 REM THEN S=1
50 REM ПРЕДЛОЖЕНИЯ 1510,1530,..., 1550 ПРОГРАММЫ-
51 REM ЧАСТИ ТО ПРАВИЛ ПОЛЬЗОВАТЕЛЯ,
60 REM НАПРИМЕР, 1510 PO=”ДA"...:RETURN
200 REM **** БЛОК ИНИЦИАЛИЗАЦИИ ПЕРЕМЕННЫХ *******
210 REM СПИСОК ВЫВОДОВ (СL$),СПИСОК ПЕРЕМЕННЫХ (V$), ПРИЗНАКИ
220 REM ИНИЦИАЛИЗАЦИИ (IN),СТЕК ПРАВИЛ (SS$)
221 REM И СТЕК УСЛОВИЙ (SS$),
230 REM СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ (CV$) И УКАЗАТЕЛЬ СТЕКА (SP)
240 DIM GL$ (10) ,V$ (10) ,CV$ (40) ,IN (10) ,SS (10) ,CS (10)
250 SP=11: REM РАЗМЕР СТЕКА —10 ЭЛЕМЕНТОВ, SP = 10+1
260 FOR I=1 ТО 10
270 GL$(I)=" ": V$(I)=" ": IN(I)=0: SS(I)=0: CS(I)=0
280 NEXT I
290 REM ВВОД ПЕРЕМЕННЫХ ЛОГИЧЕСКОГО ВЫВОДА
295 REM ПЕРЕМЕННЫЕ ВВОДЯТСЯ В ПОРЯДКЕ ПОЯВЛЕНИЯ В ПРАВИЛАХ
300 REM НАЖАТИЕ КЛАВИШИ ВОЗВРАТ ЗАВЕРШАЕТ ВВОД
305 GL$(1)="PO": GL$(2)="QU": GL$(3)="PO": GL$(4)="PO": GL$(5)="PO"
306 GL$(6)="PO"
307 PRINT"*** СПИСОК ЛОГИЧЕСКИХ ВЫВОДОВ *****
310 FOR I=1 ТО 10
320 PRINT "ЛОГИЧЕСКИЙ ВЫВОД "; 1;
325 PRINT GL$(I)
335 NEXT I
338 PRINT "ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ B03BPAT"; Z
340 REM ФОРМИРОВАНИЕ СПИСКА ПЕРЕМЕННЫХ
350 REM ИМЕНА ПЕРЕМЕННЫХ ВВОДЯТСЯ В ПОРЯДКЕ ИХ ПОЯВЛЕНИЯ В
351 REM ПРАВИЛАХ, НЕ БОЛЕЕ 3 ДЛЯ ПРАВИЛА.
360 REM ПЕРЕМЕННЫЕ ИМЕЮТ УНИКАЛЬНЫЕ ИМЕНА
365 REM НАЖАТИЕ КЛАВИШИ ВК ЗАВЕРШАЕТ ВВОД ПЕРЕМЕННЫХ
366 INPUT "*** СПИСОК ПЕРЕМЕННЫХ ***''
367 V$(1)="DE":V$(2)="DI":V$(3)="EX":V$(4)="GR"
370 FOR I=1 ТО 10
380 PRINT "ПЕРЕМЕННАЯ ";1;
385 PRINT V$ (I)
395 NEXT I
396 INPUT "ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ B03BPAT"; Z
400 REM ФОРМИРОВАНИЕ СПИСКА ПЕРЕМЕННЫХ УСЛОВИЯ (ИМЕНА
401 REM ПЕРЕМЕННЫХ ЗАПИСЫВАЮТСЯ В ПОРЯДКЕ ИХ ПОЯВЛЕНИЯ
402 REM В ЧАСТЯХ ЕСЛИ ПРАВИЛ, НЕ БОЛЕЕ 3 ДЛЯ ПРАВИЛА).
405 REM НАЖАТИЕ КЛАВИШИ ВК ЗАВЕРШАЕТ ВВОД
406 PRINT "*** СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ ***"
407 CV$(1)="DE": CV$(5)="DE": CV$(9)="DE": CV$(10)="D1": CV$(13)="QU"
408 CV$(14)="GR": CV$(15)="EX": CV$(17)="QU": CV$(18)="GR":
409 CV$(19)="EX": CV$(21)="QU":CV$(22)="GR"
410 FOR I=1 TO 8:PRINT"** УСЛОВИЕ "; I
420 FOR J=1 TO 4:РR1NТ"ПЕРЕМЕННЛЯ "; J
423 K=4*(I-1)+J
424 PRINT CV$ (К)
430 NEXT J
432 IF I=4 THEN INPUT" ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ВК"
435 NEXT I
500 REM *************** БЛОК ВЫВОДА *****************************
505 INPUT"** ВВЕДИТЕ ИМЯ ПЕРЕМЕННОЙ ЛОГИЧЕСКОГО ВЫВОДА" ;V$
510 REM ИЗ СПИСКА ЛОГИЧЕСКИХ ВЫВОДОВ (GL$) ПОЛУЧИТЬ НОМЕР
511 REM ПРАВИЛА, СОДЕРЖАЩЕГО ЭТОТ ВЫВОД (SN)
520 F=1: GOSUB 2200: REM НАЧАТЬ ПОИСК С ПЕРВОГО ПРАВИЛА
525 IF SN=0 THEN STOP: REM НЕТ ТАКОГО ЛОГИЧЕСКОГО ВЫВОДА
530 REM В СТЕК ПОМЕЩАЕТСЯ НОМЕР ПРАВИЛА (SN) И НОМЕР
535 REM УСЛОВИЯ=1, (СТЕК СОДЕРЖИТ НОМЕРА ПРАВИЛ (SS)
537 REM И НОМЕРА УСЛОВИЙ (CS))
540 GOSUB 2000
545 REM НАЙТИ УСЛОВИЕ В СПИСКЕ ПЕРЕМЕННЫХ УСЛОВИЯ
550 I=(SS(SP)-1)*4+CS(SP)
555 V$=CV$(I): REM ПЕРЕМЕННАЯ УСЛОВИЯ
560 REM ПОСЛЕДНЕЕ УСЛОВИЕ ДАННОГО ПРАВИЛА?
565 IF V$="" THEN GOTO 580: REM ПОСЛЕДНЕЕ УСЛОВИЕ:
566 REM —ВЫПОЛНИТЬ ПРАВИЛО
567 REM ПЕРЕМЕННАЯ УСЛОВИЯ ЯВЛЯЕТСЯ ВЫВОДОМ ?
568 F=1: GOSUB 2200: IF SN 0 THEN GOTO 520
569 REM ПОМЕСТИТЬ ВЫВОД В СТЕК
570 GOSUB 2400:
571 REM ПРОИНИЦИАЛИЗИРОВАНА ЛИ ПЕРЕМЕННАЯ УСЛОВИЯ ?
575 CS(SP)=CS(SP+1): GOTO 545:REM ПРОВЕРИТЬ СЛЕДУЮЩЕЕ УСЛОВИЕ
580 REM В ЧАСТИ ЕСЛИ ПРАВИЛА БОЛЬШЕ НЕТ УСЛОВИЙ
582 SN=SS(SP)
585 S=0: ON SN GOSUB 1500,1520,1540,1560.1580,1600
590 REM МОЖНО ЛИ ВЫЗВАТЬ ЧАСТЬ ТО, Т.Е. S=1 ?
600 IF S=1 THEN GOTO 630: REM ВЫЗВАТЬ ЧАСТЬ ТО
605 REM НЕУДАЧА ... ПРОДОЛЖИТЬ ПОИСК В ОСТАВШИХСЯ ПРАВИЛАХ
610 I=SS(SP): V$=GL$(I):REM ПОЛУЧИТЬ ЛОГИЧЕСКИЙ ВЫВОД
615 F=SS(SP)+1: REM ПОИСК ВЫВОДА В ОСТАВШИХСЯ ПРАВИЛАХ
620 GOSUB 2200
625SP=SP+1:GOT0 525
626 REM ВЫБРАТЬ ИЗ СТЕКА СТАРЫЙ ВЫВОД И поместить НОВЫЙ
630 REM ЧАСТЬ ЕСЛИ ИСТИННА, ВЫЗВАТЬ ЧАСТЬ ТО
635 ON SN GOSUB 1510,1530.1550,1570,1590,1610
650 REM ВЫБРАТЬ ЭЛЕМЕНТ СТЕКА; ЕСЛИ БОЛЬШЕ НЕТ —ОТВЕТ ПОЛУЧЕН
655 REM ЕСЛИ СТЕК НЕ ПУСТ —ПРОВЕРИТЬ ПРЕДЫДУЩИЙ ВЫВОД
660 SP=SP+1 :REM ВЫБРАТЬ ИЗ СТЕКА
670 IF SP 11 THEN GOTO 690: REM СТЕК НЕ ПУСТ
680 PRINT"*** НОРМАЛЬНОЕ ЗАВЕРШЕНИЕ" :REM КОНЕЦ
685 STOP
690 REM СТЕК ПУСТ—ВЫБРАТЬ СЛЕДУЮЩЕЕ УСЛОВИЕ И ПРОДОЛЖИТЬ
695CS(SP)=CS(SP)+1
700 GOTO 545
1490 REM ********** ПРАВИЛА ЕСЛИ-ТО ***********
1492 REM ПРАВИЛА ВЗЯТЫ ИЗ БАЗЫ ЗНАНИЙ О ДОЛЖНОСТЯХ
1494 REM ИМЯ ПЕРЕМЕННОЙ СОСТОИТ ИЗ 2 БУКВ ДЛЯ СОВМЕСТИМОСТИ
 1496 REM С РАЗНЫМИ ВЕРСИЯМИ БЕЙСИКА (DEG СОКРАЩЕНО ДО DE,
1498 REM A QUAL — ДО QU)
1499 REM** ПРАВИЛО1
1500 IF DE$="HET” THEN S=1
1502 RETURN
1510 PO$="HET":PRINT"PO=HET": RETURN
1519 REM ** ПРАВИЛО 2
1520 IF DЕ$="ДА" THEN S=1
1522 RETURN
1530 QU$="ДА": PRINT''QU=ДА" :RETURN
1539 REM** ПРАВИЛО 3
1540 IF (DE$="ДА") AND (DI$="ДА") THEN S=1
1542 RETURN
1550 РО$="ДА":РRINТ"РО=НАУЧНЫЙ COTPУДHИK":RENURN
1559 REM ** ПРАВИЛО 4
1560 IF (QU$="ДА") AND (GR 3.5) AND (EX=2) THEN S=1
1562 RETURN
1570 РО$="ДА":РRINТ"РО=ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ": RETURN
1579 REM ** ПРАВИЛО 5
1580 IF (QU$="ДА") AND (GR 3.5) AND (EX 2) THEN S=1
1582 RETURN
1590 PO$="HET":PRINT"PO=HET": RETURN
1599 REM ** ПРАВИЛО 6
1600 IP (QU$="ДА") AND (GR= 3.5) THEN S=1
1602 RETURN
1610 РО$="ДА":РRINТ"РО=ИНЖЕНЕР-КОНСТРУКТОР": RETURN
1611 REM **** КОНЕЦ БАЗЫ ЗНАНИЙ *****
1690 REM **** ВВОД ДАННЫХ ****
1699 REM ВВОД ВЫПОЛНЯЕТСЯ ДЛЯ БАЗЫ ЗНАНИЙ "ДОЛЖНОСТЬ"
1700 INPUT”ПOCETИTEЛЬ ИМЕЕТ УЧЕНОЕ ЗВАНИЕ ? ";DE$: RETURN
1705 INPUT”ПОСЕТИТЕЛЬ СДЕЛАЛ ОТКРЫТИЕ ?";DI$: RETURN
1710 INPUT''СКОЛЬКО ЛЕТ ПОСЕТИТЕЛЬ РАБОТАЛ ПО СПЕЦИАЛЬНОСТИ ?";ЕХ: RETURN
1715 INPUT”KAKOB СРЕДНИЙ БАЛЛ ПОСЕТИТЕЛЯ В УЧЕБНОМ ЗАВЕДЕНИИ";СР: RETURN
1750 REM **** КОНЕЦ ВВОДА ДАННЫХ ****
1999 REM **** БЛОК ПОДПРОГРАММ ****
2000 REM ПОДПРОГРАММА ЗАПИСИ НОМЕРА ПРАВИЛА (SN) НОМЕРА
2002 REM УСЛОВИЯ = 1 В СТЕК ВЫВОДОВ, СОСТОЯЩЕГО ИЗ НОМЕРОВ
2003 REM ПРАВИЛ (SS) ИЗ НОМЕРОВ УСЛОВИЙ (CS)
2004 REM ДЛЯ ЭТОГО УКАЗАТЕЛЬ СТЕКА (SP) УМЕНЬШАЕТСЯ НА ЕДИНИЦУ
2020 SP=SP-1: SS(SP)=SN: CS(SP)=1
2030 RETURN
2099 REM **************************************************************
2200 REM ПОДПРОГРАММА ИЩЕТ В СПИСКЕ ЛОГИЧЕСКИХ ВЫВОДОВ
2201 REM ПЕРЕМЕННУЮ V$(I), ЕСЛИ ПЕРЕМЕННАЯ ЕСТЬ В СПИСКЕ,
2202 REM TO ВОЗВРАЩАЕТСЯ SNO, НЕТ- SN=0
2220 SN=0: REM SN СНАЧАЛА ОБНУЛЯЕТСЯ
2230 FOR I=F TO 8: REM В СПИСКЕ ВЫВОДОВ ИЩЕТСЯ F
2240 IF V$=GL$(I) THEN GOTO 2270: REM ПРОВЕРКА РАБОЧЕЙ ТАБЛИЦЫ
2250 NEXT I
2260 RETURN: REM НЕТ В СПИСКЕ
2270 SN=I: REM ЕСТЬ В СПИСКЕ
2280 RETURN
2299 REM ***************************************************
2400 REM ПОДПРОГРАММА ИНИЦИАЛИЗАЦИИ ПЕРЕМЕННОЙ V$
2402 REM IN=1 — ПЕРЕМЕННОЙ ПРОИНИЦИАЛИЗИРОВАНА, IN=0 —НЕТ
2404 REM V$ ЕСТЬ В СПИСКЕ ПЕРЕМЕННЫХ
2420 FOR I=1 ТО 10: REM ПОИСК ПЕРЕМЕННОЙ В СПИСКЕ
2430 IF V$=V$(I) THEN GOTO 2445: REM ПЕРЕМЕННАЯ НАЙДЕНА
2440 NEXT I
2445 IF IN(I)=1 THEN RETURN: REM ПЕРЕМЕННАЯ ПРОИНИЦИАЛИЗИРОВАНА
2450 IF IN(I)=1 THEN RETURN: REM ПЕРЕМЕННАЯ ПРОИНИЦИАЛИЗИРОВАНА
2460 REM В ПРОГРАММЕ БЛОК ИНИЦИАЛИЗАЦИИ ПЕРЕМЕННОЙ
2462 REM НАЧИНАЕТСЯ С ПРЕДЛОЖЕНИЯ 1700
2464 REM ИХ ФОРМАТ: ПРЕДЛОЖЕНИЕ INPUT И ВК
2465 IN(I)=1: REM ВЗВЕСТИ ПРИЗНАК ИНИЦИАЛИЗАЦИИ
2470 ON IGOSUB 1700,1705,1710,1715
2480 RETURN

Примеры выполнения программы

RUN
*** СПИСОК ЛОГИЧЕСКИХ ВЫВОДОВ***
 ЛОГИЧЕСКИЙ ВЫВОД1 РО
ЛОГИЧЕСКИЙ ВЫВОД2 QU
 ЛОГИЧЕСКИЙ ВЫВОДЗ РО
ЛОГИЧЕСКИЙ ВЫВОД4 РО
ЛОГИЧЕСКИЙ ВЫВОД5 РО
ЛОГИЧЕСКИЙ ВЫВОД6 РО
ЛОГИЧЕСКИЙ ВЫВОД7
ЛОГИЧЕСКИЙ ВЫВОД8
ЛОГИЧЕСКИЙ ВЫВОД9
ЛОГИЧЕСКИЙ ВЫВОД10
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ВК

*** СПИСОК ПЕРЕМЕННЫХ***
 ПЕРЕМЕННАЯ 1DE
 ПЕРЕМЕННАЯ 2 DI
 ПЕРЕМЕННАЯ 3 EX
 ПЕРЕМЕННАЯ 4GR
 ПЕРЕМЕННАЯ 5
ПЕРЕМЕННАЯ 6
ПЕРЕМЕННАЯ 7
 ПЕРЕМЕННАЯ 8
ПЕРЕМЕННАЯ 9
ПЕРЕМЕННАЯ 10
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ВК

*** СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ ***
** УСЛОВИЕ 1
ПЕРЕМЕННАЯ 1DE
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛОВИЕ 2
 ПЕРЕМЕННАЯ 1 DE
 ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 3
ПЕРЕМЕННАЯ 1 DE
ПЕРЕМЕННАЯ 2 DI
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 4
ПЕРЕМЕННАЯ1QU
ПЕРЕМЕННАЯ 2GR
 ПЕРЕМЕННАЯ 3 EX
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 5
ПЕРЕМЕННАЯ1QU
ПЕРЕМЕННАЯ 2GR
ПЕРЕМЕННАЯ 3 EX
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 6
 ПЕРЕМЕННАЯ 1 QU
 ПЕРЕМЕННАЯ 2 GR
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 7
ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛОВИЕ 8
 ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4

 Примеры диалогов с программой

 Пример 1:
*** ВВЕДИТЕ ИМЯ ПЕРЕМЕННОЙ ЛОГИЧЕСКОГО ВЫВОДА ? РО
ПОСЕТИТЕЛЬ ИМЕЕТ ЛИ УЧЕНОЕ ЗВАНИЕ ? НЕТ
РО=НЕТ
*** НОРМАЛЬНОЕ ЗАВЕРШЕНИЕ
Break In 685
Ok

Пример 2:
*** ВВЕДИТЕ ИМЯ ПЕРЕМЕННОЙ ЛОГИЧЕСКОГО ВЫВОДА ? РО
ПОСЕТИТЕЛЬ ИМЕЕТ УЧЕНОЕ ЗВАНИЕ? ДА
ПОСЕТИТЕЛЬ СДЕЛАЛ ОТКРЫТИЕ ? НЕТ
QU=ДА
КАКОВ СРЕДНИЙ БАЛЛ ПОСЕТИТЕЛЯ В УЧЕБНОМ ЗАВЕДЕНИИ? 3.0
СКОЛЬКО ЛЕТ ПОСЕТИТЕЛЬ РАБОТАЛ ПО СПЕЦИАЛЬНОСТИ ? 2.8
РО=ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ
*** НОРМАЛЬНОЕ ЗАВЕРШЕНИЕ
Break In 685
Ok

Пример 3:
*** ВВЕДИТЕ ИМЯ ПЕРЕМЕННОЙ ЛОГИЧЕСКОГО ВЫВОДА ? РО
 ПОСЕТИТЕЛЬ ИМЕЕТ ЛИ УЧЕНОЕ ЗВАНИЕ ? ДА
ПОСЕТИТЕЛЬ СДЕЛАЛ ОТКРЫТИЕ ? НЕТ
КАКОВ СРЕДНИЙ БАЛЛ ПОСЕТИТЕЛЯ В УЧЕБНОМ ЗАВЕДЕНИИ ? 2.О
 СКОЛЬКО ЛЕТ ПОСЕТИТЕЛЬ РАБОТАЛ ПО СПЕЦИАЛЬНОСТИ ? 4.0
 РО=ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ
***НОРМАЛЬНОЕ ЗАВЕРШЕНИЕ
Break In 685
Ok

 Пример 4:
*** ВВЕДИТЕ ИМЯ ПЕРЕМЕННОЙ ЛОГИЧЕСКОГО ВЫВОДА ? QU
ПОСЕТИТЕЛЬ ИМЕЕТ УЧЕНОЕ ЗВАНИЕ ? НЕТ
Break in 525
Ok

 В последнем примере для условия DE = НЕТ нет правила, в которое
переменная QU входила бы в качестве переменной логического вывода.

 Пример 5:
*** ВВЕДИТЕ ИМЯ ПЕРЕМЕННОЙ ЛОГИЧЕСКОГО ВЫВОДА ? QU
 ПОСЕТИТЕЛЬ ИМЕЕТ УЧЕНОЕ ЗВАНИЕ? ДА
QU=ДА
*** НОРМАЛЬНОЕ ЗАВЕРШЕНИЕ
Break in 685
Ok

 Рабочие таблицы системы обратных рассуждений

 Приведенная ниже таблица предназначена для упрощения процесса разработки новой базы знаний и замены уже существующей. Она позволит читателю проверить взаимосвязи базы знаний и структур данных экспертной системы. В дальнейшем можно разработать входной компилятор, который будет читать базу знаний и автоматически преобразовывать ее в структуры данных. Однако это рекомендуется делать после того, как будут полностью усвоены все изложенные здесь идеи. Рабочая таблица поможет создать и преобразовать переменные (переменная 11, переменная 12 и т.д.) и значения (значение 11, значение 12 и т.д.) новой базы знаний в предложения программы. Сначала создаются правила, затем они преобразуются в рабочую таблицу.

92str.jpg (50089 bytes)
Следующая таблица содержит список переменных условия (предложения 407 - 409).

93str.jpg (28139 bytes)

Следующую таблицу можно использовать для включения переменных в список переменных (предложение 367). Имя переменной может быть занесено в список только один раз.

93_2str.jpg (10057 bytes)

Следующая таблица предназначена для включения в программ: правил (предложения 1490 — 1611).

Части IF правила:

94str.jpg (41318 bytes)

Части THEN правила:

95str.jpg (29730 bytes)


Глава 7. Вероятность и нечеткая логика в экспертных системах

ГЛАВА 7

ВЕРОЯТНОСТЬ И НЕЧЁТКАЯ ЛОГИКА В
ЭКСПЕРТНЫХ СИСТЕМАХ

В гл. 3 было введено понятие эвристического правила, т.е. правила, сформулированного экспертом. В основе многих эвристических правил лежит вероятность появления определенного события, вычислить которую может только эксперт. Другими словами, эксперт делает обоснованные предположения в своей проблемной области.
В действительности это означает, что существуют статистические данные, позволяющие делать какие-либо предположения. Это могут быть, например, медицинские диагнозы, которые врач ставит на основании своих наблюдений над пациентом. Опыт врача во многих случаях с большой точностью позволяет определить заболевание пациента. Конечно, есть вероятность, что врач ошибся, поэтому часто рассматриваются и другие диагнозы.
Компания, занимающаяся добычей нефти, может на основе данных, полученных в результате проведенных исследований, сделать вывод, что найдено месторождение нефти и вынести решение - бурить скважину. Но может оказаться, что в скважине нефти нет.
Байес разработал вероятностную методику, основанную на утверждении, что какое-то событие произойдет, потому что раньше уже произошло какое-то другое событие. Теория Байеса входит в теорию вероятностей в раздел, названный “Условная вероятность”. В экспертных системах широко применяются статистические решения, опирающиеся на теорию Байеса, использование которой описано ниже.
Рассмотрим сначала другой аспект теории вероятностей. Не всегда можно описать событие с помощью точно определенных правил. Например, можно сказать, что у человека легкое недомогание, если у него температура больше 37°, но меньше 38°, а при большей температуре заболевание может оказаться серьезным. Люди не всегда могут ответить на вопросы точно. Можно ли узнать, какая у человека температура, если он говорит, что слегка заболел ? Скорее всего нет. Такие слова, как высокий, горячий и легкий, представляют собой лингвистические переменные, которые нельзя определить одним значением. Использование этих понятий при формулировании правил называется нечеткой логикой.
Применение нечеткой логики в экспертных системах рассматривается в других разделах.

Основные понятия теории вероятностей

Теория вероятностей изучает случайные события. Очень часто человек, сам того не замечая, высказывает предположение или делает вывод, пользуясь терминологией теории вероятностей. Например, “Я на 80 процентов уверен, что все в порядке”.

96_1.jpg (5828 bytes)

Вероятность можно определить следующим образом:
Предположим, что эксперимент заключается в двукратном бросании монеты. Возможны различные исходы этих экспериментов.

96_2.jpg (5474 bytes)

Вероятность выпадания решки вычисляется как

96_3.jpg (5731 bytes)

т.е. решка выпадает во втором, третьем и четвертом эксперименте.
Другой пример: вероятность того, что в первом броске выпадет решка, равна 2/4 (третий и четвертый эксперимент). Вероятность того, что решка вообще не выпадет, равна 1/4 (первый эксперимент). Как видно из примеров, в уравнении вероятностей знаменатель всегда больше или равен числителю, так как число всех экспериментов всегда больше или равняется числу экспериментов, исходом которых будет конкретное событие. Поэтому вероятность появления какого-либо события больше или равна 0, но меньше или равна 1.

Вероятность Байеса

Байес занимался разработкой теории условной вероятности. Условная вероятность учитывает уже известные исходы экспериментов. Например, рассмотрим все тот же эксперимент двукратного бросания монеты. Решка выпадает после орла только во втором эксперименте, и вероятность этого события равна1/4.Но вероятность выпадания решки во втором броске с учетом того, что в первом уже выпал орел, равна 1/2. Вероятность в этом случае считается с учетом другого набора экспериментов:

97.jpg (4197 bytes)

Из рассмотренных ранее экспериментов удалены те, в которых при первом броске выпадает решка, потому что известно о выпадании орла в первом броске. Из двух оставшихся экспериментов только во втором после выпадания орла выпадает решка. Следовательно, условная вероятность выпадания орла во втором броске с учетом выпадания орла в первом равняется 1/2.
Условная вероятность - это вероятность наступления какого-то события s при условии, что уже наступило какое-то другое событие е. Условная вероятность обозначается P(sle). Вероятность наступления двух событий вычисляется следующим образом:

P(e и s)=P(sle)*P(e)

Уравнение читается так: вероятность того, что произойдут два события е и s, причем е произойдет первым, равна вероятности наступления события s, если известно, что произошло событие е, умноженной на вероятность появления события е. Рассмотрим пример использования этого уравнения. Предположим, что из набора букв IIОО случайным образом выбирается либо буква I, либо О.
 Применяя уравнение условной вероятности, можно вычислить вероятность того, что в двух попытках сначала попадется буква О, а потом I. Подставив в уравнение О и I, получим:

Р(О и I) = Р(I | O) * Р(0).

Вероятность выбора буквы О, Р(0), равна 2/4, так как в наборе букв две буквы I и две буквы О. Вероятность того, что после буквы О будет выбрана I, Р(I,0), равна 2/3. Чтобы понять, почему это так, рассмотрим случай, когда буква О уже выбрана и остались три буквы:
ПО.
Вероятность выбора буквы I составляет 2/3, поскольку из трех оставшихся букв две I. Вероятность Р(I и О) равна:

Р(I|О)*Р(0) = 2/3*2/4=1/3.

В экспертных системах используется еще одно уравнение условной вероятности:

P(s)=P(s | e) * P(e)+P(s |NOTe) * P(NOTe), (1)

Уравнение читается так: вероятность появления события s, P(s), равняется вероятности появления события s при условии появления события е, P(sle), умноженной на вероятность появления события е, Р (е), плюс вероятность появления события s при условии, что событие е не произошло, P(s | NOT e), умноженная на вероятность, что событие е не произошло, P(NOT е). В последующих примерах это уравнение будет называться уравнением 1.

Пример

Рассмотрим использование условной вероятности на примере правил, описывающих экспертную систему фондовой биржи (предположим, что эти правила относятся только к фондовой бирже).

10 ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ = ПАДАЮТ,
ТО УРОВЕНЬ ЦЕН = РАСТЕТ
20 ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ = РАСТУТ,
ТО УРОВЕНЬ ЦЕН = ПАДАЕТ
30 ЕСЛИ ВАЛЮТНЫЙ КУРС ДОЛЛАРА = ПАДАЕТ,
ТО ПРОЦЕНТНЫЕ СТАВКИ = РАСТУТ
40 ЕСЛИ ВАЛЮТНЫЙ КУРС ДОЛЛАРА = РАСТЕТ,
ТО ПРОЦЕНТНЫЕ СТАВКИ = ПАДАЮТ

Надо определить вероятность повышения уровня цен. Цель примера не в описании реальной ситуации, а просто в иллюстрации подхода к решению задачи. Система, реализующая обратные рассуждения в части ТО правил, будет искать вывод УРОВЕНЬ ЦЕН = РАСТЕТ. Подойдет правило 10: УРОВЕНЬ ЦЕН = РАСТЕТ при условии, что ПРОЦЕНТНЫЕ СТАВКИ=ПАДАЮТ. Используя уравнение 1 условной вероятности, можно оценить эти условия. Перейдем к переменным (см. гл. 5) и заменим s на STOCK=PACTET и е на INТ=ПАДАЮТ,в результате получим уравнение 2:

P(STOCK=PACTET) =Р (STOCK=PACTET | INT=ПАДАЮТ) (2)
*Р(1МТ=ПАДАЮТ)+ P(STOCK=PACTET | INT=HE ПАДАЮТ)
*P(INT=HE ПАДАЮТ)

Для того чтобы определить, присвоено ли переменной INT значение ПАДАЮТ, надо вернуться к правилу 40:

40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INT=ПАДАЮТ

Правило 40 преобразуется в уравнение 3:

Р(INT = ПАДАЮТ) = Р (INT =ПАДАЮТ | DOLLAR=РАСТЕТ) (3)
*Р(DOLLAR = РАСТЕТ)+Р (INT=ПАДАЮТ | DOLLAR=НЕ РАСТЕТ) )*
Р (DOLLAR = НЕ РАСТЕТ)

Поскольку ни в одном из правил в части ТО нет переменной DOLLAR, т.е. значение вероятности для нее определить нельзя, это значение должно быть введено пользователем. По этой же причине условную вероятность также должен задать пользователь (она не входит в часть ТО правил). Давайте установим вероятности появления некоторых событий исходя из собственных обоснованных соображений:

Р (DOLLAR = РАСТЕТ) = 0,6

Согласно теории вероятностей сумма вероятностей появления и непоявления какого-либо события равна 1. В дальнейшем это свойство вероятностей будет часто использоваться. Исходя из сказанного можно записать:

P(DOLLAR = НЕ РАСТЕТ) = 1 - Р (DOLLAR = РАСТЕТ) = 1 - 0,6 = 0,4

Присвоим значения всем условным вероятностям:

Р (INТ = ПАДАЕТ | DOLLAR = РАСТЕТ) = 0.8
Р (INT = ПАДАЕТ | DOLLAR = НЕ РАСТЕТ) = 0,1

Отметим, что сумма условных вероятностей для противоположных событий не равняется 1. Противоположными в условной вероятности будут события DOLLAR=PACTET и DOLLAR = НЕ РАСТЕТ. Подставив присвоенные значения в уравнение 3, получим:

P(INT = ПАДАЕТ) = 0,8 * 0,6 + 0,1 * 0,4=0,52

Из основного свойства вероятности находим:

P (INT = НЕ ПАДАЕТ) = 1 –0,52 = 0,48

Для того чтобы найти P(STOCK=PACTET) пользователь должен задать значения условных вероятностей:

Р (STOCK = РАСТЕТ | INT = ПАДАЕТ) = 0,85
Р (STOCK = PACTET | INT = HE ПАДАЕТ) = 0,1

Вероятность P(STOCK = РАСТЕТ) можно вычислить по уравнению 2:

Р (STOCK =РАСТЕТ) = 0.85*0.52 +0.1 *0.48 = 0.49 или 49%

Получив все значения вероятностей, пользователь может определить свою политику на бирже. Интересно отметить, что в данном примере вероятность повышения уровня цен меньше 50%. Это прямо обусловлено выбором вероятностей. Если пользователь повысит условную вероятность роста уровня цен на бирже при условии, что процентные ставки не будут падать, т.е. Р (STOCK = РАСТЕТ | INT = НЕ ПАДАЕТ), повысится вероятность Р (STOCK = РАСТЕТ).

Нечёткая логика

До сих пор использовались такие понятия, как “растёт” или “падает”. Эти понятия относились к различным переменным. Например, понятие “растёт” относилось к переменным STOCK и DOLLAR. Однако применительно к переменной STOCK понятие роста может означать повышение уровня цен на бирже на 10 - 30 пунктов по среднему Доу Джонса, а применительно к переменной DOLLAR означает повышение курса доллара по сравнению с японской йеной в 20 - 30 раз. В таком контексте слово “растёт” называется лингвистической переменной. Лингвистическая переменная может принимать различные значения из некоторого интервала, границы которого могут меняться в зависимости от обстоятельств. Например, границы интервала для лингвистической переменной “холодный” могут меняться в зависимости от того, идет ли речь о зиме или весне.
Понятие “падает” - также лингвистическая переменная, использующаяся в правилах, описывающих фондовую биржу. Применяя лингвистические переменные, можно вычислить значения некоторых вероятностей, не обременяя пользователя лишними вопросами. Для этого необходимо несколько конкретизировать лингвистические переменные. Пользователю экспертной системы нужно позволить добавлять к этим переменным определения, например маленький или средний. Пользователь может задать маленькое повышение курса доллара, и экспертная система должна точно знать, что под этим подразумевается, Посмотрим на примере с фондовой биржей,как вычисляются вероятности.

Таблица вероятностей

Для оценки повышения уровня цен на бирже будем пользоваться двумя правилами:

10 ЕСЛИ INT = ПАДАЮТ,
ТО STOCK = РАСТЕТ

40 ЕСЛИ DOLLAR = РАСТЕТ,
ТО INT = ПАДАЮТ

и соответствующими им уравнениями вероятностей:

Р (STOCK=PACTET) = Р (STOCK=PACTET | INTEREST=ПАДАЮТ) *
Р (INTEREST=) + Р (STOCK=PACTET | INTEREST=HE ПАДАЮТ) *
Р (INTEREST=HE ПАДАЮТ)

Р (INT = ПАДАЮТ) = Р (INT = ПАДАЮТ | DOLLAR = РАСТЕТ)
* Р (DOLLAR = РАСТЕТ) + Р (INT = ПАДАЮТ | DOLLAR = НЕ РАСТЕТ) *
Р (DOLLAR = НЕ РАСТЕТ)

В решении этих уравнений обязательно участие эксперта, который должен построить для пользователя таблицу вероятностей. Эта таблица будет содержать уточняющие слова, используемые для конкретизации необходимых пользователю понятий (например, “средний рост”). В одной строке с уточняющими словами записывается процент изменения лингвистической переменной, а также вероятность и условная вероятность, что это изменение произойдет. Ниже приводится такая таблица с пояснениями.

 | Столбец 1 | Столбец 2 | Столбец 3
Лингвистическая переменная Маленький Средний Большой | Курс доллара растет в соответствии со значеением из таблицы 1-2% 3-4% свыше 4% | Р (INT=ПАДАЮТ | P (DOLLAR= РАСТЕТ) 0.2 0.5 0.8 | P(DOLIAR =РАСТЕТ) 0.5 0.3 0.1

Предположим, эксперт считает, что курс доллара или растет в соответствии с числами столбца 1, или не растет вообще. Никаких других вариантов нет. Следовательно, эксперт должен определить вероятность для двух случаев. В первом случае, когда курс доллара повышается, вероятность записывается прямо в таблицу. Во втором случае при условии, что курс доллара не повышается, эксперт записывает условную вероятность падения процентных ставок:

Р (INT = ПАДАЮТ | DOLLAR = НЕ РАСТЕТ) = 0 07

Вероятность роста уровня цен при сохранении процентных ставок (процентные ставки падают) эксперт записывает как

Р (STOCK = РАСТЕТ | INT = ПАДАЮТ) = 0.2

если же процентные ставки не падают, эта вероятность записывается как

Р (STOCK = РАСТЕТ | INT = НЕ ПАДАЮТ) = 0.1

Такие таблицы создаются и заполняются экспертом. Они становятся частью базы знаний и время от времени могут меняться. Эксперт должен вносить изменения в таблицы в том случае, если изменятся вероятности, относящиеся к процентным ставкам или курсу доллара. Исправления в таблицу может вносить вместо человека другая экспертная система.
Когда пользователь экспертной системы пытается узнать вероятность повышения уровня цен на бирже, система задает ему вопрос:

ПОСЧИТАТЬ РЕЗУЛЬТАТ, ЕСЛИ ПОВЫШЕНИЕ КУРСА ДОЛЛАРА:
1 - МАЛЕНЬКОЕ
2 - СРЕДНЕЕ
3 - БОЛЬШОЕ
ВВЕДИТЕ НОМЕР - ? 2

Допустим, что пользователь выбрал второй номер, т.е. СРЕДНЕЕ. Из таблицы видно, что пользователь ожидает повышение курса доллара на 3-4%. Все данные, необходимые для решения, можно найти в таблице:

Вероятность

Источник

Р (DOLLAR = РАСТЕТ)=0.3
P(DOLLAR = НЕ РАСТЕТ) = 1-0.3 = 0.7
Р (INT = ПАДАЮТ | DOLLAR=PACTET) = 0.5
Р (INT = ПАДАЮТ | DOLLAR | HE РАСТЕТ) = 0.07
P (INT = ПАДАЮТ) = 0.5*0.3 + 0.07*0.7 		Строка 2, столбец 3 таблицы
Основное правило
Строка 2,столбец 2 таблицы
Эксперт
Уравнение 3 = 0.199

Теперь можно посчитать Р(STOCK = РАСТЕТ). Для этого нужно воспользоваться предыдущим результатом:

Вероятность | Источник
Р (INT = ПАДАЮТ) = 0.199 Р (INT= HE ПАДАЮТ) = 1-0.199=0.811 Р (STOCK=PACTET | INT=ПАДАЮТ)=0.2 Р (STOCK=PACTET | INT=HE ПАДАЮТ) = 0.1 | Предыдущее вычисление Основное правило Эксперт Эксперт

Из уравнения 3 можно вычислить вероятность повышения уровня цен:

Р (STOCK=PACTET) = 0.2*0.199+0.1*0.811 = 0.121

т.е. вероятность равна 12,1 %.
Пользователь освобождён от создания таблицы и заполнения ее значениями, этой тяжелой работой занимается эксперт.

Резюме

Основные концепции этой главы.
 1. Вероятность появления некоторого события вычисляется по следующей формуле: число экспериментов с желаемым исходом, деленное на число всех экспериментов. Вероятность Байеса - это шаг вперед. Она представляет собой условную вероятность, т.е. вероятность появления одного события при условии, что другое событие уже произошло. Системы, реализующие обратную цепочку рассуждений, используют основные соотношения теории вероятностей, при работе с правилами базы знаний.
2. При вероятностном анализе интересующих пользователя величин может применяться нечеткая логика. При этом анализируются лингвистические переменные, т.е. слова типа “растет” и “падает”, применительно к уровню цен фондовой биржи. Лингвистические переменные используются в базе знаний для выполнения логических выводов. Для их анализа применяются формулы теории вероятностей. При этом в оценке значений переменных присутствуют такие понятия, как маленький, средний, большой.
Следует помнить, что значения вероятностей, участвующие в вычислениях, определяются согласно конкретной ситуации и работают только в ее рамках.

Пример программы

Ниже приведена программа на Бейсике, иллюстрирующая основные концепции байесовской вероятности.

Пояснение к программе

В программе используются те же правила, что и в концептуальном примере. Они показаны в предложениях 10 - 60. Соответствующие вероятностные уравнения приведены в предложениях с 70 по 105. Программа запрашивает у пользователя значения всех вероятностей, входящих в уравнения и оценивает вероятность повышения уровня цен на бирже.

Листинги программ

Листинг 7.1. Вероятности Байеса

1 REM ************* ВЕРОЯТНОСТИ БАЙЕСА *****************
5 REM В ПРИМЕРЕ ИСПОЛЬЗУЮТСЯ ПРАВИЛА:
10 REM 10 ЕСЛИ INT=ПАДАЮТ
15 REM TO STOCK=PACTET
20 REM 40 ЕСЛИ DOLLAR=РАСТЕТ
25 REM TO INT=ПАДАЮТ
30 REM УРАВНЕНИЯ БАЙЕСА:
35 REM ДЛЯ ПРАВИЛА 10
40 REM P(STOCK=PACTET)=P(STOCK=PACTET | INT=ПАДАЮТ)
45 REM *P (INТ=ПАДАЮТ)+ P (STOCK=PACTET | INT=HE ПАДАЮТ) (1)
46 REM *P (INT=HE ПАДАЮТ)
50 REM ДЛЯ ПРАВИЛА 40
55 REM P(INТ=ПАДАЮТ)=Р (INT=ПАДАЮТ | DOLLAR=РАСТЕТ) *
56 REM P(DOLLAR=РАСТЕТ) +P (INT=ПАДАЮТ | DOLLAR=HE РАСТЕТ)
60 REM *P (DOLLAR=HE РАСТЕТ) (2)
65 REM ИСПОЛЬЗУЕТСЯ СЛЕДУЮЩАЯ АББРЕВИАТУРА
70 REM I1=P (INT=ПАДАЮТ) I2=P(INT=HE ПАДАЮТ)
75 REM I3=P (INT=ПАДАЮТ | DOLLAR=РАСТЕТ)
76 REM I4=P (INT=ПАДАЮТ | DOLLAR=HE РАСТЕТ)
80 REM S1=P (STOCK=PACTET) S2=P (STOCK=PACTET | INT=ПАДАЮТ)
85 REM S3=P (STOCK=PACTET | INT=HE ПАДАЮТ)
90 REM D1=P (DOLLAR=РАСТЕТ) D2=P (DOLLAR=HE РАСТЕТ)
95 REM ПЕРЕЗАПИСЬ ВЕРОЯТНОСТИ ДЛЯ ПОЛУЧЕННЫХ ПРАВИЛ
100 REM S1=S2*I1+S3*I2 (3)
105 REM I1=I3*D1+I4*D2 (4)
110 REM *********** МЕХАНИЗМ ВЫВОДА *******************
115 REM ДЛЯ ДАННОГО ПРИМЕРА НАДО ОПРЕДЕЛИТЬ ВЕРОЯТНОСТЬ
120 REM “STOCK=PACTET”. ОБРАТНАЯ ЦЕПОЧКА РАССУЖДЕНИЙ
125 REM ПРИВОДИТ К ПРАВИЛУ 10. УСЛОВНАЯ ЧАСТЬ ПРАВИЛА
135 REM 10 СОДЕРЖИТ ПЕРЕМЕННУЮ INT. ОБРАТНАЯ ЦЕПОЧКА
140 REM ПРИВОДИТ К ПРАВИЛУ 40. УСЛОВНАЯ ЧАСТЬ ПРАВИЛА 40
145 REM СОДЕРЖИТ ПЕРЕМЕННУЮ DOLLAR, КОТОРАЯ НЕ ВХОДИТ В
146 REM ДРУГИЕ ПРАВИЛА, СЛЕДОВАТЕЛЬНО ПОЛЬЗОВАТЕЛЬ ЗАДАЕТ
157 REM ЗНАЧЕНИЕ ВЕРОЯТНОСТЕЙ В УРАВНЕНИЕ 3.
150 INPUT''KAKOBA ВЕРОЯТНОСТЬ РОСТА КУРСА ДОЛЛАРА'';Dl
155 D2=1-D1: REM ВЕРОЯТНОСТЬ ТОГО, ЧТО КУРС ДОЛЛАРА НЕ РАСТЕТ
160 PRINT”KAKOBA ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК, "
165 INPUT”ECЛИ КУРС ДОЛЛАРА РАСТЕТ" ;I3
170 PRINT”KAKOBA ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК,"
175 INPUT''ЕСЛИ КУРС ДОЛЛАРА НЕ РАСТЕТ ";I4
180 I1=I3*D1+I4*D2
185 PRINT"*** ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК ";I1
190 INPUT”KAKOBA ВЕРОЯТНОСТЬ РОСТА УРОВНЯ ЦЕН, ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ ПАДАЮТ
";S2
195 I2=1-I1
197 REM ВЕРОЯТНОСТЬ ТОГО, ЧТО ПРОЦЕНТНЫЕ СТАВКИ НЕ ПАДАЮТ
200 PRINT”KAKOBA ВЕРОЯТНОСТЬ РОСТА УРОВНЯ ЦЕН, ЕСЛИ "
205 INPUT''ПРОЦЕНТНЫЕ СТАВКИ НЕ ПАДАЮТ ";S3
210 S1=S2*I1+S3*I2
215 PRINT"*** ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН "; S3
220 STOP

Примеры работы программ

RUN
КАКОВА ВЕРОЯТНОСТЬ РОСТА КУРСА ДОЛЛАРА ? 0.6
КАКОВА ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК, ЕСЛИ
КУРС ДОЛЛАРА РАСТЕТ ? 0.5
КАКОВА ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК, ЕСЛИ
КУРС ДОЛЛАРА НЕ РАСТЕТ ? 0.5
*** ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК 0.5
КАКОВА ВЕРОЯТНОСТЬ РОСТА УРОВНЯ ЦЕН, ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ ПАДАЮТ ? 0.7
КАКОВА ВЕРОЯТНОСТЬ РОСТА УРОВНЯ ЦЕН, ЕСЛИ
ПРОЦЕНТНЫЕ СТАВКИ НЕ ПАДАЮТ ? 0.5
*** ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН 0.5
Break In 220

RUN
 КАКОВА ВЕРОЯТНОСТЬ РОСТА КУРСА ДОЛЛАРА ? 0.7
КАКОВА ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК, ЕСЛИ
КУРС ДОЛЛАРА РАСТЕТ ? 0.4
КАКОВА ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК. ЕСЛИ
КУРС ДОЛЛАРА НЕ РАСТЕТ ? 0.5
***ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК 0.43
КАКОВА ВЕРОЯТНОСТЬ РОСТА УРОВНЯ ЦЕН, ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ ПАДАЮТ ? 0.5
КАКОВА ВЕРОЯТНОСТЬ РОСТА УРОВНЯ ЦЕН, ЕСЛИ
ПРОЦЕНТНЫЕ СТАВКИ НЕ ПАДАЮТ ? 0.7
*** ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН 0.614
Break in 220

Листинг 7.2 Байесовская обратная цепочка

1 REM ***** СИСТЕМА ОБРАТНЫХ РАССУЖДЕНИЙ ************
10 REM НОВЫЕ УСЛОВИЯ ПРАВИЛ ЗАПИСЫВАЮТСЯ В ПРЕДЛОЖЕНИЯХ
11 REM 1500,1520,...
20 REM НАПРИМЕР, 1500 IF(A1=2) AND (A2=6) OR (АЗ$="ДА") THEN S=1
22 REM 1502 RETURN
30 REM 1520 IF (J$="HET") THEN S=1
32 REM 1522 RETURN
40 REM ЧАСТЬ ТО ПРИВЕДЕННЫХ ВЫШЕ ПРЕДЛОЖЕНИЙ ВСЕГДА
41 REM СОДЕРЖИТ THEN S=1
50 REM СТРОКИ 1510,1530,...,1550 ПРОГРАММЫ—ЧАСТИ ТО
51 REM ПОЛЬЗОВАТЕЛЯ,
60 REM НАПРИМЕР, 1510 PO="ДA"...:RETURN
200 REM ************ БЛОК ИНИЦИАЛИЗАЦИИ ПЕРЕМЕННЫХ ************
210 REM СПИСОК ВЫВОДОВ (GL$),СПИСОК ПЕРЕМЕННЫХ (V$),СПИСОК
211 REM ПРИЗНАКОВ ИНИЦИАЛИЗАЦИИ
220 REM ПЕРЕМЕННЫХ (IN),СТЕК ПРАВИЛ (SS$) ИСТЕКУСЛОВИЙ(СS$),
230 REM СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ (CV$) И УКАЗАТЕЛЬ CTEKA(SP)
240 DIM GL$(10),V$(10),CV$(40),IN(10),SS(10),CS(10)
250 SP=11: REM РАЗМЕР СТЕКА —10 ЭЛЕМЕНТОВ, SP ПРИСВАИВАЕТСЯ
251 REM ЗНАЧЕНИЕ 10+1
260 FOR I=1 ТО 10
270 GL$(I)="": V$(I)="": IN(I)=0: SS(I)=0: CS(I)=0
280 NEXT I
290 REM ВВОД ПЕРЕМЕННЫХ ИЗ ЧАСТИ ТО ПРАВИЛ (ВЫВОДОВ)
295 REM ПЕРЕМЕННЫЕ ВВОДЯТСЯ В ПОРЯДКЕ ИХ ПОЯВЛЕНИЯ В
300 REM ПРАВИЛАХ НАЖАТИЕ КЛАВИШИ ВОЗВРАТ ЗАВЕРШАЕТ ВВОД
305 GL$(1)="ST": GL$(2)="ST": GL$(3)="IN": GL$(4)=TN"
307 PRINT"** СПИСОК ЛОГИЧЕСКИХ ВЫВОДОВ **''
310 FOR I=1 ТО 10
320 PRINT "ЛОГИЧЕСКИЙ ВЫВОД ";I;
325 PRINT GL$(I)
335 NEXT I
338 PRINT "ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ B03BPAT”;Z
340 REM ВВОД ПЕРЕМЕННЫХ ИЗ ЧАСТИ ЕСЛИ ПРАВИЛ
350 REM ПЕРЕМЕННЫЕ ВВОДЯТСЯ В ПОРЯДКЕ ИХ ПОЯВЛЕНИЯ В
351 REM ПРАВИЛАХ, НЕ БОЛЕЕ 3 ДЛЯ ПРАВИЛА.
360 REM ИМЕНА ПЕРЕМЕННЫХ НЕ ДОЛЖНЫ ПОВТОРЯТЬСЯ
365 REM НАЖАТИЕ КЛАВИШИ ВОЗВРАТ ЗАВЕРШАЕТ ВВОД ПЕРЕМЕННЫХ
366 INPUT"*** СПИСОК ПЕРЕМЕННЫХ ***"
367 V$(1)="DO"
370 FOR I=l TO 10
380 PRINT "ПЕРЕМЕННАЯ ";I;
385 PRINT V$ (I)
395 NEXT I
396 INPUT "ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВОЗВРАТ'';Z
400 REM ВВОД ИМЕН ПЕРЕМЕННЫХ В ПОРЯДКЕ ИХ ПОЯВЛЕНИЯ В ЧАСТИ
401 REM ЕСЛИ ПРАВИЛ, НЕ БОЛЕЕ 3 В ОДНОМ ПРАВИЛЕ
405 REM НАЖАТИЕ КЛАВИШИ ВОЗВРАТ —КОНЕЦ ВВОДА
406 PRINT”*** СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ ***"
407 CV$(1)="IN": CV$(5)="IN":CV$(9)="DO":CV$(13)="DO"
410 FOR I=l TO 8:PRINT"** УСЛОВИЕ ";I
420 FOR J=1 TO 4:РRINТ"ПЕРЕМЕННАЯ ";J
423 K=4*(I-1)+J
424 PRINT CV$(K)
430 NEXT J
432 IF I=4 THEN INPUT" ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ВВОД"
435 NEXT I
500 REM ************* БЛОК ВЫВОДА ***********************
505 INPUT"** ВВЕДИТЕ ИМЯ ПЕРЕМЕННОЙ ЛОГИЧЕСКОГО ВЫВОДА ";V$
510 REM ИЗ СПИСКА ВЫВОДОВ (GL$) ПОЛУЧИТЬ НОМЕР ПРАВИЛА
511 REM С ЭТИМ ВЫВОДОМ (SN)
520 F=1: GOSUB 2200: REM НАЧАТ ПОИСК В ПЕРВОМ ПРЕДЛОЖЕНИИ
525 IF SN=0 THEN STOP: REM НЕТ ТАКОГО ВЫВОДА
530 REM В СТЕК ПОМЕЩАЕТСЯ НОМЕР ПРАВИЛА (SN) И 1
531 REM ВМЕСТО НОМЕРА УСЛОВИЯ,
535 REM ТАК КАК СТЕК СОСТОИТ ИЗ СТЕКА НОМЕРОВ ПРАВИЛ (SS)
536 REM И НОМЕРОВ УСЛОВИЙ (CS)
540 GOSUB 2000
545 REM НАЙТИ УСЛОВИЕ В СПИСКЕ ПЕРЕМЕННЫХ УСЛОВИЯ
550 I=(SS(SP) -1)*4+CS(SP)
555 V$=CV$(I): REM ПЕРЕМЕННАЯ УСЛОВИЯ
560 ПОСЛЕДНЕЕ УСЛОВИЕ ДАННОГО ПРАВИЛА?
565 IF V$="" THEN GOTO 580: REM ПОСЛЕДНЕЕ УСЛОВИЕ:
566 REM ВЫПОЛНИТЬ ПРАВИЛО
567 REM ПЕРЕМЕННАЯ УСЛОВИЯ ЯВЛЯЕТСЯ ВЫВОДОМ ?
568 F=1: GOSUB 2200: IF SN 0 THEN GOTO 520:
569 REM ПОМЕСТИТЬ ЛОГИЧЕСКИЙ ВЫВОД В СТЕК
570 GOSUB 2400 REM ПРИСВОЕНО ЛИ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ УСЛОВИЯ ?
575 CS(SP)=CS(SP+1): GOTO 545:REM ПРОВЕРИТЬ СЛЕДУЮЩЕЕ УСЛОВИЕ
580 REM В ЧАСТИ ЕСЛИ ПРАВИЛА БОЛЬШЕ НЕТ УСЛОВИЙ
582 SN=SS(SP)
585 S=0: ON SN GOSUB 1500,1520,1540,1560.1580,1600
590 REM МОЖНО ЛИ ВЫЗВАТЬ ЧАСТЬ ТО, Т.Е. S=1 ?
600 IF S=1 THEN GOTO 630: REM ВЫЗВАТЬ ЧАСТЬ ТО
605 REM НЕУДАЧА ... ВЫВОД ИЩЕТСЯ В ОСТАВШИХСЯ ПРАВИЛАХ
610 I=SS(SP): V$=GLS(I):REM ПОЛУЧИТЬ ВЫВОД
615 F=SS(SP)+1: REM ИСКАТЬ ВЫВОД В ОСТАВШИХСЯ ПРАВИЛАХ
620 GOSUB 2200
625 SP=SP+1:GOTO 525
626 REM ВЫБРАТЬ ИЗ СТЕКА СТАРЫЙ ВЫВОД И ПОМЕСТИТЬ НОВЫЙ
630 REM ЧАСТЬ ЕСЛИ ИСТИННА, ВЫЗВАТЬ ЧАСТЬ ТО
635 ON SN GOSUB 1510,1530.1550,1570,1590,1610
650 REM ВЫБРАТЬ ЭЛЕМЕНТ СТЕКА; ЕСЛИ НЕТ —ОТВЕТ ПОЛУЧЕН:
655 REM ЕСЛИ ЕСТЬ ЭЛЕМЕНТЫ —ПРОВЕРИТЬ ПРЕДЫДУЩИЙ ВЫВОД
660 SP=SP+1 :REM ВЫБРАТЬ ИЗ СТЕКА
670 IF SP I1 THEN GOTO 690: REM СТЕК НЕ ПУСТ
680 PRINT"*** УСПЕШНОЕ ЗАВЕРШЕНИЕ":РЕМ КОНЕЦ
685 STOP
690 REM СТЕК ПУСТ —ВЫБРАТЬ СЛЕДУЮЩЕЕ УСЛОВИЕ И ПРОДОЛЖИТЬ
695 CS(SP)=CS(SP)+1
700 GOTO 545
1490 REM ********** ПРАВИЛА ЕСЛИ—ТО ***********
1492 REM ЗДЕСЬ ИСПОЛЬЗОВАНЫ ПРАВИЛА ИЗ БАЗЫ ЗНАНИЙ О
1494 REM ДОЛЖНОСТЯХ. ИМЯ ПЕРЕМЕННОЙ СОСТОИТ ИЗ 2 БУКВ ДЛЯ
1496 REM СОВМЕСТИМОСТИ С РАЗНЫМИ ВЕРСИЯМИ БЕЙСИКА.
1498 REM (DEG СОКРАЩЕНО ДО DЕ, A QUAL —ДО QU)
1499 REM ** ПРАВИЛО 1
1500 IF IN$="ПАДАЮТ" THEN S=1
1502 RETURN
1510 I2=1-I1: PRINT"? (ПРОЦЕНТНЫЕ СТАВКИ=ПАДАЮТ)=";I2
1512 INPUT”KAKOBA ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН, ЕСЛИ
 ПРОЦЕНТНЫЕ СТАВКИ ПАДАЮТ ";S4
1514 INPUT”KAKOBA ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН, ЕСЛИ
 ПРОЦЕНТНЫЕ СТАВКИ НЕ ПАДАЮТ ";S5
1516 S1=S4*I1+S5*I2
1518 ST$="РАСТЕТ": PRINT"? (УРОВЕНЬ ЦЕН=РАСТЕТ)=" :RETURN
1519 REM ** ПРАВИЛО 2
1520 IF IN$=”PACTET" THEN S=1
1522 RETURN
1530 I2=1-I1 :PRINT"P(ПРОЦЕНТНЫЕ СТАВКИ=НЕ РАСТУТ)=";12
1532 INPUT”KAKOBA ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН, ЕСЛИ
 ПРОЦЕНТНЫЕ СТАВКИ РАСТУТ ";S4
1534 INPUT"KAKOBA ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН, ЕСЛИ
 ПРОЦЕНТНЫЕ СТАВКИ НЕ РАСТУТ ";S5
1536 Sl=S4*I1+S5*I2:PRINT"P(УPOBEHЬ ЦЕН=ПАДАЮТ) =";S1
1538 SТ$="ПАДАЮТ :PRINT''ST=ПAДAЮT'':RETURN
1539 REM ** ПРАВИЛО З
1540 IF D0$="ПАДАЮТ" THEN S=1
1542 RETURN
1550 INPUT”KAKOBA ВЕРОЯТНОСТЬ ПАДЕНИЯ КУРСА ДОЛЛАРА ";I1
1552 I2=1 –I1 :PRINT"P(KУPC ДОЛЛАРА- НЕ ПАДАЕТ)=";I2
1554 INPUT”KAKOBA ВЕРОЯТНОСТЬ РОСТА ПРОЦЕНТНЫХ СТАВОК, ЕСЛИ
 КУРС ДОЛЛАРА ПАДАЕТ";S4
1556 INPUT”KAKOBA ВЕРОЯТНОСТЬ РОСТА ПРОЦОЕНТНЫХ СТАВОК, ЕСЛИ
 КУРС ДОЛЛАРА НЕ ПАДАЕТ ";S5
1558 Sl=S4*I1+S5*I2:PRINT"P(ПPОЦEHTHЫECTABKИ=PACTУT)=";Sl:I1=S4:
IN$="PACTET":PRINT"IN=PACTET":RETURN
1559 REM ** ПРАВИЛО 4
1560 IF DO$=”PACTET" THEN S=1
1562 RETURN
1570 INPUT”KAKOBA ВЕРОЯТНОСТЬ РОСТА КУРСА ДОЛЛАРА";I1
1572 I2=1–I1 :PRINT"P(КУРС ДОЛЛАРА НЕ РАСТЕТ)=";12
1574 INPUT”KAKOBA ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК, ЕСЛИ
КУРС ДОЛЛАРА РАСТЕТ ";S4
1576 INPUT”KAKOBA ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК, ЕСЛИ
КУРС ДОЛЛАРА НЕ PACTET";S5
1578 S1=S4*I1+S5*I2:PRINT**P(ПPOЦEHTHЫE CTABKИ=ПAДAЮT)=”;S1:I1=S1
1579 IN$="ПАДАЮТ": PRINT”IN = ПAДAЮT":RETURN
1611 REM **** КОНЕЦ БАЗЫ ЗНАНИЙ *****
1690 REM **** ВВОД ДАННЫХ ****
1699 REM ВВОД ВЫПОЛНЯЕТСЯ ДЛЯ БАЗЫ ЗНАНИЙ "ДОЛЖНОСТЬ"
1700 INPUT”KVPC ДОЛЛАРА БУДЕТ РАСТИ ИЛИ ПАДАТЬ ";DO$:RETURN
1750 REM **** КОНЕЦ ВВОДА ДАННЫХ ****
1999 REM **** БЛОК ПОДПРОГРАММ ****
2000 REM ПОДПРОГРАММА ЗАПИСИ НОМЕРА ПРАВИЛА (SN)
2001 REM И 1 ВМЕСТО НОМЕРА УСЛОВИЯ
2004 REM ДЛЯ ЭТОГО УКАЗАТЕЛЬ СТЕКА (SP) УМЕНЬШАЕТСЯ НА ЕДИНИЦУ
2020 SP=SP-I: SS(SP)=SN: CS(SP)=1
2030 RETURN
2099 REM*********************************************
2200 REM ПОДПРОГРАММА ИЩЕТ В СПИСКЕ ВЫВОДОВ ПРРЕМРННУЮ V$ (I)
2202 REM ЕСЛИ ПЕРЕМЕННАЯ ЕСТЬ В СПИСКЕ, ТО ВОЗВРАЩАЕТСЯ SNO,
2203 REM НЕТ- SN=0
2220 SN=0: REM SN СНАЧАЛА ОБНУЛЯЕТСЯ
2230 FOR I=F TO 8: REM В СПИСКЕ ВЫВОДОВ ИЩЕТСЯ F
2240 IF V$=GL$(I) THEN GOTO 2270: REM ПРОВЕРКА РАБОЧЕЙ ТАБЛИЦЫ
2250 NEXT I
2260 RETURN: REM НЕТ В СПИСКЕ
2270 SN=I: REM ЕСТЬ В СПИСКЕ
2280 RETURN
2299 REM************************************************
2400 REM ПОДПРОГРАММА ПРИСВОЕНИЯ ЗНАЧЕНИЯ ПРРРМРННОЙ V$
2402 REM IN=l --ПЕРЕМЕННОЙ ПРИСВОЕНО ЗНАЧЕНИЕ IN=0 -НЕТ
2404 REM V$ ЕСTЬ B СПИСКЕ ПЕРЕМЕННЫХ
2420 FOR I=l TO 10: REM ПОИСК ПЕРЕМЕННОЙ В СПИСКЕ
2430 IF V$=V$(I) THEN GOTO 2445: REM ПЕРЕМЕННАЯ НАЙДЕНА
2440 NEXT I
2445 IF IN(I)=1 THEN RETURN: REM ПЕРЕМЕННАЯ ПРОИНИЦИАЛИЗИРОВАНА
2450 IF IN(I)=I THEN RETURN: REM ПЕРЕМЕННАЯ ПРОИНИЦИАЛИЗИРОВАНА
2460 REM В ПРОГРАММЕ БЛОК ПРИСВОЕНИЯ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ
2462 REM С ПРЕДЛОЖЕНИЯ 1700
2464 REМ ФОРМАТ: ПРЕДЛОЖЕНИЕ ВВОДА И ВОЗВРАТ (INPUT И RETURN)
2465 IN(I)=1: REM ВЗВЕСТИ ПРИЗНАК ИНИЦИАЛИЗАЦИИ
2470 ON I GOSUB 1700,1705,1710,1715
248О RETURN

Пример работы программы

RUN
*** СПИСОК ЛОГИЧЕСКИХ ВЫВОДОВ ***
 ЛОГИЧЕСКИЙ ВЫВОД 1 ST
 ЛОГИЧЕСКИЙ ВЫВОД 2 ST
ЛОГИЧЕСКИЙ ВЫВОД 3 IN
 ЛОГИЧЕСКИЙ ВЫВОД 4 IN
 ЛОГИЧЕСКИЙ ВЫВОД 5
ЛОГИЧЕСКИЙ ВЫВОД 6
ЛОГИЧЕСКИЙ ВЫВОД 7
ЛОГИЧЕСКИЙ ВЫВОД 8
ЛОГИЧЕСКИЙ ВЫВОД 9
ЛОГИЧЕСКИЙ ВЫВОД 10
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВОЗВРАТ
*** СПИСОК ПЕРЕМЕННЫХ***
ПЕРЕМЕННАЯ 1 D0
 ПЕРЕМЕННАЯ 2
 ПЕРЕМЕННАЯ З
 ПЕРЕМЕННАЯ 4
ПЕРЕМЕННАЯ 5
ПЕРЕМЕННАЯ 6
ПЕРЕМЕННАЯ 7
ПЕРЕМЕННАЯ 8
ПЕРЕМЕННАЯ 9
ПЕРЕМЕННАЯ 10
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВОЗВРАТ

*** СПИСОК ПЕРЕМЕННЫХ УСЛОВИЯ ***
** УСЛОВИЕ 1
ПЕРЕМЕННАЯ 1 IN
 ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
**УСЛОВИЕ 2
ПЕРЕМЕННАЯ 1 IN
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ 3
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 3
ПЕРЕМЕННАЯ 1 DO
 ПЕРЕМЕННАЯ 2
 ПЕРЕМЕННАЯ З
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 4
 ПЕРЕМЕННАЯ 1 DO
 ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ З
 ПЕРЕМЕННАЯ 4
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВОЗВРАТ
** УСЛОВИЕ 5
ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ З
 ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 6
ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ З
ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 7
ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ З
 ПЕРЕМЕННАЯ 4
** УСЛОВИЕ 8
ПЕРЕМЕННАЯ 1
ПЕРЕМЕННАЯ 2
ПЕРЕМЕННАЯ З
ПЕРЕМЕННАЯ 4

*** ВВЕДИТЕ ПЕРЕМЕННУЮ ЛОГИЧЕСКОГО ВЫВОДА ? ST
КУРС ДОЛЛАРА РАСТЕТ ИЛИ ПАДАЕТ ? РАСТЕТ
КАКОВА ВЕРОЯТНОСТЬ РОСТА КУРСА ДОЛЛАРА ? 0.6
КУРС ДОЛЛАРА РАСТЕТ ИЛИ ПАДАЕТ ? РАСТЕТ
КАКОВА ВЕРОЯТНОСТЬ РОСТА КУРСА ДОЛЛАРА ? 0.6
Р(КУРСДОЛЛАРА=НЕ РАСТЕТ)= 0.4
КАКОВА ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК, ЕСЛИ КУРС
ДОЛЛАРА РАСТЕТ ? 0.5
КАКОВА ВЕРОЯТНОСТЬ ПАДЕНИЯ ПРОЦЕНТНЫХ СТАВОК, ЕСЛИ КУРС
ДОЛЛАРА НЕ РАСТЕТ? 0.5
P(ПРОЦЕНТНЫЕ СТАВКИ =ПАДАЮТ)=0.5
IN=ПАДАЮТ
Р(ПРОЦЕНТНЫЕ СТАВКИ=НЕ ПАДАЮТ)=0.5
КАКОВА ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН, ЕСЛИ ПРОЦЕНТНЫЕ
СТАВКИ ПАДАЮТ? 0.7
КАКОВА ВЕРОЯТНОСТЬ ПОВЫШЕНИЯ УРОВНЯ ЦЕН, ЕСЛИ ПРОЦЕНТНЫЕ
СТАВКИ НЕ ПАДАЮТ ? 0.5
Р(УРОВЕНЬ ЦЕН=РАСТЕТ)=0.6
ST = РАСТЕТ
*** УСПЕШНОЕ ЗАВЕРШЕНИЕ ***
Break In 68
Ok


Часть 3 "Экспретные системы: знания плюс логический вывод". Глава 8

Часть 3 ЭКСПЕРТНЫЕ СИСТЕМЫ: ЗНАНИЯ ПЛЮС
ЛОГИЧЕСКИЙ ВЫВОД

• Три примера реальных экспертных систем

• Способы представления решения в экспертной системе

• Примеры программ

ГЛАВА 8

ЭКСПЕРТНАЯ СИСТЕМА ФИНАНСОВОГО ПЛАНИРОВАНИЯ

Из предыдущих глав читатель получил некоторое представление об искусственном интеллекте и экспертных системах. Теперь можно приступить к описанию методов построения базы знаний для реальной экспертной системы.
Рассмотрим простую систему финансового планирования, которую можно использовать для принятия решений в области финансов. Описываемая система не является исчерпывающей, и читателю не следует прогнозировать свое финансовое положение, пользуясь ее ограниченной базой знаний. Здесь сделана попытка передать только особенности создания реальной экспертной системы финансового планирования или любой другой системы принятия решений, основанной на тех же принципах. Цель книги - сделать из читателя не эксперта по вопросам финансов, а инженера по проектированию баз знаний.
Поставим три основных вопроса:
1. Как выбрать предметную область ?
2. Как изучить предметную область ?
3. Как для выбранной предметной области представить (организовать) факты ?
Простейший способ ответить на эти вопросы - описать процесс разработки реальной экспертной системы, а затем написать программу, реализующую эту систему, точно так же как делалось раньше.
Прежде всего напомним, что уже известно читателю об экспертных системах. В гл.З рассказывалось, как создать базу знаний для экспертной системы. Для этого используются факты, правила, механизмы вывода и упрощения. В качестве предметной области выбирается узкая (специальная) прикладная область. Далее для создания экспертной системы в выбранной небольшой области собираются факты и правила, которые помещаются в базу знаний вместе с механизмами вывода и упрощениями.

Выбор предметной области

На выбор предметной области влияют два фактора. Первый - область должна быть интересна проектировщику. Второй - база знаний должна быть не слишком велика, чтобы можно было собрать управляемое количество информации. Настоящая глава посвящена конкретной предметной области, выбранной из широкой сферы финансового планирования. Мы полагаем, что предлагаемая предметная область заинтересует всех, поскольку одна из важнейших вещей сегодня - это умение рационально обращаться со своими деньгами. Для начала надо пойти в библиотеку, ознакомиться с соответствующей литературой и подумать, кто из знакомых специалистов больше всех разбирается в данном предмете. Однако прежде чем начать изучение литературы и (или) консультироваться со специалистами, надо понять, что же конкретно вы хотите получить. Другими словами, нужно всегда думать о своих целях.

Изучение предметной области

Может показаться, что финансовое планирование очень большая область и слишком сложна для небольшой программы. Однако это не так. Проделаем следующий путь. Отправимся в библиотеку и возьмем несколько книг по предмету - хватит пяти или шести, излагающих материал в доступной форме. Затем из всех знакомых специалистов в этой области выберем двух наиболее компетентных и проконсультируемся у них. В результате у нас окажется большое количество несистематизированной информации: получены сведения об акциях, недвижимом имуществе и ценных бумагах на денежном рынке, изучены различные виды финансового обслуживания (например, предлагаемое банками маклерское обслуживание), есть сведения о предлагающих свои услуги профессионалах. В некоторых книгах мировая финансовая ситуация анализировалась с разных точек зрения. Так, одни книги призывают вкладывать деньги в различные предприятия. Другие придавали большое значение вкладам денег в недвижимое имущество как наиболее выгодному способу хранения денег. Имея это море информации, человек задает себе более конкретный вопрос: “Что же интересует именно меня, что мне будет полезно изучить?”. Немного подумав об этом, он понимает, что и книги, и специалисты советуют изучать свои финансовые нужды, потому что это наиболее важно.
Самое удачное - взять всю имеющуюся информацию и сделать из нее нечто осмысленное. Для этого необходимо изучить свои финансовые нужды и разработать финансовую программу, соответствующую вашим нуждам, возрасту и образу жизни. В библиотеке книгу Г. Вейнстена [Grace Weinstein “The Lifetime Book of Money Management” (New American Library, 1983) ], где в финансовых терминах описывается жизненный цикл человека, насчитывающий от 4 до 5 этапов, и рассматриваются наиболее важные аспекты каждого этапа. Цель создаваемой экспертной системы - выработать финансовую стратегию, которая больше всего подходит указанной возрастной группе.

Представление фактов и правил предметной области

Определив цель, приступим к следующему шагу - нужно организовать или разделить данные на несколько первичных, но независимых друг от друга категорий. К первой категории можно отнести возрастные группы. Такое разделение позволит механизму вывода не рассматривать не относящиеся к делу категории. Например, разделяя базу знаний системы на возрастные группы, можно исключить те, в которые не входит человек, чьи финансовые нужды рассматриваются экспертной системой в какой-то момент времени. Скажем, если человеку 50 лет, система не будет рассматривать данные в базе знаний, относящиеся к возрасту от 18 до 24 лет. Пользуясь возрастной классификацией Г.Вейнстена, выделим следующие возрастные группы:
от 18 до 24 лет (юношеский возраст);
от 25 до 45 лет (молодость);
от 46 до 64 лет (зрелость);
от 65 лет (пожилой возраст);
Здесь представлены 4 возрастные группы. Для каждой возрастной группы надо определить, куда вкладывать деньги. Какие же факты связаны с каждой группой ? Зная цель, можно отобрать нужные факты. По материалам исследования выполняется систематизация всей собранной из различных источников информации.
Перечислим эти факты. Факты для первой возрастной группы (от 18 до 24 лет) приводятся в соответствии с некоторой таксономией, или классификацией отдельных объектов в систему.

А. Возраст от 18 до 24

A.1.Выбор профессии
А.2. Подготовка к поступлению в колледж или институт
А.З. Поступление в колледж или институт
А.4. Выработка планов на будущее
А.4.1. Одинокий человек
А.4.1.1. Разработка плана сбережений денег на личные нужды
А.4.1.2. Определение суммы кредита
А.4.1.3. Разработка системы ведения финансовых документов
А.4.2. Семья без детей
А.4.2.1. Выработка планов экономии денег для совместных целей
А.4.2.2. Определение суммы кредита
А.4.2.3. Разработка системы ведения финансовых документов
А.4.2.4. Планирование жилищных условий
A.4.3. Семья с детьми
А.4.3.1. Выработка планов экономии денег с учетом нужд детей
A.4.3.2. Определение суммы кредита для вкладов в будущем
А.4.3.3. Разработка системы ведения финансовых документов
А.4.3.4. Планирование жилищных условий

 Давайте ненадолго отвлечемся и подробнее разберем приведенную выше запись. Числа, стоящие слева от фактов, служат для выделения категорий и подпунктов. Например, раздел “Выработка планов на будущее” имеет номер А.4 и все подпункты, относящиеся к этому пункту, нумеруются А.4.1, А.4.2 и т.д. Раздел “Определение суммы кредита” стоит под номером А.4.1.2, он является следующим подпунктом в иерархии А.4.1 “Одинокий человек” и А.4 “Выработка планов на будущее”.
 Запись с такой нумерацией, или таксономия, ниже будет использоваться при создании дерева решений.
 Перейдем к другой возрастной группе: от 25 до 45 лет. Какие факты связаны с этой группой ? Именно в этой возрастной группе происходит воплощение большинства планов в жизнь, так как в эти годы утверждается образ жизни взрослого человека. Это период воспитания детей, оплаты их образования и улучшения жилищных условий. В данный период жизни возрастают доходы и нужно делать различные вклады. Поэтому этой возрастной группе будет уделено наибольшее внимание. Сначала разделим ее на четыре категории по образу жизни. Затем для каждой категории приведем характерные факты. Факты классифицируются следующим образом:

Б. Возраст от 25 до 45 лет

Б.1. Одинокий человек
Б. 1.1. Задачи роста профессионального мастерства
Б. 1.2. Вклад для увеличения капитала
Б. 1.2.1. Приобретение акций
Б.1.2.2. Краткосрочные вклады в ценные бумаги
Б. 1.2.3. Облигации
Б. 1.3. Планирование вклада на покупку жилья — квартиры, совладения (кондоминиума) или
маленького дома
Б.2.Два человека, живущих вместе
Б. 2.1. Задачи роста профессионального мастерства
Б.2.2. Вклады для увеличения капитала
Б.2.2.1. Объединение счетов
Б.2.2.2. Разделение счетов
Б.2.3. Планирование вклада на покупку жилья—квартиры, совладения (кондоминиума) или
маленького дома
Б.2.3.1. Общая собственность
Б.2.3.1.1. Заключение разумных контрактов
Б.2.3.1.2. Составление долговых обязательств и доверенностей
Б.З. Семья без детей
Б.3.1. Поиск средств для содержания бывшей супруги
Б.3.2. Вклады для увеличения капитала
Б.3.2.1. Получение кредита для новых покупок
Б.3.2.2. Страхование (дополнительную страховку получают в случае смерти супруга и т.п.)
Б.3.3. Намерения относительно дома
Б.3.3.1. Решение вопроса, кому из бывших супругой достанется дом
Б.3.3.2. Рассмотрение возможности продажи дома
Б.4. Семья с детьми
Б.4.1. Покрытие расходов на рождение и воспитание ребенка
Б.4.1.1. Страхование на медицинское обслуживание (статистические данные 1982 г.
показали, что роды стоят от 3 до 4 тыс. долл.)
Б.4.1.2. Определение суммы расходов на воспитание ребенка (сумма зависит от того
работает ли мать)
Б.4.2. Расходы на содержание жилья
Б.4.2.1. Квартира - не меняющаяся плата (самые рациональные расходы)
Б.4.2.2. Собственный дом - больше места, удержание налогов
Б.4.2.2.1. Выяснение вопросов, связанных с платой за обучение
Б.4.2.2.2. Оценка суммы налогов и цен
Б.4.3. Увеличение суммы страховки для компенсации роста цен
Б.4.3.1. Необходимо работать обоим супругам, для взаимной подстраховки
Б.4.3.2. Приобретение страховки жизни, которую потом можно истратить на оплату
обучения детей в колледже
Б.4.3.3. Выплачивание страховки на пенсионное обеспечение
Б.4.4. Накопление средств на оплату обучения детей
Б.4.4.1. Определение конкретных цен
Б.4.4.2. Определить свой выбор в зависимости от доходов
Б.4.4.2.1. Низкий доход - получение финансовой помощи
Б.4.4.2.2. Средний доход
Б.4.4.2.2.1. Планы экономии - ежемесячное выделение денег
Б.4.4.2.2.2. Сокращение налогов
Б.4.4.2.2.3. Заведение отдельного счета на стипендию
Б.4.4.2.2.4. Распределение доходов-разделение доходов между членами
семьи, имеющими меньший заработок
 Осталось рассмотреть две последние возрастные группы - от 46 до 64 лет и 65 лет и старше. Поскольку подробно рассматривается группа от 25 до 45 лет, для последних двух групп приводятся лишь некоторые факты.

В. Возраст от 46 до 64 лет

B.1. Продолжение карьеры
В.2. Различные вклады
В.3. Планирование
В.4. Изучение

Г. Возраст от 65 лет и старше

Г.1. Пересмотр бюджета в связи с уходом на пенсию
Г.2. Откладывание части заработанных денег на пенсионное обеспечение
Г.З. Составление завещания

Для того чтобы читатель смог воспользоваться предложенной системой при решении своих задач, он должен:
1) для создания базы знаний локализовать интересующую его область и тем самым конкретизировать свои цели;
2) углубить свои знания в этой области, подбирая и прорабатывая соответствующую литературу, консультируясь со специалистами, или использовать свои собственные соображения, если он хорошо знаком с предметом;
3) классифицировать собранную информацию и систематизировать факты.
В дальнейшем из систематизированных фактов будет создаваться дерево решений, необходимое для разработки базы знаний.

Дерево решений

Пока у нас есть только список систематизированных фактов (таксономия фактов). Теперь необходимо создать дерево решений. Дерево решений (см. главу, описывающую обратную цепочку рассуждений) - это группа вопросов, имеющих отношение к фактам и составляющих путь. Можно пройти по дереву решений различными путями и тем самым исследовать разные комбинации фактов. Цель достигается в конце пути. Достижение цели по определенному пути означает, что найдено решение для составляющих путь фактов. Путь может разветвляться, и, следовательно, может быть достигнуто несколько целей. Как показано на рис. 8.1, конец пути - это прямоугольник с текстом внутри, завершающий путь. Для примера взята часть уже известной таксономии, поскольку диаграмма полного дерева, включающего все возможные комбинации возрастных групп и частных решений внутри этих групп, слишком сложна. Однако, освоив материал главы, читатель легко сможет построить все дерево решений.
Давайте рассмотрим такие гипотетические случаи: одинокий человек и два человека, живущих вместе. Каким образом может одинокий человек в возрасте от 25 до 45 лет вкладывать свои деньги, чтобы его капитал рос ? Для лиц, относящихся к данной возрастной категории имеют значение денежный рынок (Б. 1.2.1), краткосрочные вклады в ценные бумаги (Б. 1.2.2) и облигации (Б. 1.2.3).

8_1.gif (5912 bytes)

Рис. 8.1. Дерево решений для финансового планирования

Нужно придумать вопросы, которые помогут работать с фактами. Например, такие:
1. Сколько денег у человека?
2. Хочет ли человек держать деньги в банке ?
3. Хочет ли человек иметь возможность быстро получить деньги или кладет их на длительный период, чтобы накопить нужную сумму ?
4. Хочет ли человек обезопасить свои вложения ?
Дерево решений, включающее факты и вопросы, с помощью которых достигается поставленная цель, приведено на рис. 8.1.
Заметим, что на рисунке есть незаконченные пути (оканчиваются многоточием). Они дают представление о том, как выглядит разветвленное дерево решений. Читатель может сам продолжить эти пути исходя из приведенного описания возрастных групп.
Теперь рассмотрим второй вариант - два человека в возрасте от 25 до 45 лет, живущих вместе. Как такие люди будут решать проблему жилья? В разделе “Планирование вкладов на покупку жилья” (Б.2.3) перечислены покупка квартиры, совладения, личного дома (Б.2.3); общая собственность (Б.2.3.1); заключение разумных контрактов (Б.2.3.1.1); составление долговых обязательств и доверенностей (Б.2.3.1.2). Вопросы, имеющие отношение к этим фактам, формулируются следующим образом:
1. Сколько денег у двух людей, живущих вместе ?
2. Хотят ли они приобрести активы ?
3. Хотят ли они иметь общую собственность ?
Основная часть небольшого дерева решений представлена на рис.8.2 .
Разработав дерево решений, можно записать правила базы знаний. Для этого из дерева решений надо выделить все пути, ведущие к его завершающим вершинам. Завершающей называется вершина, из которой не выходит ни одна ветвь; на рисунке такие вершины обозначаются прямоугольниками. Каждая вершина дерева имеет свой номер. Путь к завершающей вершине 6 - “Денежный рынок” проходит через вершины 1,2,3,4 и 5. Правило для достижения вершины 6 можно записать следующим образом:

ЕСЛИ | ВОЗРАСТ = (больше или равен) 25 И | (Вершина 1)
 | ВОЗРАСТ (меньше или равен) 45 И | (Вершина 1)
 | ОБРАЗ-ЖИЗНИ = ОДИНОКИЙ ЧЕЛОВЕК | (Вершина 2)
 | НАЛИЧНЫЕ-ДЕНЬГИ $ 10000 И | (Вершина 3)
 | СЧЕТ-В-БАНКЕ = ДА, | (Вершина 4),
ТО ВЛОЖЕНИЯ - ЧЕЛОВЕКА = ПРИОБРЕТЕНИЕ АКЦИЙ |  | (Завершающая вершина 6 )

8_2.gif (13186 bytes)

Рис.8.2. Основная часть дерева решений

При записи правил используются имена переменных, например СЧЕТ-В-БАНКЕ. Надо помнить, что эти имена во всех правилах должны быть согласованы. Так, правило, приводящее к завершающей вершине 13 через вершины 1,2,8,9,10,11 и 12 записывается следующим образом:

ЕСЛИ | ВОЗРАСТ = (больше или равен) 25 И | (Вершина 1)
 | ВОЗРАСТ (меньше или равен) 45 И | (Вершина 1)
 | ОБРАЗ-ЖИЗНИ = ДВА ЧЕЛОВЕКА, ЖИВУЩИХ ВМЕСТЕ, | (Вершина 2 и 8)
 | ЧЕЛОВЕК-ПОКУПАЕТ-АКТИВЫ = ДА И | (Вершина 9)
 | ЧЕЛОВЕК-ХОЧЕТ-СОБСТВЕННЫЙ-ДОМ = ДА И | (Вершина 10),
 | ЧЕЛОВЕК-ХОЧЕТ-ОБЩУЮ-СОБСТВЕННОСТЬ И | (Вершина 11),
 | ЧЕЛОВЕК-ВНЕС-ПЕРВЫЙ-ВЗНОС = ДА, | (Вершина 12),
ТО ВЛОЖЕНИЯ-ЧЕЛОВЕКА =НЕДОРОГОЙ ДОМ И ЗАКЛЮЧЕНИЕ РАЗУМНОГО КОНТРАКТА

Обратная и прямая цепочки рассуждений

После того как правила сформулированы и записаны, их можно поместить в базы знаний систем, реализующих обратную и прямую цепочки рассуждений. Воспользуемся обратной цепочкой рассуждений, чтобы проверить, подходит ли определенная финансовая стратегия (цель) конкретному человеку. Цель уже выбрана - найти приемлемый вид вклада наличных денег для увеличения капитала (имя переменной ВЛОЖЕНИЯ-ЧЕЛОВЕКА). После конкретизации цели надо найти правило, в части ТО которого впервые упоминается имя выбранной переменной. В нашем примере для одинокого человека рассматривается правило, имеющее отношение к имени переменной ВЛОЖЕНИЯ-ЧЕЛОВЕКА: ЕСЛИ человеку от 25 до 45 лет и он живет один и имеет больше 10,000 долл. наличными и хочет иметь счет в банке и возможность быстро получить деньги, ТО ВЛОЖЕНИЯ-ЧЕЛОВЕКА в приобретение акций. В части ЕСЛИ правила содержатся переменные условия, значения которых нельзя определить, обратившись к частям ТО других правил (т.е. они не являются переменными логического вывода других правил). Это означает, что значения переменным присваиваются в процессе диалога пользователя и системы, например:

Человеку больше 25 лет ?
Человеку меньше 45 лет ?
Человек живет один ?
У человека наличных денег больше 10,000 долларов ?
Человек хочет иметь счет в банке ?
Человек хочет иметь возможность быстро получить деньги ?

На каждый вопрос надо получить ответ (да или нет). После ответов на все вопросы переменным будут присвоены значения (т.е. переменные будут проинициализированы). Если на какой-либо из этих вопросов дан отрицательный ответ, правило можно не рассматривать (оно ложно) и надо искать другое, содержащее в качестве цели переменную логического вывода ВЛОЖЕНИЯ-ЧЕЛОВЕКА. В этом примере другого правила с такой целью нет, т.е. поиск закончен. Другими словами, данному человеку не подходит предложенный вид вложения денег. Однако в больших системах может существовать несколько правил с одинаковой целью.
Если же на все вопросы дан положительный ответ, то пользователь может принять к сведению, что ему необходимо вложить капитал в акции.
Система, реализующая прямую цепочку рассуждений, вместо того, чтобы прийти к уже известному выводу, попытается выработать для человека, в зависимости от его возраста, образа жизни и т.д., финансовую стратегию. Для этого ей необходимо знать значения переменных в частях ЕСЛИ правил, чтобы затем выбрать соответствующую часть ТО какого-то правила. Например, надо определить финансовую стратегию человека 42 лет, живущего с другим одиноким человеком и думающего о покупке дома. В этом случае система может задать такие вопросы:

Человеку больше 25 лет ?
Человеку меньше 45 лет ?
Человек живет вместе с другим одиноким человеком ?
Человек хочет приобрести активы ?
Человек хочет приобрести дом ?
Человек хочет объединить собственность ?
Человек может, объединив усилия, внести первый взнос ?

Если для приведенного выше правила удовлетворяются все перечисленные условия, т.е. на все вопросы даны положительные ответы, то человеку будет предложено “Купить недорогой дом и заключить разумный контракт”. Если на какой-либо из вопросов ответили отрицательно, т.е. данное правило не срабатывает, надо искать другое правило.
Теперь читатель может приступить к разработке реальной системы финансового планирования.

Программная реализация

Правила для системы финансового планирования, полученные из дерева решений, можно вставить в системы, реализующие и прямую, и обратную цепочки рассуждений. Примеры программ таких систем приведены в предыдущих главах. В эти программы были включены примеры баз знаний, которые пользователь, конечно, должен заменить на базу знаний для финансового планирования.
Рассмотрим замену базы знаний на примере правила:

ЕСЛИ ВОЗРАСТ = (больше или равен) 25 И
ВОЗРАСТ (меньше или равен) 45 И
ОБРАЗ-ЖИЗНИ = ОДИНОКИЙ ЧЕЛОВЕК,
НАЛИЧНЫЕ-ДЕНЬГИ $1000 И СЧЕТ-В-БАНКЕ=ДА,

ТО ВЛОЖЕНИЯ-ЧЕЛОВЕКА = ПРИОБРЕТЕНИЕ АКЦИЙ

Первым делом надо ввести переменные для каждого условия правила, например:

 AG - ВОЗРАСТ (символа $ нет, так как это числовая, а не символьная переменная)
LF$ - ОБРАЗ ЖИЗНИ
СА - НАЛИЧНЫЕ ДЕНЬГИ
DE$ - ВКЛАД В БАНКЕ
IN$ - ВЛОЖЕНИЯ ЧЕЛОВЕКА

После этого в программах прямой или обратной цепочки рассуждений (листинги 5.1 и 6.1) надо заменить предложение 367 листинга 5.1 или предложение 367 листинга 6.1 на

367 V$(1) = “AG”: V$(2) = "LF": V$(3) = "CA": V$(4) ="DE"

Это предложение заносит имена переменных условия в список переменных. Теперь в базы знаний программ, реализующих как прямую, так и обратную цепочки (с предложения 1500 листинга 5.1 или предложения 1500 листинга 6.1), можно вставить правило:

1500 IF (AGE=26) AND (AGE45) AND (LF$="ОДИНОКИЙ ЧЕЛОВЕК") THEN T=1
1501 IF (T=1) AND (CA10000) AND (DE$="A") THEN S=1 ;
1502 RETURN

В программе правило записано двумя предложениями, так как в некоторых реализациях языка Бейсик существует ограничение на длину предложения, например 80 символов. Объединение условий двух предложений выполняется следующим образом:
1. Для того чтобы Т=1, все условия предложения 1500 должны быть истинны.
2. Для того чтобы S=1, должны быть истинны все условия предложения 1501, включая условие Т=1.
3. Таким образом, S=1 только в том случае, если истинны все пять условий правила.
В программе, реализующей обратную цепочку рассуждений, предложение 1510, записывается так:

1510 IN$="ДЕНЕЖНЫЙ РЫНОК": PRINT" IN=ДЕНЕЖНЫЙ PЫHOK": RETURN
1511 GOSUB 3100: RETURN

Кроме того, должны быть заполнены соответствующие информационные структуры программы. Для системы, реализующей обратную цепочку рассуждений, список переменных логического вывода должен содержать имя переменной IN$. Инициализация списка переменных логического вывода выполняется в предложении 305 листинга 6.1.: CL$(1)="IN". Необходимо также изменить предложения программы, начиная с 1700, выполняющие диалог для ввода значений переменных условия:

1700 INPUT "ВВЕДИТЕ ВОЗРАСТ" ;AG:RETURN
1705 INPUT "ВВЕДИТЕ OБPA3 ЖИЗНИ (НАПРИМЕР, ОДИНОКИЙ ЧЕЛОВЕК) "; LF$: RETURN
1710 INPUT "ВВЕДИТЕ СУММУ НАЛИЧНЫХ ДЕНЕГ" ;CA:RETURN
1715 INPUT "ХОЧЕТ ЛИ ЧЕЛОВЕК ИМЕТЬ СЧЕТ В БАНКЕ (ДА ИЛИ HET)"; DE$: RETURN

В предложении 407 листинга 5.1 и предложении 407 листинга 6.1 должен формироваться список переменных условия. Программы, листинга которых приведены в гл. 5 и 6, имеют ограничение на количество условий в правиле, не более четырех. В качестве упражнения предлагаем читателю изменить данные программы таким образом, чтобы список переменных условия содержал по 9 переменных для каждого правила, ввести правило в базы знаний обеих программ и выполнить их.


Часть 3 "Экспретные системы: знания плюс логический вывод". Глава 9

ГЛАВА 9

ЭКСПЕРТНАЯ СИСТЕМА В ОБЛАСТИ ТОРГОВЛИ

Успех любого торгового предприятия зависит от того, как хорошо будет продан товар - автомобиль, консультативные услуги, пшеница или страховые полисы. Отношение между продавцом и покупателем -основной элемент свободного рынка. Торговля ко всему прочему - еще и точная наука. Перед продавцом и покупателем стоят разные задачи. Очень важно знать индивидуальные особенности характера продавца и покупателя. При неудачном сочетании этих особенностей торговую сделку ждет крах, в противном случае покупатель может приобрести товар даже, если в нем нет необходимости.
В торговле компьютеры часто рассматриваются как инструмент для решения таких задач, как ведение записей, сбор данных, получение статистической информации. На самом деле компьютеры могут помочь и в менее очевидных вещах, например при оценке влияния особенностей характеров на заключение торговой сделки.
Ниже обсуждается разработка экспертной системы, оценивающей вероятность заключения торговой сделки в зависимости от особенностей характера продавца и покупателя. Подобная оценка может быть полезна продавцу при выборе определенного подхода к конкретному покупателю или при прогнозировании усилий, которые необходимы для того, чтобы сделка с определенной вероятностью была заключена.
Ясно, что все типы человеческих характеров в экспертную систему заложить невозможно. Однако для экспертной системы достаточно только тех особенностей характера, которые существенны при общении людей в процессе купли-продажи.

Выделение фактов

Прежде всего при создании экспертной системы, использующей индивидуальные особенности покупателя и продавца, необходимо собрать все, относящиеся к делу факты. Факты нужно разделить на две части. В первую войдут факты, относящиеся к индивидуальным особенностям продавца, во вторую - покупателя. Для каждого типа характера набор фактов должен быть заложен в экспертную систему, чтобы с ее помощью классифицировать продавцов и покупателей. Факты собираются в процессе исследования рынка, изучения объектов торговли и индивидуальных особенностей продавцов и покупателей.

Психологические типы продавцов

Возьмем из литературы различные описания продавцов и разделим их на три группы. Каждая группа будет представлять некоторый психологический тип:

1. Напористо-агрессивный.
2. Подчеркнуто любезный.
3. Самоуверенный.
Ниже будут выделены наиболее характерные черты (атрибуты) каждого типа. Атрибуты могут иметь большее или меньшее значение. В жизни одна и та же черта может принадлежать характерам различных типов. Снабдим каждый факт идентифицирующим номером, чтобы в дальнейшем было проще на него ссылаться. Проставим справа для каждого факта значение весового фактора. Смысл весового фактора поясним позже.

Психологический тип 1 — напористо-агрессивный

1-1. Любит конкуренцию в продажах (5)
1-2. Предлагает товар энергично и напористо (5)
1-3. Испытывает чувство собственного преимущества (5)
1-4. Не терпит неудач или потерь при продажах (10)
1-5. Честолюбив (2,5)
1-6. Полон решимости (2,5)

Психологический тип 2 — подчеркнуто любезный

2-1. Не настойчив с покупателями (10)
2-2. Считает, что самое лучшее нападение - это хорошая защита (5)
2-3. В работе стремится избегать осложнений (5)
2-4. Демонстрирует сердечность и доброту (5)
2-5. Пытается со всеми соглашаться (2,5)
2-6. Стремится быть полезным (2,5)

Психологический тип 3 — самоуверенный

3-1. Любит конкуренцию в продажах (2,5)
3-2. Легко принимает решения (5)
3-3. Открыт и честен с коллегами и покупателями (10)
3-5. Предлагает товар энергично и напористо (5)
3-6. Прислушивается к чужому мнению (5)

Для простоты и ясности изложения разработки подобных систем для каждого типа выбрано только шесть атрибутов. В действительности их гораздо больше.

Инициализация фактов

Теперь необходимо составить ряд вопросов, ответы на которые дадут значения атрибутов. Это могут быть такие вопросы:

Любите ли вы конкурировать в продажах ?
Предлагаете ли вы товар энергично и напористо ?
Испытываете ли вы чувство собственного преимущества ?
Вы не терпите неудач или потерь при продажах ?
Честолюбивы ли вы?
Полны ли вы решимости ?
Вы не настойчивы с покупателями ?
Считаете ли вы, что самое лучшее нападение - это хорошая защита ?
Стремитесь ли вы в работе избежать осложнений ?
Демонстрируете ли вы сердечность и доброту ?
Пытаетесь ли вы со всем соглашаться ?
Легко ли вы принимаете решения ?
Стремитесь ли вы быть полезным покупателю?
Честны и открыты ли вы с коллегами и покупателями ?
Прислушиваетесь ли вы к чужому мнению ?

 Весовые факторы

При классификации людей по психологическим типам одни черты характера (атрибуты) важнее других. Например, для напористо-агрессивного психологического типа атрибут “Не терпит неудач или потерь при продажах” (1-4) важнее атрибута “Полон решимости” (1-6). Что это значит ? Человек, не терпящий неудач или потерь при продажах, с большим правом может быть отнесен к напористо-агрессивному типу, чем человек, полный решимости. Каждый атрибут отмасштабирован согласно шкале важности от 1 до 10. Чем больше число, тем важнее атрибут. Эти числа и называются весовыми факторами. Поэтому атрибут “Не терпит неудач или потерь при продажах”, имеющий весовой фактор 10, важнее атрибута “Полон решимости”, имеющего весовой фактор 2,5.

Использование весовых факторов

Если при инициализации фактов на вопрос отвечают утвердительно, то факт, представленный этим вопросом, принимает значение “ДА”. Для каждого психологического типа (исходя из предположения, что все факты имеют значение “ДА”) можно просуммировать веса всех фактов и получить максимальный общий весовой фактор. Максимальный общий весовой фактор для каждого психологического типа продавца равен 30. Так, для напористо-агрессивного типа:

5+5+5+10+2,5+2,5=30.

Пример работы системы

Поясним вышесказанное на примере. Представим, что продавец - пользователь экспертной системы сидит за компьютером и отвечает на вопросы. Ответы пользователя приводятся после знака вопроса.

1-17. Любите ли вы конкурировать в продажах ? ДА
1-2. Предлагаете ли вы товар энергично и напористо ? ДА
1-3. Испытываете ли вы чувство собственного преимущества ? НЕТ
1-4. Вы не терпите неудач или потерь при продажах ? ДА
1-5. Честолюбивы ли вы? НЕТ
1-6. Полны ли вы решимости ? НЕТ
2-1. Вы не настойчивы с покупателями ? НЕТ
2-2. Считаете ли вы, что самое лучшее нападение — это хорошая защита ? НЕТ
2-3. Стремитесь ли вы в работе избежать осложнений ? НЕТ
2-4. Демонстрируете ли вы сердечность и доброту ? НЕТ
2-5. Пытаетесь ли вы со всеми соглашаться ? ДА
2-6. Стремитесь ли вы быть полезным покупателю? НЕТ
3-2. Легко ли вы принимаете решения ? ДА
3-3. Честны и открыты ли вы с коллегами и покупателями ? НЕТ
3-6. Прислушиваетесь ли вы к чужому мнению ? НЕТ

Для фактов 3-1 и 1-1 вопрос был бы одним и тем же, поэтому он не повторяется, но следует помнить, что весовой фактор факта 1-1 равен 5, а факта 3-1 - только 2,5. Относительная важность факта зависит от психологического типа, к которому он относится. Сказанное также касается фактов 3-4 и 3-5. Данные для них берутся из ответов на вопросы 1-5 и 1-2 соответственно. В табл. 9.1 приведены значения для всех фактов и общие весовые факторы для каждого психологического типа.
Человеческие характеры, как правило, не так ярко выражены, чтобы заключать в себе черты только одного психологического типа. Обычно в них соединены свойства различных психологических типов. Характеров очень много, но разные характеры могут иметь некоторые одинаковые черты. Простая экспертная система в нашем примере охватывает лишь малую часть человеческих характеров.
Пусть в результате опроса вырисовывается такой характер:

Любит конкурировать в продажах (типы 1 и 3).
Предлагает товар энергично и напористо (типы 1 и 3).
Не терпит неудач или потерь при продажах (тип 1).
Пытается со всеми соглашаться (тип 2).
Легко принимает решения (тип 3).

 Определение психологического типа продавца

Из таблицы видно, что сумма весовых факторов равна 35,0:

Тип 1. | Напористо-агрессивный | 20,09
Тип 2. | Подчеркнуто-любезный | 2,5
Тип 3. | Самоуверенный | 12,5
Всего |  | 35,0

 Таблица 9.1
Результаты работы экспертной системы при классификации продавцов

Атрибут психологическкого типа | Ответ на вопрос | Весовой фактор
Напористо-агрессивный 1-1 1-2 1-3 1-4 1-5 1-6 Общий весовой фактор Подчеркнуто-любезный 2-1 2-2 2-3 2-4 2-5 2-6 Общий весовой фактор Самоуверенный 3-1 3-2 3-3 3-4 3-5 3-6 Общий весовой фактор | ДА ДА НЕТ ДА НЕТ НЕТ НЕТ НЕТ НЕТ НЕТ ДА НЕТ ДА ДА НЕТ НЕТ ДА НЕТ | 5,0 5,0 0 10,0 0 0 _____ 20,0 0 0 0 0 2,5 0 _____ 2,5 2,5 5,0 0 0 5,0 0 _____ 12,5

Из таблицы видно, что продавец может обладать чертами, относящимися к различным психологическим типам. Чем выше общий весовой фактор, тем ближе характер продавца к соответствующему типу. В примере характер продавца ближе к напористо-агрессивному типу (весовой фактор 20,0), чем к подчеркнуто любезному (весовой фактор 2,5). Если бы приходилось выбирать только между этими двумя психо- логическими типами, можно было бы сказать, что вероятность принадлежности характера продавца к напористо-агрессивному типу равна 20,0 деленное на 22,5 (сумма обоих общих весовых факторов). В действительности было бы проведено сравнение двух психологических типов, которое достигается сравнением конкретного общего весового фактора с суммой весовых факторов для обоих типов. В приведенном примере - 3 психологических типа. Описанный подход справедлив и здесь. Вероятность принадлежности характера продавца к каждому из психологических типов может быть подсчитана по формуле:

130.jpg (7447 bytes)

Подставляя эту формулу получим:

ВЕР 1 = 20/35 = 0,571 = 57,1 %,
ВЕР 2 = 2,5/35 = 0,071 = 7,1 % ,
ВЕР 3 - 12,5/35 = 0,357 = 35,7 %.

В дальнейшем эти значения и аналогичные величины для покупателей могут использоваться для определения вероятности успешного проведения торговой сделки.

Психологические типы покупателей

Рассмотрим теперь психологические типы покупателей. Опять возьмем все необходимые данные из литературы и для простоты ограничимся четырьмя фактами для каждого типа. Как и раньше, значения весовых факторов для каждого факта приводятся справа в скобках:

Психологический тип 1 - Руководствуется независимостью и самоуважением
1-1. В разговоре говорит в основном о себе (5)
1-2. Хвастлив и самовлюблен (3)
1-3. Мнением продавца не интересуется (2)
1-4. Считает, что знает больше других (5)

Психологический тип 2 — Руководствуется осторожностью
2-1. Осмотрителен (5)
2-2. Нерешителен (5)
2-3. Не стремится поделиться информацией (3)
2-4. Скрывает свое мнение и чувства (2)

Психологический тип 3 — Руководствуется суждениями окружающих
3-1. Уступчив (5)
3-2. Послушен (5)
3-3. Уклоняется от споров (2)
3-4. Приятный, общительный, симпатичный (3)

Психологический тип 4 — Руководствуется независимостью и самоутверждением
4-1. Тщательно осматривает товар (5)
4-2. Свободно излагает свои идеи и суждения (2)
4-3. Стремится выйти из затруднения, принимая решения вместе с продавцом (3)
4-4. Обладает гибкостью (5)

Максимальный общий весовой фактор для каждого психологического типа равен 15. Исходя из своих впечатлений о каждом покупателе продавец должен ответить на следующие вопросы:

1-1. Говорит ли покупатель в основном о себе ?
1-2. Хвастлив и самовлюблен ли покупатель ?
1-3. Покупатель не интересуется мнением продавца ?
1-4. Считает ли покупатель, что знает больше других ?
2-1. Осмотрителен ли покупатель ?
2-2. Нерешителен ли покупатель ?
2-3. Покупатель не стремится делиться информацией ?
2-4. Скрывает ли покупатель свое мнение и чувства ?
3-1. Уступчив ли покупатель ?
3-2. Послушен ли покупатель ?
3-3. Уклоняется ли покупатель от споров ?
3-4. Покупатель приятен, общителен и симпатичен ?
4-1. Тщательно ли покупатель осматривает товар ?
4-2. Свободно ли покупатель излагает свои идеи и суждения?
4-3. Стремится ли покупатель выйти из затруднения, принимая решения вместе с продавцом ?
4-4. Обладает ли покупатель гибкостью ?

 Как и в случае с продавцом, вопросы нужны для того, чтобы присвоить фактам значения. Если на вопрос получен положительный ответ, то в дальнейшем при работе принимается во внимание соответствующий весовой фактор. Весовые факторы для отрицательных ответов во внимание не принимаются. В табл. 9.2 приведены результаты работы экспертной системы при классификации покупателей.
 Характеру конкретного покупателя могут быть присущи черты, свойственные различным психологическим типам. В примере используются черты характера, относящиеся ко второму и третьему психологическим типам.
Пусть в результате опроса вырисовывается такой характер:

Осмотрителен (тип 2)

Нерешителен (тип 2)

Уступчив (тип 3)

Послушен (тип 3)

Уклоняется от споров (тип 3)

Приятный, общительный, симпатичный (тип 3)

Таблица 9.2
Результаты работы экспертной системы при классификации покупателей

Атрибут психологическкого типа | Ответ на вопрос | Весовой фактор
Тип покупателя 1 1-1 1-2 1-3 1-4 Общий весовой фактор Тип покупателя 2 2-1 2-2 2-3 2-4 Общий весовой фактор Тип покупателя 3 3-1 3-2 3-3 3-4 Общий весовой фактор Тип покупателя 4 4-1 4-2 4-3 4-4 Общий весовой фактор | НЕТ НЕТ НЕТ НЕТ ДА ДА НЕТ НЕТ ДА ДА ДА ДА НЕТ НЕТ НЕТ НЕТ | 0 0 0 0 _____ 0 5 5 0 0 _____ 10 5 5 2 3 _____ 15 0 0 0 0 ____ 0

Определение психологического типа покупателя

Найдем сумму общих весовых факторов по всем психологическим типам покупателей:

Тип покупателя 1. | Руководствуется независимостью и самоуважением 0 | 0
Тип покупателя 2. | Руководствуется осторожностью 10 | 10
Тип покупателя 3. | Руководствуется мнением окружающих 15 | 15
Тип покупателя 4. | Руководствуется независимостью и самоутверждением 0 | 0
Всего |  | 25

И далее используя формулу

133.jpg (3778 bytes)

можно вычислить вероятность принадлежности покупателя к определенному психологическому типу:

ВЕР 1=0/25=0,00=0%;

ВЕР 2=10/25=0,40=40%;
ВЕР 3=15/25=0,60=60%;

ВЕР 4=0/25=0,00=0%;

Оценка возможных сочетаний психологических типов продавцов и покупателей

Теперь, когда получены вероятности принадлежности продавцов и покупателей к определенным психологическим типам, можно найти вероятности сочетания различных типов продавцов и покупателей. Для примера лучше всего подойдет первый психологический тип продавца и третий тип покупателя. Но что будет, если значения вероятностей близки друг другу или, наоборот, сильно различаются ? В этом случае нужно рассмотреть все вероятности, чтобы дать возможность пользователю экспертной системы принять окончательное решение. Вычислим сначала вероятность всех сочетаний типов продавцов и покупателей. Для этого перемножим вероятности принадлежности продавцов и покупателей различным психологическим типам для всех комбинаций. Обычно в теории вероятностей, если события независимы и нужно получить вероятность одновременного появления обоих событий, она вычисляется как произведение вероятностей появления первого и второго событий. Сведем вычисления в табл. 9.3.

Таблица 9.3
Вероятность сочетания

Тип продавца | Тип покупателя | Вероятность для продавца | Вероятность для покупателя | Вероятность сочетания
1 1 1 1 2 2 2 2 3 3 3 3 | 1 2 3 4 1 2 3 4 1 2 3 4 | 0.571 0.571 0.571 0.571 0.071 0.071 0.071 0.071 0.355 0.357 0.357 0.357 | 0 0.4 0.6 0 0 0.4 0.6 0 0 0.4 0.6 0 | 0 0.2284 0.3426 0 0 0.0284 0.0426 0 0 0.1428 0.2142 0

Пользователь экспертной системы должен изучить вероятности сочетаний, чтобы определить, какие существуют типы продавцов и покупателей, и принять соответствующее решение.

Работа экспертной системы

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

Результат сделки - успех выше среднего, продавец доминирует над покупателем, покупатель принимает предложения продавца.

Такая оценка экспертной системы основывается на заложенных в нее человеком-экспертом суждениях о различных комбинациях типов продавцов и покупателей. Ниже приведены выводы экспертной системы для различных сочетаний психологических типов продавцов (ПР) и покупателей (ПК).

ПР 1 и ПК 1 | Результат продажи — средний; высокое взаимное уважение и соперничество
ПР 1 и ПК 2 | Результат продажи — ниже среднего; продавец презирает покупателя и тот отказывается от покупки
ПР 1 и ПК 3 | Результат продажи — выше среднего, продавец доминирует над покупателем, покупатель принимает предложения продавца
ПР 1 и ПК 4 | Результат продажи — средний; продавец относится к покупателю с уважением, но тот ему не доверяет
ПР 2 и ПК 1 | Результат продажи — ниже среднего; продавец отказывает покупателю, но покупатель ведет себя сдержано; нет взаимного уважения
ПР 2 и ПК 2 | Результат продажи — ниже среднего; и продавец и покупатель отказываются от сделки, разругавшись
ПР 2 и ПК 3 | Результат продажи — средний; продавец к покупателю безразличен, а покупатель выглядит смешно и напряженно
ПР2 и ПК 4 | Результат продажи — ниже среднего; продавец равнодушен к покупателю; покупатель стремится получить дополнительную информацию и испытывает к продавцу смешанные чувства
ПР 3 и ПК 1 | Результат продажи — средний; высокое взаимное уважение
ПР 3 и ПК 2 | Результат продажи — средний; быстро устанавливается взаимопонимание; продавец внимателен и, покупатель ему доверяет
ПР 3 и ПК 3 | Результат продажи — выше среднего; продавец понимаетзапросы покупателя, и покупатель платит ему взаимностью
ПР 3 и ПК 4 | Результат продажи — выше среднего; полное взаимопонимание, чувствуют себя партнерами, высокое взаимное уважение

Кратко опишем основные шаги разработки экспертной системы.
1. Исследования и организация сбора информации.
2. Деление информации на категории и классификация фактов в соответствии с этими категориями.
3. Подготовка вопросов для получения данных по каждому факту.
4. Выбор весовых факторов.
5. Вычисление общего весового фактора.
6. Оценка вероятностей по весовым факторам.
7. Вычисление вероятностей сочетания различных психологических типов.
8. Стратегическое прогнозирование, основанное на принятом решении.
Описание подхода к разработке экспертной системы в области торговли закончено. Читатель может развить эту систему или создать аналогичную.

Пример программы

Программа на Бейсике, реализующая описанный подход, приведена в листинге 9.1. В ней используются весовые факторы и вероятности для рассмотренных психологических типов продавцов и покупателей.

Пояснения к программе

Программу можно разделить на четыре части:
1) инициализация;
2) получение данных по психологическим типам продавцов и их анализ;
3) получение данных по психологическим типам покупателей и их анализ:
4) анализ сочетаний типов продавцов и покупателей.

Листинг программы
Листинг 9.1

1 REM ******** ЭКСПЕРТНАЯ СИСТЕМА ТОРГОВОГО БИЗНЕСА ********
5 REM *****************************************************
 10 REM*** БЛОК ИНИЦИАЛИЗАЦИИ
15 REM НАЗВАНИЕ ПСИХОЛОГИЧЕСКОГО ТИПА ПРОДАВЦА
20 DIM S$(3)
25 S$ (1)="НАПОРИСТО-АГРЕССИВНЫЙ"
30 S$(2)="ПОДЧЕРКНУТО ЛЮБЕЗНЫЙ"
35 S$(3)="САМОУВЕРЕННЫЙ"
40 REM НАЗВАНИЕ ПСИХОЛОГИЧЕСКОГО ТИПА ПОКУПАТЕЛЯ
45 DIM C$ (4)
50 С$(1)="РУКОВОДСТВУЕТСЯ НЕЗАВИСИМОСТЬЮ И САМОУВАЖЕНИЕМ"
55 С$(2)="РУКОВОДСТВУЕТСЯ ОСТОРОЖНОСТЬЮ"
60 С$(3)="РУКОВОДСТВУЕТСЯ МНЕНИЕМ ОКРУЖАЮЩИХ"
65 С$(4)="РУКОВОДСТВУЕТСЯ НЕЗАВИСИМОСТЬЮ И САМОУТВЕРЖДЕНИЕМ"
70 REM МАССИВ ОБЩИХ ВЕСОВЫХ ФАКТОРОВ ДЛЯ ПРОДАВЦА
75 DIM SW(3)
80 REM МАССИВ ОБЩИХ ВЕСОВЫХ ФАКТОРОВ ДЛЯ ПОКУПАТЕЛЯ
85 DIM CW(4)
90 REM ВЕСОВЫЕ ФАКТОРЫ ПРОДАВЦОВ
95 DIM SF(18)
100 SF(1)=5:SF(2)=5:SF(3)=5:SF(4)=10:SF(5)=2-5:SF(6)=2-5
105 SF(7)=10:SF(8)=5:SF(9)=5:SF(10)=5:SF(11)=2-5:SF(12)2-5
110 SF(13)=2-5:SF(14)=5:SF(15)=10:SF(16)=2-5:SF(17)=5:SF(18)=5
115 REM ВЕСОВЫЕ ФАКТОРЫ ДЛЯ ПОКУПАТЕЛЕЙ
120 DIM CF(16)
125 CF(1)=5:CF(2)=3:CF(3)=2:CF(4)=5
130 CF(5)=5:CF(6)=5:CF(7)=3:CF(8)=2
135 CF(9)=5:CF(10)=5:CF(11)=2:CF(12)=3
140 CF(13)=5:CF(14)=2:CF(15)=3:CF(16)=5
145 REM ************************************************
150 REM ******* БЛОК ПОЛУЧЕНИЯ ДАННЫХ ****************
155 DIM A$(20): REM МАССИВ ОТВЕТОВ
160 REM ************ ДАННЫЕ О ПРОДАВЦЕ
162 PRINT"**** ДАННЫЕ О ПРОДАВЦЕ ****"
165 INPUT "ЛЮБИТЕ КОНКУРИРОВАТЬ В ПРОДАЖАХ" ;А$ (1)
170 INPUT "ПРЕДЛАГАЕТЕ ТОВАР ЭНЕРГИЧНО И НАПОРИСТО";А$(2)
175 INPUT "ИСПЫТЫВАЕТЕ ЧУВСТВО СОБСТВЕННОГО ПРЕИМУЩЕСТВА";А$(3)
180 INPUT "HE ТЕРПИТЕ НЕУДАЧ ИЛИ ПОТЕРЬ ПРИ ПРОДАЖАХ";А$(4)
185 PRINT "ЧЕСТОЛЮБИВЫ ЛИ ВЫ ?
190 INPUT A$ (5)
195 INPUT "ПОЛHЫ РЕШИМОСТИ";А$ (6)
200 INPUT "HE НАСТОЙЧИВЫ С ПОКУПАТЕЛЕМ";А$(7)
205 INPUT "СЧИТАЕТЕ, ЧТО ЛУЧШЕЕ НАПАДЕНИЕ- ЭТО ЗАЩИТА";А$(8)
210 PRINT "СТРЕМИТЕСЬ В РАБОТЕ ИЗБЕЖАТЬ"
215 INPUT "ОСЛОЖНЕНИЙ ";А$ (9)
220 INPUT "ДЕМОНСТРИРУЕТЕ СЕРДЕЧНОСТЬ И ДОБРОТУ";А$(10)
225 INPUT" ПЫТАЕТЕСЬ СО ВСЕМИ СОГЛАШАТЬСЯ";А$ (11)
230 INPUT "СТРЕМИТЕСЬ БЫТЬ ПОЛЕЗНЫМ";А$(12)
235 А$(13)=А$(1)
240 INPUT "ЛЕГКО ПРИНИМАЕТЕ РЕШЕНИЯ";А$(14)
245 INPUT "ЧЕСТНЫ И ОТКРЫТЫ С КОЛЛЕГАМИ И ПОКУПАТЕЛЯМИ";А$(15)
250 А$(16)=А$(5)
255 А$(17)=А$(2)
260 INPUT "ПРИНИМАЕТЕ ЧУЖОЕ МНЕНИЕ";А$(18)
265 REM ВЫЧИСЛЕНИЕ ОБЩЕГО ВЕСОВОГО ФАКТОРА И ВЕРОЯТНОСТИ
270 FOR I=l TO 3:REM ВЫЧИСЛЕНИЕ ОБЩЕГО ВЕСОВОГО ФАКТОРА
275 S=0:REM ВРЕМЕННЫЙ ОБЩИЙ ВЕСОВОЙ ФАКТОР
280 FOR J=1 TO 6
285 K=(I-1)*6+J
290 IF A$(K)="Y" THEN S=S+SF(K)
295 NEXT J
300 SW(I)-S
305 NEXT I
310 REM ВЫЧИСЛЕНИЕ ВЕРОЯТНОСТИ ПРИНАДЛЕЖНОСТИ К КОНКРЕТНОМУ ТИПУ
315 DIM PS(3)
320 S=SW(1)+SW(2)+SW(3) :REM СУММА ОБЩИХ ВЕСОВЫХ ФАКТОРОВ
330 FOR I=l TO 3:REM ПЕЧАТЬ РЕЗУЛЬТАТОВ
335 PRINT S$(I)
340 PRINT "ОБЩИЙ ВЕСОВОЙ ФАКТОР";SW(I)
345 PS(I)=SW(I)/S:РRINT "ВЕРОЯТНОСТЬ="; РS (I)
350 PRINT
355 NEXT I
500 REM ************************************************
505 REM ******** ДАННЫЕ О ПОКУПАТЕЛЕ ************************
507 PRINT"**** ДАННЫЕ О ПОКУПАТЕЛЕ ****"
510 INPUT "ГOBOPИT ЛИ ПОКУПАТЕЛЬ В ОСНОВНОМ О СЕБЕ";А$(1)
515 INPUT "ХВАСТЛИВ И САМОВЛЮБЛЕН ЛИ ПОКУПАТЕЛЬ ";А$(2)
520 INPUT "ПОКУПАТЕЛЬ НЕ ИНТЕРЕСУЕТСЯ МНЕНИЕМ ПРОДАВЦА" ;А$(3)
525 INPUT "СЧИТАЕТ ЛИ ПОКУПАТЕЛЬ, ЧТО ЗНАЕТ БОЛЬШЕ ВСЕХ";А$(4)
530 INPUT "ОСМОТРИТЕЛЕН ЛИ ПОКУПАТЕЛЬ ";А$ (5)
535 INPUT "НЕРЕШИТЕЛЕН ЛИ ПОКУПАТЕЛЬ ";А$ (6)
540 INPUT "ПОКУПАТЕЛЬ НЕ СТРЕМИТСЯ ПОДЕЛИТЬСЯ ИНФОРМАЦИЕЙ";А$(7)
545 INPUT "СКРЫВАЕТ ЛИ ПОКУПАТЕЛЬ СВОЕ МНЕНИЕ И ЧУВСТВА" ;А$ (8)
550 INPUT "УСТУПЧИВ ЛИ ПОКУПАТЕЛЬ ";А$ (9)
555 INPUT "ПОСЛУШЕН ЛИ ПОКУПАТЕЛЬ" ;А$(10)
560 INPUT "УКЛОНЯЕТСЯ ЛИ ПОКУПАТЕЛЬ ОТ СПОРОВ" ;А$ (11)
565 PRINT "ПОКУПАТЕЛЬ ПРИЯТЕН, ОБЩИТЕЛЕН''
570 INPUT "И СИМПАТИЧЕН ";А$ (12)
570INPUT "ТЩАТЕЛЬНО ЛИ ОСМАТРИВАЕТ ТОВАР";А$( 13)
 580 INPUT "СВОБОДНО ЛИ ПОКУПАТЕЛЬ ИЗЛАГАЕТ ИДЕИ И СУЖДЕНИЯ";А$(14)
585 PRINT "СТРЕМИТСЯ ЛИ ПОКУПАТЕЛЬ ВЫЙТИ ИЗ ЗАТРУДНЕНИЯ,"
590 INPUT "ПРИНИМАЯ РЕШЕНИЯ ВМЕСТЕ С ПРОДАВЦОМ" ;А$ (15)
595 INPUT "ОБЛАДАЕТ ЛИ ПОКУПАТЕЛЬ ГИБКОСТЬЮ ?";А$(16)
700 REM ВЫЧИСЛЕНИЕ ОБЩЕГО ВЕСОВОГО ФАКТОРА И ВЕРОЯТНОСТИ
705 FOR J=1 TO 4
720 K=(I-1)*4+J
725 IF A$(K)="Y" THEN S=S+CF(K)
730 NEXT J
735 CW(I)=S
740 NEXT I
742 INPUT ;K$
745REM ВЫЧИСЛЕНИЕ ВЕРОЯТНОСТИ ПРИНАДЛЕЖНОСТИ К КОНКРЕТНОМУ ТИПУ
750 DIM PC(4)
755 S=CW(1)+CW(2)+CW(3):REM СУММА ОБЩИХ ВЕСОВЫХ ФАКТОРОВ
760 FOR I=l TO 4; REM ПЕЧАТЬ РЕЗУЛЬТАТОВ
765 PRINT C$(I)
770 PRINT "ОБЩИЙ ВЕСОВОЙ ФАКТОР" ;CW(I)
775 РС(I)=СW(I)/S:РRINT "ВЕРОЯТНОСТЬ=";РС(I)
780 PRINT
785 NEXT I
900 REM ***************************
905 REM ВЕРОЯТНОСТЬ СОЧЕТАНИЯ
910 FOR I=l TO 3
915 FOR J=1 TO 4
920 PRINT "ПРОДАВЦЫ "; I ;"ПОКУПАТЕЛИ "; J;"ВЕРОЯТНОСТИ";
PS(I)*PC(J)
925 NEXT J
930 INPUT "ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВК";К$
935 NEXT I:STOP

Пример выполнения программы

RUN
 **** ДАННЫЕ О ПРОДАВЦЕ ****
ЛЮБИТЕ КОНКУРИРОВАТЬ В ПРОДАЖАХ ? Д
 ПРЕДЛАГАЕТЕ ТОВАР ЭНЕРГИЧНО И НАПОРИСТО ? Д
ИСПЫТЫВАЕТЕ ЧУВСТВО СОБСТВЕННОГО ПРЕИМУЩЕСТВА ? Н
НЕ ТЕРПИТЕ НЕУДАЧ ИЛИ ПОТЕРЬ В ПРОДАЖАХ ? Д
ЧЕСТОЛЮБИВЫ ЛИ ВЫ? Н
ПОЛНЫ РЕШИМОСТИ ? Н
 НЕ НАСТОЙЧИВЫ С ПОКУПАТЕЛЕМ ? Н
СЧИТАЕТЕ, ЧТО ЛУЧШЕЕ НАПАДЕНИЕ - ЭТО ЗАЩИТА ? Н
СТРЕМИТЕСЬ В РАБОТЕ ИЗБЕЖАТЬ ОСЛОЖНЕНИЙ ? Н
 ДЕМОНСТРИРУЕТЕ СЕРДЕЧНОСТЬ И ДОБРОТУ ? Н
ПЫТАЕТЕСЬ СО ВСЕМИ СОГЛАШАТЬСЯ ? Д
СТРЕМИТЕСЬ БЫТЬ ПОЛЕЗНЫМ ? Н
ЛЕГКО ПРИНИМАЕТЕ РЕШЕНИЯ ? Д
ЧЕСТНЫ И ОТКРЫТЫ С КОЛЛЕГАМИ И ПОКУПАТЕЛЯМИ ? Н
ПРИНИМАЕТЕ ЧУЖОЕ МНЕНИЕ ? Н

НАПОРИСТО-АГРЕССИВНЫЙ
ОБЩИЙ ВЕСОВОЙ ФАКТОР = 20
ВЕРОЯТНОСТЬ = 0.5714286

ПОДЧЕРКНУТО ЛЮБЕЗНЫЙ
ОБЩИЙ ВЕСОВОЙ ФАКТОР = 2,5
ВЕРОЯТНОСТЬ = 0.714285

САМОУВЕРЕННЫЙ
ОБЩИЙ ВЕСОВОЙ ФАКТОР = 12,5
ВЕРОЯТНОСТЬ = 0.3571429

***** ДАННЫЕ О ПОКУПАТЕЛЕ *****
ГОВОРИТ ЛИ ПОКУПАТЕЛЬ В ОСНОВНОМ О СЕБЕ ? Н
ХВАСТЛИВ И САМОВЛЮБЛЕН ЛИ ПОКУПАТЕЛЬ ? Н
ПОКУПАТЕЛЬ НЕ ИНТЕРЕСУЕТСЯ МНЕНИЕМ ПРОДАВЦА? Н
СЧИТАЕТ ЛИ ПОКУПАТЕЛЬ, ЧТО ЗНАЕТ БОЛЬШЕ ВСЕХ ? Н
ОСМОТРИТЕЛЕН ЛИ ПОКУПАТЕЛЬ ? Д
НЕРЕШИТЕЛЕН ЛИ ПОКУПАТЕЛЬ ? Д
ПОКУПАТЕЛЬ НЕ СТРЕМИТСЯ ПОДЕЛИТЬСЯ ИНФОРМАЦИЕЙ ? Н
СКРЫВАЕТ ЛИ ПОКУПАТЕЛЬ СВОЕ МНЕНИЕ И ЧУВСТВА 7 Н
УСТУПЧИВ ЛИ ПОКУПАТЕЛЬ ? Д
ПОСЛУШЕН ЛИ ПОКУПАТЕЛЬ ? Д
УКЛОНЯЕТСЯ ЛИ ПОКУПАТЕЛЬ ОТ СПОРОВ ? Д
ПОКУПАТЕЛЬ ПРИЯТЕН, ОБЩИТЕЛЕН
И СИМПАТИЧЕН ? Д
ТЩАТЕЛЬНО ЛИ ПОКУПАТЕЛЬ ОСМАТРИВАЕТ ТОВАР ? Н
СВОБОДНО ПОКУПАТЕЛЬ ИЗЛАГАЕТ ИДЕИ И СУЖДЕНИЯ ? Н
СТРЕМИТСЯ ЛИ ПОКУПАТЕЛЬ ВЫЙТИ ИЗ ЗАТРУДНЕНИЯ,
ПРИНИМАЯ РЕШЕНИЯ ВМЕСТЕ С ПРОДАВЦОМ ? Н
ОБЛАДАЕТ ЛИ ПОКУПАТЕЛЬ ГИБКОСТЬЮ ? Н
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВК

РУКОВОДСТВУЕТСЯ НЕЗАВИСИМОСТЬЮ И САМОУВАЖЕНИЕМ
ОБЩИЙ ВЕСОВОЙ ФАКТОР = 0
ВЕРОЯТНОСТЬ = 0

РУКОВОДСТВУЕТСЯ ОСТОРОЖНОСТЬЮ
ОБЩИЙ ВЕСОВОЙ ФАКТОР = 10
ВЕРОЯТНОСТЬ = 0.4

РУКОВОДСТВУЕТСЯ СУЖДЕНИЯМИ ОКРУЖАЮЩИХ
ОБЩИЙ ВЕСОВОЙ ФАКТОР = 15
ВЕРОЯТНОСТЬ = 0.6

РУКОВОДСТВУЕТСЯ НЕЗАВИСИМОСТЬЮ И САМОУТВЕРЖДЕНИЕМ
ОБЩИЙ ВЕСОВОЙ ФАКТОР = 0
ВЕРОЯТНОСТЬ = 0

ПРОДАВЕЦ 1 ПОКУПАТЕЛЬ 1 ВЕРОЯТНОСТЬ = 0
 ПРОДАВЕЦ 1 ПОКУПАТЕЛЬ 2 ВЕРОЯТНОСТЬ = 0.2285714
ПРОДАВЕЦ 1 ПОКУПАТЕЛЬ 3 ВЕРОЯТНОСТЬ = 0.3428572
ПРОДАВЕЦ 1 ПОКУПАТЕЛЬ 4 ВЕРОЯТНОСТЬ = 0
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВК

ПРОДАВЕЦ 2 ПОКУПАТЕЛЬ 1 ВЕРОЯТНОСТЬ = 0
ПРОДАВЕЦ 2 ПОКУПАТЕЛЬ 2 ВЕРОЯТНОСТЬ = .285714
ПРОДАВЕЦ 2 ПОКУПАТЕЛЬ 3 ВЕРОЯТНОСТЬ = .0428571
ПРОДАВЕЦ 2 ПОКУПАТЕЛЬ 4 ВЕРОЯТНОСТЬ = 0
 ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВК
ПРОДАВЕЦ 3 ПОКУПАТЕЛЬ 1 ВЕРОЯТНОСТЬ = 0
ПРОДАВЕЦ 3 ПОКУПАТЕЛЬ 2 ВЕРОЯТНОСТЬ = .1428572
 ПРОДАВЕЦ 3 ПОКУПАТЕЛЬ 3 ВЕРОЯТНОСТЬ = .2142857
 ПРОДАВЕЦ 3 ПОКУПАТЕЛЬ 4 ВЕРОЯТНОСТЬ = 0
ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ КЛАВИШУ ВК

Break In 935
Ok


Часть 3 "Экспретные системы: знания плюс логический вывод". Глава 10

ГЛАВА 10

ЭКСПЕРТНЫЕ СИСТЕМЫ АНАЛИЗА ОБУЧЕНИЯ

Настоящая глава посвящена экспертной системе анализа обучения, которая используется для выявления трудностей, препятствующих усвоению материала. Как показывает статистика, многие взрослые американцы настолько плохо читают и пишут, что постоянно подвергаются угрозе потерять работу. Восприятию знаний могут мешать как ошибки при обучении, так и индивидуальные особенности людей.
В процессе учёбы могут возникнуть разной степени затруднения. Ошибки при обучении приводят обычно к меньшим затруднениям, чем неспособность человека изучить какой-либо предмет.
В процессе обучения приходится говорить не только о чтении или письме. Кэтрин де Херч в статье “Learning Disabilities, an Overview”, пишет: “Психологические и физиологические факторы, генетические аспекты, включая реакцию на стресс, внутриутробное развитие, рождение и первые месяцы жизни, а также эмоциональная и социальная среда воспитания - все взаимосвязано и влияет на способности ребенка к учебе”.
Таким образом, можно сказать, что затруднения в учебе - результат сложного взаимодействия различных факторов. Проводя исследования в области обучения, приходится принимать во внимание огромное число факторов.
Сегодня общепринятым методом исследований являются использование стандартных тестов и сбор данных. Тесты применяются в основном для оценки в общеобразовательных дисциплинах, например чтении, правописании или арифметики. Кроме того, они дают возможность оценить словарный запас и умение точно выражать свои мысли. В процессе тестирования собирается информация, относящаяся как к дошкольному, так и к школьному периоду. Собранная информация включает сведения о школьной и домашней среде и служит для оценки психологических и социальных аспектов процесса обучения. Исследователь анализирует результаты тестов, выполняет необходимые вычисления, выявляет ключевые трудности восприятия материала, обобщает данные, касающиеся социальных и психологических аспектов, и дает оценку способностей ребенка к обучению.
Экспертная система, охватывающая весь круг проблем, возникающих при обучении, должна работать аналогично. В этой главе описано создание экспертной системы анализа обучения (САО). Система выполняет полный цикл исследований, обеспечивая глубокий и точный анализ. Конечно, оценки, которые дает человек, до известной степени субъективны. Люди часто рассматривают лишь небольшое число фактов и делают поспешные выводы. Система же, подобная САО, может “руководить” исследователем, не позволяя пропускать существенные факты и заставляя его более объективно выполнять логические выводы. Человеческий мозг, в отличие от компьютера, просто не в состоянии одновременно и систематично обработать всю необходимую информацию.
САО не делает категоричных выводов. Она лишь точно локализует конкретные пробелы в обучении, определяет их диапазон и дает возможность исследователю вынести окончательное суждение и дать рекомендации. Все это достигается с помощью:

1) организации данных по разделам и подразделам;
2) перечисления всех относящихся к каждому подразделу фактов;
3) установления весовых факторов для фактов и определения уровня решения;
4) верификации данных.

Организации данных по разделам и подразделам

В большинстве работ, посвященных этой теме, были выделены следующие разделы, данными из которых пользуется система: образование, биология и физиология, психология, социология.
Совокупность данных по каждому из разделов позволяет судить об ошибках при обучении и индивидуальных особенностях человека, мешающих воспринимать материал. Каждый раздел содержит огромное количество материала, который целесообразно выделить в подразделы:

А. Образование

А-1. Чтение
А-2. Арифметика

Б. Биология и физиология

Б-1. Наследственные факторы

В. Психология

В-1. Самоуверенность

Перечисление фактов

Для каждого раздела и подраздела выбирается относящийся к нему набор фактов. Понятно, что для обучения существует гораздо больше фактов, чем приведено ниже. Это лишь малая, взятая для простоты часть фактов, использующихся в реальной САО. Справа от каждого факта в скобках указан его весовой фактор. Смысл весовых факторов будет ясен позднее.

А. Образование

А-1. Чтение
А-1.1. Произношение
А-1.1.1. Распознавание букв алфавита (1)
А-1.1.2. Произнесение слов без пропуска и изменения букв (1)
А-1.1.3. Верная расстановка акцентов (1)
А-1.1.4. Правильное разбиение слов на части (1)
А-1.1.5. Запоминание и воспроизведение звуков, соответствующих буквам слова (1)
А-1.2. Понимание
А-1.2.1. Запоминание фактов (1)
А-1.2.2. Представление общей картины (1)
А-1.2.3. Словарный запас (1)
А-1.2.4. Знакомство с понятиями (1)
А-2. Арифметика
А-2.1. Сложение однозначных чисел (1)
А-2.2. Сложение многозначных чисел (1)
А-2.3. Вычитание однозначных чисел О)
А-2.4. Вычитание многозначных чисел (1)
А-2.5. Умножение однозначных чисел (1)
А-2.6. Умножение многозначных чисел (1)
А-2.7. Деление без остатка (1)
А-2.8. Деление с остатком (1)

Б. Биология и физиология

Б-1. Наследственные факторы
Б-1.1. Неспособность к обучению родителей (1)
Б-1.2. Неспособность к обучению родных братьев и сестер (не близнецов) (1)
Б-1.3. Неспособность к обучению близнецов (1)
Б-1.4. Хромосомные аномалии или наследственные болезни в семье (1)

В. Психология

В-1. Самоуверенность
В-1.1. Отказ от работы (1)
В-1.2. Необоснованность поступков (1)
В-1.3. Позерство (1)

Назначение весовых факторов и определение уровней решения

Числа в скобках, стоящие справа от каждого факта, представляют собой весовые факторы. Весовые факторы необходимы при принятии решений. В нашем примере все весовые факторы имеют значение 1. Поскольку весовые факторы по сути дела указывают на степень важности фактов, все факты в примере вносят одинаковый вклад при оценке трудностей, препятствующих усвоению материала. Каким же образом затем делается вывод, что такие затруднения есть ? В системе существуют установленные уровни решения. Каждый факт может иметь значение для выявления затруднений. Если многие факты говорят о затруднениях, считается, что затруднения большие, если же фактов немного, то на затруднения можно не обращать внимание. При определении затруднений суммируются веса входящих в определенные подразделы фактов, т.е. фактов, относящихся к арифметике, внимательности и т.д. Полученная сумма называется общим весовым фактором. Наименьшая сумма весовых факторов в пределах подраздела, при которой можно говорить о затруднениях в усвоении материала, называется уровнем решения. Если общий весовой фактор какого-либо человека в пределах подраздела равен или превышает уровень решения, считается, что человек испытывает затруднения при изучении материала в соответствующей области. Например, если речь идет о наследственности и для этого раздела установлен уровень решения, равный единице, а по результатам тестирования общий весовой фактор составляет 2 или более, есть вероятность, что человек испытывает трудности из-за наследственности. Достаточно, чтобы имел место хотя бы один фактор этого раздела, поскольку все они имеют весовой фактор, равный 1.
Значения уровням решения присваиваются на основании результатов тестирования и исследовательских работ. Тестируя группу людей, исследователь определяет для проблемной области степень трудности. Конечно, более полные исследования могут дать результаты, позволяющие уточнить значения весовых факторов и уровней решения. В экспертной системе примера используются данные последних исследований и знания квалифицированных экспертов. При этом система проста и легко модифицируется.
Поскольку факты известны и механизм вывода (весовые факторы и уровни решения) понятен, приступим к описанию работы системы.
Для всех фактов каждого раздела составляются определенные вопросы. Вопросы формулируются так, чтобы ответы на них позволяли учитывать или не учитывать соответствующий фактор. Отрицательный ответ указывает, что факт не учитывается. Исследователь сидит за компьютером и просто отвечает на вопросы. Если он вводит положительный ответ (ДА), значение весового фактора (в примере всегда 1) соответствующего факта добавляется к общей сумме. Если же он вводит отрицательный ответ (НЕТ), общая сумма остается без изменений. Весовые факторы суммируются по подразделам. Если общий весовой фактор равен или превышает уровень решений для подраздела, делается вывод, что согласно этому подразделу выявлены затруднения, о чем и информируется исследователь. Подразделов, для которых превышен уровень решения, может быть несколько: чем их больше - тем серьезнее затруднения. Если уровень в нашем примере превышен в трех подразделах, то это значит, что существуют серьезные затруднения, если в двух-затруднения не велики, а если в одном-то затруднений совсем нет или нужно продолжать исследования. Подытожим сказанное.

1. Система вычисляет общий весовой фактор, суммируя весовые факторы всех фактов, на вопрос о которых был получен положительный ответ.
2. Для каждого подраздела система проверяет превышение уровня решения.
3. На печать выводится название и номер каждого подраздела, в котором превышен уровень решения.
4. В зависимости от числа таких подразделов система определяет степень затруднений или их отсутствие.

 Пример работы системы

Приведем пример диалога исследователя с системой.

Имя ребенка ? Сара Грин

Возраст ? 12 лет 8 месяцев

Класс ? 7 класс, 4 четверть

Дата проверки ? 7 июня 1985 года

Имя исследователя ? Диана Дранг

А. Образование

А-1. Чтение

А-1.1. Произношение
Ребенок испытывает затруднения при:
А-1.1.1. Распознавании букв алфавита ? НЕТ
А-1.1.2. Произнесении слов без пропуска и изменения букв ? ДА
А-1.1.3. Верной расстановке акцентов ? ДА
А-1.1.4. Правильном разбиении слов на части ? ДА
А-1.1.5. Запоминании и воспроизведении звуков, соответствующих буквам слова ?ДА
Общий весовой фактор = 4
Уровень решения = 2
Оценка за тест = 5 класс, 2 четверть
А-1.2. Понимание

Ребенок испытывает затруднения при:
А-1.2.1. Запоминании фактов ? НЕТ
А-1.2.2. Представлении общей картины ? ДА
А-1.2.3. Понимании трудных слов ? НЕТ
А-1.2.4. Толковании понятий ? ДА
Общий весовой фактор = 2
Уровень решения = 1
Оценка за тест = 4 класс, 2 четверть
А-2. Арифметика

Ребенок испытывает затруднения при:
А-2.1. Сложении однозначных чисел ? НЕТ
А-2.2. Сложении многозначных чисел ? НЕТ
А-2.3. Вычитании однозначных чисел ? НЕТ
А-2.4. Вычитании многозначных чисел ? НЕТ
А-2.5. Умножении однозначных чисел ? НЕТ
А-2.6. Умножении многозначных чисел ? НЕТ
А-2.7. Делении без остатка ? НЕТ
А-2.8. Делении с остатком ? НЕТ
Общий весовой фактор = 0
Уровень решения = 2
Оценка за тест = 8 класс, 1 четверть

Б. Биология и физиология

Б-1. Наследственные факторы

Б-1.1. Родители ребенка проявляли неспособность к обучению ? ДА
Б-1.2. Родные братья и сестры (не близнецы) проявляли неспособность к обучению ? НЕТ
Б-1.3. Близнецы проявляли неспособность к обучению ? НЕТ
Б-1.4. Были ли хромосомные аномалии или наследственные болезни в семье ? НЕТ
Общий весовой фактор = 1
Уровень решения =1
В. Психология

В-1. Самоуверенность

Ребенок:
В-1.1. Отказывается от работы ? НЕТ
В-1.2. Не мотивирует поступки ? ДА
В-1.3. Старается показать себя с лучшей стороны ? НЕТ
Общий весовой фактор = 1
Уровень решения = 3

 Результаты исследования

Уровень решения превышен в следующих подразделах:
1) произношение при чтение;
2) понимание при чтении;
3) наследственные факторы.
Общее число подразделов с превышенным уровнем решения: 3.
Результат 3 указывает на серьезные трудности.
Результат 2 указывает на легкие затруднения.
Результат 1 или 0 указывает на отсутствие затруднений.
Результат исследований данных Сары Грин равен 3, она испытывает серьезные
трудности при усвоении учебного материала.

Верификация решения с помощью механизма вывода

Подсчитав общие весовые факторы и выявив подразделы, в которых превышен уровень решения, можно сказать, что цель достигнута. Но для того чтобы проверить, верно ли она достигнута, нужно разработать метод верификации ответов на вопросы. Другими словами, нужно придумать способ проверки непротиворечивости ответов, используя некоторую числовую процедуру. Верификация выполняется с помощью ввода новых данных и их сравнения с исходными. Сравнение этих двух совокупностей данных является одной из функций механизма логического вывода. Ранее упоминались специальные тесты, применяемые при оценке обучения. Оценка за тест дается в понятиях возраста или класса, она должна соответствовать возрасту испытуемого или классу, в котором он учится. Например, 8-летний ребенок должен набрать при тестировании результат, соответствующий 3 классу или 8-летнему возрасту. Если результат ниже, считается, что ребенок испытывает затруднения при усвоении знаний в некоторой области. Чем ниже результат, тем более серьезны затруднения. Соответственно чем выше результаты, тем затруднения меньше. Можно с уверенностью сказать, что если результаты тестирования ниже возраста или класса испытуемого - дело плохо. Например, если 12-летний ребенок по результатам тестирования на чтение соответствует 2-ой четверти 4-го класса (что существенно ниже его возраста), это означает, что у него должны быть затруднения в восприятии прочитанного и по крайней мере на один из вопросов данного подраздела был дан положительный ответ. Необходимо помнить, что положительный ответ указывает на затруднения.
Верификация выполняется для данных тех подразделов, в которых превышен уровень решения, и в том случае, если в результате тестирования установлено наличие трудностей. Если уровень решения не превышен и тест не выявил затруднений, значит их в самом деле нет. Если же обнаружено противоречие (например, плохая оценка за тест, а уровень решения не превышен; или оценка за тест хорошая , а уровень решения превышен), система выведет сообщение об ошибке. Для верификации можно использовать правила ЕСЛИ-ТО. В правилах и содержатся новые данные, которые будут сравниваться с общими весовыми факторами. Правила могут иметь такой вид:

1) ЕСЛИ результат тестирования на произношение при чтении ниже возраста или класса испытуемого, ТО в подразделе “Произношение при чтении” должно быть указание по крайней мере на одно затруднение,
2) ЕСЛИ результат тестирования на понимание прочитанного ниже возраста или класса испытуемого, ТО в подразделе “Понимание прочитанного” должно быть указание по крайней мере на одно затруднение;
3) ЕСЛИ результат тестирования на произношение при чтении ниже возраста или класса испытуемого более, чем на 2, ТО результирующий весовой фактор будет равен или выше уровня решения для произношения при чтении;
4) ЕСЛИ результат тестирования на произношение при чтении ниже возраста или класса испытуемого более, чем на 2, ТО результирующий весовой фактор будет равен или выше уровня решения понимания прочитанного.
Подобные правила могут быть сформулированы для всех подразделов. Если исследователь ошибся (предположим, что он ответил отрицательно на все вопросы подраздела “Произношение при чтении”, но результат теста показал несоответствие испытуемого возрасту или классу именно по этому подразделу), система может выдать такое сообщение:

Ошибка. Вернитесь и проверьте ответы, касающиеся вопросов подраздела
“Произношение при чтении”.

Пользователь должен вернуться и пересмотреть ответы на эти вопросы. После того, как ошибка будет исправлена, система продолжит работу.

Дополнительные возможности системы

Хотя изначально система разработана для специалистов и профессионалов в области обучения, ее можно использовать и для других целей. Например, ею могут воспользоваться родители, которые наблюдают поведение своих детей, но не понимают почему, их дети не успевают в школе. Родители могут предполагать, что у детей есть трудности в учебе, но им необходима дополнительная информация, чтобы помочь детям. Они могут просто чувствовать свою неинформированность и пытаться восполнить пробелы. Чем больше информированность, тем больше возможностей принять разумное решение. Немного модифицированная система может использоваться для получения информации и ее оценки, а не для диагностики. Также она может применяться при определении необходимости оказания помощи при затруднениях в учебе. Описанный подход может служить моделью и для других типов информационно-тестовых систем.
Конечно, система, разработанная для домашнего использования, не будет включать стандартные процедуры тестирования, поскольку пользующиеся ею для самообразования люди с ними просто не знакомы. Система будет содержать вопросы, касающиеся общих аспектов поведения, общедоступную информацию и некоторые относящиеся к обучению данные. Она может включать отдельные разделы и подразделы, которые использовались в САО.

А. Биология и физиология

А-1. Наследственные факторы

Б. Психология и социология

Б-1. Самоуверенность
Б-2. Способность сосредоточиться
Б-3. Социальное сознание

В. Образование

В-1. Общеобразовательный уровень
В-2. Речь и общее умственное развитие

Для модифицированной системы можно использовать такую таксономию фактов с весовыми факторами:

А. Биология и физиология

А-1. Наследственные факторы
А-1.1. Неспособного к обучению родителей (1)
А-1.2. Неспособность к обучению родных братьев и сестер (не близнецов) (1)
А-1.3. Неспособность к обучению близнецов (1)
А-1.4. Хромосомные аномалии или наследственные болезни в семье (1)

Кроме этих фактов можно применять и факты, не входящие в САО. Они в большей степени относятся к интересующему родителей поведению детей.

Б. Психология и социология

Б-1. Самоуверенность

Б-1.1. Желание показать себя с лучшей стороны (1)
Б-1.2. Немотивируемость поступков (1)
Б-1.3. Лень и апатия (1)
Б-1.4. Постепенное снижение успеваемости (1)

Б-2. Способность сосредоточиться

Б-2.1. Появление усталости и рассеянности (1)
Б-2.2. Чрезмерная мечтательность (1)
Б-2.3. Импульсивность (1)
Б-2.4. Постоянная надежда на помощь одноклассников (1)
Б-2.5. Недостаток времени при выполнении домашних заданий (1)

Б-3. Социальное сознание

Б-3.1. Неуместное поведение в обществе (1)
Б-3.2. Экспансивное поведение (шумливость, насмешливость, агрессивность) (1)
Б-3.3. Игнорирование компаний и состязаний (1)
Б-3.4 Невнимание к себе (1)

В. Образование

В-1. Уровень общего образования

В-1.1. Небольшие успехи в произношении при чтении слов и словосочетаний (1)
В-1.2. Небольшие успехи в понимании прочитанного (1)
В-1.3. Небольшие успехи в арифметике (1)
В-1.4. Плохое чистописание (1)
В-1.5. Трудности в письменном выражении мыслей (1)

В-2. Речь и общее умственное развитие

В-2.1. Косноязычие (1)
В-2.2. Трудности при изложении собственных мыслей (1)
В-2.3. Трудности в понимании сказанного (1)
В-2.4. Неразвитость ассоциативного мышления (1)
Плохая память на:
В-2.5. Числа (1)
В-2.6. Имена (1)
В-2.7. Сказанное (1)
В-2.8. Месяцы в году (1)
В-2.9. Дни недели (1)

Ниже приведен пример работы программы. Ответы пользователя даются после знака вопроса. Вопросы задаются несколько в иной форме, чем в предыдущем примере, хотя некоторые и совпадают. Общие весовые факторы и уровни решения определяются так же, как и раньше. Раздел, относящийся к обучению, приводится последним (в отличие от предыдущего примера), поскольку ответы на вопросы этого раздела даются не на основе стандартных тестов, а исходя из общего поведения ребенка.

Имя ребенка ? Стивен Джонс

Возраст ? 9 лет 2 месяца

Класс ? 4 класс

Текущая дата ? 17 июня 1985 года

А. Биология и физиология

А-1. Наследственные факторы

А-1.1. Родители ребенка проявляли неспособность к обучению ? НЕТ
А-1.2. Родные братья и сестры (не близнецы) проявляли неспособность к обучению ? НЕТ
А-1.3. Близнецы проявляли неспособность к обучению ? НЕТ
А-1.4. Были ли хромосомные аномалии или наследственные болезни в семье ? НЕТ
Общий весовой фактор = 0
Уровень решения = 1

Б. Психология и социология

Б-1. Самоуверенность

Ваш ребенок:
Б-1.1. Старается показать себя с лучшей стороны ? ДА
Б-1.2. Не мотивирует поступки ? ДА
Б-1.3. Ленив и апатичен ? ДА
Б-1.4. Постепенно снижает успеваемость ? ДА
Общий весовой фактор = 4
Уровень решения = 3
Б-2. Способность сосредоточиться
Замечаете ли вы у ребенка:
Б-2.1. Появление усталости и рассеянности? НЕТ
Б-2.2. Чрезмерную мечтательность ? НЕТ
Б-2.3. Импульсивность ? ДА
Б-2.4. Постоянную надежду на помощь одноклассников ? ДА
Б-2.5. Недостаток времени при выполнении домашних заданий ? ДА
Общий весовой фактор = 3
Уровень решения = 3

Б-3. Социальное сознание

Проявляется ли у Вашего ребенка:
Б-3.1. Неуместное поведение в обществе ? НЕТ
Б-3.2. Экспансивное поведение (шумливость, насмешливость, агрессивность) ? НЕТ
Б-3.3. Игнорирование компаний и состязаний ? ДА
Б-3.4. Невнимание к себе ? ДА
Общий весовой фактор = 2
Уровень решения = 3

В. Образование

В-1. Уровень общего образования
У вашего ребенка:
В-1.1. Небольшие успехи в произношении при чтении слов и отрывков ? ДА
В-1.2. Небольшие успехи в понимании прочитанного ? ДА
В-1.3. Небольшие успехи в арифметике ? ДА
В-1.4. Плохое чистописание ? НЕТ
В-1.5. Трудности в письменном выражении мыслей ? ДА
Общий весовой фактор = 4
Уровень решения = 2

В-2. Речь и общее умственное развитие

Есть ли у вашего ребенка:
В-2.1. Косноязычие ? НЕТ
В-2.2. Трудности в изложении собственных мыслей ? НЕТ
В-2.3. Трудности в понимании сказанного ? НЕТ
В-2.4. Неразвитость ассоциативного мышления ? НЕТ
Есть ли у вашего ребенка проблемы с запоминанием:
В-2.5. Чисел ? НЕТ
В-2.6. Имен ? НЕТ
В-2.7. Сказанного ? НЕТ
В-2.8. Месяцев в году ? НЕТ
В-2.9. Дней недели ? НЕТ
Общий весовой фактор = 0
Уровень решения = 3

Результаты исследования
 Уровень решения превышен в следующих подразделах:
1) самоуверенность;
2) способность сосредоточиться ,
3) уровень общего образования.
Общее число подразделов с превышенным уровнем решения: 3.
Результат 5 или б показывает: у Вашего ребенка серьезные нелады с учебой и ему нужна помощь.
Результат 3 или 4 показывает: что у Вашего ребенка есть некоторые трудности с учебой и ему нужна небольшая помощь.
Результат 1 или 2 показывает: с учебой у Вашего ребенка все в порядке и помощь ему не требуется.
 У Стивена Джонса уровень решений превышен в трех подразделах, значит, у него есть определенные трудности в учебе и ему нужна помощь.
Приведенные уровни решений не могут служить ориентиром для читателя. Они иллюстрируют работу экспертной системы. Использование экспертных систем в области обучения - дело новое, и разумный выбор уровней решения для реальных систем требует большей работы.
Если сравнить результаты обработки данных Сары Грин и Стивена Джонса, видно, что оба испытывают затруднения в учебе. Но у Сары преобладают биологическая и образовательная составляющие и в меньшей степени психологическая, а у Стивена - психологическая и общеобразовательная. Таксономия фактов дает возможность исследователю или родителям понять причины затруднений. Число подразделов, для которых превышен уровень решения, определяет степень затруднений.

Резюме

Настоящая глава была посвящена экспертной системе, которая используется для выявления трудностей, препятствующих усвоению материала. Подобные проблемы вызывают сегодня особенный интерес, поскольку многие взрослые американцы и дети не знают элементарных вещей. Обсуждалось преобразование применяемых в настоящее время методов оценки уровня знаний для нужд экспертной системы. Основу структуры для экспертной системы составляют разделы, подразделы и факты. Были введены понятия весовых факторов, уровней решения и описан способ их использования, а также верификация данных. Было рассказано, как расширить сферу приложения системы, сделав ее доступной не только профессионалам в области обучения, но и родителям.

Пример программы

В листинге 10.1 приведена написанная на Бейсике САО.

Пояснения к программе

Программу можно разбить на 4 части:
1. Блок инициализации, в котором присваиваются значения весовым факторам (предложения 20 и 25).
2. Блок приема данных от пользователя (предложения 60 - 85).
3. Блок данных, использующихся для анализа (предложения 100 -240).
4. Блок механизма вывода для анализа (предложения 5015- 5140).
При создании своей системы анализа обучения читатель может воспользоваться приведенной программой.

Листинг программы

Листинг 10.1

1 REM **** ЭКСПЕРТНАЯ СИСТЕМА АНАЛИЗА ОБУЧЕНИЯ ****
2 REM МАССИВ ВЕСОВЫХ ФАКТОРОВ 10 dim w(100)
15 REM ВСТАВИТЬ ВЕСОВЫЕ ФАКТОРЫ
20 FOR I=l TO 100
25 W(I)=1:NEXT I
30 DIM A$(10): REM МАССИВ ОТВЕТОВ
35 DIM D$(20): REM МАССИВ ПРИЗНАКОВ ЗАТРУДНЕНИЙ
40 FOR I=l TO 20
45 D$(I)="" : NEXT I
50 DP=1: REM УКАЗАТЕЛЬ НА ПРИЗНАКИ ЗАТРУДНЕНИЙ
55 WP=1: REM УКАЗАТЕЛЬ НА ВЕСОВЫЕ ФАКТОРЫ
60 REM *** ДАННЫЕ О РЕБЕНКЕ ***
65 INPUT "ИМЯ ИСПЫТУЕМОГО PEEEHKA" NP$
70 INPUT "B03PACT ИСПЫТУЕМОГО РЕБЕНКА, ГОД-МЕСЯЦ";АY,АМ
75 INPUT "КЛАСС, ГОД-МЕСЯЦ";GY,GM
80 INPUT "ДАТА ПРОВЕРКИ МЕСЯЦ-ДЕНЬ-ГОД";DM,DD,DY
85 INPUT "ИМЯ ИССЛЕДОВАТЕЛЯ";NE$
90 REM *** БЛОК ПРИЕМА ДАННЫХ ОТ ПОЛЬЗОВАТЕЛЯ
100 REM *** ПОДРАЗДЕЛ ПРОИЗНОШЕНИЯ ПРИ ЧТЕНИИ
105 INPUT "ОЦЕНКА ЗА ТЕСТ НА ПРОИЗНОШЕНИЕ ПРИ ЧТЕНИИ ГОД-МЕСЯЦ";TY,ТМ
110 INPUT "УРОВЕНЬ РЕШЕНИЯ";DL,
115 PRINT "РЕБЕНОК ЗАТРУДНЯЕТСЯ В:";
120 INPUT "PACПОЗНАBAHИИ БУКВ АЛФАВИТА ";A$(I)
125 INPUT "ПРОИЗНЕСЕНИИ СЛОВ БЕЗ ПРОПУСКА И ИЗМЕНЕНИЯ БУКВ";А$(2)
130 INPUT "ВЕРНОЙ РАССТАНОВКЕ АКЦЕНТОВ";А$(3)
135 INPUT "ПРАВИЛЬНОМ РАЗБИЕНИИ СЛОВ НА ЧАСТИ";А$(4)
140 INPUT " ЗАПОМИНАНИИ/ВОСПРОИЗВЕДЕНИИ ЗВУКОВ";А$ (5)
145 PRINT "** ПРОИЗНОШЕНИЕ ПРИ ЧТЕНИИ **"
150 REM ПЕРЕЙТИ В БЛОК МЕХАНИЗМА ВЫВОДА И ПРОВЕРИТЬ,
155 REM ПРЕВЫШЕН ЛИ УРОВЕНЬ РЕШЕНИЯ. ПРОВЕРИТЬ ДАННЫЕ,
156 REM СРАВНЕНИВ ИХ С ОЦЕНКОЙ ЗА ТЕСТ
160 К$="ПРОИЗНОШЕНИЕ ПРИ ЧTEHИИ":SE=5:GOSUB 5000:
161 REM ЧИСЛО ВОПРОСОВ
195 REM ***************************************************
200 REM ПОДРАЗДЕЛ ПОНИМАНИЯ ПРОЧИТАННОГО
205 INPUТ "ОЦЕНКА ЗА ТЕСТ НА ПОНИМАНИЕ ПРОЧИТАННОГО, ГОД-МЕСЯЦ" ;ТY,ТМ
210 INPUT" УPOBEHb РЕШЕНИЯ";DL
215 PRINT "РЕБЕНОК ЗАТРУДНЯЕТСЯ В:"
220 INPUT "ЗАПОМИНАНИИ" ;А$(1)
225 INPUT "ПРЕДСТАВЛЕНИИ ОБЩЕЙ КАРТИНЫ";А$(2)
230 INPUT "ПОНИМАНИИ ТРУДНЫХ СЛОВ";А$(3)
235 INPUT "ТОЛКОВАНИИ ПОНЯТИЙ";А$(4)
240 К$="ПОНИМАНИИ ПРИ ЧTEHИИ":SE=4:GOSUB 5000
241 REM ЧИСЛО ВОПРОСОВ
4000 REM **************************************************
4005 PRINT "ПОДРАЗДЕЛЫ С ПРЕВЫШЕНИЕМ УРОВНЯ РЕШЕНИЯ"
4010 FOR I=l TO 10
4015 IF D$(I)="" THEN GOTO 4025
4020 PRINT D$ (I)
4025 NEXT I
4999 STOP: REM ********** КОНЕЦ РАБОТЫ
5000 REM******************************************************
5005 REM **** МЕХАНИЗМ ВЫВОДА ****
5010 REM **************************
5015 REM ОЦЕНКА ЗА ТЕСТ РАВНА ИЛИ НИЖЕ КЛАССА РЕБЕНКА
5020 ТВ=0: REM ОЦЕНКА ЗА ТЕСТ НИЖЕ, ЕСЛИ ТВ=1
5025 Y=GY-TY: M=GM-TM
5030 IF Y0 THEN ТВ=1
5035 IF (Y=0) AND (М0) THEN TB=1
5040 IF TB=1 THEN PRINT "** ОЦЕНКА ЗА ТЕСТ НИЖЕ СРЕДНЕГО **"
5045 *****************************************************
5050 REM ЕСЛИ ПОСЛЕ ОТВЕТОВ НА ВОПРОСЫ ОБЩИЙ ВЕСОВОЙ ФАКТОР
5055 REM БОЛЬШЕ ИЛИ РАВЕН УРОВНЮ РЕШЕНИЯ - ЕСТЬ ЗАТРУДНЕНИЯ
5060 S=0: REM ИНИЦИАЛИЗАЦИЯ ОБЩИХ ВЕСОВЫХ ФАКТОРОВ
5063 REM
5065 REM СЛОЖИТЬ ВСЕ ВЕСОВЫЕ ФАКТОРЫ ДЛЯ ОТВЕТОВ "ДА"
5070 FOR I=l TO SE
5075 IF A$ (I) = "Д" THEN S=W(WP)+S: WP=WP+1
5080 NEXT I
5085 PRINT "ОБЩИЙ ВЕСОВОЙ ФАКТОР =";S
5090 REM ***************************************************
5095 REM ЕСЛИ УРОВЕНЬ РЕШЕНИЯ ПРЕВЫШЕН
5100 IF S= DL THEN PRINT "УРОВЕНЬ РЕШЕНИЯ ПРЕВЫШЕН"
5105 IF S= DL THEN D$(DP)=K$: DP=DP+1
5110 REM ***************************************************
5115 REM ОПРЕДЕЛЕНИЕ ПРОТИВОРЕЧИЙ
5120 REM УРОВЕНЬ РЕШЕНИЯ ПРЕВЫШЕН, НО ОЦЕНКА ЗА ТЕСТ СРЕДНЯЯ
5125 IF (S= DL) AND (TB=1) THEN PRINT "ПРОТИВОРЕЧИЕ - УРОВЕНЬ ПРЕВЫШЕН,
А ОЦЕНКА ХОРОШАЯ"
5130 IF (S= DL) AND (TB=1) THEN PRINT "ПРОТИВОРЕЧИЕ - УРОВЕНЬ HE ПРЕВЫШЕН, А ОЦЕНКА
ПЛОХАЯ"
5135 RETURN

Примеры выполнения

RUN
ИМЯ ИСПЫТУЕМОГО РЕБЕНКА ? САРА ГРИН
ВОЗРАСТ ИСПЫТУЕМОГО РЕБЕНКА, ГОД-ДЕНЬ ? 12,8
КЛАСС, ГОД-МЕСЯЦ ? 7,10
ДАТА ПРОВЕРКИ, МЕСЯЦ-ДЕНЬ-ГОД ? 6,7,1985
ИМЯ ИССЛЕДОВАТЕЛЯ ? ДИАНА ДРАНГ
ОЦЕНКА ЗА ТЕСТ НА ПРОИЗНОШЕНИЕ ПРИ ЧТЕНИИ, ГОД-МЕСЯЦ ? 5,8
УРОВЕНЬ РЕШЕНИЯ ? 2
РЕБЕНОК ЗАТРУДНЯЕТСЯ В:
РАСПОЗНАВАНИИ БУКВ АЛФАВИТА ? Н
ПРОИЗНЕСЕНИИ СЛОВ БЕЗ ПРОПУСКА И ИЗМЕНЕНИЯ БУКВ ? Д
ВЕРНОЙ РАССТАНОВКЕ АКЦЕНТОВ ? Д
ПРАВИЛЬНОМ РАЗБИЕНИИ СЛОВ НА ЧАСТИ ? Д
ЗАПОМИНАНИИ/ВОСПРОИЗВЕДЕНИИ ЗВУКОВ, БУКВ ? Д
** ПРОИЗНОШЕНИЕ ПРИ ЧТЕНИИ **
** ОЦЕНКА ЗА ТЕСТ НИЖЕ СРЕДНЕГО
** ОБЩИЙ ВЕСОВОЙ ФАКТОР = 4
** УРОВЕНЬ РЕШЕНИЯ ПРЕВЫШЕН

ОЦЕНКА ЗА ТЕСТ НА ПОНИМАНИЕ ПРОЧИТАННОГО, ГОД-МЕСЯЦ ? 4,8
УРОВЕНЬ РЕШЕНИЯ ? 1
РЕБЕНОК ЗАТРУДНЯЕТСЯ В:
ЗАПОМИНАНИИ? Н
ПРЕДСТАВЛЕНИИ ОБЩЕЙ КАРТИНЫ ? Д
ПОНИМАНИИ ТРУДНЫХ СЛОВ ? Н
ТОЛКОВАНИИ ПОНЯТИЙ ? Д

** ОЦЕНКА ЗА ТЕСТ НИЖЕ СРЕДНЕГО
** ОБЩИЙ ВЕСОВОЙ ФАКТОР =2
 ** УРОВЕНЬ РЕШЕНИЯ ПРЕВЫШЕН
РАЗДЕЛЫ С ПРЕВЫШЕНИЕМ УРОВНЯ
ПРОИЗНОШЕНИЕ ПРИ ЧТЕНИИ
ПОНИМАНИЕ ПРОЧИТАННОГО

Информация о Саре Грин взята непосредственно из настоящей главы.

RUN
ИМЯ ИСПЫТУЕМОГО РЕБЕНКА ? ДЖОН СМИТ
ВОЗРАСТ ИСПЫТУЕМОГО РЕБЕНКА, ГОД-ДЕНЬ ? 12,8
КЛАСС, ГОД-МЕСЯЦ ? 7,10
ДАТА ПРОВЕРКИ МЕСЯЦ-ДЕНЬ-ГОД ? 6,7,1985
ИМЯ ИССЛЕДОВАТЕЛЯ ? ДИАНА ДРАНГ
ОЦЕНКА ЗА ТЕСТ НА ПРОИЗНОШЕНИЕ ПРИ ЧТЕНИИ ГОД-МЕСЯЦ ? 7,11
УРОВЕНЬ РЕШЕНИЯ ? 2
РЕБЕНОК ЗАТРУДНЯЕТСЯ В:
РАСПОЗНАВАНИИ БУКВ АЛФАВИТА ? Н
ПРОИЗНЕСЕНИИ СЛОВ БЕЗ ПРОПУСКА И ИЗМЕНЕНИЯ БУКВ ? Д
ВЕРНОЙ РАССТАНОВКЕ АКЦЕНТОВ ? Д
ПРАВИЛЬНОМ РАЗБИЕНИИ СЛОВ НА ЧАСТИ ? Д
ЗАПОМИНАНИИ/ВОСПРОИЗВЕДЕНИИ ЗВУКОВ. БУКВ ? Д
** ПРОИЗНОШЕНИЕ ПРИ ЧТЕНИИ **
** ОЦЕНКА ЗА ТЕСТ НИЖЕ СРЕДНЕГО
** ОБЩИЙ ВЕСОВОЙ ФАКТОР=-4
** УРОВЕНЬ РЕШЕНИЯ ПРЕВЫШЕН
** ПРОТИВОРЕЧИЕ - УРОВЕНЬ ПРЕВЫШЕН, А ОЦЕНКА ХОРОШАЯ

ОЦЕНКА ЗА ТЕСТ НА ПОНИМАНИЕ ПРОЧИТАННОГО, ГОД-МЕСЯЦ ? 4,8
УРОВЕНЬ РЕШЕНИЯ ? 1
РЕБЕНОК ЗАТРУДНЯЕТСЯ В:
ЗАПОМИНАНИИ ? Н
ПРЕДСТАВЛЕНИИ ОБЩЕЙ КАРТИНЫ ? Д
ПОНИМАНИИ ТРУДНЫХ СЛОВ ? Н
ТОЛКОВАНИИ ПОНЯТИЙ ? Д
** ОЦЕНКА ЗА ТЕСТ НИЖЕ СРЕДНЕГО
** ОБЩИЙ ВЕСОВОЙ ФАКТОР =2
** УРОВЕНЬ РЕШЕНИЯ ПРЕВЫШЕН
ПОДРАЗДЕЛЫ С ПРЕВЫШЕНИЕМ УРОВНЯ
ПРОИЗНОШЕНИЕ ПРИ ЧТЕНИИ
ПОНИМАНИЕ ПРОЧИТАННОГО

Отметим, что сообщение “ПРОТИВОРЕЧИЕ – УРОВЕНЬ ПРЕВЫШЕН, А ОЦЕНКА ХОРОШАЯ” означает: система обнаружила противоречие и пользователь для получения
правильного результата должен проверить ответы на вопросы.


Часть 4 "Создание ПО развитых систем ИИ". Глава 11

Часть 4 СОЗДАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
РАЗВИТЫХ СИСТЕМ ИИ

• Основные концепции объектно-ориентированного программирования

• Использование идей объектно-ориентированного программирования в
разработке экспертных систем

• Программная реализация

ГЛАВА 11

ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

Представим себе ящик, разделенный на ячейки наподобие тех, которые раньше использовались на почте для ручной сортировки корреспонденции. Пусть в каждой ячейке лежит листочек бумаги, на котором что-то написано. Ячейки промаркированы. Например, в ячейке с надписью “Основные направления работы” могут храниться сведения об основных направлениях работы некоторой фирмы, а в ячейке с надписью “Внешнее финансирование”- данные о проектах, которые эта фирма финансирует. Такой ящик с ячейками для хранения информации можно назвать структурой. Информацию можно удалять, заменять или добавлять. Структура объединяет небольшие порции информации в соответствии с определенной системой.
Как же строится структура и по какому принципу маркируются ячейки ? Предположим, что руководитель высокого ранга, скажем президент фирмы, хочет разбить нужную для работы информацию по определенным категориям. Он может, руководствуясь размером фирмы и родом ее деятельности, прикинуть, какой нужен ящик (структура), сколько в нем должно быть ячеек и как они должны быть промаркированы. Затем он передает свои наметки плотнику, который и смастерит нужный ящик.
В программных средствах систем ИИ для хранения и сортировки информации так же используются структуры. Но в терминах ИИ, ячейки называются слотами, а их метки - атрибутами. Порции информации, хранящиеся в слотах, называются значениями. Когда значения помещаются в слоты, возникают реальные объекты.
Допустим, что на аренду конференц-зала подано много заявок. Для того чтобы удовлетворить все заявки, нужно иметь формальную процедуру аренды конференц-зала. Для этого необходимо построить структуру, относящуюся к конференц-залу. Один из слотов структуры должен иметь атрибут “Предполагаемое время аренды”, поскольку в одном зале нельзя провести одновременно две конференции. Еще один слот должен иметь атрибут “Лицо, ответственное за аренду” и т.д. Объект для конкретной заявки можно создать, располагая определенной информацией.
Основные определения:
1. Структура — общее описание объекта.
2. Объект — структура, содержащая конкретную информацию.
3. Слот — место хранения информации.
4. Атрибут — метка слота.
5. Значение — информация, связанная с атрибутом и помещенная в помеченный слот.

Рассмотрим пример с арендой конференц-зала более подробно. Предположим, что у фирмы, сдающей в аренду помещения, несколько конференц-залов и нужна некоторая система планирования времени аренды. Структура, которой должна пользоваться фирма, может представлять собой некоторый бланк, заполняемый по мере спроса на помещение. Назовем эту структуру бланком аренды конференц-зала. Заполненный экземпляр бланка, т.е. структура, содержащая конкретную информацию, называется объектом. Объект содержит имя арендующего зал и прочую информацию в соответствии с графами бланка. В один день может проходить несколько конференций. Каждая конференция - это отдельный объект. Таким образом, можно сказать, что структура описывает атрибуты, свойственные определенным объектам, а объект - это информация, организованная в соответствии со структурой.
Описанная структура может использоваться арендаторами для заказов помещений и позволяет точно определить, под какие мероприятия и когда заняты помещения. Типичная структура для аренды конференц-зала может быть такой:

 1. Номер конференц-зала.
2. Тема обсуждения.
3. Фамилия докладчика.
4. Время начала конференции.
5. Время окончания конференции.

Для примера выбрана структура с 5 атрибутами. Пусть у компании есть 12 конференц-залов. Арендаторы, претендующие на конференц-зал, заполняют бланк, содержащий всю указанную информацию. Конференц-зал арендуется на заявленное время. Заполнив бланк, можно создать, например, такой объект:

1.10 | (Номер конференц-зала)
2. Порядок сверхурочной работы | (Тема обсуждения)
3. Даниэль Дранк | (Фамилия докладчика)
4.10:00 | (Время начала конференции)
5.11:00 | (Время окончания конференции)

Первое значение, 10, соответствует атрибуту “Номер конференц-зала”, а второе значение, “Порядок сверхурочной работы”, - атрибуту “Тема обсуждения”. Другие значения также соответствуют атрибутам структуры.
Жизнь кипит и в больших, и в маленьких компаниях. В зависимости от рода деятельности служащие могут использовать различные процедуры. Процедура фактически может быть упрощена до контрольного списка. Авиационные техники пользуются контрольными списками при проверке готовности самолета к вылету. Контрольные списки разрабатываются в соответствии с определенной структурой, например, механик должен проверить, заправлен ли самолет горючим и есть ли давление в шинах шасси. В авиакомпаниях работают люди разных специальностей, и, значит, существует много различных бланков, представляющих собой конкретные структуры для того или иного рода деятельности. Каждая структура должна иметь идентифицирующий ее номер или имя, по которому ее можно запросить или найти. Контрольный список для техников может называться, например, “Подготовка к полету”. Таким образом, структура должна содержать:

имя, по которому к ней можно обратиться;
атрибуты, определяющие ее содержание.

Получив бланк структуры подготовки к полету, техник, следуя контрольному списку, по мере выполнения работы заполняет бланк, т.е. создает объект. Объекту присваивается идентифицирующий номер, который можно рассматривать как имя объекта. Поскольку в день заполняется много различных бланков (по крайней мере один на каждый взлетающий самолет), в дальнейшем каждый бланк можно найти по имени (идентифицирующему номеру). Из сказанного выше можно сделать вывод - для объекта нужно знать:

имя структуры, описывающей объекты этого типа;
имя объекта, по которому к нему можно обратиться;
атрибуты, описывающие конкретный объект;
значения, присвоенные атрибутам.

Кроме того, структуре, а значит, и входящим в нее объектам должен сопутствовать некоторый набор процедур. Например, что делать, если шина шасси спущена и техник обнаружил это, когда пассажиры были уже в самолете ? Что делать, когда обнаружена течь в системе снабжения горючим ? Процедуры - тоже составные части структуры. Выполняются они в определенной последовательности. Так, перед тем, как приступить к контрольным измерениям, нужно включить систему электропитания самолета, т.е. процедуру включения системы электропитания нужно выполнить до процедуры контрольных измерений. Процедура, которую надо выполнить, но которая прямо не указана в структуре, называется неявной. Неявная процедура, выполняемая до основной, называется предварительной неявной процедурой, а неявная процедура, которая выполняется после основной - последующей неявной процедурой. Например, последующей неявной процедурой для контрольных измерений может быть заполнение бланка подготовки к вылету. Процедуры могут быть точно указаны в структуре или могут быть каким-то другим образом известны пользователю. В нашем примере контрольный список может содержать следующие пункты:
1. Прочесть и записать показания датчика уровня горючего.
2. Если горючего меньше, чем 2000 галлонов, обратиться к процедуре, описанной в бланке 34555.
3. Прочесть и записать показания датчика давления в шасси.
4. Если давление в шасси меньше, чем ..., обратиться к процедуре, описанной в бланке 34556.
В слотах 2 и 4 содержатся обращения к процедурам обработки определенных ситуаций. В действительности, контрольный список не так детализирован, поскольку квалифицированный техник должен знать,что делать в том или ином случае.

Создание структуры

Объектно-ориентированная система должна обладать возможностями:

создавать структуру;
создавать объекты определенной структуры;
создавать процедуры для работы с объектами.

Структура, как уже говорилось выше, должна иметь имя, по которому к ней можно обратиться, и атрибуты, свойственные описываемым ею объектам. По имени можно легко найти структуру, затем присвоить значения атрибутам и тем самым создать объект. Техник может создать объект, выбрав нужный бланк и заполнив его. При разработке объектно-ориентированной программы надо включить в нее функцию создания структуры и спецификации ее атрибутов. Ниже приводится общий формат этой функции, а ее реализация на Бейсике дана в программе листинга 11.1.

СОЗДАТЬ-СТРУКТУРУ(ИМЯ-СТРУКТУРЫ=...
ЧИСЛО-АТРИБУТОВ=...
АТРИБУТ=имя первого атрибута
АТРИБУТ=имя второго атрибута
 .
.
.
АТРИБУТ=имя последнего атрибута)

Проследим создание структуры на примере с конференц-залом:

1. Номер конференц-зала | (ЗАЛ)
2. Тема обсуждения | (ПРЕДМЕТ)
3. Фамилия докладчика | (ДОКЛАДЧИК)
4. Время начала конференции | (НАЧАЛО)
5. Время окончания конференции | (ОКОНЧАНИЕ)

Справа в скобках для упрощения работы даны краткие названия атрибутов: ЗАЛ, ПРЕДМЕТ, ДОКЛАДЧИК, НАЧАЛО, ОКОНЧАНИЕ. Поскольку структура должна иметь имя, назовем ее, например, КОНФЕРЕНЦИЯ. В программе, где бы ни встретилась переменная, соответствующая этому имени, будет обращение к структуре, описывающей конференц-зал, и ее атрибутам. Атрибуты связываются со структурой следующим образом:

СОЗДАТЬ-СТРУКТУРУ(ИМЯ-СТРУКТУРЫ=КОНФЕРЕНЦИЯ,
ЧИСЛО-АТРИБУТОВ = 5,
АТРИБУТ = ЗАЛ, АТРИБУТ = ПРЕДМЕТ,
АТРИБУТ = ДОКЛАДЧИК, АТРИБУТ = НАЧАЛО,
АТРИБУТ = ОКОНЧАНИЕ)

 При создании структуры используются ключевые слова. Ключевые слова указывают, какая именно информация вводится. Например, ключевое слово ИМЯ-СТРУКТУРЫ указывает объектно-ориентированной системе, что после знака равенства задано имя, по которому можно обращаться к структуре. По ключевому слову ЧИСЛО-АТРИБУТОВ задается число атрибутов (в нашем примере - 5). Ключевое слово АТРИБУТ говорит о том, что задается имя атрибута. Так в объектно-ориентированной системе можно описать бланк аренды конференц-зала.

Создание объекта

Для того чтобы создать объект, нужно только указать системе имя структуры, описывающей объекты нужного типа, и задать конкретные значения атрибутов. Все это напоминает разработку формы некоторого бланка, а затем его заполнение конкретными данными. В примере нужно указать предмет дискуссии, имя докладчика и т.д. Кроме того, каждому объекту надо дать имя. Функция создания объекта может выглядеть так:

СОЗДАТЬ-ОБЪЕКТ(ИМЯ-СТРУКТУРЫ=...,
ИМЯ-ОБЪЕКТА=...,
АТРИБУТ1=значение первого атрибута,
АТРИБУТ2=значение второго атрибута,
.
.
.
АТРИБУТn=значение последнего атрибута)

Приведённая запись, по-видимому, не нуждается в дополнительном пояснении. Значения атрибутам можно присваивать в процессе работы программы. Если при создании объекта опущено имя какого-то атрибута, ему присваивается пустое значение.
 Предположим, Сузан Берд хотела бы арендовать конференц-зал номер 10 на один час с 10 часов утра для обсуждения порядка сверхурочной работы служащих. Она должна создать объект и дать ему уникальное имя, например ДЕС1:

СОЗДАТЬ-ОБЪЕКТ (ИМЯ-СТРУКТУРЫ = КОНФЕРЕНЦИЯ,
ИМЯ-ОБЪЕКТА=ДЕС1,
ЗАЛ=10,
ПРЕДМЕТ=ПОРЯДОК СВЕРХУРОЧНЫХ РАБОТ,
ДОКЛАДЧИК = Сузан Берд,
НАЧАЛО=10:00,
ОКОНЧАНИЕ = 11:00)

 В дальнейшем к объекту можно обращаться по имени ДЕС1. Все сказанное может служить канвой при разработке подпрограмм создания структур и объектов.

Объекты и работа с ними

Создание конкретной структуры и соответствующих этой структуре объектов представляет собой по существу создание базы данных. Объекты - это записи базы данных, а структура - описание формата записи и ее полей. (В терминологии баз данных записи состоят из полей. Здесь поля называются атрибутами.) Базы данных обычно обеспечивают:
1) задание и изменение значений полей (атрибутов) каждой записи (объекта);
2) получение отчетов на основе информации из базы данных, например, число
конференций, проходящих в заданное время;
3) средства работы с несколькими полями (атрибутами) записи (объекта);
4) просмотр содержимого базы.

Работа с объектами

Прежде чем обсудить работу с объектами, создадим еще два объекта:

   СОЗДАТЬ-ОБЪЕКТ(ИМЯ-СТРУКТУРЫ = КОНФЕРЕНЦИЯ,
ИМЯ-ОБЪЕКТА=ДЕС2,
ЗАЛ = 10,
ПРЕДМЕТ = ПОВЫШЕНИЕ
ОКЛАДОВ,
ДОКЛАДЧИК = Марк Стон,
НАЧАЛО=13:00,
ОКОНЧАНИЕ=14:00)

СОЗДАТЬ-ОБЪЕКТ(ИМЯ-СТРУКТУРЫ = КОНФЕРЕНЦИЯ,
ИМЯ-ОБЪЕКТА=ОД1,
ЗАЛ = 11,
ПРЕДМЕТ = ПЛАНЫ
ПРОДАЖ,
ДОКЛАДЧИК = Энди Ром,
НАЧАЛО=10:00,
ОКОНЧАНИЕ =12:00)

Приведенную запись легко истолковать: Марк Стон арендовал конференц-зал 10 с 13:00 до 14:00 для обсуждения повышения окладов (имя объекта ДЕС2), а Энди Ром - конференц-зал 11с 10:00 до 12:00 для обсуждения планов продаж (имя объекта ОД1).

Просмотр объектов и структур

Иногда необходимо просмотреть структуры и объекты, содержащиеся в системе. Просмотр осуществляется в форме диалога с системой по запросу с терминала. Получив запрос, система выполняет функцию СПИСОК-ОБЪЕКТОВ. Для приведенного примера результат работы функции:

ДЕС1
ДЕС2
ОД1

Список структур можно получить с помощью функции СПИСОК-СТРУКТУР. Поскольку в примере создана только одна структура, результат работы функции:

КОНФЕРЕНЦИЯ

Список значений атрибутов отдельного объекта выбирается функцией ПРОСМОТР-ОБЪЕКТА. Например, запросить информацию об объекте ОД 1 можно так:

ПРОСМОТР-ОБЪЕКТА, ИМЯ-СТРУКТУРЫ=КОНФЕРЕНЦИЯ,
ИМЯ-ОБЪЕКТА=ОД1

и система ответит:

ЗАЛ = 11
 ПРЕДМЕТ=ПЛАНЫ ПРОДАЖ
ДОКЛАДЧИК = Энди Ром
 НАЧАЛО=10:00
 ОКОНЧАНИЕ=12:00

Работа с объектами

Наряду с созданием объектов иногда может потребоваться обратная операция - удаление объектов. Например, когда Энди Ром закончит обсуждение планов продаж, соответствующий объект нужно удалить из базы данных, поскольку конференц-зал освободился. Это можно сделать с помощью функции УДАЛИТЬ. Удалив объект, можно еще раз обратиться к функции СПИСОК-ОБЪЕКТОВ, результат работы которой:

ДЕС1
ДЕС2

Видно, что объекта ОД1 в базе данных больше нет.
Порой возникает необходимость изменить значение атрибута объекта. Для этого следует воспользоваться функцией ПРИСВОИТЬ. Например, значение атрибута времени начала обсуждения объекта ДЕС1 можно изменить так:

ПРИСВОИТЬ (ИМЯ-СТРУКТУРЫ = КОНФЕРЕНЦИЯ, ИМЯ-ОБЪЕКТА =ДЕС1,
НАЧАЛО = 9:00)

Если затем обратиться к функции ПРОСМОТР-ОБЪЕКТА, система ответит:

ЗАЛ = 10
ПРЕДМЕТ=ПОРЯДОК СВЕРХУРОЧНОЙ РАБОТЫ
ДОКЛАДЧИК = Сузан Берд
НАЧАЛО=9:00
ОКОНЧАНИЕ=11:00

Заметим, что время изменилось с 10:00 на 9:00.
Последняя функция, которую надо обсудить, - это функция копирования значения атрибута в переменную (КОПИРОВАТЬ). Как только значение атрибута скопировано в переменную, с ней можно выполнять различные операции. Например, если функцией КОПИРОВАТЬ значение атрибута ДОКЛАДЧИК объекта ДЕС2 передано в переменную Y$, то в дальнейшем в программе на Бейсике может содержаться предложение:

PRINT Y$

выводящее на печать:

Марк Стон

Так, если нужно вставить в отчет данные об использовании конференц-залов, можно просто скопировать нужную информацию в переменные и затем распечатать ее.
Теперь давайте подытожим сказанное:
1. Структура создается с помощью функции СОЗДАТЬ-СТРУКТУРУ.
2. Объекты, соответствующие структуре, создаются с помощью функции
СОЗДАТЬ-ОБЪЕКТ.
3. Значения атрибутам присваиваются с помощью функции ПРИСВОИТЬ.
4. Доступ к значению атрибутов осуществляется функцией КОПИРОВАТЬ.
5. Просмотр структур и объектов выполняется с помощью функций СПИСОК-СТРУКТУР, СПИСОК-ОБЪЕКТОВ и ПРОСМОТР-ОБЪЕКТОВ.

Вызов процедуры

При обсуждении контрольного списка, используемого авиационным техником, упоминалась процедура, к которой нужно обратиться, если давление в шасси слишком мало. Эта процедура может заключаться просто в подсоединении воздушного шланга к шине шасси. В любом случае техник должен знать, что делать. Говоря в более общем виде:
1) существует процедура для проверки слота объекта на конкретное значение (в нашем примере на минимальное значение давления);
2) если проверяемое значение выходит за некоторую границу, вызывается соответствующая процедура (если давление в шасси слишком мало, выполняется их подкачка).
Рассмотрим еще один пример работы с процедурами. В примере с арендой конференц-зала обсуждалось изменение времени начала конференции, проводимой Сузан Берд, с 10:00 на 9:00 с помощью функции ПРИСВОИТЬ. Что бы произошло, если бы кто-то еще захотел использовать тот же конференц-зал с 9:00 до 10:00 ? Если бы допускалось внесение изменений без каких-либо дополнительных действий, в 9:00 в одном и том же зале встретились бы две группы. Избежать этого можно следующим образом: когда Сузан меняет время начала конференции, автоматически должна вызываться процедура, проверяющая для всех объектов время начала и окончания конференций, проводимых в зале с указанным номером. Если обнаружена конфликтная ситуация, Сузан ставится в известность и должна принять соответствующее решение.
С другой стороны, если Сузан хочет поменять лишь тему обсуждения (атрибут ПРЕДМЕТ), дополнительная процедура не нужна, поскольку такое изменение не затрагивает остальные объекты.
Следует помнить основное правило работы с процедурами: когда изменяются определенные атрибуты, должна быть вызвана процедура, проверяющая, нужны ли какие-либо дополнительные действия.

Способы вызова процедур

При обсуждении операций с объектами упоминалась функция ПРИСВОИТЬ, которая помещает значение в слот. В дальнейшем при разборе программы будет показано, как эта функция реализуется подпрограммой, включающей предложения поиска объекта структуры и присвоения значения атрибуту. Например, функция:

ПРИСВОИТЬ (ИМЯ-СТРУКТУРЫ=КОНФЕРЕНЦИЯ, ИМЯ-ОБЪЕКТА=ДЕС1, НАЧАЛО=9:00)

приведет к выполнению предложений поиска адреса структуры КОНФЕРЕНЦИЯ в памяти системы и объекта ДЕС1 в области, отведенной этой структуре. Затем значение 9:00 будет помещено в слот, отведенный атрибуту НАЧАЛО. Возникает вопрос: “Каким образом вызывается процедура ?”. Подпрограмме, реализующей функцию ПРИСВОИТЬ, должен быть доступен некоторый признак, указывающий, что при изменении значения определенного атрибута автоматически вызывается процедура. Поскольку изменение значений атрибутов выполняется подпрограммой ПРИСВОИТЬ, именно из нее и вызывается соответствующая процедура.
Как же указать подпрограмме ПРИСВОИТЬ, при изменении каких именно атрибутов вызывается процедура ? Например, при изменении атрибута времени начала конференции объекта ДЕС1 нужно вызывать процедуру, выявляющую конфликтную ситуацию, изменение же атрибута ПРЕДМЕТ не требует вызова какой-либо процедуры.
Ответ очень прост. Описывая структуру, воспользуйтесь приведенными ниже соглашениями:
1. Поставить в начале имени атрибута символ “*”.
2. Когда подпрограмма ПРИСВОИТЬ обнаруживает этот атрибут, она должна знать, что нужно вызвать процедуру, поскольку есть символ *.
3. Имя вызываемой процедуры указать в следующем атрибуте.
Допустим, что процедуру нужно вызывать при изменении атрибутов времени начала или окончания конференции. Процедура должна выявлять конфликтные ситуации, касающиеся времени использования конференц-зала. Для этого, пользуясь предложенным методом, функцию СОЗДАТЬ-СТРУКТУРУ можно записать так:

СОЗДАТЬ СТРУКТУРУ (ИМЯ-СТРУКТУРЫ = КОНФЕРЕНЦИЯ,
ЧИСЛО-АТРИБУТОВ = 7,
АТРИБУТ = ЗАЛ,
АТРИБУТ = ПРЕДМЕТ,
АТРИБУТ = ДОКЛАДЧИК,
АТРИБУТ = *НАЧАЛО,
АТРИБУТ = ПРОЦЕДУРА,
АТРИБУТ = *ОКОНЧАНИЕ,
АТРИБУТ = ПРОЦЕДУРА)
Отметим, что символ * стоит перед атрибутами НАЧАЛО и ОКОНЧАНИЕ. В соответствии с этим добавлены еще два атрибута с ключевым словом ПРОЦЕДУРА (число атрибутов увеличено до 7). Слоты процедур будут применяться при создании объектов структуры КОНФЕРЕНЦИЯ для указания имен процедур, которые должны вызываться из функции ПРИСВОИТЬ при изменении значений атрибутов НАЧАЛО и ОКОНЧАНИЕ. Вызов функции создания объекта будет выглядеть следующим образом:

СОЗДАТЬ-ОБЪЕКТ (ИМЯ-СТРУКТУРЫ = КОНФЕРЕНЦИЯ,
ИМЯ-ОБЪЕКТА = ДЕС1,
ЗАЛ = 10,
ПРЕДМЕТ = ПОРЯДОК СВЕРХУРОЧНЫХ РАБОТ,
ДОКЛАДЧИК = Сузан Берд,
НАЧАЛО = 10:00,
ПРОЦЕДУРА = имя процедуры
ОКОНЧАНИЕ = 11:00,
ПРОЦЕДУРА = имя процедуры)
 На Бейсике подпрограмма, реализующая функцию СОЗДАТЬ-ОБЪЕКТ, может использовать в качестве имени процедуры число (в других языках, например в языке LISP, можно пользоваться символическими именами). В Бейсике число будет указывать номер процедуры. В этом случае результат работы функции ПРОСМОТР-ОБЪЕКТА можно представить так:

ЗАЛ=10
 ПРЕДМЕТ=ПОРЯДОК СВЕРХУРОЧНОЙ РАБОТЫ
 ДОКЛАДЧИК=СУЗАН БЕРД
 *НАЧАЛО=10:00
ПРОЦЕДУРА=1
 *ОКОНЧАНИЕ=11:00
ПРОЦЕДУРА=1

 Единица при указании процедуры в обеих строках означает, что при изменении времени начала или окончания конференции должна вызываться одна и та же процедура. Когда Сузан захочет изменить время начала конференции, она должна будет воспользоваться функцией ПРИСВОИТЬ. При этом будет вызвана процедура 1, которая просмотрит все объекты с атрибутом ЗАЛ=10 и отследит, чтобы время аренды десятого зала разными людьми не пересекалось. Говоря более подробно, подпрограмма, реализующая функцию ПРИСВОИТЬ, выполнит следующие действия:
 1) найдет адрес структуры в памяти;
2) просмотрит имена атрибутов, для которых запрошено изменение значений;
3) если перед именем стоит *, подготовит вызов процедуры;
4) найдет адрес объекта в памяти;
5) при необходимости вызовет соответствующую процедуру или просто изменит
значение атрибута.
Такая работа подпрограммы, реализующей функцию, которая включает вызов дополнительных процедур, представляет собой наиболее характерное свойство объектно-ориентированного программирования. По сути дела - это способ передачи сообщений для связи между разнородными объектами. Описанное свойство закладывается в систему при се разработке. Например, если процедура, вызванная при изменении времени конференции, обнаружила конфликтную ситуацию, подпрограмма ПРИСВОИТЬ направит сообщение объекту - докладчику. Это сообщение приведет к вызову другой процедуры, которая выведет на терминал сообщение, информирующее докладчика о конфликте. Теперь, когда основные идеи объектно-ориентированного программирования изложены, приступим к подробному разбору программы (листинг 11.1).

Пример программы

Программа состоит из ряда подпрограмм, построенных согласно основным принципам объектно-ориентированного программирования. Читатель может использовать эти подпрограммы для разработки своей собственной системы. Программа разделена на две части. Одна часть (предложения 2999 - 5240) реализует собственно идеи объектно-ориентированного программирования. Другая (предложения 2 - 905) - иллюстрирует применение ключевых подпрограмм. Последняя в свою очередь разделена на 8 объектно-ориентированных функций, одинаково использующих основные подпрограммы. Разобрав одну из них, можно понять, как работают все остальные. Любая функция может быть выбрана из меню. Посмотрим, например, как работает программа при создании структуры.

Пояснение к программе

Программа запускается с консоли по команде RUN. В предложении 2 создается структурно-объектный массив S0$, который будет содержать определения структур и объектов. Предложения 2-55 предназначены для вывода на экран меню:

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9 — ВЫХОД
? 1

 Пользователь вводит ответ после знака вопроса. Если пользователь ввел 1, в программе будет выполняться предложение 60, передающее управление на подпрограмму предложения 100. Предложения 100 и 110 служат для организации диалога с пользователем:

ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ЧИСЛО АТРИБУТОВ ? 5

 В результате этого диалога в предложении 115 переменной N будет присвоено значение 5, а переменной Е - 7. Выполнение цикла FOR в предложениях 120-135 продолжит диалог:

АТРИБУТ 1? ЗАЛ
АТРИБУТ 2 ? ПРЕДМЕТ
АТРИБУТ 3 ? ДОКЛАДЧИК
АТРИБУТ 4 ? НАЧАЛО
АТРИБУТ 5 ? ОКОНЧАНИЕ

 Последние семь ответов пользователя записываются во временный массив Т$. Подпрограмма создания структуры будет затем вызвана косвенно в предложении 145, передающем управление на предложение 3000. Программа написана так, что в массиве SO$ можно разместить только 2 структуры, но при необходимости читатель может это изменить. Одна структура должна начинаться с элемента SO$(l), а вторая - с элемента SO$(101). Массив SO$ формируется по мере создания структур, начиная с первого элемента. Подпрограмма создания структуры реализована предложениями 3000 - 3080. Она определяет, в какую половину массива SO$ поместить описания структуры, содержащиеся во временном массиве Т$. Возврат из этой подпрограммы на предложение 150 опять приводит к выводу меню на экран.
Обработка оставшихся пунктов меню аналогична, и ее легко проследить по программе.

Листинг программы

Листинг 11.1

1 REM ******* ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ****
2 DIM FO$(200): REM МАССИВ СТРУКТУР
5 PRINT "ВВЕДИТЕ НУЖНЫЙ НОМЕР"
10 PRINT "1 — СОЗДАТЬ СТРУКТУРУ"
15 PRINT "2 — СОЗДАТЬ ОБЪЕКТ"
20 PRINT "3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР"
25 PRINT "4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ"
30 PRINT "5 — ПРОСМОТРЕТЬ СТРУКТУРУ"
35 PRINT "6 — ПРОСМОТРЕТЬ ОБЪЕКТ"
40 PRINT "7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ"
45 PRINT "8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ"
50 PRINT "9— ВЫХОД"
55 INPUT N
60 ON N GOSUB 100,200,300,400,500,600,700,800,900
65 GOTO 5
100 REM **** СОЗДАНИЕ СТРУКТУРЫ ****
105 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ"Т$(1)
110 INPUT "ВВЕДИТЕ ЧИСЛО АТРИБУТОВ";Т$(2)
115 N=VAL(T$(2)): E=3+N-1
120 FOR I=1 ТО Е
125 PRINT "АТРИБУТ"; I-2; "-";
130 INPUT T$(l)
135 NEXT I
140 REM ВЫЗОВ ПРОЦЕДУРЫ СОЗДАНИЯ СТРУКТУРЫ
145 GOSUB 3000
150 RETURN
200 REM ***** СОЗДАНИЕ ОБЪЕКТА
205 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
210 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА":Т$(2)
215 INPUT "ВВЕДИТЕ ЧИСЛО АТРИБУТОВ";Т$(3)
220 N=VAL(T$(3)): E=4+N-1
225 FOR I=4 ТО Е
230 PRINT "АТРИБУТ "; I-3; "-";
235 INPUT T$(I);
240 NEXT I
245 REM ВЫЗОВ ПРОЦЕДУРЫ СОЗДАНИЯ ОБЪЕКТА
250 GOSUB 3200
255 RETURN
300 REM *** ИМЕНА ВСЕХ СТРУКТУР
310 REM ПЕЧАТЬ ИМЕН ВСЕХ СТРУКТУР
315 GOSUB 4400
320 RETURN
400 REM **** ИМЕНА ВСЕХ ОБЪЕКТОВ
405 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
410 REM ПЕЧАТЬ ИМЕН ВСЕХ ОБЪЕКТОВ СТРУКТУРЫ
415 GOSUB 4200
420 RETURN
500 REM *** ПРОСМОТР СТРУКТУРЫ
505 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
510 REM ПЕЧАТЬ АТРИБУТОВ СТРУКТУРЫ
515 GOSUB 3400
520 RETURN
600 REM *** ПРОСМОТР ОБЪЕКТА
605 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
610 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА";Т$(2)
615 REM *** ПРОСМОТР ОБЪЕКТА
620 GOSUB 4000
625 RETURN
700 REM *** ПРИСВОЕНИЕ ЗНАЧЕНИЯ ОБЪЕКТУ
705 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ":Т$(1)
710 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА":Т$(2)
715 INPUT "ВВЕДИТЕ ИМЯ АТРИБУТА";Т$(3)
720 INPUT "ВВЕДИТЕ ЕГО ЗНАЧЕНИЕ";Т$(4)
725 REM *** ПРИСВОЕНИЕ ЗНАЧЕНИЯ АТРИБУТУ ОБЪЕКТА
730 GOSUB 5000
735 RETURN
800 REM *** КОПИРОВАНИЕ ЗНАЧЕНИЯ ИЗ АТРИБУТА В ПЕРЕМЕННУЮ
805 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
810 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА";Т$(2)
815 INPUT "ВВЕДИТЕ ИМЯ АТРИБУТА";Т$(3)
820 REM *** КОПИРОВАНИЕ АТРИБУТА В Z$
825 GOSUB 5200
830 PRINT "ЗНАЧЕНИЕ АТРИБУТА-";Z$
835 RETURN
900 REM ВЫХОД
905 STOP
999 REM ****** ПОДПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ ******
1000
2999 REM ***** СИСТЕМНЫЕ ПОДПРОГРАММЫ *********
3000 REM ***** СОЗДАНИЕ СТРУКТУРЫ
З010 REM Т$(1) — ИМЯ СТРУКТУРЫ
3015 REM Т$(2) — ЧИСЛО АТРИБУТОВ
3020 REM АТРИБУТ1. * ОЗНАЧАЕТ. ЧТО ПОСЛЕ Т$(3) ИДЕТ НОМЕР
3021 REM ПОДПРОГРАММЫ
3025 REM ....
3030 REM T$(N+2) — АТРИБУТ N
3035 REM ПОИСК ИМЕНИ СТРУКТУРЫ В ВЕРХНЕЙ ИЛИ НИЖНЕЙ
3036 REM ПОЛОВИНЕ
3040 REM ПО ЭТОМУ АДРЕСУ ЗАПОМИНАЮТСЯ АРГУМЕНТЫ СТРУКТУРЫ
3045 Y=1: REM АДРЕС НИЖНЕЙ ПОЛОВИНЫ
3050 IF FO$(1) "" THEN Y=101: REM УКАЗАТЕЛЬ НА ВЕРХНЮЮ
3051 REM НЕ ПУСТУЮ ПОЛОВИНУ
3055 N=VAL(T$(2)): N=N+2:
3056 REM ЧИСЛО ЭЛЕМЕНТОВ В СТРУКТУРЕ = ЧИСЛО АРГУМЕНТОВ +2
3060 FOR Z=1 TO N
3065 FO$(Y)=T$(Z): Y=Y+1
3070 NEXT 2
3080 RETURN
3200 REM СОЗДАНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ ДЛЯ ВЫЗОВА ОБЪЕКТА
3210 REM Т$(1) — ИМЯ СТРУКТУРЫ
3215 REM Т$(2) — ИМЯ ОБЪЕКТА
3220 REM Т$(3) — ЧИСЛО ЗНАЧЕНИЙ АТРИБУТОВ
3225 REM Т$(4) — ЗНАЧЕНИЕ АТРИБУТА 1
3230 REM T$(...) — ЗНАЧЕНИЕ АТРИБУТА ...
3235 REM T$(N+3) — ЗНАЧЕНИЕ АТРИБУТА N
3240 REM УКАЗАТЕЛЬ НА СТРУКТУРУ
3245 Z=1
3250 IF T$(1)-FO$(101) THEN Z-101
3255 E=Z+99: REM ПОСЛЕДНИЙ АДРЕС В ОБЛАСТИ СТРУКТУРЫ
3260 REM ПОИСК ПЕРВОГО СВОБОДНОГО МЕСТА ДЛЯ РАЗМЕЩЕНИЯ ОБЪЕКТА
3265 FOR I=Z TO E
3270 IF FO$(l)="" THEN GOTO 3280
3275 NEXT I
3280 REM ЗАПИСЬ ИМЕНИ ОБЪЕКТА
3285 L=l: FO$(L) = T$(2): L=L+1: REM ЗАПИСЬ ИМЕНИ ОБЪЕКТА
3290 REM ПОЛУЧИТЬ ЧИСЛО АТРИБУТОВ
3295 N=VAL(T$(3)): FO$(L)=T$(3): L=L+1: REM ЗАПОМНИТЬ НОМЕР
3300 E=L+N-1: REM АДРЕС ПОСЛЕДНЕГО АТРИБУТА
3305 Х=4: REM АДРЕС ПОСЛЕДНЕГО АТРИБУТА
3310 FOR I=L TO E
3315 FO$(I)=T$(K): K=K+1
3320 NEXT I
3325 RETURN
3400 REM ****** ПЕЧАТЬ АТРИБУТОВ СТРУКТУРЫ
3405 REM T$(1) — ИМЯ СТРУКТУРЫ
3410 REM УКАЗАТЕЛЬ НА СТРУКТУРУ
3415 Z=1
3420 IF T$(1)=FO$(101) THEN Z=101
3425 PRINT "СТРУКТУРА"; T$(1): Z=Z+1
3430 PRINT "ЧИСЛО АТРИБУТОВ ": FO$(Z)
3435 N=VAL(FO$(Z)): Z=Z+1
3440 E=Z+N-1
3445 K=1: REM НОМЕР АТРИБУТА
3450 FOR I=Z TO E
3455 PRINT "НОМЕР АТРИБУТА"; К; "="; FD(I)
3460 K=K+1
3465 NEXT I
3470 RETURN
3600 REM ПОИСК НОМЕРА АТРИБУТА В ОБЪЕКТЕ
3603 REM Z=HOMEP АТРИБУТА, А=0 ЕСЛИ НЕТ * И А=1, ЕСЛИ * ЕСТЬ
3605 REM ИМЯ СТРУКТУРЫ Т$(1)
3610 REM ...РЕЗЕРВ
3615 REM ИМЯ АТРИБУТА Т#(3)
3630 REM УКАЗЫВАЕТ НА СТРУКТУРУ
3635 Z=1
3640 IF T$(1)=FO$(101) THEN Z=101
3645 Z=Z+2: N=1: REM НАЧАЛО ПОИСКА
3650 IF T$(3)=FO$(Z)THEN GOTO 3665
3655 Z=Z+1 :N=N+1
3660 GOTO 3650: REM ЕЩЕ ПОПЫТКА
3665 REM ЕСТЬ ЛИ В АТРИБУТЕ *
3670 А=0: Z=Z-1: REM УКАЗЫВАЕТ НА ПОЛОЖЕНИЕ *
3675 IF FO$(Z)="*" THEN A=1
3680 Z=N+1: RETURN
3800 REM *********** УКАЗАТЬ ОБЪЕКТ
3810 REM T$(1) — ИМЯ СТРУКТУРЫ
3815 REM Т$(2) — ИМЯ ОБЪЕКТА
3820 Z=1
3825 IF T$(1)=FO$(101) THEN Z=101
3830 REM ЧИСЛО АТРИБУТОВ СТРУКТУРЫ
3835 Z=Z+1: N=VAL(FO$(Z))
3840 Z=Z+N+1: REM ПЕРВЫЙ ОБЪЕКТ В СТРУКТУРЕ
3845 REM СВОБОДНОЕ МЕСТО РАЗМЕЩЕНИЯ ОБЪЕКТА ?
3850 IF FO$(Z) "" THEN GOTO 3865
3855 REM ПОИСК МЕСТА. ЗАНЯТОГО ОБЪЕКТОМ
3860 Z=Z+1: GOTO 3850
3865 REM ПОЛУЧИТЬ ЧИСЛО АТРИБУТОВ ОБЪЕКТА
3870 Z=Z+1: N=VAL(FO$(Z): Z=Z+1:
3871 REM УКАЗАТЕЛЬ УСТАНОВИТЬ НА ИМЯ ОБЪЕКТА
3875 REM ЭТО ОБЪЕКТ ?
3880 IF T$(2) = FO$(Z) THEN RETURN:REM Z — АДРЕС ОБЪЕКТА
3885 REM СЛЕДУЮЩИЙ ОБЪЕКТ
3890 Z=Z+N+2: GOTO 3880
4000 REM ******** ПРОСМОТР ОБЪЕКТА
4005 REM T$(1) — ИМЯ СТРУКТУРЫ
4010 REM Т$(2) — ИМЯ ОБЪЕКТА
4015 REM Z-ЗНАЧЕНИЕ УКАЗАТЕЛЯ ОБЪЕКТА
4020 REM N — ЧИСЛО АТРИБУТОВ ОБЪЕКТА
4025 GOSUB 3800
4030 PRINT "ОБЪЕКТ=":FO$(Z):Z=Z+1
4035 PRINT "ЧИСЛО АТРИБУТОВ =";FO$(Z):Z=Z+1
4040 E=Z+N-1: P=1
4045 FOR I=Z TO E
4050 PRINT "АТРИБУТ НОМЕР "; Р; "РАВЕН "; FO$(I):P=P+1
4055 NEXT I
4060 RETURN
4200 REM ******* ПЕЧАТЬ ИМЕН ВСЕХ ОБЪЕКТОВ
4205 REM ИМЯ СТРУКТУРЫ Т$(1)
4210 REM УКАЗАТЕЛЬ НА СТРУКТУРУ
4215 Z=1
4220 IF T$(1)=FO$(101)THEN Z=101
4225 E=Z+99: REM КОНЕЦ МАССИВА СТРУКТУР
4230 REM ЧИСЛО АТРИБУТОВ СТРУКТУРЫ
4235 Z=Z+1: N=VAL(FO$(Z))
4240 REM ПОЛУЧЕНИЕ ЧИСЛА АТРИБУТОВ ОБЪЕКТА
4245 Z=Z+N+2: N=VAL(FO$(Z)): Z=Z-1:REM ПЕРВЫЙ ОБЪЕКТ
4250 FOR I=Z TO E STEP N+2
4255 IF FO$(I) " " THEN PRINT "ИМЯ ОБЪЕКТА — ";FO$(I)
4260 NEXT I
4265 RETURN
4400 REM ********* ПЕЧАТЬ ИМЕН ВСЕХ СТРУКТУР
4405 PRINT "СТРУКТУРЫ"
4410 PRINT FO$(1)
4415 PRINT FO$(101)
4420 RETURN
4600 REM ********* УДАЛИТЬ ОБЪЕКТ
4605 REM T$(1) — ИМЯ СТРУКТУРЫ
4610 REM T$(2) — ИМЯ ОБЪЕКТА
4615 REM Z-АДРЕС ОБЪЕКТА. N- ЧИСЛО АТРИБУТОВ
4620 GOSUB 3800
4625 E=Z+N+2: REM КОНЕЦ РАЗМЕЩЕНИЯ ОБЪЕКТОВ
4630 FOR I=Z TO E
4635 FO$(I)=""
4640 NEXT I
4645 RETURN
4800 REM ******** НАЙТИ АТРИБУТ ОБЪЕКТА
4805 REM T$(1) — ИМЯ СТРУКТУРЫ
4810 REM T$(2) — ИМЯ ОБЪЕКТА
4815 REM Т$(3) — ИМЯ АТРИБУТА
4820 REM ОПРЕДЕЛИТЬ НОМЕР АТРИБУТА ПО АДРЕСУ (Z),
4821 REM ЕСЛИ АТРИБУТ=* А=1
4825 GOSUB 3600: AN=Z
4830 REM ОПРЕДЕЛИТЬ АДРЕС ОБЪЕКТА (Z)
4835 GOSUB 3800
4840 REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА
4845 Z=Z+AN-1
4850 RETURN
5000 REM ********* ПРИСВОИТЬ ЗНАЧЕНИЕ АТРИБУТУ ОБЪЕКТА
5005 REM Т$(1) — ИМЯ СТРУКТУРЫ
5010 REM Т$(2) — ИМЯ ОБЪЕКТА
5015 REM Т$(3) — ИМЯ АТРИБУТА
5020 REM Т$(4) — ЗНАЧЕНИЕ
5025 REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА ОБЪЕКТА (Z)
5030 GOSUB 4800
5035 REM ЗАПИСАТЬ ЗНАЧЕНИЕ В АТРИБУТ, ЕСЛИ НЕТ *, A=0
5040 IF A=0 THEN GOTO 5060: REM * НЕТ
5045 REM * — ВЫЗОВ ПОДПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ
5050 Z=Z+1: N=VAL(FO$(Z): ON N GOSUB 10000
5055 Z=Z-1: FO$(Z)=T$(4): RETURN: REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА
5060 Z=Z+1: FO$(Z)=T$(4)
5065 RETURN
5200 REM ********* СКОПИРОВАТЬ АТРИБУТ ОБЪЕКТА В Z$
5205 REM T$(1) — ИМЯ СТРУКТУРЫ
5210 REM Т$(2) — ИМЯ ОБЪЕКТА
 5215 REM Т$(3)— ИМЯ АТРИБУТА
5220 REM ЗНАЧЕНИЕ Z$
5225 REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА ОБЪЕКТА (Z)
5230 GOSUB 4800
5235 Z$=FO$(Z)
5240 IF A=0 THEN GOTO 5260: REM * НЕТ
5245 REM * — ВЫЗОВ ПОДПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ
5255 Z$=FO$(Z): RETURN: REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА
5260 Z=Z+1 :Z$=FO$(Z)
5265 RETURN
9000 REM ПРОГРАММА ПРОВЕРКИ ПСЕВДОНАПРЯЖЕНИЯ
9002 REM ПРОВЕРКА ПСЕВДОНАПРЯЖЕНИЯ, ВЫБИРАЕМОГО
9003 REM ФУНКЦИЕЙ RND(X),
9004 REM НА ПСЕВДОВРЕМЕННЫХ ИНТЕРВАЛАХ (ЦИКЛ FOR QB)
9020 Т$(1)="": Т$(2)="": Т$(3)="ВРЕМЯ": Т$(4)="5"
9040 FOR QA=1 TO 30: GOSUB 5000
9060 FOR QB=1 TO 1000: NEXT QB: REM ПСЕВДОВРЕМЯ ЗАДЕРЖКИ
9080 NEXT QA: RETURN
9999 REM ************* ПРОГРАММА ПОЛЬЗОВАТЕЛЯ **********
10000 QQ=RND(Z): IF QQ 0.7
10001 THEN PRINT "НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО"; QQ
10005 RETURN

Примеры работы программы

Ниже приведены примеры, иллюстрирующие работу с каждым пунктом меню (см.листинг 11.1). Напомним, что ответы пользователя идут после знака вопроса.

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2—СОЗДАТЬ ОБЪЕКТ
3— ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8— СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 1
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ЧИСЛО АТРИБУТОВ ? 5
АТРИБУТ 1 ? ЗАЛ
АТРИБУТ 2 ? ПРЕДМЕТ
АТРИБУТ 3 ? ДОКЛАДЧИК
АТРИБУТ 4 ? НАЧАЛО
АТРИБУТ 5 ? ОКОНЧАНИЕ

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9 — ВЫХОД
? 3
СТРУКТУРЫ
КОНФЕРЕНЦИЯ

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 5
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
СТРУКТУРА — КОНФЕРЕНЦИЯ
ЧИСЛО АТРИБУТОВ 5
АТРИБУТ 1 ? ЗАЛ
АТРИБУТ 2 ? ПРЕДМЕТ
АТРИБУТ 3 ? ДОКЛАДЧИК
АТРИБУТ 4 7 НАЧАЛО
АТРИБУТ 5 ? ОКОНЧАНИЕ

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9 — ВЫХОД
? 2
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС1
ВВЕДИТЕ ЧИСЛО АТРИБУТОВ ? 5
АТРИБУТ 1 ? 10
АТРИБУТ 2 ? ПОРЯДОК ПРОВЕДЕНИЯ СВЕРХУРОЧНЫХ РАБОТ
АТРИБУТ 3 ? СУЗАН БЕРД
АТРИБУТ 4 ? 10:00
АТРИБУТ 5 ? 11:00

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 2
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС2
введите ЧИСЛО АТРИБУТОВ ? 5
АТРИБУТ 1 ? 10
АТРИБУТ 2 ? ПОВЫШЕНИЕ ОКЛАДОВ
АТРИБУТ 3 ? МАРК СТОН
АТРИБУТ 4 ? 13:00
АТРИБУТ 5 ? 14:00

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 2
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ОД1
ВВЕДИТЕ ЧИСЛО АТРИБУТОВ ? 5
АТРИБУТ 1 ? 11
АТРИБУТ 2 ? ПЛАНЫ ПРОДАЖИ
АТРИБУТ 3 ? ЭНДРИ РОМ
АТРИБУТ 4 ? 10:00
АТРИБУТ 5 ? 11:00

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 —СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 4

ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ИМЯ ОБЪЕКТА—ДЕС1
ИМЯ ОБЪЕКТА—ДЕС2
ИМЯ ОБЪЕКТА—ОД1

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 - ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 6
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС2
ОБЪЕКТ ДЕС2
АТРИБУТ НОМЕР 1 ? 10
АТРИБУТ НОМЕР 2 ? ПЛАНЫ ПРОДАЖИ
АТРИБУТ НОМЕР 3 ? МАРК СТОН
АТРИБУТ НОМЕР 4 ? 13:00
АТРИБУТ НОМЕР 5 ? 14:00

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9 — ВЫХОД
? 6
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС1
ОБЪЕКТ ДЕС1
ЧИСЛО АТРИБУТОВ 5
АТРИБУТ НОМЕР 1 ? 10
АТРИБУТ НОМЕР 2 ? ПОРЯДОК СВЕРХУРОЧНЫХ РАБОТ
АТРИБУТ НОМЕР 3 ? СУЗАН БЕРД
АТРИБУТ НОМЕР 4 ? 10:00
АТРИБУТ НОМЕР 5 ? 11:00

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 7
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС1
ВВЕДИТЕ ИМЯ АТРИБУТА ? НАЧАЛО
ВВЕДИТЕ ЗНАЧЕНИЕ ? 9:00
ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2—СОЗДАТЬ ОБЪЕКТ
3— ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 6
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС1
ОБЪЕКТ ДЕС1
ЧИСЛО АТРИБУТОВ 5
АТРИБУТ НОМЕР 1 ? 10
АТРИБУТ НОМЕР 2 ? ПОРЯДОК СВЕРХУРОЧНЫХ РАБОТ
АТРИБУТ НОМЕР 3 ? СУЗАН БЕРД
АТРИБУТ НОМЕР 4 ? 9:00
АТРИБУТ НОМЕР 5 ? 11:00

Ниже приведен пример создания новой структуры для конференц-зала и подключения процедур обработки атрибутов времени начала и окончания конференций.

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2—СОЗДАТЬ ОБЪЕКТ
3— ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 1
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ1
ВВЕДИТЕ ЧИСЛО АТРИБУТОВ ? 5
АТРИБУТ 1 ? ЗАЛ
АТРИБУТ 2 ? ПРЕДМЕТ
АТРИБУТ 3 ? ДОКЛАДЧИК
АТРИБУТ 4 ? *
АТРИБУТ 5 ? НАЧАЛО
АТРИБУТ 6 ? *
АТРИБУТ 7 ? ОКОНЧАНИЕ
ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 —СКОПИРОВАТЬ, ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9 — ВЫХОД
? 2
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ1
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС1
ВВЕДИТЕ ЧИСЛО АТРИБУТОВ ? 7
АТРИБУТ 1 ? 10
АТРИБУТ 2 ? ПОРЯДОК СВЕРХУРОЧНЫХ РАБОТ
АТРИБУТ 3 ? СУЗАН БЕРД
АТРИБУТ 4 ? 10:00
АТРИБУТ 5 ? 1
АТРИБУТ 6 ? 11:00
АТРИБУТ 7 ? 1
ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3— ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 8
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ1
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС1
ВВЕДИТЕ ИМЯ АТРИБУТА ? НАЧАЛО
ЗНАЧЕНИЕ АТРИБУТА — 10:00

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 7
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ1
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ДЕС1
ВВЕДИТЕ ИМЯ АТРИБУТА ? НАЧАЛО
ВВЕДИТЕ ЗНАЧЕНИЕ ? 08:00
**** ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ***** 1

Значение атрибута НАЧАЛО меняется в подпрограмме, реализующей функцию ПРИСВОИТЬ. При создании структуры КОНФЕРЕНЦИЯ 1 имени атрибута (НАЧАЛО) предшествует *. При создании объекта единица в 5-м атрибуте указывает на вызов первой подпрограммы пользователя при обращении к атрибуту НАЧАЛО. Это реализовано в предложениях 5040 - 5055 программы. Предложение 5050, ON GOSUB 1000, вызывает подпрограмму пользователя, начинающуюся с предложения 1000. При этом на экран будет выдано сообщение: “**** ПОДПРОГРАММА ПОЛЬЗОВАТЕЛЯ **** ”.

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2—СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9—ВЫХОД
? 6
ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? КОНФЕРЕНЦИЯ1
ВВЕДИТЕ ИМЯ ОБЪЕКТА 7 ДЕС1
ОБЪЕКТ ДЕС1
ЧИСЛО АТРИБУТОВ 7
АТРИБУТ 1 ? 10
АТРИБУТ 2 ? ПОРЯДОК СВЕРХУРОЧНЫХ РАБОТ
АТРИБУТ 3 ? СУЗАН БЕРД
ATPИБУТ 4 ? 8:00
АТРИБУТ 5 ? 1
АТРИБУТ 6 ? 11:00
АТРИБУТ 7 ? 1

Упражнение

Попытайтесь вставить в меню еще один пункт - УДАЛИТЬ-ОБЪЕКТ. Эта функция реализована в предложениях 4600 - 4645 программы.


Часть 4 "Создание ПО развитых систем ИИ". Глава 12

ГЛАВА 12

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ:
ПРИМЕР ИЗ ОБЛАСТИ ТЕХНИКИ

Теперь, когда читатель знаком с основными понятиями объектно- ориентированного программирования, рассмотрим пример из области техники. Пример сопровождается достаточно полными пояснениями, которые помогут читателю понять суть дела. Изучив пример, можно применять объектно- ориентированное программирование для разработки программ анализа электронных систем. Кроме того, будет сделан еще один шаг к объектно-ориентированным экспертным системам.

Аналого-цифровое преобразование

Ежедневно пользуясь бытовыми электроприборами, читатель, конечно, знает, что обычно используется переменный ток напряжением в 120 В и частотой в 60 циклов. Как это следует понимать ? Рассмотрим рис. 12.1. Переменный ток меняет свое направление на обратное через определенные интервалы времени. В примере напряжение тока меняется от +120 до -120 В и обратно, проходя через 0. Каждый цикл занимает 1/60 с, а значит, 60 циклов занимают ровно 1 с Это и есть частота в 60 циклов. Напряжение меняется от +120 до -120 В непрерывно, и в некоторый конкретный момент оно может иметь значение 36 В, 112 В и т.д. Это так называемое аналоговое представление, поскольку напряжение может быть представлено непосредственно измеренными величинами, которые наглядно отражают движение тока.
Для того чтобы каким-то образом проанализировать напряжение с помощью компьютера, оно должно быть подано на входной канал, т.е. место сопряжения компьютера с внешним прибором. Поскольку компьютер - это электронный прибор, входной канал может воспринимать только некоторые уровни напряжения. Следовательно, любая информация, подающаяся на входной канал, должна быть преобразована в определенное напряжение. Как только это сделано и информация передана в компьютер, значение величины поданного напряжения помещается в ячейки основной памяти и затем может быть обработана программой.
Однако со входным каналом все не так просто. Прежде чем некоторое значение будет введено в компьютер, представляющее его напряжение должно быть преобразовано в двоично-цифровой формат. Что это означает ?
Основной единицей, которой оперирует компьютер, является бит или одна двоичная цифра. Бит может иметь значение нуль либо единица. (Такая система счисления называется двоичной в отличие от обычно используемой для счета десятичной системы. В двоичной системе число 1 записывается как 001, 2 - 010, 3 - 01l и т.д.) Один бит представляет сигнал, имеющий одно из двух значений уровня напряжения. Все схемы компьютера работают с двумя различными уровнями напряжения, которые можно представить как 0 и 1.
Более крупная единица памяти компьютера - байт. Байт состоит из 8 бит. В двоично-цифровом виде формат байта памяти, содержащего значение 1 В, записывается как 0000 0001, значение 9 В - как 0000 1001. (Двоичная система - позиционная. Каждая позиция, начиная справа, имеет определенный вес. Первая позиция имеет вес 1, вторая - 2, третья - 4, затем - 8,16,32,64 и 128. Складывая веса в позициях, где стоят единицы, можно получить соответствующее десятичное число. В последнем примере, 0000 1001, нужно сложить вес первой цифры справа - 1 и четвертой - 8. В результате получится 9).

12_1.gif (3071 bytes)

Рис.12.1. Переменный ток с напряжением в 120 В

Большинство данных, применяемых для анализа в различных задачах, можно представить аналоговым напряжением. Можно анализировать, например, постоянно меняющееся напряжение бытовой сети или кардиограмму. Для того чтобы проанализировать аналоговое напряжение на компьютере, оно должно быть переведено в двоично-цифровую форму.
Аналоговое напряжение преобразуется в цифровой вид с помощью аналого-цифрового преобразователя (АЦП). АЦП выполняет преобразование автоматически, принимая на вход аналоговое напряжение и подавая на выход двоичные числа (см. рис. 12.2).
Преобразование инициируется компьютером, который подает на АЦП управляющий сигнал по специальной шине, как показано на рисунке. После того как преобразование выполнено, компьютер готов к анализу входных данных.
Предположим, что нужно проанализировать переменное напряжение подстанции, обслуживающей небольшую фирму. Интерес представляют два случая: когда напряжение падает ниже допустимого уровня (снижение освещения) и когда напряжение превышает допустимый уровень (сгорают бытовые электроприборы и оборудование). Как видно из рис. 12.3, переменное напряжение начинается с 0 и
непрерывно повышается до 120 В, а затем уменьшается, опять проходя через 0. Цикл повторяется каждую 1/60 с. Рисунок иллюстрирует посылку компьютером сигналов преобразования в два различных момента цикла. Первый сигнал посылается АЦП, когда напряжение достигает 30 вольт. Это напряжение преобразуется в двоичный код 0001 1100. Второй сигнал посылается при напряжении в 60 В, которое преобразуется в 0011 1100. Иначе говоря, АЦП принимает с одной входной шины напряжение, преобразует его и передает на восемь выходных двоичных шин 1 байт информации.
Подытожим сказанное.
1. АЦП — это устройство, преобразующее аналоговое напряжение в двоично-цифровой вид.

12_2.gif (3710 bytes)

Рис.12.2. Входной канал аналого-цифрового преобразователя

2. Компьютер обрабатывает только двоичные цифры.
3. Шина преобразования АЦП позволяет компьютеру точно отслеживать момент преобразования.

Использование объектно-ориентированного программирования в системе, работающей в технической области

Читатель вкратце ознакомлен с такими понятиями, как аналоговое напряжение, двоично-цифровое представление и аналого-цифровое преобразование. Теперь можно перейти к постановке задачи.
На подстанции, обслуживающей небольшую фирму, размещено три комплекта чувствительного электронного оборудования. Нужно защитить это оборудование от перегрузки. Если напряжение превышает 124 В, компьютер включает прерыватель, отключающий оборудование. Общая схема всей системы показана на рис. 12.4.
Компьютер, используя канал ввода/вывода и АЦП, следит за напряжением, подающимся на оборудование. Заметив превышение напряжения (124 В), он дает сигнал прерывателю, который сбрасывает напряжение для предохранения чувствительного электронного оборудования от перегрузки. Нужно разработать объектно-ориентированную систему, следящую за напряжением, структуру, объекты и процедуры для неё.

Структура

Хотя схема, изображенная на рис. 12.4, выглядит довольно сложно, попробуем создать структуру, которая значительно упростит дело. Она должна содержать исчерпывающий набор атрибутов, позволяющий полностью представить задачу.

12_3.gif (2899 bytes)

Рис.12.3. Напряжение тока в различные моменты преобразования

Задача заключается в следующем:
Преобразовать напряжение тока, подающееся на чувствительное оборудование, в двоичный вид и сравнить его с максимально допустимым. В примере максимально допустимое напряжение - 124 В (или в двоичном виде 0111 1100).
Если напряжение превышает 124 В, включить прерыватель.
Преобразование должно выполняться постоянно через определенные интервалы времени. Что может произойти, если интервал составляет, например, 60 с ? Предположим, последнее преобразование выполнялось при безопасном напряжении в 123 В, а через 20 с возросло до опасного в 125 В. Но поскольку преобразование не будет выполнено еще в течение 40 с, компьютер не увидит повышенное напряжение, и оборудование выйдет из строя. Если же выбрать интервал в 2 с, компьютер заметит напряжение в 125 В и подключит прерыватель. Какие же атрибуты должны быть у структуры для поставленной задачи ?

12_4.gif (6698 bytes)

Рис.12.4. Компьютерная система контроля напряжения

1. Критическое напряжение, при котором срабатывает прерыватель (НАПРЯЖЕНИЕ).
2. Интервал между преобразованиями напряжения (ИНТЕРВАЛ).
3. Время последнего преобразования напряжения (ПВРЕМЯ).
4. Текущее время (ТВРЕМЯ).
5. Процедура, вызываемая для инициации прерывателя (ПРЕРЫВАТЕЛЬ).
Структура создается с помощью функции СОЗДАТЬ-СТРУКТУРУ. Присвоим структуре имя ДАТЧИК, поскольку она разрабатывается для системы, распознающей критическое напряжение. Используя формат, введённый в гл. 11, запишем:

СОЗДАТЬ-СТРУКТУРУ(ИМЯ-СТРУКТУРЫ=ДАТЧИК,
ЧИСЛО-АТРИБУТОВ=5,
АТРИБУТ=НАПРЯЖЕНИЕ,
АТРИБУТ=ИНТЕРВАЛ,
АТРИБУТ=ПВРЕМЯ,
АТРИБУТ=*ТВРЕМЯ,
АТРИБУТ=ПРОЦЕДУРА)

 Звездочка перед именем ТВРЕМЯ указывает, что если функция ПРИСВОИТЬ изменяет значение атрибута ТВРЕМЯ, то вызывается соответствующая процедура. Объект можно создать следующим образом:

СОЗДАТЬ-ОБЪЕКТ(ИМЯ-СТРУКТУРЫ=ДАТЧИК,
ИМЯ-ОБЪЕКТА=ОБОРУДОВАНИЕ,
НАПРЯЖЕНИЕ=124,
ИНТЕРВАЛ=2,
ПВРЕМЯ=0,
ТВРЕМЯ=0,
ПРОЦЕДУРА= имя процедуры)

 Каким же образом объектно-ориентированная система использует эту структуру ? Атрибут 4 содержит текущее время. Как только этот атрибут меняет значение по функции ПРИСВОИТЬ, вызывается процедура, определяющая, должен ли сработать прерыватель. Имя процедуры задается в 5-м атрибуте. Сначала процедура вычитает значение атрибута ПВРЕМЯ (атрибут 3) из значения атрибута ТВРЕМЯ (атрибут 4) и сравнивает результат со значением атрибута ИНТЕРВАЛ (атрибут 2). Если в результате вычитания получилась величина, равная или большая значения атрибута ИНТЕРВАЛ, в АЦП посылается сигнал преобразования напряжения. Преобразованное напряжение сравнивается с критическим, содержащимся в атрибуте НАПРЯЖЕНИЕ (атрибут 1) и если оно его превышает, срабатывает прерыватель.
В Бейсике есть стандартная функция TIME, по которой можно получить текущее время:

YS-TIME

Затем полученное значение можно передать объекту:

ПРИСВОИТЬ (ИМЯ-СТРУКТУРЫ=ДАТЧИК,
ИМЯ-ОБЪЕКТА=ОБОРУДОВАНИЕ,
ТВРЕМЯ=Y$)

 В результате будет вызвана подпрограмма контроля критического напряжения.

Системы реального времени

Описанная система контроля напряжения относится к так называемым системам реального времени. В таких системах определенные действия выполняются в указанные интервалы времени, например, рассматриваемая система преобразует напряжение каждые 2 с. Понятие “реальное время” означает, что в систему поступают данные, которые затем обрабатываются в строго указанные моменты времени.
Следовательно, систему контроля напряжения можно отнести к объектно-ориентированным системам реального времени.

Управление технологическими процессами

Описанный метод можно использовать для управления различными процессами (от упаковки яиц в пластик до поддержания температурного режима реактора). В соответствующих приложениях нужно применять программы или устройства, преобразующие давление, положение ленты конвейера или температуры в аналоговое напряжение. Затем АЦП превращает это напряжение в вид, который воспринимается компьютером. Компьютер может управлять давлением или температурой либо просто предупреждать пользователя, что на конвейере перебои в поступлении яиц. Подобные системы называются системами управления технологическими процессами.

Пример программы

В листинге 12.1 приведена программа листинга 11.1, модифицированная для задачи контроля напряжения. Время контроля напряжения имитируется подпрограммой, начинающейся с предложения 9000 . Оператор FOR используется для отсчета псевдоинтервалов.
Функция ПРИСВОИТЬ реализуется подпрограммой, начинающейся с предложения 5000. Из нее вызывается написанная пользователем процедура, которая должна начинаться с предложения 1000 . Для проверки псевдонапряжения можно воспользоваться стандартной функцией RND(X).

Листинг программы

Листинг 12.1

1 REM **** ОКОНЧАНИЕ ПРИМЕРА НА ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
2 REM **** ПРОГРАММИРОВАНИЕ
3 DIM FO$ (200): REM МАССИВ СТРУКТУР
5 PRINT "ВВЕДИТЕ НУЖНЫЙ НОМЕР"
10 PRINT "1 — СОЗДАТЬ СТРУКТУРУ"
15 PRINT "2 — СОЗДАТЬ ОБЪЕКТ-
20 PRINT "3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР"
25 PRINT "4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ"
30 PRINT "5 — ПРОСМОТРЕТЬ СТРУКТУРУ"
35 PRINT "6 — ПРОСМОТРЕТЬ ОБЪЕКТ"
40 PRINT "7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ"
45 PRINT "8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ"
50 PRINT "9 — ПРОВЕРКА ПСЕВДОНАПРЯЖЕНИЯ"
55 INPUT N
60 ON N GOSUB 100,200,300,400,500,600,700,800,9000
65 GOTO 5
100 REM **** СОЗДАНИЕ СТРУКТУРЫ ****
105 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
110 INPUT "ВВЕДИТЕ ЧИСЛО АТРИБУТОВ";Т$(2)
115 N=VAL(T$(2)): E=3+N-1
120 FOR I=1 TO E
125 PRINT "АТРИБУТ";I-2;"-";
130 INPUT T$ (I)
135 NEXT I
140 REM ВЫЗОВ ПРОЦЕДУРЫ СОЗДАНИЯ СТРУКТУРЫ
145 GOSUB 3000
150 RETURN
200 REM ***** СОЗДАНИЕ ОБЪЕКТА
205 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$ (1)
210 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА";Т$(2)
215 INPUT "ВВЕДИТЕ ЧИСЛО АТРИБУТОВ";Т$(3)
220 N=VAL(T$(3)): E=4+N-1
225 FOR I=4 ТО Е
230 PRINT "АТРИБУТ "; I-3; "-";
235 INPUT T$(1);
240 NEXT I
245 REM ВЫЗОВ ПРОЦЕДУРЫ СОЗДАНИЯ ОБЪЕКТА
250 GOSUB 3200
255 RETURN
300 REM *** ИМЕНА ВСЕХ СТРУКТУР
310 REM ПЕЧАТЬ ИМЕН ВСЕХ СТРУКТУР
315 GOSUB 4400
320 RETURN
400 REM **** ИМЕНА ВСЕХ ОБЪЕКТОВ
405 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
410 REM ПЕЧАТЬ ИМЕН ВСЕХ ОБЪЕКТОВ СТРУКТУРЫ
415 GOSUB 4200
420 RETURN
500 REM *** ПРОСМОТР СТРУКТУРЫ
505 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
510 REM ПЕЧАТЬ АТРИБУТОВ СТРУКТУРЫ
515 GOSUB 3400
520 RETURN
600 REM *** ПРОСМОТР ОБЪЕКТА
605 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
610 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА";Т$(2)
615 REM *** ПРОСМОТР ОБЪЕКТА
620 GOSUB 4000
625 RETURN
700 REM *** ПРИСВОЕНИЕ ЗНАЧЕНИЯ ОБЪЕКТУ
705 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$(1)
710 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА";Т$(2)
715 INPUT "ВВЕДИТЕ ИМЯ АТРИБУТА" ;Т$(3)
720 INPUT "ВВЕДИТЕ ЕГО ЗНАЧЕНИЕ";Т$(4)
725 REM *** ПРИСВОЕНИЕ ЗНАЧЕНИЯ АТРИБУТУ ОБЪЕКТА
730 GOSUB 5000
735 RETURN
800 REM *** КОПИРОВАНИЕ ЗНАЧЕНИЯ ИЗ АТРИБУТА В ПЕРЕМЕННУЮ
805 INPUT "ВВЕДИТЕ ИМЯ СТРУКТУРЫ";Т$ (1)
810 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА";Т$ (2)
815 INPUT "ВВЕДИТЕ ИМЯ АТРИБУТА";Т$(3)
820 REM ***КОПИРОВАНИЕ АТРИБУТА В Z$
825 GOSUB 5200
830 PRINT "ЗНАЧЕНИЕ АТРИБУТА =";Z
835 RETURN
900 REM ВЫХОД
905 STOP
999 REM ****** ПОДПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ ******
1000
2999 REM ***** СИСТЕМНЫЕ ПОДПРОГРАММЫ *********
3000 REM ***** СОЗДАНИЕ СТРУКТУРЫ
3010 REM Т$ (1) — ИМЯ СТРУКТУРЫ
3015 REM T$(2) — ЧИСЛО АТРИБУТОВ
3020 REM АТРИБУТ 1. * ОЗНАЧАЕТ, ЧТО ПОСЛЕ Т$ (3) ИДЕТ НОМЕР ПОДПРОГРАММЫ
3025 REM....
3030 REM T$ (N+2) — АТРИБУТ N
3035 REM ПОИСК ИМЕНИ СТРУКТУРЫ В ВЕРХНЕЙ ИЛИ НИЖНЕЙ ПОЛОВИНЕ
3040 REM ПО ЭТОМУ АДРЕСУ ЗАПОМИНАЮТСЯ АРГУМЕНТЫ СТРУКТУРЫ
3045 Y=1; REM АДРЕС НИЖНЕЙ ПОЛОВИНЫ
3050 IF FO$(l) <<>> THEN Y=101: REM УКАЗАТЕЛЬ НА ВЕРХНЮЮ
3051 REM НЕ ПУСТУЮ ПОЛОВИНУ
3055 N=VAL(T$(2)): N=N+2:
3056 REM ЧИСЛО ЭЛЕМЕНТОВ В СТРУКТУРЕ = ЧИСЛО АРГУМЕНТОВ +2
3060 FOR Z=1 TO N
3065 FO$(Y)=T$(Z): Y=Y+1
3070 NEXT Z
3080 RETURN
3200 REM ***** СОЗДАНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ ДЛЯ ВЫЗОВА ОБЪЕКТА
3210 REM Т$ (1) — ИМЯ СТРУКТУРЫ
3215 REM Т$ (2) — ИМЯ ОБЪЕКТА
3220 REM Т$(3) — ЧИСЛО ЗНАЧЕНИЙ АТРИБУТОВ
3225 REM T$(4) — ЗНАЧЕНИЕ АТРИБУТА 1
3230 REM T$(...) — ЗНАЧЕНИЕ АТРИБУТА ...
3235 REM T$ (N+3) — ЗНАЧЕНИЕ АТРИБУТА N
3240 REM УКАЗАТЕЛЬ НА СТРУКТУРУ
3245 Z=1
3250 IF T$(1)=FO$(101) THEN Z=101
3255 E=Z+99: REM ПОСЛЕДНИЙ АДРЕС В ОБЛАСТИ СТРУКТУРЫ
3260 REM ПОИСК ПЕРВОГО СВОБОДНОГО МЕСТА ДЛЯ РАЗМЕЩЕНИЯ ОБЪЕКТА
3265 FOR I=Z TO E
3270 IF FO$(I)="" THEN GOTO 3280
3275 NEXT I
3280 REM ЗАПИСЬ ИМЕНИ ОБЪЕКТА
3285 L=I: FO$(L)=T$(2): L=L+1: REM ЗАПИСЬ ИМЕНИ ОБЪЕКТА
3290 REM ПОЛУЧИТЬ ЧИСЛО АТРИБУТОВ
3295 N=VAL(T$(3)): FO$(L)=T$(3): L=L+1: REM ЗАПОМНИТЬ НОМЕР
3300 E=L+N-1: REM АДРЕС ПОСЛЕДНЕГО АТРИБУТА
3305 Х=4: REM АДРЕС ПОСЛЕДНЕГО АТРИБУТА
3310 FOR I=L TO E
3315 FO$(I)=T$(K): K=K+1
3320 NEXT I
3325 RETURN
3400 REM ****** ПЕЧАТЬ АТРИБУТОВ СТРУКТУРЫ
3405 REM T$(1) — ИМЯ СТРУКТУРЫ
3410 REM АДРЕС ПОСЛЕДНЕГО АТРИБУТА
3415 Z=1
3420 IF T$(1)=FO$(101) THEN Z=101
3425 PRINT "СТРУКТУРА ";T$(1): Z=Z+1
3430 PRINT "ЧИСЛО АТРИБУТОВ =";FO$(Z)
3435 N=VAL(FO$(Z)): Z=Z+1
3440 E=Z+N-1
3445 K=1: REM НОМЕР АТРИБУТА
3450 FOR I=Z TO E
3455 PRINT "НОМЕР АТРИБУТА"; К; "-"; FD(I)
3460 K=K+1
3465 NEXT I
3470 RETURN
3600 REM ПОИСК НОМЕРА АТРИБУТА В ОБЪЕКТЕ
3603 REM Z=I НОМЕР АТРИБУТА, А=0 ЕСЛИ НЕТ * И А=1, ЕСЛИ * ЕСТЬ
3605 REM ИМЯ СТРУКТУРЫ Т$(1)
3610 REM ...РЕЗЕРВ
3615 REM ИМЯ АТРИБУТА Т#(3)
3630 REM УКАЗЫВАЕТ НА СТРУКТУРУ
3635 Z=1
3640 IF T$(1)=FO$(101) THEN Z=101
3645 Z=Z+2: N=1: REM НАЧАЛО ПОИСКА
3650 IFT$(3)=FO$(Z) THEN GOTO 3665
3655 Z=Z+1 :N=N+1
3660 GOTO 3650: REM ЕЩЕ ПОПЫТКА
3665 REM 1:СТЬ ЛИ В АТРИБУТЕ *
3670 А=0: Z=Z-1: REM УКАЗЫВАЕТ НА ПОЛОЖЕНИЕ *
3675 IF FO$(Z)="*" THEN A=1
3680 Z=N+1: RETURN
3800 REM *********** УКАЗАТЬ ОБЪЕКТ
3810 REM T$(1) — ИМЯ СТРУКТУРЫ
3815 RI;M TS(2) — ИМЯ ОБЪЕКТА
3820 Z=1
3825 IF T$(l)=FO$(101) THEN Z=101
3830 REM ЧИСЛО АТРИБУТОВ СТРУКТУРЫ
3835 Z=Z+1: N=VAL(FO$(Z))
3840 Z=Z+N+1: REM ПЕРВЫЙ ОБЪЕКТ В СТРУКТУРЕ
3845 REM СВОБОДНОЕ МЕСТО РАЗМЕЩЕНИЯ ОБЪЕКТА 7
3850 IF FOS(Z) "" THEN GOTO 3865
3855 REM ПОИСК МЕСТА, ЗАНЯТОГО ОБЪЕКТОМ
3860 Z=Z+1: GOTO 3850
3865 REM ПОЛУЧИТЬ ЧИСЛО АТРИБУТОВ ОБЪЕКТА
3870 Z=Z+1: N=VAL(FO$(Z): Z=Z+1:
3S71 REM УКАЗАТЕЛЬ УСТАНОВИТЬ НА ИМЯ ОБЪЕКТА
3875 REM ЭТО ОБЪЕКТ ?
3880 IF Т$(2) = FO$(Z) THEN RETURN: REM Z — АДРЕС ОБЪЕКТА
3885 REM СЛЕДУЮЩИЙ ОБЪЕКТ
3890 Z=Z+N+2: GOTO 3880
4000 REM ******** ПРОСМОТР ОБЪЕКТА
4005 REM T$(1) — ИМЯ СТРУКТУРЫ
4010 REM T$ (2) — ИМЯ ОБЪЕКТА
4015 REM T$(1) —ИМЯ СТРУКТУРЫ
4010 РЕМ Т$(2) —ИМЯ ОБЪЕКТА
4020 REM Z-ЗНАЧЕНИЕ УКАЗАТЕЛЯ ОБЪЕКТА
4025 GOSUB 3800
4030 PRINT "ОБЪЕКТ ="; FO$ (Z) : Z=Z+1
4035 PRINT "ЧИСЛО АТРИБУТОВ ="; FO$(Z): Z=Z+1
4040 E=Z+N-1:P=1
4045 FOR I=Z TO E
4050 PRINT "АТРИБУТ НОМЕР "; Р; "РАВЕН ";FO$(I): P=P+1
4055 NEXT I
4060 RETURN
4200 REM ******* ПЕЧАТЬ ИМЕН ВСЕХ ОБЪЕКТОВ
4205 REM ИМЯ СТРУКТУРЫ Т$ (1)
4210 REM УКАЗАТЕЛЬ НА СТРУКТУРУ
4215 Z=1
4220 IF T$(1)=FO$(101) THEN Z=101
4225 E=Z+99: REM КОНЕЦ МАССИВА СТРУКТУР
4230 REM ЧИСЛО АТРИБУТОВ СТРУКТУРЫ
4235 Z=Z+1: N=VAL(FO$(Z))
4240 REM ПОЛУЧЕНИЕ ЧИСЛА АТРИБУТОВ ОБЪЕКТА
4245 Z=Z+N+2: N=VAL(FO$(Z)): Z=Z-1:REM ПЕРВЫЙ ОБЪЕКТ
4250 FOR I=Z TO E STEP N+2
4255 IF FO$(I) "" THEN PRINT "ИМЯ ОБЪЕКТА — ";FO$(I)
4260 NEXT I
4265 RETURN
4400 REM ********* ПЕЧАТЬ ИМЕН ВСЕХ СТРУКТУР
4405 PRINT "СТРУКТУРА"
4410 PRINT FO$(1)
4415 PRINT FO$(101)
4420 RETURN
4600 REM ******** УДАЛИТЬ ОБЪЕКТ
4605 REM T$(1) — ИМЯ СТРУКТУРЫ
4610 REM T$(2) — ИМЯ ОБЪЕКТА
4615 REM Z-АДРЕС ОБЪЕКТА, N- ЧИСЛО АТРИБУТОВ
4620 GOSUB 3800
4625 E=Z+N+2: REM КОНЕЦ РАЗМЕЩЕНИЯ ОБЪЕКТОВ
4630 FOR I=Z TO E
4635 FO$ (I)=""
4640 NEXT I
4645 RETURN
4800 REM ******** НАЙТИ АТРИБУТ ОБЪЕКТА
4805 REM T$ (1) — ИМЯ СТРУКТУРЫ
4810 REM T$(2) — ИМЯ ОБЪЕКТА
4815 REM T$(3) — ИМЯ АТРИБУТА
4820 REM ОПРЕДЕЛИТЬ НОМЕР АТРИБУТА ПО АДРЕСУ (Z),
4821 REM ЕСЛИ АТРИБУТ=* А=1
4825 GOSUB 3600 : AN=Z
4830 REM ОПРЕДЕЛИТЬ АДРЕС ОБЪЕКТА (Z)
4835 GOSUB 3800
4840 REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА
4845 Z=Z+AN-1
4850 RETURN
5000 REM ********* ПРИСВОИТЬ ЗНАЧЕНИЕ АТРИБУТУ ОБЪЕКТА
5005 REM T$(1) — ИМЯ СТРУКТУРЫ
5010 REM Т$(2) — ИМЯ ОБЪЕКТА
5015 REM T$(3) — ИМЯ АТРИБУТА
5020 REM T$(4) — ЗНАЧЕНИЕ
5025 REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА ОБЪЕКТА (Z)
5030 GOSUB 4800
5035 REM ЗАПИСАТЬ ЗНАЧЕНИЕ В АТРИБУТ, ЕСЛИ НЕТ *, А=0
5040 IF A=0 THEN GOTO 5060: REM * НЕТ
5045 REM * — ВЫЗОВ ПОДПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ
5050 Z=Z+1: N=VAL(FO$(Z): ON N GOSUB 10000
5055 Z=Z-1 : FO$ (Z)=T$ (4): RETURN: REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА
5060 Z=Z+1: FO$(Z)=T$(4)
5065 RETURN
5200 REM ********* СКОПИРОВАТЬ АТРИБУТ ОБЪЕКТА В Z$
5005 REM T$ (1) — ИМЯ СТРУКТУРЫ
5010 REM T$ (2) — ИМЯ ОБЪЕКТА
5015 REM T$ (3) —ИМЯ АТРИБУТА
5020 REM T$ (4) —ЗНАЧЕНИЕ
5225 REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА ОБЪЕКТА
5230 GOSUB 4800
5235 Z$=FO$(Z)
5240 IF A=0 THEN GOTO 5260: REM * НЕТ
5245 REM * — ВЫЗОВ ПОДПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ
5255 Z$=FO$(Z): RETURN: REM ОПРЕДЕЛИТЬ АДРЕС АТРИБУТА
5260 Z=Z+1: Z$=FO$(Z)
5265 RETURN
9000 REM ПРОГРАММА ПРОВЕРКИ НАПРЯЖЕНИЯ
9002 REM ПРОВЕРКА НАПРЯЖЕНИЯ, ВЫБИРАЕМОГО ФУНКЦИЕЙ RND(X),
9004 REM НА ПСЕВДОВРЕМЕННЫХ ИНТЕРВАЛАХ (ЦИКЛ FOR QB)
9020 Т$(1)=" " : Т$(2)="": Т$(3)="ВРЕМЯ": Т$(4)="5"
9040 FOR QA=1 TO 30: GOSUB 5000
9060 FOR QB=1 TO 1000: NEXT QB: REM ПСЕВДОВРЕМЯ ЗАДЕРЖКИ
9080 NEXT QA: RETURN
9999 REM ************* ПРОГРАММА ПОЛЬЗОВАТЕЛЯ *********
10000 QQ=RND(Z): IF QQ 0.7 THEN PRINT "НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО"; QQ
10005 RETURN

Пример работы программы

RUN
 ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2—СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8— СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9 — ПРОВЕРИТЬ ПСЕВДОНАПРЯЖЕНИЕ
? 1

ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? НАПРЯЖЕНИЕ
ВВЕДИТЕ ЧИСЛО АТРИБУТОВ ? 2
АТРИБУТ 1 ? *
АТРИБУТ 2 ? ВРЕМЯ

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9 — ПРОВЕРИТЬ ПСЕВДОНАПРЯЖЕНИЕ
? 2

ВВЕДИТЕ ИМЯ СТРУКТУРЫ ? НАПРЯЖЕНИЕ
ВВЕДИТЕ ИМЯ ОБЪЕКТА ? ОБОРУДОВАНИЕ
ВВЕДИТЕ ЧИСЛО АТРИБУТОВ ? 2
АТРИБУТ 1 ? 9:00
АТРИБУТ 2 ? 1

ВВЕДИТЕ НУЖНЫЙ НОМЕР
1 — СОЗДАТЬ СТРУКТУРУ
2 — СОЗДАТЬ ОБЪЕКТ
3 — ВЫВЕСТИ ИМЕНА ВСЕХ СТРУКТУР
4 — ВЫВЕСТИ ИМЕНА ВСЕХ ОБЪЕКТОВ
5 — ПРОСМОТРЕТЬ СТРУКТУРУ
6 — ПРОСМОТРЕТЬ ОБЪЕКТ
7 — ПРИСВОИТЬ ЗНАЧЕНИЕ ОБЪЕКТУ
8 — СКОПИРОВАТЬ ЗНАЧЕНИЕ АТРИБУТА В ПЕРЕМЕННУЮ
9 — ПРОВЕРИТЬ ПСЕВДОНАПРЯЖЕНИЕ
? 9

НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .767173
НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .8798876
НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .8236365
НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .9229655
НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .8604398
НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .8269814
НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .7464719
НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .7312078
НАПРЯЖЕНИЕ СЛИШКОМ ВЕЛИКО= .9698101


Часть 4 "Создание ПО развитых систем ИИ". Глава 13

ГЛАВА 13

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ
ЭКСПЕРТНЫЕ СИСТЕМЫ

Объектно-ориентированный подход используется и при разработке экспертных систем. В качестве примера рассмотрим разработку экспертной системы, определяющей, нужно ли эвакуировать расположенный у реки город при угрозе наводнения. Система будет работать со структурой, описывающей некоторые объекты. На первый взгляд может показаться, что создать такую систему непросто из-за сложности самой задачи, но в дальнейшем вы увидите, что это не так.

Создание структуры

Прежде всего, исходя из задачи, нужно выявить факторы, которые будут использоваться для прогноза. Эти факторы станут атрибутами структуры. Для примера возьмем 4 атрибута, которым согласно нечеткой логике будут присваиваться такие значения, как высокий, теплый и т.д. В качестве атрибутов возьмем наиболее значимые в прогнозировании наводнений факторы.
1. УРОВЕНЬ ВОДЫ. Если уровень воды в реке в черте города высок, существует угроза наводнения. Уровень воды может повышаться за счет стоков дождя и талого снега.
2. ДОЖДЬ. Если ожидаются обильные дожди и уровень воды высок, то есть вероятность наводнения. Если дождей не ожидается, то в предсказании наводнений этот фактор не учитывается.
3. ТЕМПЕРАТУРА. Если предсказана теплая погода и с гор в реку стаяло много снега, а уровень воды в реке высок, есть опасность наводнения.
4. СНЕГ. В расчет принимается количество снега в горах. Таяние снега может вызвать дополнительный сток воды в реку и повысить опасность наводнения. Если в горах мало снега, то этот фактор менее важен при прогнозировании наводнений, чем ТЕМПЕРАТУРА и ДОЖДЬ.
Пусть структура называется НАВОДНЕНИЕ. Запишем функцию создания этой структуры:

СОЗДАТЬ-СТРУКТУРУ(ИМЯ-СТРУКТУРЫ=НАВОДНЕНИЕ,
ЧИСЛО-АТРИБУТОВ=4,
АТРИБУТ=УРОВЕНЬ ВОДЫ,
АТРИБУТ=ДОЖДЬ,
АТРИБУТ=ТЕМПЕРАТУРА,
АТРИБУТ=СНЕГ)

Создание объекта

При создании объекта берутся значения факторов на определенный день, скажем на 1 апреля 1985 г. Предположим, объекты создаются метеослужбой для двух 'городов, расположенных на одной реке, - Ривер-Сити и Редвуд-Сити. Объекты именуются так же, как и города: РИВЕР-СИТИ и РЕДВУД-СИТИ. Запишем функцию создания объектов:

СОЗДАТЬ-ОБЪЕКТ(ИМЯ-СТРУКТУРЫ=НАВОДНЕНИЕ,
ИМЯ-ОБЪЕКТА=РИВЕР-СИТИ,
УРОВЕНЬ ВОДЫ=ВЫСОКИЙ,
ДОЖДЬ=ОБИЛЬНЫЙ,
ТЕМПЕРАТУРА=ВЫСОКАЯ,
СНЕГ=МНОГО)

Итак, 1 апреля 1985г. в Ривер-Сити были обильные дожди, жаркая погода, в горах много снега, уровень воды в реке высокий.

СОЗДАТЬ-ОБЪЕКТ(ИМЯ-СТРУКТУРЫ=НАВОДНЕНИЕ,
ИМЯ-ОБЪЕКТА=РЕДВУД-СИТИ,
УРОВЕНЬ ВОДЫ=НИЗКИЙ,
ДОЖДЬ=НЕТ,
ТЕМПЕРАТУРА=СРЕДНЯЯ,
СНЕГ=МНОГО)

В Редвуд-Сити в этот день было ясно, тепло, в горах много снега, уровень воды в реке низкий.

Построение базы знаний

Как и ранее, представим базу знаний в виде дерева решений, а затем преобразуем его в правила ЕСЛИ-ТО. Дерево решений показано на рис. 13.1.
Преобразовать дерево решений в набор правил, как помнит читатель, можно, проследив все возможные пути, ведущие к логическому выводу. В примере существует только один логический вывод, указывающий, нужно ли эвакуировать город.

Правила

К логическому выводу ведут 9 путей:
1. 1,2,4.
2. 1,2,5,8,11.
3. 1,2,5,8,12,15.
4. 1,2,5,8,12,16.
5.1,2,5,9.
6. 1,3,6,10,13.
7. 1,3,6,10,14.
8. 1,3,6,7.
9. 1,3,7.

13_1.gif (9534 bytes)

Рис.13.1. Дерево решений для системы прогнозирования наводнений

Для каждого пути можно записать правило. Совокупность всех правил составит базу знаний. Напомним, что при записи правил используются переменные.

1 ЕСЛИ WATER-LEVEL = ВЫСОКИЙ И
RAIN = ОБИЛЬНЫЙ,
ТО
  VILLAGE = ЭВАКУИРОВАТЬ

2 ЕСЛИ WATER-LEVEL = ВЫСОКИЙ И
RAIN = НЕ СИЛЬНЫЙ И
SNOW = МНОГО,
TEMPERATURE = ВЫСОКАЯ,
ТО
  VILLAGE = ЭВАКУИРОВАТЬ

3 ЕСЛИ WATER-LEVEL = ВЫСОКИЙ И
RAIN = НЕ СИЛЬНЫЙ И
SNOW = МНОГО,
TEMPERATURE = СРЕДНЯЯ И
RAIN = УМЕРЕННЫЙ,
ТО
  VILLAGE = УСИЛИТЬ ВНИМАНИЕ

4 ЕСЛИ WATER-LEVEL = ВЫСОКИЙ И
RAIN = НЕТ И
SNOW = МНОГО,
TEMPERATURE = СРЕДНЯЯ И
RAIN = СЛАБЫЙ,
ТО
  VILLAGE = НЕ БЕСПОКОИТЬСЯ

5 ЕСЛИ WATER-LEVEL = ВЫСОКИЙ И
RAIN = НЕ СИЛЬНЫЙ И
SNOW = МАЛО,
ТО
  VILLAGE = НЕ БЕСПОКОИТЬСЯ

6 ЕСЛИ WATER-LEVEL = НЕ ВЫСОКИЙ И
RAIN = СИЛЬНЫЙ И
SNOW = МНОГО,
TEMPERATURE = ВЫСОКАЯ,
ТО VILLAGE = УСИЛИТЬ ВНИМАНИЕ

7 ЕСЛИ WATER-LEVEL = НЕ ВЫСОКИЙ И
RAIN = СИЛЬНЫЙ И
SNOW = МНОГО,
TEMPERATURE = СРЕДНЯЯ,
 ТО VILLAGE = НЕ БЕСПОКОИТЬСЯ

8 ЕСЛИ WATER-LEVEL = HE ВЫСОКИЙ И
RAIN = СИЛЬНЫЙ И
SNOW = МАЛО,
 ТО VILLAGE = НЕ БЕСПОКОИТЬСЯ

9 ЕСЛИ WATER-LEVEL = ВЫСОКИЙ И
RAIN = НЕСИЛЬНЫЙ,
ТО VILLAGE = НЕ БЕСПОКОИТЬСЯ

Использование базы знаний

Для того чтобы проследить применение объектов в правилах, составим таблицу:

Имена атрибутов | Ривер-Сити | Редвуд-Сити
УРОВЕНЬ ВОДЫ | ВЫСОКИЙ | НИЗКИЙ
ДОЖДЬ | ОБИЛЬНЫЙ | НЕТ
ТЕМПЕРАТУРА | ВЫСОКАЯ | СРЕДНЯЯ
СНЕГ | МНОГО | МНОГО

Возьмем для примера первое правило и посмотрим, как при работе с ним используются объекты (помните о переменных !):

 1 ЕСЛИ WATER-LEVEL = ВЫСОКИЙ И
RAIN = ОБИЛЬНЫЙ,
ТО VILLAGE = ЭВАКУИРОВАТЬ

Предположим, что мы хотим знать, надо ли эвакуировать Ривер-Сити. Для того чтобы воспользоваться правилом, всем переменным условия надо присвоить значения, а для этого необходимо располагать информацией об уровне воды в реке и о количестве осадков.
Такая информация уже содержится в объекте РИВЕР-СИТИ, и передать ее в переменные можно с помощью функции КОПИРОВАТЬ. Функции КОПИРОВАТЬ передаются имена структуры, объекта и атрибута. Она находит нужный атрибут, выбирает его значение и заносит его в указанную переменную. Например:

 WATER-LEVEL = КОПИРОВАТЬ (ИМЯ-СТРУКТУРЫ=НАВОДНЕНИЕ, ИМЯ- ОБЪЕКТА =
РИВЕР-СИТИ, УРОВЕНЬ-ВОДЫ)

Подпрограмма, реализующая эту функцию, ищет объект с именем РИВЕР-СИТИ, выбирает значение атрибута УРОВЕНЬ-ВОДЫ (в данном случае ВЫСОКИЙ) и присваивает это значение переменной WATER-LEVEL. Первое условие правила 1 удовлетворяется: “ЕСЛИ WATER-LEVEL=ВЫСОКИЙ”. Теперь надо проверить на истинность второе условие правила - RAIN=ОБИЛЬНЫЙ. Это можно сделать с помощью той же функции:

RAIN = КОПИРОВАТЬ(ИМЯ-СТРУКТУРЫ = НАВОДНЕНИЕ, ИМЯ-ОБЪЕКТА=РИВЕР-СИТИ,
ДОЖДЬ)

Поскольку атрибут ДОЖДЬ объекта РИВЕР-СИТИ имеет значение ОБИЛЬНЫЙ, оно и будет присвоено переменной RAIN. Все условия правила истинны, и, значит, срабатывает часть ТО - нужно эвакуировать город. Подобные операции можно проделать и для Редвуд-Сити. По такой схеме информация передается от объектов в переменные правил, которые затем работают в системе прогноза наводнений.

Прямая и обратная цепочки рассуждений

В прямой и обратной цепочках рассуждений также можно применять объекты. При этом к атрибутам объектов добавляются операции доступа, т.е. используются функции ПРИСВОИТЬ и КОПИРОВАТЬ.
В остальном все сказанное в предыдущих главах о прямой и обратной цепочках рассуждений остается справедливым. Какую же цепочку рассуждений выбрать для данного примера - прямую или обратную ? Как читатель уже, вероятно, догадался, больше подойдет прямая цепочка рассуждений, поскольку, исходя из известных условий, нужно сделать логический вывод. В нашем примере условия - это дождь, снег и т.д. Система проверяет истинность условных частей правил для того чтобы выполнить логический вывод.
Однако даже для этого примера обратную цепочку рассуждений нельзя сбрасывать со счетов. Она может быть полезна, если есть информация об уже происшедшем наводнении. С помощью обратной цепочки рассуждений уточняются условия, которые к нему привели. В этом случае обратная цепочка рассуждений работает так же, как в примерах, обсуждавшихся раньше. Иными словами, по следствию ищутся причины. В системе, реализующей обратную цепочку рассуждений, сначала просматриваются части ТО правил на совпадение с уже известным событием (в последнем примере - наводнением), а уже затем - условные части (ЕСЛИ) правил для выявления условий.
Поиск причин, вызвавших наводнение, с помощью обратной цепочки рассуждений - прекрасный способ настройки системы прогнозирования наводнений, в которой реализована прямая цепочка рассуждений. Уточнение причин даст возможность делать более точные прогнозы на будущее. Обратная цепочка рассуждений используется для выявления причин, прямая - для прогнозирования.


Часть 5 "Более сложные методы ПЗ в системах ИИ". Глава 14

Часть 5 БОЛЕЕ СЛОЖНЫЕ МЕТОДЫ ПРЕДСТАВЛЕНИЯ ЗНАНИЙ В СИСТЕМАХ ИИ

• Представление знаний в задачах с неопределенностями и самообучающихся
системах

•Подробные примеры и тексты программ

ГЛАВА 14

СЕМАНТИЧЕСКИЕ СЕТИ

При разработке экспертных систем для графического представления знаний используются семантические сети. Семантические сети, так же как и деревья решений, состоят из узлов, изображаемых окружностями, и соединяющих их линий со стрелками. Узлы сети обозначают некоторые порции информации, а соединяющие их линии - взаимосвязи между ними.
На рис. 14.1 показана семантическая сеть, графически представляющая базу знаний о птицах и самолетах. Линии указывают на отношения между узлами, содержащими информацию. Например, глядя на рисунок, можно сказать, что узел “двигатель” связан с узлом “бензин” отношением “использует”, т.е. двигатель использует бензин.

Структура и объекты семантических сетей

Один из способов применения семантических сетей - создание объектов. Посмотрим, как это делается на примере семантической сети (рис. 14.1). Прежде всего нужно разработать структуру, описывающую все объекты с общим названием ПТИЦА. Принадлежность объектов структуре ПТИЦА определяется отношением “является”. Этим отношением в структуре связаны объекты ОРЕЛ и СОКОЛ, т.е. так констатируется факт, что орел и сокол - птицы. Все остальные линии (отношения) на рисунке связаны с атрибутами структуры ПТИЦА. Отношением “имеет” в структуре связаны атрибуты КРЫЛЬЯ, ОПЕРЕНИЕ и КЛЮВ. Другими словами, объекты с общим названием ПТИЦА имеют все указанные атрибуты, как это показано на рисунке. Отношением “умеет” в структуре связан атрибут ЛЕТАТЬ, т.е. птицы умеют летать. Атрибут АЭРОДИНАМИЧЕСКИЕ ПРИНЦИПЫ связан в структуре отношением “использует”, т.е. птицы используют аэродинамические принципы. Воспользовавшись описанными атрибутами, создадим структуру ПТИЦА.

СОЗДАТЬ-СТРУКТУРУ (ИМЯ СТРУКТУРЫ = ПТИЦА,
ЧИСЛО АТРИБУТОВ = 5,
АТРИБУТ = КЛЮВ,
АТРИБУТ = ОПЕРЕНИЕ,
АТРИБУТ = КРЫЛЬЯ,
АТРИБУТ = ЛЕТАТЬ,
АТРИБУТ = АЭРОДИНАМИЧЕСКИЕ ПРИНЦИПЫ)

На основе этой структуры можно создать объекты ОРЕЛ и СОКОЛ. Создадим, например, объект ОРЕЛ:

СОЗДАТЬ-ОБЪЕКТ (ИМЯ СТРУКТУРЫ = ПТИЦА,
ИМЯ ОБЪЕКТА = ОРЕЛ,
КЛЮВ = ДЛИННЫЙ,
ОПЕРЕНИЕ = БЛЕДНОЕ,
КРЫЛЬЯ = ШИРОКИЕ,
ЛЕТАТЬ = ВЫСОКО,
АЭРОДИНАМИЧЕСКИЕ ПРИНЦИПЫ = ПЛАНИРОВАНИЕ)

Теперь, применяя имеющиеся объекты, можно сформировать базу знаний, которая поможет нам при ответах на различные вопросы, относящиеся к этим объектам.

Использование семантической сети в системе, основанной на правилах

С помощью семантической сети можно создать базу знаний, хранящую сведения о птицах и самолетах. В дальнейшем ее можно применять для идентификации летающих объектов.
Частью базы знаний, содержащей сведения о птицах и самолетах, могут быть, например, такие правила:

ЕСЛИ АТРИБУТ-ОБЪЕКТА = КЛЮВ,
ТО ЛЕТАЮЩИЙ ОБЪЕКТ = ПТИЦА

ЕСЛИ АТРИБУТ-ОБЪЕКТА = КРЫЛЬЯ,
ТО ЛЕТАЮЩИЙ ОБЪЕКТ = ПТИЦА ИЛИ
ЛЕТАЮЩИЙ ОБЪЕКТ = САМОЛЕТ

ЕСЛИ АТРИБУТ-ОБЪЕКТА = СОКОЛ ИЛИ
АТРИБУТ-ОБЪЕКТА = ОРЕЛ,
ТО ЛЕТАЮЩИЙ ОБЪЕКТ = ПТИЦА

  ЕСЛИ АТРИБУТ-ОБЪЕКТА = ОПЕРЕНИЕ И
АТРИБУТ-ОБЪЕКТА = КРЫЛЬЯ И
АТРИБУТ-ОБЪЕКТА = КЛЮВ,
ТО
ЛЕТАЮЩИЙ ОБЪЕКТ = ПТИЦА

ЕСЛИ ЛЕТАЮЩИЙ ОБЪЕКТ = ПТИЦА,
ТО АТРИБУТ ОБЪЕКТА = ОПЕРЕНИЕ

14_1.gif (8170 bytes)

Рис.14.1. Семантичекая сеть, отражающая взаимоотношения между атрибутами птицы и самолета

Подытожим основные свойства семантических сетей.
1. Семантические сети описывают отношения между объектами, которые задаются узлами сети.
2. Узлы обозначаются окружностями и имеют имена.
3. Отношения между узлами указываются связывающими их линиями.
4. Семантическую сеть можно использовать для создания структур и объектов.
5. Семантическую сеть можно использовать для создания правил базы знаний.

Пример программы

На листинге 14.1 показана написанная на Бейсике программа, работающая с
семантической сетью (рис. 14.2). Эта семантическая сеть только часть сети, показанной на рис. 14.1.

Пояснение к программе

Листинг программы 14.1 можно разделить на 3 функциональные части. Каждая часть иллюстрирует различные аспекты работы с семантической сетью. Например, можно получить все пары узлов, связанные определенным отношением; так, отношением “является” связаны пары СОКОЛ - ПТИЦА и ОРЕЛ - ПТИЦА. Каждый аспект работы с семантической сетью иллюстрируется не более 15 предложениями, написанными на Бейсике.

14_2.gif (3180 bytes)

Рис.14.2. Семантичекая сеть

Семантическая сеть определяется в двух массивах. Первый массив, N$, содержит имена всех узлов, а второй двумерный массив, R$, содержит имена отношений (линий, соединяющих узлы). Значения элементам массивов присваиваются в предложениях 70 и 75 программы в соответствии с рис. 14.3. На этом рисунке дано еще одно представление семантической сети в виде матрицы, более удобное для заполнения массивов N$ и R$.
Программа ведет с пользователем диалог (предложения 300 - 365), предлагая ему выбрать один из пунктов меню.

 | 1.Птица | 2.Сокол | 3.Орел | 4.Крылья | 5.Оперение
1.Птица |  |  |  | имеет | имеет
2.Сокол | является |  |  |  |
3.Орел | является |  |  |  |
4.Крылья |  |  |  |  |
5.Оперение |  |  |  |  |

Рис. 14.3. Матрица отношений R$

ВВЕДИТЕ НУЖНЫЙ НОМЕР:
1 - ПОЛУЧИТЬ ВСЕ УЗЛЫ, СВЯЗАННЫЕ С ОТДЕЛЬНЫМ УЗЛОМ КОНКРЕТНЫМ ОТНОШЕНИЕМ
2 - ПОЛУЧИТЬ ИМЕНА ВСЕХ ОТНОШЕНИЙ ДЛЯ ОТДЕЛЬНОГО УЗЛА
3 - ПОЛУЧИТЬ ВСЕ ПАРЫ УЗЛОВ, СВЯЗАННЫЕ КОНКРЕТНЫМ ОТНОШЕНИЕМ
4 - ВЫХОД
?
 Функции, указанные в меню, реализованы, начиная с предложений программы 1000 , 1100 , 1200 и 1300 соответственно.

Листинг программы

Листинг 14.1

1 REM ********** СЕМАНТИЧЕСКИЕ СЕТИ ********************
5 REM МАССИВ ОТНОШЕНИЙ. МАТРИЦА ИМЕН СОЕДИНЯЮЩИХ УЗЛЫ ЛИНИЙ
10 DIM R$(10,10)
15 REM МАССИВ ИМЕН УЗЛОВ
20 DIM N$(10)
25 REM ИНИЦИАЛИЗАЦИЯ МАССИВОВ ОТНОШЕНИЙ И ИМЕН УЗЛОВ
30 FOR I=l TO 10
35 FOR J=1 TO 10
40 R$(I,J)="":N$(I)=""
45 NEXT J
50 NEXT I
55 REM В ЭТОЙ ЧАСТИ ПРОГРАММЫ ЭЛЕМЕНТАМ МАССИВОВ ИМЕН УЗЛОВ
60 REM И ОТНОШЕНИЙ ПРИСВАИВАЮТСЯ ЗНАЧЕНИЯ, НО ПРОГРАММИСТ МОЖЕТ
65 REM ЗАМЕНИТЬ ЭТИ ПРЕДЛОЖЕНИЯ НА ПРЕДЛОЖЕНИЯ ВВОДА ДАННЫХ
69 REM ****** СЕМАНТИЧЕСКАЯ СЕТЬ ******
70 N$(1)="ПTИЦA":N$(2)="COKOЛ":N$(3)="OPEЛ":N$(4)="KPЫЛЬЯ"
71 N$(5)="ОПЕРЕНИЕ":R$(2,1)="ЯВЛЯЕТСЯ"
75 R$(3,1)="ЯВЛЯЕТСЯ":R$(1,4)="ИМЕЕТ":R$(1,5)="ИМЕЕТ"
299 REM **************************************************
300 PRINT "ВВЕДИТЕ НУЖНЫЙ НОМЕР: "
305 PRINT "1 — ПОЛУЧИТЬ ВСЕ УЗЛЫ, СВЯЗАННЫЕ С ОТДЕЛЬНЫМ"
306 PRINT " УЗЛОМ КОНКРЕТНЫМ ОТНОШЕНИЕМ"
310 PRINT "2 — ПОЛУЧИТЬ ИМЕНА ВСЕХ ОТНОШЕНИЙ ДЛЯ ОТДЕЛЬНОГО УЗЛА"
315 PRINT "3 — ПОЛУЧИТЬ ВСЕ ПАРЫ УЗЛОВ, СВЯЗАННЫЕ КОНКРЕТНЫМ ОТНОШЕНИЕМ"
325 PRINT "4—ВЫХОД"
360 INPUT N$
365 ON NN$ GOSUB 1000,1100,1200,1300
370 GOTO 300
1000 REM ***** ПОЛУЧЕНИЕ УЗЛОВ, СВЯЗАННЫХ С ОТДЕЛЬНЫМ УЗЛОМ
1005 REM ***** КОНКРЕТНЫМ ОТНОШЕНИЕМ
1010 INPUT "ВВЕДИТЕ ИМЯ УЗЛА";NN$
1015 INPUT "ВВЕДИТЕ ИМЯ ОТНОШЕНИЯ";РМ$
1020 REM ПОИСК НУЖНОГО УЗЛА
1025 FOR I=1 ТО 10
1030 IF NN$ = N$(l) THEN GOTO 1040
1035 NEXT I
1040 REM ДЛЯ УЗЛА НОМЕР I ПОИСК НУЖНОГО ОТНОШЕНИЯ В МАТРИЦЕ
1045 REM ОТНОШЕНИЙ, ОРГАНИЗАЦИЯ ЦИКЛА ПО J
1050 FOR J=1 TO 10
1055 IF R$(I,J)=RM$ THEN PRINT N$(J)
1060 NEXT J
1065 RETURN
1100 REM ****** ПОЛУЧЕНИЕ ИМЕН ВСЕХ ОТНОШЕНИЙ ДЛЯ ОТДЕЛЬНОГО УЗЛА
1110 INPUT "ВВЕДИТЕ ИМЯ УЗЛА":NN$
1115 REM ПОИСК СТРОКИ В МАТРИЦЕ ОТНОШЕНИЙ, СОДЕРЖАЩИЙ НУЖНОЕ ИМЯ
1120 FOR I=1 ТО 10
1125 IF NN$=N$(I) THEN GOTO 1135
1130 NEXT I
1135 REM ПЕЧАТЬ ВСЕХ ОТНОШЕНИЙ И ИМЕН УЗЛОВ
1140 FOR J=1 ТО 10
1145 IF R$(I,J)="" THEN GOTO 1155
1150 PRINT N$(J);"";R$(I,J)1155 NEXT J
1160 RETURN
1200 REM ****** ПОЛУЧЕНИЕ ВСЕХ ПАР УЗЛОВ, СВЯЗАННЫХ КОНКРЕТНЫМ
1201 REM ****** ОТНОШЕНИЕМ
1205 INPUT "ВВЕДИТЕ ИМЯ ОТНОШЕНИЯ";РМ$
1210 FOR I=1 ТО 10
1215 FOR J=1 TO 10
1220 IF R$(I,J)= RM$ THEN PRINT N$(I);" <<;N$(J)
1225 NEXT J
1230 NEXT I
1235 RETURN
1400 REM ****** ВЫХОД
1405 STOP
Пример работы программы

RUN ВВЕДИТЕ НУЖНЫЙ НОМЕР:
1 — ПОЛУЧИТЬ ВСЕ УЗЛЫ, СВЯЗАННЫЕ С ОТДЕЛЬНЫМ УЗЛОМ КОНКРЕТНЫМ
ОТНОШЕНИЕМ
2 — ПОЛУЧИТЬ ИМЕНА ВСЕХ ОТНОШЕНИЙ ДЛЯ ОТДЕЛЬНОГО УЗЛА
3 — ПОЛУЧИТЬ ВСЕ ПАРЫ УЗЛОВ, СВЯЗАННЫЕ КОНКРЕТНЫМ ОТНОШЕНИЕМ
4—ВЫХОД
? 1
ВВЕДИТЕ ИМЯ УЗЛА ? ПТИЦА
ВВЕДИТЕ ИМЯ ОТНОШЕНИЯ ? ИМЕЕТ
КРЫЛЬЯ
ОПЕРЕНИЕ

ВВЕДИТЕ НУЖНЫЙ НОМЕР:
1 — ПОЛУЧИТЬ ВСЕ УЗЛЫ, СВЯЗАННЫЕ С ОТДЕЛЬНЫМ УЗЛОМ КОНКРЕТНЫМ ОТНОШЕНИЕМ
2 — ПОЛУЧИТЬ ИМЕНА ВСЕХ ОТНОШЕНИЙ ДЛЯ ОТДЕЛЬНОГО УЗЛА
3 — ПОЛУЧИТЬ ВСЕ ПАРЫ УЗЛОВ, СВЯЗАННЫЕ КОНКРЕТНЫМ ОТНОШЕНИЕМ
4 — ВЫХОД
? 1
ВВЕДИТЕ ИМЯ УЗЛА ? ОРЕЛ
ВВЕДИТЕ ИМЯ ОТНОШЕНИЯ ? ЯВЛЯЕТСЯ
ПТИЦА

ВВЕДИТЕ НУЖНЫЙ НОМЕР:
1 — ПОЛУЧИТЬ ВСЕ УЗЛЫ, СВЯЗАННЫЕ С ОТДЕЛЬНЫМ УЗЛОМ КОНКРЕТНЫМ
ОТНОШЕНИЕМ
2 — ПОЛУЧИТЬ ИМЕНА ВСЕХ ОТНОШЕНИЙ ДЛЯ ОТДЕЛЬНОГО УЗЛА
3— ПОЛУЧИТЬ ВСЕ ПАРЫ УЗЛОВ, СВЯЗАННЫЕ КОНКРЕТНЫМ ОТНОШЕНИЕМ
4 — ВЫХОД
? 2
ВВЕДИТЕ ИМЯ УЗЛА ? ПТИЦА
КРЫЛЬЯ ИМЕЕТ
ОПЕРЕНИЕ ИМЕЕТ

Самое главное при работе программы - найти только отношения, соответствующие дугам, выходящим из узла, а отношения “является” для узла ПТИЦА соответствуют линиям, входящим в него от узлов СОКОЛ и ОРЕЛ.

ВВЕДИТЕ НУЖНЫЙ НОМЕР:
1 — ПОЛУЧИТЬ ВСЕ УЗЛЫ, СВЯЗАННЫЕ С ОТДЕЛЬНЫМ УЗЛОМ КОНКРЕТНЫМ
ОТНОШЕНИЕМ
2 — ПОЛУЧИТЬ ИМЕНА ВСЕХ ОТНОШЕНИЙ ДЛЯ ОТДЕЛЬНОГО УЗЛА
3 — ПОЛУЧИТЬ ВСЕ ПАРЫ УЗЛОВ, СВЯЗАННЫЕ КОНКРЕТНЫМ ОТНОШЕНИЕМ
4 — ВЫХОД
? 3
 ВВЕДИТЕ ИМЯ ОТНОШЕНИЯ ? ИМЕЕТ
ПТИЦА КРЫЛЬЯ
ПТИЦА ОПЕРЕНИЕ


Часть 5 "Более сложные методы ПЗ в системах ИИ". Глава 15

ГЛАВА 15

КОЭФФИЦИЕНТЫ УВЕРЕННОСТИ

Коэффициенты уверенности (КУ) используются в области математики, называемой нечёткой логикой. Поскольку эвристические правила ЕСЛИ-ТО основываются исключительно на человеческом опыте, с полной определенностью никогда нельзя сказать, что они верны. Пользователь экспертной системы также не может быть полностью уверен, что значения, которые он присваивает переменным, абсолютно корректны. Например, правило:

ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ = ПАДАЮТ И НАЛОГИ УМЕНЬШАЮТСЯ,
ТО УРОВЕНЬ ЦЕН НА БИРЖЕ = РАСТЕТ

верно не всегда, поэтому можно приписать ему значение некоторого коэффициента уверенности. КУ может иметь значение от -1 до 1. Отрицательное значение КУ показывает степень уверенности в том, что правило не верно, а положительное значение - что правило верно. Таким образом, КУ, равный +1, указывает на полную уверенность в том, что правило верно, а -1 - на полную уверенность в некорректности правила. Конечно, правила, для которых КУ равно -1, рассматривать нет смысла.
Пусть приведенное правило имеет КУ, равный 0,9, и нельзя утверждать, что процентные ставки падают, т.е. первому условию правила назначен КУ, равный 0,6. Кроме того, допустим, что налоги колеблются (то увеличиваются, то уменьшаются), поэтому предположить уменьшение налогов можно, только если КУ равен 0,8. Тогда правило можно записать так:

ЕСЛИ ПРОЦЕНТНЫЕ СТАВКИ = ПАДАЮТ (КУ = 0.6) И
НАЛОГИ УМЕНЬШАЮТСЯ (КУ=0.8),
ТО УРОВЕНЬ ЦЕН НА БИРЖЕ = РАСТЕТ (КУ правила = 0.9)

Коэффициент уверенности, что уровень цен на бирже будет расти может быть подсчитан следующим образом: выбирается минимальный КУ для условий части ЕСЛИ правила, разделенных логическим оператором И, и умножается на КУ для всего правила. Для приведенного примера:

(minimum (0.6, 0.8)) *0.9 " 0.6*0.9 = 0.54

Следовательно, при КУ = 0,54 можно сказать, что уровень цен на бирже будет падать. Если есть еще одно правило с тем же логическим выводом о росте уровня цен на бирже, но другим набором условий, то КУ для этого вывода нужно выбрать максимальным из КУ для вывода первого правила и КУ для вывода второго правила. На первый взгляд все это кажется очень сложным, поэтому разберем пример.
Прежде всего сформулируем общие принципы.
1. Выбрать максимальное значение КУ из КУ для условий правила, разделенных логическим оператором И.
2. Если в правиле есть оператор ИЛИ, выбрать максимальное значение из КУ для всех условий правила, разделенных оператором И для всех условий, связанных оператором ИЛИ.
3. Умножить выбранный КУ на КУ правила.
4. Если существует несколько правил с одинаковым логическим выводом, выбрать из всех полученных КУ максимальный.
Рассмотрим два правила с одним и тем же логическим выводом С:

ЕСЛИ А (КУ=0.З) И В (КУ=0.6),
 ТО С (КУ=0.5)
 ЕСЛИ D (КУ=0,4) И Е (КУ=0.7),
 ТО С (КУ=0.9)

В приведенных правилах КУ для логического вывода С подсчитывается следующим образом:

maximum ((minimum (0.3,0.6) *0.5),
(minimum (0.4,0.7) *0.9))
= maximum ((03*0.5), (0.4*0.9))
= maximum (0.15,0.36)
= 0.36

Возьмем пример с использованием логического оператора ИЛИ:

ЕСЛИ А (КУ-0.3) И
В (КУ-0.6) ИЛИ
D (КУ-0.5),
ТО С (КУ-0.4)

 В этом примере КУ для логического вывода С считается так:

maximum (minimum (0.3,0.6), 0.5) *0.4
= maximum (0.3,0.5) *0.4
=0.5*0.4=0.2

Граничные значения коэффициента уверенности

Во многих случаях изначально заданы граничные значения коэффициента уверенности. Логический вывод считается верным только в том случае, если его КУ превышает заранее заданные граничные значения. Работа с базой знаний продолжается до тех пор, пока значение коэффициента уверенности логического вывода больше граничного значения. В процессе работы выполняются определенные вычисления. Предположим, для частного логического вывода КУ равно 0,4. Это значение запоминается. Затем оно сравнивается с граничным значением КУ (допустим, что оно равно 0,8). Запомненное значение оказалось меньше граничного, и, значит, работа с базой знаний продолжается. Если при работе с базой знаний встретился тот же самый логический вывод, КУ для нового правила умножается на 1 минус значение запомненного ранее КУ и результат прибавляется к запомненному ранее КУ. Значение КУ, равное 1, свидетельствует об абсолютной уверенности в правильности вывода. Затем вновь запомненное значение КУ сравнивается с граничным и если оно больше, выполняется логический вывод, в противном случае, работа с базой знаний продолжается. Вышесказанное можно записать с помощью равенства:

Запомненный КУ = Ранее запомненный КУ+ (1-Ранее запомненный КУ) * КУ нового правила

Например:

Граничное значение КУ = 0,8
Правило: ЕСЛИ А, ТО В (КУ=0,6)
Запомненный КУ: 0,6
Новое правило: ЕСЛИ С,ТО В (КУ=0,7)
Запомненный КУ=0,6+ (1-0,6)*0,7=0,88 (граничные значения превышены, и выполняется вывод).

Пример программы

Ниже показана программа, работающая с коэффициентами уверенности.

Пояснения к программе

Правило, использующееся в программе, приведено в предложениях 20 - 60 и запрограммировано в предложениях 400 - 430. Для каждой переменной условия правила отведен один элемент массива коэффициентов уверенности. Поскольку в правиле 3 переменных условия А,В и С, то в массиве под них отведены элементы CF(1), CF(2) и CF(3). Программа запрашивает у пользователя значения этих переменных и соответствующих им КУ в предложениях 320, 340 и 360. Если пользователь вводит значение КУ, то оно заменяет значение КУ, принятое по умолчанию (предложения 330, 350 и 370). По умолчанию всем КУ присваивается значение 1 (предложения 150-170). Инженер базы знаний может заменить какие-то из этих значений (предложение 190). Значения, принятые по умолчанию, передаются в массив CF в предложениях 230-250. Пользователь также может изменить принятые по умолчанию значения (предложения 320-370). Окончательные вычисления выполняются в предложениях 450-500.

Листинг программы 15.1

10 REM ***** КОЭФФИЦИЕНТЫ УВЕРЕННОСТИ ***************
20 REM РАССМОТРИМ ПРАВИЛО
30 REM ЕСЛИ А = 2 (КУ= 0.6) И
40 REM В = 3 (КУ= 0.3) И
50 REM С = 5(КУ=1),
60 REM ТО D=5 (КУ=0.4)
70 REM ЧИСЛА В СКОБКАХ ПРЕДСТАВЛЯЮТ СОБОЙ ЗНАЧЕНИЯ КУ,
80 REM ПРИСВОЕННЫЕ ЭКСПЕРТОМ ПРИ РАЗРАБОТКЕ ПРАВИЛА.
90 REM ЭТИ ЗНАЧЕНИЯ СЧИТАЮТСЯ ПРИНЯТЫМИ ПО УМОЛЧАНИЮ, НО
100 REM ПОЛЬЗОВАТЕЛЬ МОЖЕТ ИХ ИЗМЕНИТЬ.
110 REM
120 REM МАССИВ CF СОДЕРЖИТ ЗНАЧЕНИЯ КУ, ПРИСВОЕННЫЕ ЭКСПЕРТОМ
130 DIM D(100)
140 REM ИНИЦИАЛИЗАЦИЯ МАССИВА D
150 FOR I=1 ТО 100
160 D(I)=1: REM КУ РАВЕН 1
170 NEXT I
180 REM ************ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ ***********
190 D(1)=.6:D(2)=3
200 REM В НАЧАЛЕ ПРОГРАММЫ УМАЛЧИВАЕМЫЕ ЗНАЧЕНИЯ
210 REM ПЕРЕСЫЛАЮТСЯ В МАССИВ КОЭФФИЦИЕНТОВ УВЕРЕННОСТИ
220 DIM CF( 100)
230 FOR I=1 ТО 100
240 CF(I)=D(I)
250 NEXT I
260 REM ************ ПРИСВОЕНИЕ ЗНАЧЕНИЙ ПЕРЕМЕННЫМ
270 PRINT "ДЛЯ КАЖДОЙ ПЕРЕМЕННОЙ ВВЕДИТЕ ЗНАЧЕНИЯ, "
280 PRINT "ЗАТЕМ ЗАПЯТУЮ И ПО ЖЕЛАНИЮ ЗНАЧЕНИЕ КУ"
290 PRINT "ИЛИ О ДЛЯ ТОГО, ЧТОБЫ ИСПОЛЬЗОВАТЬ"
300 PRINT" ЗНАЧЕНИЕ КУ, ПРИНЯТОЕ ПО УМОЛЧАНИЮ"
З10 REM ПРАВИЛО БУДЕТ ИСПОЛЬЗОВАТЬ ПЕРВЫЕ 3 ЭЛЕМЕНТА МАССИВА CF
320 INPUT "ПЕРЕМЕННАЯ А=";А,С1
330 IF C10 THEN CF(l)=C1
340 INPUT "ПЕРЕМЕННАЯ B=";B,Cl
350 IF C10 THEN CF(2)=C1
360 INPUT "ПЕРЕМЕННАЯ С=";С,С1
370 IF Cl 0 THEN CF(3)=C1
380 EX=0:REM ФЛАГ ВЫПОЛНЕНИЯ, ЕСЛИ EX=1,
381 REM ВЫЧИСЛЯЕТСЯ ЧАСТЬ ТО И КУ
390 IF (A=2) AND (B=3) AND (C=5) THEN EX=1
400 IF EX=0 THEN GOTO 500
410 REM ВЫПОЛНЕНИЕ ПРАВИЛА
420 D=5:PRINT "ПОЛУЧЕННОЕ ЗНАЧЕНИЕ D=";D
430 REM ВЫЧИСЛЕНИЕ КУ ДЛЯ ПРАВИЛА
440 REM КУ (CF) =(MINIMUM CF( 1) ,CF(2) ,CF(3) )*0.4
450 X=CF(1)
460 PRINT "КУ(1)=";СР(1);"КУ(2)=";СР(2);"КУ(3)=";СР(3)
470 IF CF(2) THEN X=CF(2)
480 IF CF(3) THEN X=CF(3)
490 CF=X*.4:PRINT"KУ= ";CF:STOP
500 PRINT "**** ПРАВИЛО НЕ РАБОТАЕТ ":STOP

Пример выполнения программы

RUN
 ДЛЯ КАЖДОЙ ПЕРЕМЕННОЙ ВВЕДИТЕ ЗНАЧЕНИЯ,
ЗАТЕМ ЗАПЯТУЮ И ПО ЖЕЛАНИЮ ЗНАЧЕНИЕ КУ
ИЛИ 0 ДЛЯ ТОГО, ЧТОБЫ ИСПОЛЬЗОВАТЬ
 ЗНАЧЕНИЕ КУ, ПРИНЯТОЕ ПО УМОЛЧАНИЮ
ПЕРЕМЕННАЯ А = ? 2,0
 ПЕРЕМЕННАЯ В = ? 3,0
 ПЕРЕМЕННАЯ С = ? 5,0
 ПОЛУЧЕННОЕ ЗНАЧЕНИЕ D = 5
 КУ(1) = 0.6 КУ(2) = 0.3 КУ(3) = 1
КУ = 0.12
Break In 500
Ok

ДЛЯ КАЖДОЙ ПЕРЕМЕННОЙ ВВЕДИТЕ ЗНАЧЕНИЯ,
ЗАТЕМ ЗАПЯТУЮ И ПО ЖЕЛАНИЮ ЗНАЧЕНИЕ КУ
ИЛИ О ДЛЯ ТОГО, ЧТОБЫ ИСПОЛЬЗОВАТЬ
ЗНАЧЕНИЕ КУ, ПРИНЯТОЕ ПО УМОЛЧАНИЮ
ПЕРЕМЕННАЯ А = ? 2,0.4
ПЕРЕМЕННАЯ В = ? 3,0.6
ПЕРЕМЕННАЯ С = ? 5,0
ПОЛУЧЕННОЕ ЗНАЧЕНИЕ D = 5
КУ(1)=0.4 КУ(2)=0.6 КУ(3)=1
КУ = 0.16
Break In 500
Ok

ДЛЯ КАЖДОЙ ПЕРЕМЕННОЙ ВВЕДИТЕ ЗНАЧЕНИЯ,
ЗАТЕМ ЗАПЯТУЮ И ПО ЖЕЛАНИЮ ЗНАЧЕНИЕ КУ
ИЛИ 0 ДЛЯ ТОГО, ЧТОБЫ ИСПОЛЬЗОВАТЬ
ЗНАЧЕНИЕ КУ, ПРИНЯТОЕ ПО УМОЛЧАНИЮ
ПЕРЕМЕННАЯ А = ? 2,0
ПЕРЕМЕННАЯ В = ? 4,0
ПЕРЕМЕННАЯ С = ? 3,0
**** ПРАВИЛО НЕ РАБОТАЕТ
Break in 510
Ok


Часть 5 "Более сложные методы ПЗ в системах ИИ". Глава 16

ГЛАВА 16

САМООБУЧАЮЩИЕСЯ СИСТЕМЫ

Существует много способов обучения человека. Можно излагать ему абстрактные факты или учить на примерах. Если сказать ребенку, что, дотронувшись до горячей плиты, он сильно обожжется, то вряд ли ребенок сделает из этого вывод, что он обязательно обожжется, дотронувшись до любого горячего предмета. Объяснить ребенку, что нельзя дотрагиваться до горячей плиты, можно и другим способом - просто сформулировав общее правило: дотронешься до горячего - обожжешься. Какой бы метод ни использовался при обучении, человек всегда пополняет свои знания, сталкиваясь с чем-то новым. Например, если ребенок еще не понимает, что соприкосновение с горячим предметом приведет к ожогу, и сунул палец в кипяток, то он может, наконец, прийти к нужному выводу. Такая форма приобретения знаний называется обратной связью. Обучение с помощью обратной связи показано на рис. 16.1. Человек, благодаря механизму обратной связи и уже имеющихся знаний, приобретает новые. Следовательно, человек учится на опыте.
Приблизительно также “обучается” компьютерная программа. В нее заложен алгоритм хранения фактов и выполнения логических выводов. Логические выводы связаны в программе с постоянно пополняющими ее новыми фактами. Ниже приводится пример самообучающейся системы, который следует рассматривать исходя из предпосылки:

Система будет самообучаться только в том случае, если она соприкоснулась
с чем-то противоречащим ранее известному

По такому же принципу обучается и человек. В конце концов он изменит свое мнение, если знает или чувствует, что оно ошибочно.

16_1.gif (2349 bytes)

Рис.16.1. Механизм обучения

Пример самообучающейся системы

Рассмотрим систему, которая должна понимать различия между автомобилем и танком. Некоторые свойства, отличающие автомобиль от танка, приведены на рис. 16.2. Танки и автомобили обладают, например, такими признаками:

у танка есть пушка и люк
у автомобиля есть дверца и колеса
у танка и у автомобиля есть кузов

Компьютерную программу можно обучить, объяснив ей разницу только между двумя объектами. Но затем заложенный в нее принцип работы она может распространять на большее число объектов. В программе содержатся 3 списка: в списке 1 хранятся атрибуты автомобиля, в списке 2 - танка, а в списке 3 - атрибуты общие и для танка, и для автомобиля.
Заметим, что система будет работать одинаково независимо от того, о каких объектах пойдет речь. Обучающаяся программа прежде всего запросит у пользователя имена объектов:

ВВЕДИТЕ ИМЯ ОБЪЕКТА 1 ? АВТОМОБИЛЬ
ВВЕДИТЕ ИМЯ ОБЪЕКТА 2 ? ТАНК

 Прежде чем программа приступит к описанию одного из объектов, она запросит ввод его атрибутов:

16_2.gif (2212 bytes)

Рис.16.2. Отличительные черты обьектов

ВВЕДИТЕ АТРИБУТЫ ЛЮБОГО ОБЪЕКТА И ВК В КОНЦЕ
ВВЕДИТЕ АТРИБУТ 1 ? ПУШКА
ВВЕДИТЕ АТРИБУТ 2 ? ЛЮК
ВВЕДИТЕ АТРИБУТ 3 ? КУЗОВ
ВВЕДИТЕ АТРИБУТ 4 ? ВК

Затем программа начинает сравнивать введенные атрибуты с атрибутами первого списка, описывающими автомобиль. Поскольку программа еще ничего не знает об автомобиле, первый список пуст, и результатом сравнения будет оценка нуль, показывающая, что совпадений нет. По тем же причинам и сравнение с атрибутами второго списка, описывающими танк, даст нулевую оценку. Получив нулевую оценку, программа предположит, что введенные атрибуты относятся к списку 1. Она запросит у пользователя подтверждения этого предположения. Пользователь ответит отрицательно, поскольку это атрибуты не автомобиля, а танка. В системе сработает механизм обратной связи, так как предположение оказалось ошибочным. Пользователь сообщил программе, что введенные атрибуты не относятся к автомобилю, и она оставит список 1 пустым. В общий список также ничего не будет занесено, все атрибуты войдут в список 2, где хранятся атрибуты танка. В дальнейшем как только в список 1 будет занесен атрибут, совпадающий с атрибутом списка 2, он будет удален из этих списков и перенесен в общий список. Программа полагает, что совпадающие в списках атрибуты принадлежат общему списку, и выполнит все действия автоматически. После первой операции списки будут иметь вид:

Список 1 (автомобиль) | Список 2 (танк) | Список 3 (общий)
 | ПУШКА ЛЮК КУЗОВ |

Почему бы не разработать систему так, чтобы она сразу помещала атрибуты в правый список, избегая дополнительных действий ? Но именно этим и отличается система, в которую уже заложены все знания, от системы, способной к обучению. В предложенном варианте система ведет себя как человек, а не как машина и должна сама разобраться, куда поместить атрибуты.
Теперь введем атрибуты автомобиля:
 ВВЕДИТЕ АТРИБУТЫ ЛЮБОГО ОБЪЕКТА И ВК В КОНЦЕ
 ВВЕДИТЕ АТРИБУТ 1 ? ДВЕРЦА
ВВЕДИТЕ АТРИБУТ 2 ? КОЛЕСА
ВВЕДИТЕ АТРИБУТ 3 ? КУЗОВ
ВВЕДИТЕ АТРИБУТ 4 ? ВК

 Программа приступит к сравнению введенных атрибутов с атрибутами списка 1 (автомобиль). Результатом сравнения опять будет оценка нуль, поскольку список 1 все еще пуст. Затем при сравнении со списком 2 программа обнаружит совпадение атрибутов КУЗОВ. Список атрибутов танка получит оценку 1. Программа предположит, что речь идет о танке, и запросит подтверждения у пользователя:

ЭТО ТАНК ? НЕТ

Предположение опять оказалось ошибочным, и снова сработает механизм обратной связи. Система увидит, что атрибуты ДВЕРЦА, КОЛЕСА и КУЗОВ не относятся к танку, и поместит атрибут КУЗОВ поскольку он уже есть в списке 2) в общий список, где еще ничего нет. ставшиеся два атрибута будут занесены в список 1, описывающий автомобиль. После этого списки примут вид:

Список 1 (автомобиль) | Список 2 (танк) | Список 3 (общий)
ДВЕРЦЫ | ПУШКА | КУЗОВ
КОЛЕСА | ЛЮК |

Теперь, приступая к диалогу с пользователем, программа будет дать верные предположения, поскольку, получив от пользователя значения атрибутов и используя механизм обратной связи, система научилась различать автомобиль и танк. Еще раз кратко опишем основные шаги обучения системы.
1. Система вносит изменения только в том случае, если встречаются противоречия. Это обеспечивается с помощью механизма обратной связи.
2. Система сравнивает введенные атрибуты с атрибутами, хранящимися в ней, пытаясь их идентифицировать и выбрать наиболее похожие. Для этого используются специальные оценки. Вся работа выполняется с помощью механизма логического вывода.

Пример программы

Рассмотрим пример программы, написанной на Бейсике, который иллюстрирует основные концепции этой главы.

Пояснения к программе

Для списков 1, 2 и 3 в программе (листинг 16.1) отведены массивы LI, L2 и LC соответственно. При инициализации в предложениях от 30 до 50 массивам присваиваются пустые значения. Имена объектов вводятся в предложениях 60 - 70. Атрибуты неизвестного объекта вводятся в предложениях 90 - 130. Самообучающаяся программа пытается идентифицировать объект по этим атрибутам в предложениях со 180 по 220. Идентификация выполняется с помощью некоторой оценки. Оценка получается из сравнения введенных атрибутов с атрибутами каждого объекта. Предполагается, что введенные пользователем атрибуты принадлежат объекту с наивысшей оценкой (предложение 240). При нулевой оценке выбирается объект 1. Если это предположение верно и в списке атрибутов объекта или общем списке введенных атрибутов еще нет, то они заносятся в список объектов. Атрибуты удаляются из списков объектов и заносятся в общий список в предложениях 330-410 для первого объекта и 780-860 для второго. Остальные операции для первого объекта выполняются в предложениях 420- 560, а для второго - в предложениях 920-990.

Листинг программы

Листинг 16.1

1 REM ******* САМООБУЧАЮЩАЯСЯ СИСТЕМА ***********
2 REM ПРОГРАММА ВЫДВИГАЕТ ПРЕДПОЛОЖЕНИЕ ОБ ОБЪЕКТЕ
3 REM ИСХОДЯ ИЗ ВВЕДЕННЫХ АТРИБУТОВ
10 REM БЛОК ИНИЦИАЛИЗАЦИИ ДЛЯ
11 REM СПИСКА ОБЪЕКТА 1 (L1$),
12 REM СПИСКА ОБЪЕКТА 2(L2$) И
13 REM ОБЩЕГО СПИСКА (LC$)
14 REM T$ — ВРЕМЕННЫЙ БУФЕР ДЛЯ ЗНАЧЕНИЙ АТРИБУТА
20 DIM L1$(10),L2$(10),LC$(10),T$(11)
30 FOR I=1 ТО 10
40 L1$(I)="":L2$(I)="":LC$(I)=""
50 NEXT I
60 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА 1";O$
70 INPUT "ВВЕДИТЕ ИМЯ ОБЪЕКТА 2";O2$
80 PRINT "ВВЕДИТЕ АТРИБУТЫ ЛЮБОГО ОБЪЕКТА И ВК В КОНЦЕ"
90 FOR I=l TO 11 :T$(I)="":NEXT
195 FOR I=l TO 11
100 PRINT "ВВЕДИТЕ АТРИБУТ "; I
110 INPUT T$(I)
120 IF T$(I)="" THEN GOTO 140
130 NEXT I
140 REM ЧИСЛО АТРИБУТОВ МЕНЬШЕ НА 1, ТАК КАК БЫЛ ВКЛЮЧЕН 0
150 L=I-1
160 REM СРАВНЕНИЕ АТРИБУТОВ СО СПИСКАМИ ОБЪЕКТОВ 1 И 2
170 REM СНАЧАЛА УСТАНОВИТЬ ОЦЕНКУ ДЛЯ ОБЪЕКТОВ 1 И 2 В 0"
180 S1=0 : S2=0
190 FOR I=l TO L
195 FOR K=1 TO 10
200 IF O1$ (К) =Т$ (I) THEN S1=S1 +1
210 IF O2$(K) =T$(I) THEN S2=S2+1
215 NEXT К
220 NEXT I
230 REM ОБЪЕКТ 2 ПРЕДПОЛАГАЕТСЯ ТОЛЬКО. ЕСЛИ ОЦЕНКА 2 БОЛЬШЕ
231 REM ОЦЕНКИ 1
240 IF SI S2 THEN GOTO 700
250 PRINT "ЭТО "; O1$
260 INPUT "ВЕРНО ? ДА ИЛИ НЕТ"; I$ .
270 IF I$="HET" THEN GOTO 780
290 REM ПОМЕСТИТЬ КАЖДЫЙ АТРИБУТ ВО ВРЕМЕННЫЙ БУФЕР,
300 REM А НЕ В СПИСОК ОБЪЕКТОВ 1 ИЛИ 2 ИЛИ ОБЩИЙ СПИСОК
310 REM ПЕРЕМЕСТИТЬ АТРИБУТ ИЗ СПИСКА 2 В ОБЩИЙ СПИСОК,
320 REM ЕСЛИ ЭТО НЕОБХОДИМО
330 FOR I=l TO L
340 FOR K=1 TO 10
350 IF T$(I) O2$ (К) THEN GOTO 400
360 REM ПЕРЕМЕСТИТЬ АТРИБУТ ИЗ ВТОРОГО СПИСКА В ОБЩИЙ
370 FOR L=1 TO 10
380 IF LC$(L) "" THEN GOTO 390
382 LC$(L)= O2$(K): O2$(K)="":T$(I)=""
390 NEXT L
400 NEXT К
410 NEXT I
420 FOR I=l TO L:REM УКАЗАТЕЛЬ НА ВРЕМЕННЫЙ БУФЕР
430 FOR K=1 ТО 10: REM УКАЗАТЕЛИ НА ОБЩИЙ СПИСОК И СПИСОК
431 REM ОБЪЕКТА 1
440 IF T$(I)=LC$(K) THEN GOT0520: REM ЕСТЬ В ОБЩЕМ СПИСКЕ .
450 IF T$(I)= O1$(K)="":T$(I)="": REM ЕСТЬ В СПИСКЕ ОБЪЕКТА 1
460 NEXT К
470 REM ПОМЕСТИТЬ ПЕРЕМЕННУЮ В СПИСОК 1
480 REM ПОИСК СВОБОДНОГО МЕСТА ПОД ПЕРЕМЕННУЮ
490 FOR K=1 TO 10
495 IF T$(I)="" THEN GOTO 510
500 IF O1$ (К)="" THEN O1$(K)=T$(I):GOTO 520
510 NEXT К
520 NEXT I: REM СЛЕДУЮЩИЙ АТРИБУТ
530 REM ПЕЧАТЬ ВСЕХ СПИСКОВ
540 GOSUB 2000
550 REM СЛЕДУЮЩИЕ АТРИБУТЫ
560 GOTO 80
700 PRINT "ЭТО ";O2$
710 INPUT "BEPHO ДА ИЛИ НЕТ";I$
720 IF I$="HET" THEN GOTO 330
740 REM ПОМЕСТИТЬ КАЖДЫЙ АТРИБУТ ВРЕМЕННОГО БУФЕРА,КОТО-РОГО
750 REM НЕТ В ОБЩЕМ СПИСКЕ И В СПИСКЕ ОБЪЕКТА 2, В СПИСОК 2
760 REM ПЕРЕМЕСТИТЬ СОВПАДАЮЩИЕ АТРИБУТЫ ИЗ СПИСКА 1
770 REM В ОБЩИЙ СПИСОК
780 FOR I=l TO L
790 FOR K=1 ТО 10
800 IF T$(I) O1$ (К) THEN GOTO 850
810 REM ПЕРЕМЕСТИТЬ АТРИБУТ ИЗ СПИСКА 1 В ОБЩИЙ СПИСОК
820 FOR L=l TO 10
830 IF LC$(L) "" THEN GOTO 840
832 LC$(L)=O1$(K):O1$(K)="":T$(I)=""
840 NEXT L
850 NEXT К
860 NEXT I
870 FOR I=l TO L: REM УКАЗАТЕЛЬ НА ВРЕМЕННЫЙ БУФЕР
880 FOR K=1 TO 10: REM УКАЗАТЕЛЬ НА ОБЩИЙ СПИСОК И СПИСОК 2
890 IF T$(I)=LC$(K) THEN GOTO 970: REM ЕСТЬ В ОБЩЕМ СПИСКЕ
900 IF T$(I)=O2$(K) THEN GOTO 970: REM ЕСТЬ В СПИСКЕ 2
910 NEXT К
920 REM ПОМЕСТИТЬ ПЕРЕМЕННУЮ В СПИСОК 2
930 REM ПОИСК СВОБОДНОГО МЕСТА ДЛЯ ПЕРЕМЕННОЙ
940 FOR K=1 TO 10
945 IF T$ (I)="" THEN GOTO 960
950 IF O2$ (К)="" THEN O2$(K)=T$(I):GOTO 970
960 NEXT К
970 NEXT I:REM ОБЩИЙ АТРИБУТ
980 REM ОБЩАЯ ПЕЧАТЬ
990 GOSUB 2000
1000 REM СЛЕДУЮЩИЙ АТРИБУТ
1010 GOTO 80
2000 REM ПЕЧАТЬ ВСЕХ СПИСКОВ
2010 PRINT O1$,O2$,"ОБЩИЙ СПИСОК"
2020 FOR I=l TO 10
2030 PRINT O1$(I),O2$(I),LC$(I)
2040 NEXT I
2050 RETURN

Пример работы программы

RUN
ВВЕДИТЕ ИМЯ ОБЪЕКТА 1 ? АВТОМОБИЛЬ
ВВЕДИТЕ ИМЯ ОБЪЕКТА 2 ? ТАНК

ВВЕДИТЕ АТРИБУТЫ ЛЮБОГО ОБЪЕКТА И ВК В КОНЦЕ
ВВЕДИТЕ АТРИБУТ 1 ? ПУШКА
ВВЕДИТЕ АТРИБУТ 2 ? ЛЮК
ВВЕДИТЕ АТРИБУТ 3 ? КУЗОВ
ЭТО АВТОМОБИЛЬ
ВЕРНО ДА ИЛИ НЕТ ? НЕТ
АВТОМОБИЛЬ ТАНК ОБЩИЙ СПИСОК
 ПУШКА
ЛЮК
КУЗОВ

ВВЕДИТЕ АТРИБУТЫ ЛЮБОГО ОБЪЕКТА И ВК В КОНЦЕ
ВВЕДИТЕ АТРИБУТ 1 ? КУЗОВ
ВВЕДИТЕ АТРИБУТ 2 ? КОЛЕСА
ВВЕДИТЕ АТРИБУТ 3 ? ДВЕРЦЫ
ЭТО ТАНК
ВЕРНО ДА ИЛИ НЕТ ? НЕТ
АВТОМОБИЛЬ ТАНК ОБЩИЙ СПИСОК
КОЛЕСА ПУШКА КУЗОВ
ДВЕРЦЫ ЛЮК

ВВЕДИТЕ АТРИБУТЫ ЛЮБОГО ОБЪЕКТА И ВК В КОНЦЕ
ВВЕДИТЕ АТРИБУТ 1 ? КУЗОВ
ВВЕДИТЕ АТРИБУТ 2 ? ДВЕРЦЫ
ВВЕДИТЕ АТРИБУТ 3 ? ВК
ЭТО АВТОМОБИЛЬ
ВЕРНО ДА ИЛИ НЕТ ? ДА
АВТОМОБИЛЬ ТАНК ОБЩИЙ СПИСОК
КОЛЕСА ПУШКА КУЗОВ
ДВЕРЦЫ ЛЮК


Часть 6 "Языки программирования задач ИИ". Глава 17

Часть 6 ЯЗЫКИ ПРОГРАММИРОВАНИЯ ЗАДАЧ
ИСКУССТВЕННОГО ИНТЕЛЛЕКТА

• Краткое введение в языки программирования PROLOG и LISP

ГЛАВА 17

ЯЗЫК PROLOG

PROLOG - это язык программирования, созданный специально для работы с базами знаний, основанными на фактах и правилах. Название языка представляет собой сокращение английского словосочетания Programming in Logic - логическое программирование. В языке PROLOG реализован механизм возврата для выполнения обратной цепочки рассуждений. Как упоминалось ранее, обратная цепочка рассуждений - это способ рассуждения, при котором предполагается, что некоторые выводы или заключения истинны, а затем эти предположения проверяются в базе знаний, содержащей правила и факты. Если предположение не подтверждается, выполняется возврат, и выдвигается новое предположение.

Концептуальный пример

Для пояснения основных концепций языка PROLOG рассмотрим задачу, решение которой выполним с помощью обратной цепочки рассуждений. Пусть задано правило:

ЕСЛИ мужчина по имени Х со своей матерью по имени М находятся в комнате,
И женщина по имени Y со своей матерью по имени М находятся в комнате,
ТО мужчина по имени Х и женщина по имени Y - брат и сестра

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

Таблица 1 |  | Таблица 2
Имена мужчин | Имена их матерей | Имена женщин | Имена их матерей
Дэниел Ларри Майкл Пит | Диана Лори Бонни Джейн | Энн Лаура Сьюзи | Лори Ширли Бонни

Просмотрев таблицы, можно предположить, что братом и сестрой могут быть:

Ларри и Энн (мать обоих носит имя Лори) и Майкл и Сьюзи (мать обоих носит имя Бонни).

Попробуем представить логику работы программы.
Прежде всего предположим, что часть правила, идущая за словом ТО, верна и действительно существуют мужчина Х и женщина Y, приходящиеся друг другу братом и сестрой. Выполним обратную цепочку рассуждений исходя из истинности такого заключения. Подтвердить истинность заключения можно, доказав истинность каждого из условий, входящих в правило. Первое условие гласит: “Мужчина по имени Х со своей матерью по имени М находятся в комнате”. Сначала попытаемся отыскать имена для мужчины Х и его матери М в табл.1. Это легко сделать, выбрав первую же строчку, т.е. Х присвоим значение “Дэниел”, а М - значение “Диана”:

Мужчина по имени Дэниел со своей матерью по имени Диана находятся в комнате.

Таблица 1 |  | Таблица 2
Имена мужчин | Имена их матерей | Имена женщин | Имена их матерей
Дэниел | Диана | Энн Лаура Сьюзи | Лори Ширли Бонни

Теперь нужно попытаться доказать истинность второго условия правила: “Женщина по имени Y со своей матерью по имени М находятся в комнате”. Но значение Муже выбрано-Диана, и, следовательно, нужно найти в табл. 2 имя женщины, чью мать зовут Диана.
Но имени Диана нет в правой половине табл. 2. Значит, нужно вернуться назад и для первого условия правила отыскать в табл. 1 другие значения для Х и М. Выберем следующую строку с именами Ларри и Лори:

Х = Ларри
М = Лори

Таблица 1 |  | Таблица 2
Имена мужчин | Имена их матерей | Имена женщин | Имена их матерей
Дэниел Ларри | Диана Лори | Энн Лаура Сьюзи | Лори Ширли Бонни

Теперь для подтверждения второго условия правила в табл. 2 нужно найти имя женщины, мать которой носит имя Лори. Из табл. 2 видно, что это Энн:

Y = Энн

Обратившись к части ТО правила, можно заключить, что Ларри и Энн брат и сестра.
Подытожим выполненные действия.
1. В качестве заключения мы взяли часть ТО правила, попытались подтвердить его истинность на основании истинности входящих в правило условий.
2. Подтверждение истинности первого условия.
3. Истинность первого условия определяется значением входящих в него переменных, которые выбираются из первой таблицы.
4. Подтверждение истинности второго условия.
5. Сделать это не удалось, так как во второй таблице не оказалось подходящих данных.
6. Пришлось вернуться назад и попытаться добиться истинности первого условия, а затем и второго с новыми значениями входящих в них переменных.
7. С новыми значениями переменных Х и Y последняя цель была успешно достигнута.
8. Заключение в части ТО правила оказалось истинным при новых выбранных значениях переменных.

Представление правил в языке PROLOG

Выше была продемонстрирована логика работы программы на языке PROLOG. Программа автоматически выполняет поиск информации и обратную цепочку рассуждений, используя механизм возврата. Для работы программы необходимо преобразовать формат правил, входящих в базу знаний, в формат, принятый в языке PROLOG. Между этими форматами существует взаимооднозначное соответствие. Вновь обращаемся к примеру, рассмотренному в гл. 6:

ЕСЛИ DEGREE = НЕТ,
TO POSITION = НЕТ

То же самое правило на языке PROLOG записывается следующим образом:

position(нет):-write('DEGREE'), read(DEGREE), DEGREE = нет.

Операторы read и write служат для обмена данными через терминал пользователя. По оператору write ('DEGREE') на терминал будет выведено слово DEGREE, после чего пользователь может ввести значение переменной DEGREE. Это значение будет введено в переменную по оператору read. Если пользователь введет слово “нет”, последняя часть выражения DEGREE = нет будет иметь значение “истина”.
На этом же примере рассмотрим синтаксис и некоторые свойства языка PROLOG.
1. Полная запись правила на языке PROLOG: position (нет):-write('DEGREE'), read(DEGREE), DEGREE = нет. называется предложением. В языке существует два типа предложений: для записи правил и для записи фактов (предложения для записи фактов будут рассмотрены позднее). Приведенное выше предложение - это предложение для записи правил.
2. Часть предложения языка, соответствующая части ТО правила, записывается слева от знака “:-” и называется заголовком правила:

position (нет):-

3. Часть ЕСЛИ правила в предложении языка записывается справа от знака “:-”: :-wrile('DEGREE'), read(DEGREE), DEGREE = нет. и называется телом предложения.
4. Тело предложения состоит из отдельных частей, разделенных запятыми. Каждая часть в теле предложения называется целью. Запятая, разделяющая цели в предложении, имеет смысл логического И. Тело приведенного выше предложения может быть прочитано следующим образом:

write('DEGREE') И
read (DEGREE) И
DEGREE = нет

Здесь каждая строка - это цель.
5. Все предложения языка PROLOG заканчиваются точкой.
6. Слова, находящиеся до открывающейся левой скобки, т.е. слова position, write и read, называются предикатами. Предикаты всегда начинаются со строчной буквы.
7. Слова, взятые в круглые скобки и идущие следом за именем предиката, называются аргументами. Для предиката position аргументом является слово “нет”. Аргументы могут быть представлены и значениями, и переменными. Аргумент, заданный значением, должен начинаться со строчной буквы, а аргумент, заданный переменной, - с заглавной буквы.
8. Символы “:-” в языке имеют смысл логического ЕСЛИ. Например, предложение qualify (да) :-degree (да) можно прочесть как “qualify имеет значение "да", ЕСЛИ degree имеет значение "да"”.
Вернемся к правилам, рассмотренным в гл.6 в примере о приеме на работу, и переведем их в формат языка PROLOG. Напомним эти правила:

10 ЕСЛИ DEGREE = НЕТ,
ТО POSITION = НЕТ

 20 ЕСЛИ DEGREE = ДА,
ТО QUALIFY = ДА

30 ЕСЛИ DEGREE = ДА И DISCOVERY = ДА,
ТО POSITION = НАУЧНЫЙ СОТРУДНИК

40 ЕСЛИ QUALIFY = ДА И AVERAGE 3.5 И
EXPERIENCE 2,
ТО POSITION = ИНЖЕНЕР ПО ЭКСПЛУАТАЦИИ

50 ЕСЛИ QUALIFY = ДА И AVERAGE 3.5 И
 EXPERIENCE 2,
ТО POSITION = НЕТ

60 ЕСЛИ QUALIFY = ДА И AVERAGE = 3.5 И
 EXPERIENCE 2,
TO POSITION = ИНЖЕНЕР-КОНСТРУКТОР

Запись этих же правил на языке PROLOG будет выглядеть так:

/* 10 */ position(нeт):-write('DEGREE'),
  read(DEGREE),DEGREE=нет.
/* 20 */ qualify(дa):-write('DEGREE'), read(DEGREE), DEGREE =да
/* 30 */ position(научный сотрудник):-write('DEGREE'),
read(DEGREE), DEGREE=да, wrlte('DISCOVERY'),
read(DISCOVERY), DISCOVERY=да.
/* 40 */ роsition(инженер по эксплуатации):-qualify(да),
write('AVERAGE'), read(AVERAGE), AVERAGE <3.5,
write('EXPERIENCE-),read(EXPERIENCE),EXPERIENCE<2.0.
/* 50 */ position(нет):-qualify(да), write('AVERAGE'),
read(AVERAGE), AVERAGE <3.5, write('EXPERIENCE').
read(EXPERIENCE), EXPERIENCE 2.0.
/* 60 */ position(инженер-конструктор):qualiify(да),
write('AVERAGE'), read(AVERAGE), AVERAGE >=3.5.

Для удобства в этой записи сохранена нумерация правил. Номера заключены в пары символов “/*” и “*/” - так в языке PROLOG записываются комментарии. Комментарии служат только для пояснения предложений языка. Еще раз рассмотрим уже известное правило:

ЕСЛИ мужчина по имени Х со своей матерью по имени М находятся в комнате, И
женщина по имени Y со своей матерью по имени М находятся в комнате, ТО
мужчина по имени Х и женщина по имени Y брат и сестра

Используя это правило и факты, собранные в табл.1, напишем программу на языке PROLOG, т.е. в сущности создадим базу знаний:

  /* 1 */ brother-slster(X, Y, М):- male(X,M),
female(Y,M).
/* 2 */
male(дэниел,диана)
/* 3
*/ male(ларри,лори)
/* 4
*/ male(майкл,бонни)
/* 5
*/ male(пит,джейн)
/* 6
*/ female(энн,лори)
/* 7
*/ female(лаура,ширли)
/* 8
*/ female(сьюзи,бонни)

В предикате brother-sister аргументы X, Y, М могут принимать значения имен предполагаемых брата и сестры и их матери соответственно. Предикат male эквивалентен утверждению “X - это имя мужчины, мать которого носит имя М”, а предикат female - утверждению “ Y - это имя женщины, мать которой носит имя М”. Введя эту программу в компьютер, пользователь может приступить к диалогу с ней. PROLOG выдает на терминал символ приглашения к работе “?”, после которого пользователь может ввести:

? - brother-sister(X, Y, М)

Программа попытается подобрать значения для аргументов предиката male (X,M), т.е. имена мужчины и его матери. Первый же предикат male в базе знаний окажется подходящим, и программа выберет факт /* 2 */ male(дэниел,диана). Присвоив Х значение “Дэниел”, а М значение “Диана”, программа попытается присвоить аргументам предиката female (Y,M) такие значения, при которых он истинен. Поскольку М уже имеет значение “Диана”, программа будет просматривать перечень фактов в поисках предиката female (Y,диана). Предикат female содержится в фактах /* 6 */ - /* 8 */, но значения “Диана” в них нет, и, значит, обеспечить истинность female(Y,диана) невозможно. Следовательно, PROLOG воспользуется механизмом возврата. Переменные Х и М будут “деинициализированы”, и программа приступит к поиску новых значений для этих переменных. В соответствии с фактом /* 3 */ male(ларри,лори) переменной Х будет присвоено значение “Ларри”, а переменной М - “Лори”. PROLOG вновь будет пытаться обеспечить истинность выражения female (Y,лори). Просматривая факты, программа дойдет до факта /* 6 */ female (энн,лори), который удовлетворяет нужным требованиям. Переменной Y будет присвоено значение “Энн”, и программа напечатает:

? –Х = Ларри
Y = Энн
М = Лори

Таким образом, будет установлено родство Энн и Ларри, поскольку у них одна и та же мать, носящая имя Лори.

Резюме

В этой главе дано краткое введение в язык PROLOG и приведены два важнейших его свойства - обратная цепочка рассуждений и механизм возврата.


Часть 6 "Языки программирования задач ИИ". Глава 18

ГЛАВА 18

ЯЗЫК LISP

Введение в LISP

LISP - это широко используемый в задачах искусственного интеллекта язык программирования. Название языка представляет собой сокращение английского словосочетания LISt Processing - обработка списков. Одно из важнейших свойств языка - простота работы со списками. Список может состоять из слов некоторого предложения, имен рабочих на предприятии или любых других слов, идущих в произвольном порядке. В любое время можно обратиться к отдельным частям списка и выполнить с ними различные операции. В этой главе приведены только основные свойства языка с тем, чтобы заинтересовать читателя и стимулировать его дальнейшую самостоятельную работу.

Вычисление функций

LISP основан на вычислении функций. Функции в языке записываются в префиксной форме, т.е. сначала записывается операция, затем ее операнды и вся конструкция заключается в круглые скобки. Например, функция сложения двух чисел на языке LISP записывается следующим образом:

(+ 4 2)

Результатом вычисления этой функции будет число 6. Согласно префиксному формату сначала нужно написать + , а затем аргументы. Операцию вычитания можно записать так:

(- 5 2)

Если ввести эту запись во время диалога с LISP-системой, она автоматически вернет число 3. Пользователь может ввести более сложный пример:

(+ (- 5 2) 4)

a LISP вернет:

7

В языке LISP прежде всего вычисляется функция, заключенная во внутренние скобки:

(- 5 2)

и система заменит выражение во внутренних скобках на результат вычисления - 3:

(+ 3 4)

после чего будет получен окончательный результат: -7.
Умножение и выбор максимального значения пользователь может задать, введя следующие выражения:

(* 5 4)

система вернет:

20

и

(МАХ 5 9 2)

система вернет:

9

Нужно твердо запомнить, что:
1) функции записываются в префиксной форме;
2) функции заключаются в круглые скобки.

Списки

Список - это некоторый набор элементов. Элементы списка называются членами списка. Читатель, например, может составить список людей, которые занимали у него деньги. Этот список может состоять из имен:
'(БОБ ТОМ МЭЙ СЬЮ)
Отметим, что подобно функциям, список заключается в круглые скобки. Другой пример списка - перечень предметов, лежащих на рабочем столе:
'( КАРАНДАШ РУЧКА-ЧАСЫ БУМАГА СКРЕПКИ )
Пробелы в именах членов списка недопустимы, поскольку они служат для разделения членов в списке. Имя РУЧКА-ЧАСЫ относится к одному члену списка, а дефис служит в нем для соединения слов РУЧКА и ЧАСЫ в единое целое.
Можно создать список, членами которого будут числа. Они могут означать, например, количество людей, работающих в каждом отделе предприятия:
'(20 10 30)
Можно создать список, членами которого в свою очередь являются тоже списки. Такой список может, например, содержать имена знакомых читателю людей, живущих в трех различных городах:
'((БОБ ЛОРИ ДЖЕЙН) (ТОМ ГАРРИ) (ДЖОН ДЭВИД))
Отметим, что каждый из трех внутренних списков заключен в круглые скобки. Весь список также заключен в круглые скобки. Читатель, наверное, уже заметил, что в приведенных примерах перед каждым списком стоит символ одинарной кавычки “'”. Посмотрим, какова ее роль. Предположим, есть список:
'(GOTO YOUR HOME)
Если бы перед открывающейся скобкой не было кавычки, список имел бы вид функции, как было описано выше. Функции в языке LISP записываются в префиксной форме (сразу за скобкой идет имя функции) , поэтому без кавычки словосочетание GOTO интерпретировалось бы как имя функции. Именно кавычка “говорит” языку LISP, что далее идет список, a GOTO - не имя функции, а просто член списка.

Встроенные функции обработки списков

С помощью встроенных функций обработки списков выполняются стандартные операции. Наиболее важные из этих функции - CAR, CDR,CONS и APPEND.
Функция CAR выбирает из списка первый член. Введя

(CAR '(А В С))

пользователь получит в ответ:

А

В следующем примере первым элементом списка также является список (1 2), поэтому результатом работы предложения

(CAR '(1 2) А В)

будет:

(1 2)

Функция CDR удаляет из списка первый элемент и возвращает оставшуюся часть списка. Результатом выполнения предложения

(CDR '(А В С))

будет список без первого элемента:

(В С)

А результатом выполнения предложения

(CDR '((А В) (C D)))

будет список, состоящий из одного члена:

((С D))

Функция CONS добавляет новый член в начало списка. Если пользователь введет

(CONS 'К '(J К L))

LISP вернет список:

(К J К L)

А после ввода предложения:

(CONS '(А В) ' (J К L))

пользователь получит список:

((A B)(J K L))

Функция APPEND объединяет два списка в один, например:

(APPEND '(А В) '(J К L))

даст в результате:

(А В J К L)

В языке LISP гораздо больше встроенных функций, но здесь мы их не будем обсуждать, поскольку цель этой главы - дать только общее представление о языке.

Предикаты или функции проверки условий

Напомним, что условная часть правила ЕСЛИ-ТО может иметь значение “истина” или “ложь”. Если она имеет значение “истина”, вызывается часть ТО правила, если “ложь” - часть ТО правила игнорируется. В языке LISP есть ряд функций, выполняющих проверку условий и возвращающих значение “ложь” или “истина”, но в языке они обозначаются NIL и Т соответственно. Функции, которые проверяют условие и возвращают NIL или Т, называются предикатами.
Познакомимся с некоторыми предикатами. Предикат EQUAL возвращает значение Т, если все его аргументы одинаковы. Например:

(EQUAL 8 8)

даст в результате:

T

a (EQUAL 3 2)

даст в результате:

NIL

Если пользователь введет:

(EQUAL '(1 2 А) '(1 2 А))

LISP вернет:

T

Символ > обозначает предикат, осуществляющий последовательную проверку аргументов слева направо, на следующее условие:
“Предыдущий больше последующего”. Например:

(> 5 2 1)

будет иметь значение:

Т

а (> 1 2 3)

будет иметь значение:

NIL

В более сложном примере:

(> 5 4(+ 1 2))

LISP-система сначала вычислит внутреннюю функцию, в результате чего получится:

(> 5 4 3)

а затем вернет значение:

Т

Присваивание значений переменным

Ниже рассматривается инициализация переменных в языке LISP. Значение переменной может быть присвоено с помощью следующего предложения:

(SETQ Х Y)

В результате выполнения этого предложения переменной Х будет присвоено значение Y. Например, если пользователь введет:

(SETQ Х 25)

LISP вернет:

25

т.е. Х будет присвоено значение 25. Еще пример:

(SETQ Х '(А В С))

В результате выполнения этого предложения переменной Х будет присвоено значение, представляющее собой список (А В С).

Представление правил с помощью условной функции

Условная функция (COND) позволяет проверить совокупность условий и в случае их истинности (Т) выполнить некоторые действия. В работе этой функции видна тесная аналогия с работой правил ЕСЛИ-ТО. Рассмотрим пример:

(COND ((EQUAL 5 2 (SETQ X 5)))

Условной частью или частью ЕСЛИ в предложении COND служит выражение (EQUAL 5 2), а частью ТО - выражение (SETQ Х 5). Поскольку в приведенном примере (EQUAL 5 2) вернет значение NIL, часть ТО вызвана не будет, т.е. переменной Х не будет присвоено значение. Изменим пример:

(COND ((EQUAL 3 3 (SETQ X 5)))

В этом случае (EQUAL 3 3) вернет значение Т, и, значит, будет выполнено предложение (SETQ Х 5). Рассмотрим два предложения COND:

(COND ((EQUAL Y 3) (SETQ X 5)))
(COND ((GREATERP 4 Z) (SETQ P 3)))

Первое предложение можно прочесть так: ЕСЛИ Y имеет значение 3, ТО присвоить Х значение 5. Второе предложение говорит следующее: ЕСЛИ 4 больше Z, ТО присвоить Р значение 3. В этих примерах предложение COND состояло из двух частей, ЕСЛИ и ТО, т.е.

(COND(( часть ЕСЛИ ) (часть ТО)))

В общем случае функция COND может включать несколько частей ЕСЛИ и ТО.

Создание новых функций

Новые функции определяются в языке LISP функцией DEFUN. Например, предложение

(DEFUN ADD-DIF(X Y Z)
(+ Z(- X Y)))

определяет новую функцию с именем ADD-DIF. Элементы, идущие в скобках за именем функции, - ее аргументы. Таким образом, аргументами функции ADD-DIF будут переменные X,Y и Z. Аргументы используются при вычислении функции. Сами вычисления задаются после аргументов. В нашем примере вычисления заданы выражением

(+ Z(- X Y))

Подобная запись уже знакома читателю, она применялась выше. Прежде всего из Х вычитается Y, а затем полученное значение складывается со значением Z. Если вновь определенную функцию вызвать с аргументами 4,5,6:

(ADD-DEF 5 4 6)

результатом ее работы будет число 7. Прежде всего функция присвоит переменной Х значение 5, Y - значение 4, а Z - значение 6. Затем из 5 вычтет 4, а результат 1 сложит с 6. В конечном счете функция вернет значение 7. Прежде чем продолжить, приведем пример работы функции PRINT. Выполняя предложение:

(PRINT 'EXAMPLE)

LISP-система напечатает две строки:

EXAMPLE
EXAMPLE

Здесь нет необходимости заострять внимание на том, почему выводятся именно две строки. Рассмотрим следующую новую функцию:

(DEFUN IF-THEN (X)
(COND ((EQUAL X 3) (PRINT -EXAMPLE))))

 В результате работы этой функции функция PRINT будет вызвана только в том случае, если Х имеет значение 3, т.е. если ввести

(IF-THEN (3))

LISP напечатает:

EXAMPLE
EXAMPLE

Но если ввести

(IF-THEN (4))

LISP вернет значение NIL.
Это происходит потому, что в условной части предложения COND задано (EQUAL Х 3). Если результатом выполнения условной части будет Т, вызывается часть ТО вновь определенной функции (PRINT 'EXAMPLE). При первом обращении к функции (IF-THEN (3)) первая часть COND имела вид (EQUAL 3 3) и вернула значение Т. Следовательно, COND вызвала функцию PRINT. При втором обращении (IF-THEN (4)) первая часть COND имела вид (EQUAL 4 3) и вернула значение NIL.

Резюме

Наиболее важные концепции этой главы.
1. Концепция функций и значение скобок при их определении.
2. Концепция списков.
Читателю рекомендуется интенсивно поработать с функциями и списками на языке LISP на компьютере.


Именной указатель

ИМЕННОЙ УКАЗАТЕЛЬ

[ L, P - Б, Г, Д, К, Л, М, Н, П, Р, С, Ш, Э ]

L

LISP Пред.к русс. изд., Пред., 18-1, 18-2, Библ.

P

PROLOG Пред. к русс.изд., Пред., 17-1, 17-2, Библ.-1, Библ-2

Б

Байес 7-1 , 7-2
Барри Эделсон Пред. к русс.изд.-1, Пред. к русс.изд.-2
Бейсик Пред.к.русс.изд., Пред., 2, 5, 6, 8, 9, 11
Бонни 17
Бостон 1

Г

Г.Вейнстен 8-1 , 8-2

Д

Джейн 1 , 17
Джим 1
Джон 1
Диана Дранг Пред. к русс. изд.-1, Пред. к русс.изд-2. , 10
Дэвид 18
Дэниэл 17

К

Кэтрин де Херч 10

Л

Ларри 17
Лаура 17
Лори 17

М

Майкл 17
Марк Стон 11
Мэри 1

Н

Нью-Йорк 1

П

Пит 17

Р

Редвуд-Сити 13
Ривер-Сити 13
Роберт Левин Пред. к русс. изд.-1, Пред. к русс.изд.-2

С

Сара Грин 10-1, 10-2
Стивен Джонс 10-1, 10-2
Сузан Берд 11
Съюзи 17

Ш

Ширли 17

Э

Энди Ром 11
Эндрю Джонс 2
Энн 17


Начало

A COMPREHENSIVE GUIDE TO AI

AND EXPERT SYSTEM

Authors:

- Robert I. Levine - Senior Research Engineer, Sperry Corporation
- Diane E. Drang - Director of Educational Services, Jewish Board Family & Children’s Services
- Barry Edelson - Editor and author

Роберт Левин, Диана Дранг, Барри Эделсон

ПРАКТИЧЕСКОЕ ВВЕДЕНИЕ В ТЕХНОЛОГИЮ

ИСКУССТВЕННОГО ИНТЕЛЛЕКТА И ЭКСПЕРТНЫХ

СИСТЕМ С ИЛЛЮСТРАЦИЯМИ НА БЕЙСИКЕ

Перевод с английского и предисловие
М.Л.Сальникова, Ю.В.Сальниковой

Перевод книги в электронный HTML-формат
С.В.Добрынина, И.В. Кучеренко

Москва, 2000 год.


О разработчиках

Назад

О разработчиках

Программный продукт "Электронная версия книги "Практическое введение в технологию искусственного интеллекта и экспертных систем с иллюстрациями на Бейсике" авторов Левина Роберта, Дранг Дианы, Эделсона Барри" был разработан в учебных рамках студентами 5 курса группы ИУ-5-92 Московского Государственного Технического Университета им.Н.Э.Баумана

Sergey.jpg (20545 bytes) Igor.jpg (25539 bytes)
Добрыниным Сергеем Викторовичем и Кучеренко Игорем Владимировичем.

Декабрь 2000 года

Ваши пожелания и замечания можете направлять по адресу: dobrynin@e-mail.ru.


Предисловие

ПРЕДИСЛОВИЕ

Буквально на глазах искусственный интеллект вторгся во все направления компьютерной технологии. Системы искусственного интеллекта появились повсеместно - от большого бизнеса до армии. Искусственный интеллект делает профессиональные возможности человека безграничными. Если он и дальше будет завоевывать рынок с такой скоростью, не за горами то время, когда садиться за компьютер можно будет только имея необходимые познания в этой области. Происходит настоящая революция.
Предлагаемая книга в доступной форме знакомит с основными идеями искусственного интеллекта и экспертных систем. От читателя не требуется специальных математических знаний, и даже если его познания в области компьютеров очень скромны, он узнает вполне достаточно об этой новой области применения компьютеров. Прочтя эту книгу, читатель не только освоит основные идеи, но будет способен приступить к разработке своих собственных экспертных систем.
Большинство людей считают, что их домашние компьютеры слишком медленны и маломощны, чтобы программировать на них задачи искусственного интеллекта. Книга развеет это заблуждение. Все примеры программ можно запустить на простом домашнем компьютере. В каждой главе для иллюстрации изложенного материала приведены программы. Их легко понять и использовать. Программы написаны на стандартном Бейсике и их можно легко перенести на любой компьютер.
Эта работа представляет собой простой обзор искусственного интеллекта и экспертных систем. Каждая глава содержит самостоятельный, законченный материал, который снабжен понятными примерами, помогающими его легко усвоить. Книга предназначена для студентов, учащихся колледжей, руководителей компаний, желающих познакомиться с искусственным интеллектом и лиц мало знакомых с компьютерами. Для лучшего усвоения материал данной книги, взятый из различных источников, был дополнен и затем упрощен. В книге множество иллюстраций и более 50 примеров.

Глава 1 знакомит читателя с основными концепциями искусственного интеллекта.

В главе 2 показано как эти концепции применяются при создании систем искусственного интеллекта на компьютере.

В главе 3 обсуждаются основные идеи экспертных систем и их место в искусственном интеллекте.

В главе 4 коротко даются простые сведения по обработке естественного языка.

В главе 5 на большом числе примеров поясняется прямая цепочка рассуждений. Приведена реализующая её программа на Бейсике. Для лучшего усвоения материала с программой можно поработать на компьютере. В процессе работы она может быть усовершенствована.

В главе б обсуждается обратная цепочка рассуждений и приведена её программная реализация.

В главе 7 обсуждается применение теории вероятностей и нечеткой логики в экспертных системах. Приведен пример программы, иллюстрирующий их использование в системах, основанных на правилах.

В главе 8 дана разработка упрощенного варианта экспертной системы финансового планирования.

В главе 9 обсуждается разработка упрощенной экспертной системы, помогающей сэкономить усилия при общении с покупателями. Она может быть интересна всем, занятым в системе торговли.

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

В главе 11 рассматривается использование объектно-ориентированного програм-
мирования в экспертных системах, приведены примеры, иллюстрирующие основные концепции объектно-ориентированного программирования. Дана написанная на Бейсике программа, с которой можно экспериментировать на компьютере.

В главе 12 обсуждается использование объектно-ориентированного программирования на примере из области техники. Приведен пример программы.

В главе 13 приведен пример объектно-ориентированной экспертной системы.

В главах 14 , 15 и 16 обсужаются семантические сети, факторы неопределённости и самообучающиеся системы. Каждая глава снабжена примером программы.

В главе 17 обсуждается применение языка PROLOG для работы с базой знаний. Глава иллюстрируется примерами.

В главе 18 приведены основные сведения по языку программирования LISP.

Авторы благодарят профессора нью-йоркского политехнического института Роберта Хонга из фирмы Gramman Corp. за его увлекательные семинары по искусственному интеллекту. Особая благодарность Бетти Хауфрехт, чьи исследования в области обучения и творческое участие помогли авторам разобраться во всех сложностях использования компьютеров в искусственном интеллекте.


ПРЕДИСЛОВИЕ К РУССКОМУ ИЗДАНИЮ

Советскому читателю предлагается еще одна работа по искусственному интеллекту. Книга Р.Левина, Д.Дранг, Б.Эделсона “Практическое введение в технологию искусственного интеллекта и экспертных систем с иллюстрациями на "Бейсике” предназначена для начинающих. В ней ясно и лаконично изложены ключевые концепции искусственного интеллекта и экспертных систем. Но это лишь половина дела. Главное достоинство книги в том, что она помогает перейти от идей к их воплощению. Для тех, кто только начал знакомиться с экспертными системами, это особенно важно. Получив первые практические результаты, читатель обретёт уверенность в себе.
В качестве языка реализации экспертных систем в книге выбран Бейсик, наиболее распространенный и простой для освоения язык программирования, интерпретатор или компилятор для которого есть, как правило, на любом компьютере. Для программирования задач искусственного интеллекта разработаны специальные языки программирования LISP и PROLOG. Однако из этого вовсе не следует, что на традиционных языках программирования нельзя создать полноценную экспертную систему. В принципе не столь важно, каким языком программирования пользоваться. Бейсик подходит для этих целей, как и любой другой язык. Дело совсем в ином, а именно в умении довести идеи до реализации. Этому и посвящена книга. Она построена на примерах. Сначала дается постановка задачи, рассматриваются способы её решения, приводится процесс разработки алгоритма и его перевода в машинную программу.
Авторы подробно освещают технологические особенности программирования задач искусственного интеллекта, прослеживают истоки формальных информационных структур искусственного интеллекта в человеческом мышлении и проводят сравнение процессов принятия решения человеком и экспертной системой.
В предлагаемом вниманию читателя издании подробно разбирается использование прямой и обратной цепочек рассуждений в механизме логического вывода и верификации достигнутой цели. Рассматриваемые примеры взяты из жизни.
Книга охватывает почти все концепции экспертных систем, основанных на правилах, и что особенно важно, авторы приводят способы реализации изложенных принципов в реальной программе. Подробно обсуждаются проблемы, связанные с созданием базы знаний и её заполнением человеком-экспертом. Изложение в книге идет от простого к сложному, от базовых элементов до полной экспертной системы. В работе такого рода неизбежны упрощения, но они не снижают её ценности, а позволяют расставить необходимые акценты и облегчить читателю освоение материала.
Книга Р.Левина, Д.Дранг, Б.Эделсона даёт возможность получить основные знания в области искусственного интеллекта и экспертных систем и перейти к изучению источников, расматривающих описанные в ней концепции глубже, на более формальном уровне.
Книга не свободна и от недостатков. Основной из них - некоторая небрежность, которую авторы допустили в текстах программ. Просто взять и ввести представленные в книге тексты программ в компьютер и автоматически получить работающую программу нельзя. Их нужно предварительно изучить и затем отладить. Однако отладка не займет у читателя много времени, так как алгоритмы в программах представлены корректно. Указанный недостаток чисто условный, поскольку отладка - важный и необходимый шаг в создании любых программных систем.

С уверенностью можно сказать, что эта книга будет полезна всем, кто хочет всту-
пить в увлекательный мир искусственного интеллекта.

МЛ. Сальников, Ю.В. Сальникова


Предметный указатель

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

[А, Б, В, Д, И, К, Л, М, Н, О, П, С, У, Ф, Ц, Э]

A

Аргумент 17
Алгоритм 5 , 6
Аналоговое представление 12
Атрибут 11-1 , 11-2 , 11-3 , 13-1 , 13-2 , 14 , 16

Б

База данных 11
База знаний 2 , 5-1 , 5-2 , 8 , 13 , 14 , 15

В

Вероятность 7-1 , 7-2
Весовой фактор 2-1 , 2-2 , 3 , 9-1 , 9-2 , 9-3 , 10
Возрастная группа 8-1 , 8-2

Д

Двоичная система 12
Дерево решений 6 , 8 , 13 , 14
вершина 6-1 , 6-2 , 8
путь 6-1 , 6-2 , 8

И

Имя структуры 11
Искусственный интеллект (ИИ) 1-1 , 1-2 , 4

К

Коэффициент уверенности 15-1 , 15-2

Л

Лексический анализ 4
Логический вывод 6-1 , 6-2 , 6-3 , 13 , 15

М

Методы ИИ 1-1 , 1-2 , 2
Механизм возврата 17-1 , 17-2
Механизм вывода 1 , 2-1 , 2-2 , 8-1 , 8-2 , 10 , 16
Механизм упрощения 1-1 , 1-2 , 2

Н

Нечёткая логика 15

О

Обратная связь 16
Обратная цепочка рассуждений 2 , 6-1 , 6-2 , 6-3 , 8 , 13 , 17-1 , 17-2
Объект 11-1 , 11-2 , 13 , 14 , 16
Объектно-ориентированное программирование 11-1 , 11-2 , 11-3 , 11-4 , 11-5 , 11-6 , 11-7 , 12
Очередь переменных логического вывода 5-1 , 5-2 , 5-3

П

Правило ЕСЛИ-ТО 1-1 , 1-2 , 2 , 5-1 , 5-2 , 6 , 8-1 , 8-2 , 10 , 14 , 17
констатирующая часть 5
условная часть 5-1 , 5-2 , 6
Предикат 17 , 18
Предметная область 8-1 , 8-2
Переменная условия 15
Процедура 11-1 , 11-2 , 11-3
Прямая цепочка рассуждений 2 , 5-1 , 5-2 , 13

С

Семантическая сеть 14-1 , 14-2
отношения 14
узел 14
Самообучающиеся системы 16-1 , 16-2
Семантический анализ 4
Синтаксический анализ 4
Система реального времени 12
Слот 11-1 , 11-2
Список 18
Список логических выводов 6-1 , 6-2 , 6-3 , 6-4
Список переменных 5-1 , 5-2 , 6
Список переменных условия 5-1 , 5-2 , 6-1 , 6-2
Стек логических выводов 6-1 , 6-2
Структура 11-1 , 11-2 , 11-3 , 12 , 14

У

Указатель переменных условия 5
Указатель списка переменных условия 5
Уровень решения 10-1 , 10-2
Упрощение 1-1 , 1-2 , 3 , 8
Условная вероятность 7-1 , 7-2 , 7-3

Ф

Факт 1-1 , 1-2 , 1-3 , 2-1 , 2-2 , 8 , 9 , 10 , 16
Функция 13 , 18-1 , 18-2

Ц

Цель 1 , 2-1 , 2-2 , 2-3 , 17

Э

Эвристические правила 7 , 15
Экспертная система 3-1 , 3-2 , 5 , 6 , 8-1 , 8-2 , 8-3 , 8-4 , 9
анализа обучения 10-1 , 10-2 , 10-3 , 10-4 , 10-5 , 10-6
в торговле 9-1 , 9-2 , 9-3 , 9-4 , 9-5
объектно-ориентированный подход 12 , 13
система финансового планирования 8
фондовой биржи 5


Обложка
Предисловие к русскому изданию
Предисловие
Часть 1
Глава 1
Глава 2
Глава 3
Глава 4
Часть 2
Глава 5
Глава 6
Глава 7
Часть 3
Глава 8
Глава 9
Глава 10
Часть 4
Глава 11
Глава 12
Глава 13
Часть 5
Глава 14
Глава 15
Глава 16
Часть 6
Глава 17
Глава 18
Библиография
Именной
указатель
Предметный указатель
О разработчиках


Дальше