Главная страница
Навигация по странице:

  • (number n) => (assert (try-number n))) (defrule largest-unknown

  • дб. Четвертое издание джозеф Джарратано Университет Хьюстон клиэрЛэйк Гари Райли People5oft, Издательский дом "Вильямс" Москва СанктПетербург Киев 2007 ббк 32. 973. 26 018 75 Д


    Скачать 3.73 Mb.
    НазваниеЧетвертое издание джозеф Джарратано Университет Хьюстон клиэрЛэйк Гари Райли People5oft, Издательский дом "Вильямс" Москва СанктПетербург Киев 2007 ббк 32. 973. 26 018 75 Д
    Дата19.05.2022
    Размер3.73 Mb.
    Формат файлаpdf
    Имя файла[Dzharratano Dzhozef, Raili Gar - Nieizviestnyi.pdf
    ТипДокументы
    #538649
    страница59 из 74
    1   ...   55   56   57   58   59   60   61   62   ...   74

    (assert (distinct-points (х ?xl) (у ух х) (у у) (x3 ?хЗ) (уЗ ?
    уЗ)))) Условный элемент te s t, позволяющий определить, что адрес факта ?point — 1 не совпадает с адресом факта ? point —
    2, может быть помещен непосредственно после второго шаблона. Размещение условного элемента test в этой точке позволяет уменьшить количество создаваемых частичных соответствий, как показано ниже. (defrule three-distinct-points ?
    point-1 <- (point (х х) (у ух х) (у у) (test
    (neq ?point-1 ?point-2)) ?ро

    п-3 <- (point (х ?хЗ) (у ?уЗ)) (test
    (and (neq ?point-2 ?point-3) (neq ?point-1 ?point-3))) (assert
    (distinct-points (xl х) (у ух х) (у у) (x3 ?x3) (уЗ ?уЗ))))
    (defrule points-share-common-x-or-y-value (point (х х) (у ух х) (у ух х) (= у у) > (assert
    (common-x-or-y-value При формировании частичных соответствий в сети соединений всегда происходит вычисление условных элементов test в левой части любого правила.
    Выражения, используемые с предикативным ограничением или ограничением равенства поля, должны вычисляться в процессе сопоставления с шаблонами, если выполняются некоторые условия. Вычисление выражения в процессе сопоставления с
    шаблонами в сети шаблонов позволяет добиться повышения эффективности. А выражения, используемые в предикативных ограничениях или ограничениях поля возвращаемого значения,
    должны осуществляться в процессе сопоставления с шаблонами, если все переменные, упоминаемые в этом выражении, можно найти в том шаблоне, который включает это выражение. Например, выражение в приведенном ниже правиле будет вычисляться вовремя формирования частичных соответствий, поскольку оно находится в условном элементе test.
    760 Глава 9. Модульное проектирование, управление выполнением. (defrule points-share-common-x-or-y-value (point (х
    ?х1) (у ух х) (у ?у2й:(or (= ?xl ?x2) (= ?yl ?y2))))
    (assert (common-x-or-y-value (х х) (у ух х) (у ?у2))))
    Еще раз отметим, что выражение в следующем правиле будет вычисляться вовремя формирования частичных соответствий,
    поскольку оно находится в условном элементе test: (defrule point- not-on-x-y-diagonals (point (x ?xl) (у уху) (х (- 0 у) — > (assert (non-diagonal-point (x ?xl) (у у) Нона этот раз размещение выражения в шаблоне обеспечивает возможность его вычисления в процессе сопоставления с шаблонами, поскольку обе переменные, ? хи у, находятся в шаблоне, который включает это выражение (defrule point-not-on- x-y-diagonals (point (х ?xl) (у уху х (- 0 ух х) (у у) Встроенные ограничения сопоставления с шаблонами
    Встроенные ограничения сопоставления с шаблонами всегда являются более эффективными по сравнению с эквивалентным выражением, которое должно быть вычислено. Например, такое правило (defrule primary-color (х х) (yl ?yl) (х х) (у ?у2))))
    А в следующем примере размещение выражения в шаблоне не приведет к тому, что его вычисление будет осуществляться в процессе сопоставления с шаблонами, поскольку переменные ?
    xl и ? у не содержатся во втором шаблоне

    9.17. Сравнение общих правил с конкретными правилами 761
    (color х (eq х red) (eq х green) (eq х blue))) — > (assert
    (primary-color хне должно использоваться, если для достижения того же результата можно применить ограничения сопоставления с шаблонами, как показано ниже. (defrule primary- color (color ?x&red green blue) — > (assert (primary-color ?x)))
    9.17 Сравнение общих правил с конкретными правилами location (slot х) (slot у) (defrule move-north (move north) ?old-location <- (location (у у) Не всегда возможно сразу же дать ответ на вопрос о том, будут ли конкретные правила, представленные в большом количестве,
    функционировать эффективнее по сравнению с более общими,
    но менее многочисленными правилами. В результате применения конкретных правил процесс сопоставления с шаблонами в большей степени сосредоточивается в сети шаблонов, а объем работы в сети соединений уменьшается.
    Общие правила часто предоставляют больше возможностей для совместного использования в сетях шаблонов и соединений.
    Кроме того, одно общее правило может предоставлять большее удобство сопровождения по сравнению с более крупной группой конкретных правил. Но написание общих правил должно осуществляться весьма продуманно. Дело в том, что общие правила должны выполнять такую же работу, как и несколько конкретных правил, поэтому гораздо легче упустить что-то важное и написать неэффективное общее правило, чем неэффективное конкретное правило. Для иллюстрации различий между этими двумя методами рассмотрим приведенную ниже конструкцию de f template и четыре правила,
    которые должны обновлять факт, содержащий прямоугольные координаты объекта, который может перемещаться на север, юг (south), восток (еаst) или запад (west). Координаты хи у объекта находятся в факте location. После перемещения на север увеличивается значение координаты у, а после перемещения на восток увеличивается значение координаты х

    762 Глава 9. Модульное проектирование, управление выполнением. => (modify ?old-location (у (+ у 1)))) (defrule move-south (move south) ?old-location <- (location (у у) — >
    (modify ?old-location (у (- ух х (+ ?old-x 1)))) (defrule move-west (move west) ?old-location <-
    (location (х ?old-x)) => (modify ?old-location (х (- ?old-x 1)))) Четыре приведенных выше правила можно заменить одним более общим правилом, дополнительной конструкцией de f template и конструкцией de f f acts: (deftemplate direction (slot which-way)
    (slot delta-x) (slot у) (deffacts direction-information (direction
    (which-way north) (delta-x 0) (у 1)) (direction (which — way south) (delta-x 0) (у -1)) (direction (which-way east) (delta-x у 0)) (direction (which-way west) (delta-x -1) (у 0)))
    (defrule move-direction (move ?dir) (direction (which — way ?dir)
    (delta-x ?dx) (delta — ух) (у
    ?Old-у))
    763 9.18. Сравнение простых правил со сложными правилами ?old-location (х (+ ?old-x ?dx)) (у (+ у ?dy)))) В
    переменных ?dx и ?dy используются значения дельтах и дельта у, которые должны суммироваться со значениями хи у,
    относящимися к прежнему местонахождению, для получения значений хи у, относящихся к новому местонахождению. При использовании этого нового правила требуется больше работы по созданию частичных соответствий для определения значений дельтах и дельта у, которые должны суммироваться с координатами текущего местонахождения. Но такой подход позволяет создать дополнительный уровень абстракции,
    благодаря чему упрощается возможность введения новых направлений перемещения. Например, чтобы обеспечить перемещение на северо-восток, юго-восток, северозапад и юго- запад, потребовалось бы добавить четыре новых конкретных
    правила, а в обобщенном примере требуется лишь ввести четыре новых факта в конструкцию беййася следующим образом ction-information (which-way north) (delta-x 0) (у 1))
    (which-way south) (delta-x 0) (у -1)) (which-way east) (delta-õ
    1) (у 0)) (which — way west) (delta-x -1) (у 0)) (which- way northeast) (delta-x 1) (у 1)) (which-way southeast) (delta-x
    1) (у -1)) (which-way northwest) (delta-x -1) (у 1)) (which- way southwest) (delta-x -1) (у -1))) (deffacts dire (direction
    (direction (direction (direction (direction (direction (direction (direction
    9.18 Сравнение простых правил со сложными правилами Языки,
    основанные на правилах, позволяют сформулировать многие задачи в простой, но изящной форме. В частности, с помощью языка CLIPS можно легко найти наибольшее число из группы чисел, хотя он не предназначен специаль-
    764 Глава 9. Модульное проектирование, управление выполнением. но для решения алгоритмических или вычислительных задач. Ниже приведены правило и относящаяся в нему конструкция de f f acts, обеспечивающие внесение в список фактов группы фактов с примерами чисел,
    которые используются в качестве проверочных данных в правиле, отыскивающем наибольшее число. (deffacts max-num
    (loop-max 100)) (defrule loop-assert (loop-max ?n) — > (bind ?i 1)
    (while (<= ?i ?n) do (assert (number ?i)) (bind ?i (+ ?i Простейший способ поиска наибольшего числа был продемонстрирован в главе 8. Как показано ниже, чтобы найти наибольшее число, достаточно применить лишь одно правило largest-number (number ?number1) (not (number ?
    number2&:(> ?number2 ?number1))) => (printout t "Largest number is " ?number1 crlf)) Безусловно, это правило является несложным, ноне представляет собой самый быстрый способ поиска наибольшего числа. Если N показывает количество фактов в отношении number, то ив первом, и во втором шаблоне должно быть проведено количество сопоставлений с шаблонами, равное N. Даже несмотря на то, что количество
    частичных соответствий для первых двух шаблонов равно лишь единице, количество операций сравнения, которые должны быть выполнены для нахождения этого частичного соответствия,
    равно N в квадрате. Увеличение значения факта loop — max до 00, 3 0 О, 4 0 0 и т.д. показывает, что затраты времени на решение данной задачи пропорциональны квадрату Операция сравнения такого типа является чрезвычайно неэффективной, поскольку после добавления каждого числа оно сравнивается со всеми другими числами для определения того,
    не является ли оно наибольшим. Например, если факты,
    представляющие числа от 2 до 100, уже были внесены в список фактов, после чего внесен факт, представляющий число 1, то необходимо выполнить 199 операций сравнения для определения того, является ли число 1 наибольшим. Дело в том,
    что факт (number 1) согласуется с первым шаблоном, поэтому его необходимо будет сравнить со всеми 99 фактами,
    соответствующими второму шаблону, чтобы определить,
    представляет ли он наибольшее число. Первый ряд операций сравнения окончится неудачей (поскольку все числа от 2 до 100 Л. Сравнение простых правил со сложными правилами больше 1), но все равно придется провести сравнение для всех оставшихся чисел. Аналогичным образом, факт (number согласуется со вторым шаблоном, поэтому его необходимо будет сравнить со 100 фактами, согласующимися с первым шаблоном (который теперь включает также факт (number 1) Ключом к ускорению работы этой программы является предотвращение возможности выполнения ненужных сравнений.
    Такую задачу можно решить, используя дополнительный факт для отслеживания значения наибольшего числа и сравнивая с ним факты number. Ниже приведены правила, которые показывают, как осуществить этот замысел. (defrule try-number

    (number ?n) => (assert (try-number ?n))) (defrule largest-unknown ?
    attempt <- (try-number ?n) (not (largest ?)) — > (retract ?attempt)
    (assert (largest ?n))) (defrule largest-smaller ?old-largest <- (largest

    ?n1) ?attempt <- (try-number ?n2&:(> ?n2 ?n1)) — > (retract ?old- largest ?attempt) (assert (largest ?n2))) (defrule largest-bigger
    (largest ?n1) ?attempt <- (try-number ?n2& (<= ?n2 ?n1)) — >
    (retract ?attempt)) (defrule print-largest (declare (salience -1))
    (largest ?number) — > (printout t "Largest number is " ?number Вызов данной программы на выполнение со значениями max —
    loop, равными 100, 200, 300, 400 и т.д., показывает, что продолжительность прогона программы пропорциональна Этот результат становится еще более любопытным, если учесть,
    что впервой программе происходил запуск только двух правил,
    тогда как во второй программе запускаются приблизительно правил. Вторая группа пра-
    766 Глава 9. Модульное проектирование, управление выполнением. 9.19 Резюме В настоящей главе приведено вводное описание различных средств CLIPS, позволяющих обеспечить разработку надежных экспертных систем. Атрибуты deftemplate обеспечивают принудительное применение ограничений типов и значений, что позволяет предотвратить возникновение не только опечаток, но и семантических ошибок.
    Проверка соблюдения ограничений может осуществляться статически (на этапе определения выражений или конструкций)
    или динамически (на этапе вычисления выражений. Атрибут
    уре позволяет налагать вил показывает, что в правиле следует пытаться ограничивать не только количество имеющихся в нем частичных соответствий, но и количество сравнений,
    необходимых для определения частичных соответствий. Как показало первое правило, если для первого шаблона имеется согласований и для второго шаблона имеется Nсогласований,
    ,то в правиле выполняется N в квадрате операций сравнения при определении частичных соответствий для первых двух шаблонов. Даже если частичные соответствия не вырабатываются, время, затраченное на вычисления, будет примерно эквивалентно тому времени, которое требуется для выработки частичных соответствий в количестве N в квадрате
    Вторая группа правил уменьшает количество сравнений,
    которые должны быть выполнены, до N. Одновременно существует только один факт largest и один факт try — поэтому для правили в любой момент времени имеется лишь одночастичное соответствие. А поскольку вырабатываются N фактов try — number, то время вычисления ограничивается формированием N частичных соответствий. На первый взгляд может показаться, что возможна выработка больше одного факта try — number (что вызовет появление N в квадрате частичных соответствий. Но, как было сказано в разделе рабочий список правил действует по принципу стека. Это означает, что для всех активизаций try — number, помещенных в рабочий список правил с помощью правила loop — assert, запуск всегда будет осуществляться после любых активизаций правили. А
    поскольку эти правила всегда удаляют текущий факт try —
    number, то количество фактов такого типа никогда не превысит единицу. Этот пример демонстрирует два важных понятия. Во- первых, самый простой способ разработки кода для решения задачи на языке, основанном на правилах, не всегда является наилучшим. Во-вторых, количество выполняемых сравнений часто можно уменьшить, используя для хранения данных временные факты. В рассматриваемой задаче для хранения значения, применяемого в последующих операциях сравнения,
    служил факт largest, поэтому вовремя сравнения не приходилось выполнять поиск среди всех фактов number.
    9.19. Резюме 767 ограничения назначения, разрешенные для применения в определенном слоте. Атрибуты допустимого значения позволяют ограничивать значения, разрешенные для использования в слоте, указанным списком. Атрибут range дает возможность ограничивать числовые значения заданным диапазоном. Атрибут cardinality позволяет регламентировать минимальное и максимальное количества полей, хранимых в
    многозначном слоте. Два других атрибута конструкции de f template, атрибуты default и default — dynamic, не ограничивают значения слотов, но позволяют задать начальное значение слота конструкции de f template. Еще более сложные структуры управления могут быть созданы с помощью такого механизма,
    как значимость. Значимость используется для такого определения приоритетов правил, чтобы запуск активизированных правил с наивысшей значимостью осуществлялся в первую очередь. Средства определения значимости могут применяться в сочетании с управляющими фактами для отделения экспертных знаний от управляющих знаний. Конструкция бе f module позволяет секционировать базу знаний. В свою очередь, модули позволяют явно указывать,
    какие конструкции def template импортируются из других модулей и экспортируются в другие модули, поэтому дают возможность управлять тем, какие факты окажутся видимыми в этих модулях. Применение команды focus позволяет управлять исполнением программы без использования значимости для этого правила секционируются на группы и размещаются в отдельных модулях. В настоящей главе показано, насколько важно обеспечить эффективное согласование фактов с правилами. Эффективным средством осуществления такого процесса согласования является алгоритм, поскольку в этом алгоритме продуктивно применяются свойства временной и структурной избыточности, проявляющиеся в экспертных системах, основанных на правилах. Правила преобразуются в структуры данных в сети правил. Такая сеть состоит из сети шаблонов и сети соединений. В сети шаблонов факты согласуются с шаблонами, а сеть соединений обеспечивает единообразие связываний переменных в различных шаблонах.
    На производительность любого правила может оказывать существенное влияние порядок расположения шаблонов в этом правиле. Вообще говоря, наиболее конкретные шаблоны и шаблоны, согласующиеся с наименьшим количеством фактов,
    должны размещаться ближе к началу левой части правила, а шаблоны, согласующиеся с непостоянными фактами, должны размещаться ближе к концу левой части правила. Для
    отображения сопоставлений с шаблонами, частичных соответствий и активизаций правила используется команда matches. Для повышения эффективности правил применяется несколько методов, включая надлежащее использование многозначных переменных, правильное позиционирование проверочных шаблонов и использование встроенных ограничений сопоставления с шаблонами. Кроме того, при достижении оптимальной эффек-
    Глава 9. Модульное проектирование, управление выполнением. 768 тивности необходимо учитывать компромиссы, связанные с применением общих или конкретных правила также простых или сложных правил. задачи Модифицируйте программу Sticks, описанную в главе 8, так,
    чтобы управляющие правила были отделены отправил ведения игры. Для назначения управляющим правилам более низкого приоритета используйте значимость (атрибут salience). Добавьте к программе для "мира блоков, приведенной в разделе 7.23, такое правило, которое удаляет цель хода, если эта цель уже выполнена. 9.3. Создайте правила для реализации процедуры принятия решений, позволяющей определить,
    является ли силлогизм действительным. Проверьте разработанную программу на силлогизме, приведенном в задаче 8.24 (см. с. 688). 9.4. Напишите программу, позволяющую определить простые множители числа. Например, простыми множителями числа 15 являются 3 и 5. 9.5. По приведенным в табл. 9.2 данным о расстояниях между городами в штате Техас найдите решение задачи коммивояжера (см. св разделе) для указанных городов. Напишите программу,
    позволяющую найти самый короткий маршрут посещения всех городов. В качестве входных данных для программы должен применяться город, с которого начинается маршрут, и список посещаемых городов. Для проверки программы определите самый короткий маршрут, начинающийся в г. Хьюстон (Таблица 9.2. Расстояния между городами в штате Техасе

    Houston Dallas Austin Abilene Waco 9.6. При условии, что дана следующая информация, напишите программу, которая запрашивает у пользователя данные о типе видимых облаков и направлении ветра, а затем выдает прогноз с указанием вероятности дождя. Кучевые облака указывают на то, что стоит хорошая погода, но они могут превратиться в слоисто-дождевые облака, если дует ветер, имеющий Houston Dallas Austin Abilene
    Waco 241 162 351 183 241 162 351 183 202 186 97 202 — 216 106 186 216 — 186 97 106 Задачи 769 направление от северо-восточного до южного.
    Перисто-кучевые облака указывают на то, что в течение суток пройдет дождь, если дует ветер, имеющий направление от северо-восточного до южного. Если дует ветер, имеющий направление от северного до западного, то может быть предсказана пасмурная погода. Слоисто-кучевые облака могут превратиться в кучево-дождевые облака, если дует ветер,
    имеющий направление от северо-восточного до южного.
    Слоистые облака указывают на возможность легкого дождя.
    Если дует ветер, имеющий направление от северо-восточного до южного, то пройдет продолжительный дождь. Слоисто- дождевые облака указывают на возможность кратковременного дождя, если дует ветер, имеющий направление от юго-западного до северного. Продолжительный дождь возможен, если дует ветер, имеющий направление от северо-восточного до южного.
    Кучево- дождевые облака свидетельствуют о возможности ливня, если они появляются перед полуднем. Перисто-слоистые облака указывают на возможность дождя в течение 15 — часов, если дует ветер, имеющий направление от северо- восточного до южного. Высокослоистые облака указывают на возможность дождя в течение суток, если дует ветер, имеющий направление от северо-восточного до южного, а вином случае будет пасмурная погода. Высококучевые облака указывают на возможность дождя в течение 15 — 20 часов, если дует ветер,
    имеющий направление от северо-восточного до южного. 9.7.
    Напишите программу для преобразования сообщения,
    заданного в виде азбуки Морзе, в эквивалентный этому сообщению ряд знаков алфавита. Ниже приведен пример входных и выходных данных этой программы (где * и—
    обозначают точки и тире, а знак / используется для отделения друг от друга символов азбуки Морзе Enter а message ( to end): * * * / — — — / * * *J The message is S О S Enter а message
    ( to end): CLIPS> Коды азбуки Морзе и эквивалентные им знаки алфавита приведены на рис. 9.12. 9.8. Напишите программу, которая после ввода в нее выражения, состоящего из чисел и обозначений единиц измерения, преобразует все единицы в этом выражении в набор базовых единиц измерения
    (таких как метры, секунды, килограммы, пенсы и амперы. Ниже приведен пример входных и выходных данных этой программы an expression ( to end): 30 meters / minuteJ
    770 Глава 9. Модульное проектирование, управление выполнением. Рис. 9.12. Коды азбуки Морзе и эквивалентные им знаки алфавита Conversion is 0.5 m / s Enter an expression
    ( to end): 1 CLIPS> Рис. 9.13. Первое поколение клеток в рассматриваемом примере игры Life 9.9. Напишите программу для ведения игры Life (широко распространенная игра, в которой моделируются клеточные автоматы. Предположим, что имеется двумерный массив клеток, в котором каждая клетка является либо мертвой, либо живой. Состояние клеток следующего поколения определяется на основе следующих правил. Любая живая клетка, которая является смежной точно с двумя или тремя другими живыми клетками, продолжает жить.
    Любая живая клетка, которая является смежной меньше чем с двумя или больше чем стремя другими живыми клетками,
    умирает. Любая мертвая клетка, которая является смежной точно стремя другими живыми клетками, становится живой.
    Например, предположим, что первое поколение было представлено в виде массивах, в котором живые клетки обозначены точками (рис. 9.13).

    Задачи 771 В таком случае следующее поколение выглядело бы так, как показано на рис. 9.14. Рис. 9.14. Второе поколение клеток в рассматриваемом примере игры Life Вычислите состояние игры для следующих четырех поколений, используя начальную конфигурацию, приведенную на рис. 9.13. Четырехугольник — это фигура с четырьмя сторонами.
    Четырехугольник именуется равнобедренным, если он имеет две разные пары сторон одинаковой длины, следующих друг за другом по периметру. Четырехугольник называется трапецоидом, если он имеет по крайней мере одну пару параллельных сторон. Четырехугольник называется параллелограммом, если обе пары его противоположных сторон параллельны. Четырехугольник называется ромбом, если все его четыре стороны равны по длине. Четырехугольник называется прямоугольником, если он имеет четыре прямых угла. Четырехугольник называется квадратом, если он имеет четыре равных стороны и четыре прямых угла. Обратите внимание на то, что ромб представляет собой сочетание равнобедренного четырехугольника и параллелограмма,
    параллелограмм представляет собой трапецоид, прямоугольник представляет собой параллелограмма квадрат представляет собой сочетание ромба и прямоугольника. Напишите программу,
    которая после получения координат четырех точек, образующих четырехугольник, определяет тип четырехугольника. В
    программе должна учитываться возможная ошибка округления
    (примите предположение, что две стороны равны, если разница между значениями их длины не превышает 0,00001). Проверьте разработанную вами программу по приведенным ниже данным о четырехугольниках. а) Точки (ООО) и (3, 2). б) Точки, (2,5), (4,3) ив) Точки (О, О, (3,2), (4,2) и (9,0).
    772 Глава 9. Модульное проектирование, управление выполнением. г) Точки (0,0), (1,3), (5,3) и (4,0). д) Точки (О, О

    (3, 5. 196152), (9, 5.196152) и (6, О. е) Точки (0,0), (0,4), (2,4) и. ж) Точки (О, 2), (4, 6), (6,4) из) Точки (О, 2), (2, 4), (4,
    2) и (2, О. Подсказка. Если сторона 1 содержит точки (x1, y1) их, y2) и сторона 2 содержит точки (x3, y3) и (x4, y4), то сторона параллельна стороне 2, если (x2 — х) * (y4 — y3) равно (х х) * (y2 — y1). 9.11. Напишите программу CLIPS, которая может определить, является ли простое предложение грамматически правильным. Грамматически правильные предложения должны соответствовать следующему определению, представленному в виде нормальной формы Бэкуса — Наура: ::=
    [] []
    * =
    ::= а an the ::= red shiny !
    heavy ::= ball wrench gun pliers
    ::= with in at ::= get ! throw shoot В качестве примера можно привести следующий диалога ОК Enter а sentence ( to end): gun shootJ I don' t understand. Enter а sentence ( to end): CLIPS> 9.12. Модифицируйте программу, разработанную в результате решения задачи 8.12 (см. с. 683), таким образом,
    чтобы в список включались только кустарники, имеющие все необходимые характеристики. Например, если пользователь указывает, что растение должно обладать устойчивостью к холоду и засухе, тов список следует включить только войлочную восковницу и обыкновенный можжевельник. Если всем требованиям не удовлетворяет ни один из кустарников, то для указания на это должно быть выведено сообщение.
    Задачи 773 9.13. Предположим, что имеется множество генераторов, вырабатывающих электроэнергию, и множество устройств, потребляющих электроэнергию. Напишите программу, позволяющую подключать устройства к генераторам таким образом, чтобы было сведено к минимуму количество используемых генераторов и количество электроэнергии, не потребляемой от каждого используемого генератора. Например
    если есть четыре генератора, вырабатывающие 5, 6, 7 и 10 ватт электроэнергии, и четыре устройства, потребляющие 4, 5, 6 и ватт электроэнергии, то подключение устройства на 5 ватт к генератору на 5 ватт, устройства на 7 ватт к генератору на 7 ватт и устройств на 4 ватта и 6 ватт к генератору на 10 ватт позволяет минимизировать и количество используемых генераторов, и количество незатребованной электроэнергии. Для ввода и вывода данных в программе могут служить последовательности фактов. Проверьте разработанную вами программу на приведенном выше примере, а также проведите проверку для такого случая, когда генераторы остаются теми же самыми, как ив указанном примерено подключаемые устройства потребляют, 3, 4, 5 и 9 ватт электроэнергии. 9.14. Напишите программу,
    которая функционирует как операционная система компьютера и определяет подходящие адреса в памяти для загрузки приложений, выделяя для них постоянные объемы памяти. В
    качестве входных данных для программы должны использоваться последовательности фактов, подобные следующим (launch (application word-processor) (memory-needed
    2)) (launch (application spreadsheet) (memory-needed б) (launch
    (application game) (memory-needed 1)) (terminate (application word-processor)) (launch (application game) (memory-needed 1))
    (terminate (application spreadsheet)) (terminate (application Предположим, что компьютер имеет память объемом восемь мегабайтов и что количество мегабайтов, требуемое для любого приложения, измеряется целым числом. Если в памяти имеется участок, точно соответствующий требованиям приложения к объему памяти, этот участок и должен использоваться.
    Например, если имеются два участка свободной памяти, причем один из них имеет объем шесть мегабайтов, а второй — четыре мегабайта, и произошел запуск приложения, для которого требуется четыре мегабайта, то приложение должно быть загружено в свободный участок с объемом четыре мегабайта, а не в свободный участок с объемом шесть мегабайтов. После обработки команды launch (запустить приложение) или за

    774 Глава 9. Модульное проектирование, управление выполнением. вершить работу приложения) на внешнее устройство должно быть выведено сообщение. Если нет достаточно большого участка памяти для запуска приложения,
    должно быть выведено соответствующее сообщение. Проверьте разработанную вами программу, добавив к базе знаний приведенные выше факты и введя команду run после внесения в список фактов всех фактов. Вывод программы должен выглядеть примерно так Application word-processor memory location is 1 to 2. Application spreadsheet memory location is 3 to 8.
    Unable to launch application game. Terminating word-processor.
    Application game memory location is 1 to 1. Terminating spreadsheet. Terminating game. 9.15. Разработайте интерфейс текстового меню, который является автономным в пределах модуля и подходит для повторного использования в других программах. Пункты меню должны быть представлены как факты. Для пунктов меню должны поддерживаться два типа действий. Одно из этих действий должно обеспечивать прекращение выполнения программы. После выбора пункта меню этого типа программа должна прекратить выполнение.
    Пункт меню другого типа должен обеспечивать внесение факта в список фактов и перевод фокуса на конкретный модуль. Для этого действия факты menu — item должны содержать слоты,
    которые указывают модуль, переходящий в фокус, и значение факта, которое вносится в список фактов после выбора пункта меню. Например, в приведенном ниже диалоге результатом выбора пункта меню "Option А" должно быть следующее:
    перевод фокуса на модуль Аи внесение в список фактов указанного факта (menu — select (value option-a) ), где Аи а — значения, указанные в факте menu — item. Модуль содержит правило, которое согласуется с фактом menu — что приводит к выводу на внешнее устройство сообщения "Executing Option A". CLIPS> (run) Select one of the following options: 1 — Option А 2 — Option В 9 — Quit Program Your choice:

    1 Executing Option А Select one of the following options: 1 — А 2 — Option В
    Задачи 775 9.16. 9.17. 9.18. 9 — Quit Program Your choice: 9
    CLIPS> Модифицируйте программу, разработанную в результате решения задачи 8.33 (см. с. 691), таким образом, чтобы для вывода информации обо всех звездах, имеющих указанный спектральный класс, всех звездах, имеющих указанную величину, и всех звездах, соответствующих и указанному спектральному классу, и указанный величине, наряду с расстоянием этих звезд от Земли в световых годах использовались отдельные модули. Модифицируйте программу,
    разработанную в результате решения задачи 8.15 (см. с. чтобы включить в нее правила, касающиеся остальных драгоценных камней, перечисленных в табл. 7.2 с описанием драгоценных камней в задаче 7.13 (см. с. 620). Для драгоценных камней, имеющих единственное числовое значение с указанием их твердости или плотности, измените правила так, чтобы было приемлемо любое значение, находящееся в пределах 0,01 от указанного значения. Включите правила, позволяющие проверить введенные данные и повторно передать запрос пользователю, если твердость не находится в пределах включительно, а плотность в пределах 1 — 6 включительно. В
    табл. 9.3 перечислены доступные предметы и имена преподавателей, а также указано время проведения занятий, в течение которых ведется преподавание каждого предмета в средней школе с факультативным посещением. Ученик сам выбирает предметы, преподавателей и время проведения занятий. Напишите программу, которая предлагает наиболее подходящий вариант выбора преподавателя и времени проведения занятий для изучения выбранного учеником предмета. Входными данными для программы является факт, в котором указан предмет, планируемый для изучения, а также обозначены приоритеты, позволяющие выяснить, какие преподаватели и какое время проведения занятий являются
    более или менее предпочтительными. Для определения "наилучшего" преподавателя и времени проведения занятий оцените каждый возможный вариант следующим образом:
    начальная оценка — нуль выбор более предпочтительного преподавателя или времени проведения занятий приводит к добавлению к оценке одного пункта выбор менее предпочтительного преподавателя или времени проведения занятий приводит к вычитанию из оценки одного пункта выбор преподавателя или времени проведения занятий, в отношении которых не определены предпочтения, приводит к тому, что оценка остается неизменной "наилучшими" являются преподаватель и время проведения занятий с самой высокой оценкой.
    Глава 9. Модульное проектирование, управление выполнением. 776 Таблица 9.3. Предметы, имена преподавателей и время проведения занятий Преподаватель
    Время проведения занятий Предмет Алгебра Алгебра История
    Америки История Америки Искусство Биология 1, 2, 3 3, 4, 5, 6 5
    Джоунз Смит Вейл Хилл 1,2 1, 3, 5 1, 2, 5 3,6 6 Дженкинс Долби
    Долби Винсон Химия Химия 2,4 1 Французский язык Геология
    Блэйк Винсон 5,6 1 Джоунз Смит Блэйк Хеннинг Дэвис Дженкинс
    Мак Кинг Испанский язык История Техаса История Техаса
    Мировая история Мировая история 9.19. Модифицируйте программу, разработанную в результате выполнения задачи см. с. 684), таким образом, чтобы был предусмотрен вывод на внешнее устройство информации об общей стоимости конфигурации. Если количество выбранных приспособлений превышает количество доступных отсеков или если количество электроэнергии, требуемое для приспособлений, превышает количество электроэнергии, предоставляемое блоком, то должно быть выведено предупреждающее сообщение. Перечислите спецификации узла шаблона, сформированные для слотов с перечисленными ниже шаблонами. Геометрия
    Геометрия Немецкий язык Литература Литература Музыка
    Физкультура Физкультура Физкультура Физика Симпсон Винсон
    Блэйк Вейл Хилл Вейл Хилл 2, 3, 4, 5, 6 1, 2, 3, 4, 5 2,4 1, 2, 3, 4,
    5 1, 2,3, 4, 6 2, 3, 4, 5, 6 2, 3, 5 1,3 2, 3, 4 5,6 2, 3, 4 Задачи 777 а) (blip (altitude 100)). б) (blip (altitude ?x&:(> х в) (stop-light (color -red)). r) (balloon (color bluewhite)). Нарисуйте сеть шаблонов для следующей группы шаблонов (x red) (у у) (z уху) (с х х у) (item (а red) (b blue(yellow)) 9.22. Нарисуйте сеть шаблонов и сеть соединений для приведенных ниже правил. Составьте список выражений, вычисляемых в каждом узле. (defrule rule1
    (phase (name testing)) (data (х х) (у уху) (ух х ух х) (у уху) ух. Перезапишите следующее правило в целях повышения его эффективности bad-rule (items (х х) (items (х х) (items (х ?хЗ) (test

    1   ...   55   56   57   58   59   60   61   62   ...   74


    написать администратору сайта