┌──────────────────────────────┐
│ │
│ ЧИТАТЕЛЬ - ЧИТАТЕЛЮ │
│ │
└──────────────────────────────┘
Music by ZET
(c) Группа 'Light', г.Серпухов
СПЕКТРУМ И ЭКСПЕРТНАЯ СИСТЕМА
Хотим сразу ответить на воп-
рос - а для чего и зачем это
нужно и где это применяется? А
самое главное - неужели это мож-
но реализовать на Спектруме?
Ответим сразу - МОЖНО, даже на
48K. Но сначала давайте сразу же
определим, что такое экспертная
система. Под экспертной систе-
мой понимается компьютерная сис-
тема, способная предложить ра-
зумный совет или осуществить ра-
зумное решение поставленной за-
дачи при имеющихся в наличии не-
которых исходных данных.
Примером экспертных систем на
Спектруме могут служить, в пер-
вую очередь, стратегические иг-
ры, а тем более шахматные прог-
раммы. Это утверждение основано
на определении экспертной систе-
мы, которое одобрено комитетом
группы специалистов по экспер-
тным системам Британского ком-
пьютерного общества.
Конечно, данная статья никак
не может претендовать на полно-
ту освещения этого раздела, но
мы надеемся, что она, по крайней
мере, пробудит в Вас интерес к
этой области, которая граничит с
искуственным интеллектом.
В данной статье мы рассмот-
рим экспертную систему, которая
предполагает присутствие челове-
ка в начальном процессе выработ-
ки решения, т.е. в процессе обу-
чения системы.
Рассматриваемую здесь экспер-
тную систему можно упрощенно
представить в виде следующего
алгоритма:
┌─────────────┐
│Ввод │
┌─> │переменных │
│ └─────────────┘
│ v
│ ┌─────────────┐
│ │Применение │
│ │текущих │
│ │решающих │
│ │правил │
│ └─────────────┘
│ v
│ ┌─────────────┐
│ │Предположение│
└─── │о возможном │
│исходе │
└─────────────┘
Все бы хорошо, однако на на-
чальном этапе в такой экспертной
системе не содержится данных, по
которым программа могла бы дать
предположение о возможном исхо-
де. И вот тут на сцене появляет-
ся человек, который выступает в
роли учителя. Вводя в компьютер
те переменные, на которые точно
известен исход, человек обучает
его. Т.о., на начальном этапе,
т.е. на этапе обучения, алгоритм
экспертной системы может выгля-
деть следующим образом:
┌─────────────┐
│Ввод │
┌─> │переменных │ <─┐
│ └─────────────┘ │
│ v │
│ ┌─────────────┐ │
│ │Применение │ │
│ │текущих │ │
│ │решающих │ │
│ │правил │ │
│ └─────────────┘ │
│ v │
│ ┌─────────────┐ │
│ │Предположение│ │
│ │о возможном │ │
│ │исходе │ │
│ └─────────────┘ │
│ v │
│Да ┌─────────────┐ │
└─── │Это верно │ │
└─────────────┘ │
v Нет │
┌─────────────┐ │
│Модификация │ │
│решающих │───┘
│правил │
└─────────────┘
Как видно из алгоритма, прос-
тейшую экспертную систему не-
трудно реализовать на Спектруме.
В доказательство этого по данно-
му алгоритму составим программу
на Бейсике, как на самом распро-
страненном языке. При желании
эту программу легко перевести на
любой другой язык, даже на ас-
семблер. Для простоты предполо-
жим, что имеются всего два воз-
можных исхода: например, завтра
будет дождь и завтра не будет
дождя. Если ввести и запустить
эту программу, то она задаст во-
прос о количестве задействован-
ных переменных.
Номер переменной │ Имя переменной
──────────────────┼──────────────────────
1 │ Давление повышается
2 │ Давление понижается
3 │ Ветер есть
4 │ Ветра нет
Ясно, что выбор переменных
лежит целиком на ваших знаниях и
способностях. Затем в памяти ма-
шины создаются три массива. Мас-
сив R - должен содержать прави-
ла вывода суждений (которые раз-
рабатывает ЭВМ), массив V - зна-
чения переменных, представленных
в данном конкретном случае, мас-
сив V$ - служит для хранения
имен переменных.
Программа после запуска зап-
рашивает имена этих переменных.
Она также запрашивает имена пе-
ременных O$ и B$ - двух возмож-
ных исходов. Далее выясняются
детали конкретного примера (для
данной программы требуются отве-
ты типа Да/Нет).
Собрав все необходимые сведе-
ния, программа делает предполо-
жение относительно возможного
исхода. Когда Вы согласны с мне-
нием системы, вводите Y, или N -
если не согласны. Затем перехо-
дите к другому примеру. Таким
образом осуществляется процесс
машинного обучения. Следует от-
метить, что постепенно машина
улучшает свои предсказания отно-
сительно возможного исхода, хо-
тя насколько лучше - зависит от
того, какую информацию Вы ввели
вначале.
(Прим. ред. - обучение системы пойдет
куда лучше, если вводить в нее РЕАЛЬНО
случившиеся факты - а был ли на самом де-
ле дождь - а не свое согласие или несогла-
сие с ее решением).
А теперь сам листинг программы.
10 CLS
20 INPUT "ВВЕДИТЕ ЧИСЛО ПЕРЕМЕННЫХ"; VAR
30 DIM V(VAR): DIM R(VAR): DIM V$(VAR)
40 FOR I=1 TO VAR
50 V(I)=0
60 R(I)=0
70 NEXT I:PRINT
80 PRINT "НАЗОВИТЕ ЭТИ ПЕРЕМЕННЫЕ "
90 FOR I=1 TO VAR
100 INPUT "ИМЯ ПЕРЕМЕННОЙ :";V$(I)
110 NEXT I: PRINT
120 PRINT "НАЗОВИТЕ ВОЗМОЖНЫЕ ИСХОДЫ:"
130 INPUT "ПЕРВЫЙ ИСХОД: "; O$
140 INPUT "ВТОРОЙ ИСХОД: "; B$
150 PRINT
160 FOR I=1 TO VAR
170 V(I)=0
180 PRINT "ПЕРЕМЕННАЯ: ";V$(I)
190 INPUT "ЭТА ПЕРЕМЕННАЯ ЕСТЬ <Y/N>";A$
200 IF A$="Y" OR A$="y" THEN LET V(I)=1
210 NEXT I
220 DC=0
230 FOR I=1 TO VAR
240 DC=DC+V(I)*R(I)
250 NEXT I
260 PRINT "ВОЗМОЖНЫЙ ИСХОД - ";
261 IF DC > 0 THEN PRINT O$
262 IF DC < 0 THEN PRINT B$
270 INPUT "ЭТО ВЕРНО <Y/N>";A$
280 IF A$="Y" OR A$="y" THEN GOTO 150
290 IF DC > 0 THEN FOR I=1 TO VAR: R(I)=
R(I)-V(I): NEXT I
291 IF DC < 0 THEN FOR I=1 TO VAR: R(I)=
R(I)+V(I): NEXT I
300 GOTO 150
После того, как Вы решите,
что обучили свою экспертную сис-
тему всему на свете, можно спо-
койно исключить из программы
обучающий блок (не забудьте
только сохранить массивы с дан-
ными) и включить данную програм-
му в состав какой-либо еще прог-
раммы, или использовать ее неза-
висимо (например для предсказа-
ния дождя для дня грядущего).
Представим, однако, что мы
включили данную экспертную сис-
тему в стратегическую игру, и
компьютер на основании этой сис-
темы управляет неким боевым ро-
ботом, имеющим самую слабую за-
щиту и самые слабые средства на-
падения. Предположим также, что
в нашу систему вложено правило
уничтожать все вражеские объек-
ты в пределах видимости. И вот
может наступить момент, когда
этот слабенький робот героичес-
ки полезет на Вашу ракетную ус-
тановку, и, как следствие, око-
ло нее и останется. Здесь имеет-
ся два выхода: первый - это опи-
сать все возможные ситуации (что
не очень-то реально) и второй -
ввести в систему возможность
ориентироваться с минимальными и
максимальными значениями пере-
менных. Говоря простым языком -
сделать так, чтобы наш гипотети-
ческий робот с защитой, скажем,
в 1 единицу не полез в драку
с роботом, имеющим защиту в 20
единиц. Тогда блок-схема данной
экспертной системы будет выгля-
деть следующим образом:
┌───────────────┐
│ Начало │
│ │ <─┐
└───────────────┘ │
v │
┌───────────────┐ │
│ │ │
│ Запрос │ │
│ переменных │ │
│ │ │
└───────────────┘ │
v │
┌───────────────┐ │
│Выбор наиболее │ │
┌──>│ вероятного │ │
│ │ исхода │ │
│ └───────────────┘ │
│ v │
│Да ┌───────────────┐ │
│ │Могут ли задан-│ │
│ │ные минималь- │ │
│ │ные и макси- │ │
│ │мальные значе- │ │
└── │ния повлиять │ │
│на выбор воз- │ │
│можных │ │
│исходов │ │
└───────────────┘ │
v Нет │
┌───────────────┐ │
│ │ │
│ РЕШЕНИЕ │───┘
│ │
└───────────────┘
Надо сказать, что данная
блок-схема не является совершен-
ной, однако за счет того, что
минимальные и максимальные зна-
чения переменных проверяются
только в случае необходимости,
алгоритм получается довольно
быстродействующим.
Надо сказать, что быстродей-
ствие играет далеко не последнюю
роль. Конечно, когда Вы построи-
ли экспертную систему, которая
ставит медицинские диагнозы, то
тут быстродействие системы не
очень принципиально. Другое де-
ло - компьютерные игры. Тут даже
можно пожертвовать некоторой ин-
теллектуальностью ради скорости
программы.
А дело тут вот в чем: Сущес-
твуют два типа процесса выра-
ботки решений - параллельное и
последовательное. Вот их блок-
схемы:
┌───────────┐
│Переменные │
└───────────┘
v v v
┌───────────┐
│ │
└───────────┘
v
┌───────────┐
│ Исход │
└───────────┘
Параллельное решение
┌─────────────────────┐
│Запросить переменную │ <┐
└─────────────────────┘ │
v │
┌─────────────────────┐ │
│Могу ли я предсказать│───┘
│какой-то исход │ НЕТ
└─────────────────────┘
v ДА
┌─────────────────────┐
│Возможный исход │
└─────────────────────┘
Последовательное решение
Несомненно, последовательное
решение является более быстрым,
так как параллельное решение
требует ввода всех известных
переменных, а последовательное
может сделать вывод, используя
только часть из них. Кстати,
есть предположение, что именно
так действует человеческий мозг
в процессе выработки решений.
Несомненно, что в общем слу-
чае параллельная процедура поз-
воляет получить более точное ре-
шение по сравнению с последова-
тельной. Однако в данном случае
договоримся, что нас интересу-
ет больше скорость расчета, чем
правильность решения. Алгоритм
расчета в данном случае будет
выглядеть следующим образом:
┌───────────────┐
│ Начало │ <─┐
└───────────────┘ │
v │
┌───────────────┐ │
│ │ │
│ Запрос │ │
│ переменной │ │
│ │ │
└───────────────┘ │
v │
┌───────────────┐ │
│Выбор наиболее │ │
┌──>│ вероятного │ │
│ │ исхода │ │
│ └───────────────┘ │
│ v │
│Да ┌───────────────┐ │
│ │Могут ли задан-│ │
│ │ные минималь- │ │
│ │ные и макси- │ │
│ │мальные значе- │ │
└── │ния для осталь-│ │
│ных переменных │ │
│повлиять на │ │
│выбор воз- │ │
│можных исходов │ │
└───────────────┘ │
v Нет │
┌───────────────┐ │
│ │ │
│ РЕШЕНИЕ │───┘
│ │
└───────────────┘
Таким образом, мы получили
быстродействующий алгоритм, опи-
сывающий действие экспертной си-
стемы при выработке решения.
Естественно, что материал
этой статьи не описывает все
возможные решения и алгоритмы по
этому вопросу, ведь проблема ис-
куственного интеллекта не решена
до сих пор. Однако простейшие
алгоритмы возможно применять да-
же при программировании на СПЕК-
ТРУМЕ. А реализация этих алго-
ритмов за Вами. Ну что? Беретесь
создать на Speccy интеллектуаль-
ные программы?
Те, кому понравилась эта
идея, могут писать свои сообра-
жения по адресу:
142214 г.Серпухов, ул.Подоль-
ская, д.107, кв.57
* * *