Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.

ZX Review #7-8-9-10
┌──────────────────────────────┐
│                              │
│     ЧИТАТЕЛЬ - ЧИТАТЕЛЮ      │
│                              │
└──────────────────────────────┘

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

           *   *   *