ZX Review #7-8-9-10
08 ноября 1997

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

<b>Читатель-читателю</b> - Группа 'Light'. Спектрум и экспертная система.
┌──────────────────────────────┐
│                              │
│     ЧИТАТЕЛЬ - ЧИТАТЕЛЮ      │
│                              │
└──────────────────────────────┘

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

           *   *   *




Другие статьи номера:

TR-DOS для начинающих - Окончание.

Компьютерная новелла - Prince of Persia.

Компьютерная новелла - Лазерная бригада (по игре Laser Squad).

Перекресток драконов - Игра Rapscallion.

Перекресток драконов - Игра The Runes of Zendos.

Перекресток драконов - Игра The Saga.

Перекресток драконов - Игра Witch's Cauldron.

Перекресток драконов - Создаём Адвентюру. Обзор редакторов.

Перекресток драконов - Создаём словарь к Адвентюрной игре.

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

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

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

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

Программы, которые мы выбираем - Предложения по доработке ZX Word v2.5.

Программы, которые мы выбираем - Программа "Эмулятор Спектрума" v1.2.

Программы, которые мы выбираем - Что хотелось бы иметь в идеальном ассемблере.

Ретро - 40 лучших процедур: Копирование данных в памяти.

Ретро - 40 лучших процедур: Обмен токена.

Ретро - 40 лучших процедур: Определение адреса БЕЙСИК-строки.

Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.

Ретро - 40 лучших процедур: Определение размера свободной памяти.

Ретро - 40 лучших процедур: Поиск и замещение строки.

Ретро - 40 лучших процедур: Поиск подстроки.

Ретро - 40 лучших процедур: Поиск строки.

Ретро - 40 лучших процедур: Составление списка переменных.

Ретро - 40 лучших процедур: увеличение и копирование экрана.

Ретро - 40 лучших процедур: Удаление REM-строк.

Ретро - 40 лучших процедур: Удаление блока программы.

Советы экспертов - Игра Fredloader.

Советы экспертов - Игра Robin of Sherwood: The Touchstones of Rhianon.

Советы экспертов - Игра Scorpions: Die Machines.

Советы экспертов - Игра Terropods.

Страничка iS-DOS - Описание рестартов системы IS DOS.

Форум - Алгоритм распознавания символов.

Форум - Время выполнения недокументированных команд процессора Z80.

Форум - Концепция экрана высокого цветового разрешения.

Форум - Несколько Pokes к играм. Программа Hacman96.

Форум - По поводу новых DOS и BIOS для Спектрума.

Форум - Программа Multicolor на любой модели компьютера. Использование 2-го экрана для Multicolor'а. Демонстрация текста. Электронные журналы.

Форум - Проект ZX Config.

Форум - Усовершенствование Art Studio. Идеи относительно компрессии файлов.

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

Форум - Эффекты на бордюре и Multicolor.

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

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

Читатель-читателю - Драйвер принтера для Scorpion'а.

Читатель-читателю - Печать чисел в различных системах счисления.

Читатель-читателю - Программирование аркадной игры со скроллингом экрана.

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

Этюды - Атрибутная бегущая строка. "Гасилка" экрана. Упрощенный вариант процедуры "Занавес". Процедура гащения картинки. Процедура проявления картинки по точкам.

Этюды - Графический эффект "цветные полосы".

Этюды - Драйвер экрана для печати по 64 символа в строке.

Этюды - Комплект защит загрузчиков.

Этюды - Обращение к диску в режиме IM 2. Работа с диском нестандартного формата.

Этюды - Печать символа, увеличенного в 8 раз. Программа "наливания" экрана. Процедура гашения экрана по точкам. Очистка экрана как в Terminator'е. Поиск последовательности символов в памяти. Система перекодировки символьного набора.

Этюды - Программа - каталогизатор дисков.

Этюды - Программа вывода значений амплитуды каналов муз. сопроцессора на бордюр.

Этюды - Программа вывода картинки.

Этюды - Программа зажигания спрайта.

Этюды - Программа очистки заданного окна экрана.

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

Этюды - Процедура печати чисел.

Этюды - Процедура прорисовки символа с помощью атрибутов.

Этюды - Процедура проявления картинки. Fade-OUT эффект (картинка уходит за края экрана). Графический эффект "Фонтан". Fade-OUT эффект, имитирующий выключение телевизора. Процедура "зажигания" картинки. Программа плавной прорисовки картинки.

Этюды - Процедура рисования линии.

Этюды - Процедура составления оптимальной таблицы символов.

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

Этюды - Спрайтовый скроллер. Процедуры проявления экрана.

Этюды - Укороченная процедура индикации амплитуды каналов муз. сопроцессора. Способ вычитания константы из регистровой пары HL.

Этюды - Формула для вычисления дня недели.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
От автора - пиздато читать газетки каждую неделю?
Песни/пляски - Частушки.
Программистам - Хотелось бы поговорить о выводе точки.
Post Scriptum - Послесловие. Креаторы и всё такое...
HARD and SOFT - Простейший Turbo Load/Save-ер.

В этот день...   26 апреля