Реализация модели выбора состава PC

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 22.01.2015
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Курсовая работа

Реализация модели выбора состава PC

Введение

интерфейс экспертный программа алгоритм

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

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

Курсовая работа состоит из 2 глав. Первая глава дает общие представления об искусственном интеллекте, а вторая - описание создания и работы программы. В приложении приведен текст программы. Данная курсовая работа написана на языке Visual Prolog v. 7.4.

Задание на курсовую работу

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

1. Постановка задачи

1.1 Понятие об экспертной системе

Экспертная система - это система, функционирование которой опирается на знания о проблемной области, которые хранятся в ее памяти. Поэтому проблема представления знаний для ЭС является центральной.

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

1.2 Назначение экспертных систем

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

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

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

1.3 Структура экспертных систем

Типичная статическая ЭС состоит из следующих основных компонентов: решателя (интерпретатора), рабочей памяти (РП), называемой также базой данных (БД), базы знаний (БЗ), компонентов приобретения знаний, объяснительного компонента, диалогового компонента.

Решатель, используя исходные данные из рабочей памяти и знания из БЗ, формирует такую последовательность правил, которые, будучи примененными к исходным данным, приводят к решению задачи.

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

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

Компонент приобретения знаний автоматизирует процесс наполнения ЭС знаниями, осуществляемый пользователем-экспертом.

Объяснительный компонент объясняет, как система получила решение задачи (или почему она не получила решение) и какие знания она при этом использовала, что облегчает эксперту тестирование системы и повышает доверие пользователя к полученному результату.

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

1.4 Базы Данных - Базы Знаний

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

По мере развития исследований в области ИС возникла концепция знаний, которые объединили в себе многие черты процедурной и декларативной информации.

В ЭВМ знания так же, как и данные, отображаются в знаковой форме - в виде формул, текста, файлов, информационных массивов и т.п. Таким образом, знания (в узком смысле) - это особым образом организованные данные. А между тем, в системах ИИ знания являются основным объектом формирования, обработки и исследования. База знаний, как и база данных, - необходимая составляющая программного комплекса ИИ. Машины, реализующие алгоритмы ИИ, называются машинами, основанными на знаниях, а подраздел теории ИИ, связанный с построением экспертных систем, - инженерией знаний.

1.5 Особенности знаний

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

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

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

3. Связность. В информационной базе между информационными единицами должна быть предусмотрена возможность установления связей различного типа. Прежде всего эти связи могут характеризовать отношения между информационными единицами. Семантика отношений может носить декларативный или процедурный характер. Например, две или более информационные единицы могут быть связаны отношением «одновременно», две информационные единицы - отношением «причина - следствие» или отношением «быть рядом». Приведенные отношения характеризуют декларативные знания. Если между двумя информационными единицами установлено отношение «аргумент - функция», то оно характеризует процедурное знание, связанное с вычислением определенных функций.

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

4. Семантическая метрика. На множестве информационных единиц в некоторых случаях полезно задавать отношение, характеризующее ситуационную близость информационных единиц, т.е. силу ассоциативной связи между информационными единицами. Его можно было бы назвать отношением релевантности для информационных единиц. Такое отношение дает возможность выделять в информационной базе некоторые типовые ситуации (например, «покупка», «регулирование движения на перекрестке»). Отношение релевантности при работе с информационными единицами позволяет находить знания, близкие к уже найденным.

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

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

1.6 Этапы разработки экспертных систем

Критерии, которым должна соответствовать поставленная задача:

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

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

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

3) задача должна быть достаточно сложна, чтобы оправдать затраты на разработку ЭС. Однако она не должна быть чрезмерно сложной (решение занимает у эксперта часы, а не недели), чтобы ЭС могла ее решать;

4) задача должна быть достаточно узкой, чтобы решаться методами ЭС, и практически значимой.

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

2. Обоснование выбора модели представления знаний

2.1 Продукционная модель представления знаний

Продукционная модель представления знаний наиболее распространена в приложениях. Модель реализуется правилами-продукциями:

если <условие> то <заключение>.

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

Пример. Продукцией будет следующее правило:

если (курс доллара-растет) (сезон-осень) (число продавцов-убывает)

то (прогноз цен на рынке жилья - рост рублевых цен на квартиры).

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

Существуют две основные стратегии вывода на множестве правил-продукций:

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

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

Обе приведенные стратегии вывода имеют недостатки, достоинства и модификации.

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

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

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

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

ПРЕИМУЩЕСТВА И НЕДОСТАТКИ ПРОДУКЦИОННЫХ СИСТЕМ.

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

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

Системы продукции являются модульными. Удаление или добавление продукций приводит к изменению остальных продукций.

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

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

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

Параллельность и асинхронность работы системы продукций делает их наиболее подходящими для ЭВМ новой архитектуры (наличие нескольких процессоров).

Продукционные модели имеют два недостатка: при большом числе продукций (> 1000) проверка непроворечивости становится сложнее; неоднозначность выбора из фронта готовой продукции.

Недостаток: Продукционные модели имеют два недостатка: при большом числе продукций (> 1000) проверка непроворечивости становится сложнее; неоднозначность выбора из фронта готовой продукции.

2.2 Фреймовая модель представления знаний

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

Другими словами, основная идея фреймовой модели заключается в том, что любому объекту описываемой предметной области ставится в соответствие некоторый скелет, шаблон, через поведение которого проявляются особенности описываемого объекта отображаемой предметной области.

Фреймовое представление наглядно и структурировано и позволяет получать описание системы в виде связанных, иерархических структур (фреймов, единиц представления знаний).

Фреймовая модель предполагает в качестве основной структурной единицы понятие или некоторый его аналог.

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

Основным пунктом является блок 2 на рисунке, который иллюстрирует, ту мысль, что в основе порождения текста (перевода) лежит определенная информационная структура - образ-росток (фрейм, либо система фреймов).

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

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

В перечислим некоторые важные преимущества и перспективы развития фреймовых моделей.

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

Фреймовые представления имеют большую дидактическую ценность; их развитие в виде сетевых моделей еще только разрабатывается.

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

На уровне нейронных механизмов концепция фреймов подкрепляется современными работами Величковского Б.М., Иваницкого А.М., Лебедева А.Н., Магазанника В.Д. и др.

Фреймовый подход и его модификации позволяют формулировать новые направления в лингвистике.

2.3 Семантическая сеть

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

3. Обоснования выбора языка программирования

Для написания данной программы был выбран язык Visual Prolog. Visual Prolog - интегрированная среда разработки баз знаний, выполненной в идеологии Visual, упрощающей разработку программ для ОС Windows. Включает в себя удобный текстовый редактор, различные редакторы ресурсов, средства разработки гипертекстовых Help_систем, оптимизирующий компилятор. Visual Prolog автоматизирует труд программиста по построению сложных процедур. С его помощью проектирование пользовательского интерфейса и связанных с ним окон, диалогов, меню, кнопок, строк состояния производится в графической среде. С созданными объектами сразу же могут работать различные Кодовые Эксперты, генерирующие программные коды на языке Пролог.

4. Разработка алгоритма программы, создание пользовательского интерфейса и их описание

Алгоритм программы и пользовательский интерфейс разработан в программной среде Visual Prolog v. 7.4.

4.1 Создание пользовательского графического интерфейса (GUI)

Запускаем Visual Prolog v. 7.4, создаем новый проект. Для этого выбираем в главном меню пункт ProjectNew… После чего задаем имя проекта и выбираем тип проекта GUI.

4.2 Создание формы sostavPC

Чтобы создать форму в пакете Forms, нужно выделить в дереве проекта этот пакет. Далее выбрать пункт меню FileNew in Existing Package. После чего выбираем в открывшемся меню Form, указываем имя формы и нажимаем Create.

4.3 Помещение на форму надписей, поля вывода, выпадающих списков и кнопок

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

4.4 Компиляция программы

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

4.5 Включение элемента New в панели задач

Когда вы запускали пустое приложение, вы, скорее всего, заметили тот факт, что пункт меню File/New отключен. Чтобы включить его, дважды щелкните по ветке дерева проекта под названием TaskMenu.mnu. Затем, разверните дерево, находящееся в нижней части диалогового окна TaskMenu, и уберите галочку Disabled, относящуюся к пункту &New/tF7. Сохраните изменения.

4.6 Добавление кода к New из дерева проекта

Чтобы добавить код к пункту File/New, нажмите на ветке дерева проекта TaskWindow.win правой кнопкой мыши, которая откроет контекстное меню. Выберите пункт Code Expert. Продвигайтесь по дереву в то место, как показано на рисунке ниже. Нажмите add, потом два раза щелкнете по пункту id_file_newonFileNew.

Это откроет текстовый редактор, со следующим фрагментом:

clauses

onFileNew (_Source, _MenuTag).

Откомпилируйте программу, затем измените этот фрагмент так:

clauses

onFileNew (W, _MenuTag):-

X:= query:new(W),

X:show().

Откомпилируйте программу снова, выбрав пункт Build/Build на панели задач. Запустите программу, и вы увидите, что, когда вы нажимаете File/New, создается новая форма.

4.7 Заполнение выпадающих списков

Чтобы заполнить выпадающие списки данными, необходимо в окне «Properties» перейти на вкладку «Events» и добавить событие «onShow» в месте, указанном на рисунке ниже.

После двойным нажатием по событию перейти в окно ввода кода и добавить следующий кусок кода:

predicates

onShow: window:showListener.

clauses

onShow (_Source, _Data):-

Mainboard=listEdit_ctl:tryGetVpiWindow(),

Cpu=listEdit1_ctl:tryGetVpiWindow(),

Video=listEdit4_ctl:tryGetVpiWindow(),

Ram=listEdit2_ctl:tryGetVpiWindow(),

Rom=listEdit6_ctl:tryGetVpiWindow(),

Power=listEdit3_ctl:tryGetVpiWindow(),

Monitor=listEdit7_ctl:tryGetVpiWindow(),

Hdd=listEdit5_ctl:tryGetVpiWindow(),!,

vpi:lboxAdd (Mainboard, [«ASUSTeK DSBF-D/SAS/2GBL (RTL) Dual Socket771<i5000P>», «GigaByte GA-P35_DS4 (RTL) Socket775», «INTEL S3000AHV (RTL) Socket775 <i3000>»]),

vpi:lboxAdd (Cpu, [«Intel Xeon X5355 BOX Active or 1U Passive 2.66>», «Intel Pentium 4 3.4», «AMDATHLON_64 X2 4600+»]),

vpi:lboxAdd (Video, [«Albatron NVidia GeForce4 Ti4200», «512Mb <PCI-E> DDR Gigabyte GV-NX86T512H (RTL)», «768Mb <PCI-E> DDR MSI MS-V801 NX8800GTX-T2D768E-HD-OC (RTL)»]),

vpi:lboxAdd (Ram, [«HYUNDAI/HYNIX DDR-II DIMM 1Gb <PC_5300>», «Corsair <TWIN3X2048-1333C9DHX> DDR-III DIMM 2Gb <PC_10664>», «Kingmax DDR-II DIMM 2Gb KIT 2*1Gb <PC_8500>»]),

vpi:lboxAdd (Rom, [«RAM&DVDR/RW&CDRW ASUS DRW_1814BL», «RAM & DVDR/RW & CDRW LG GSA-E50L», «RAM & DVDR/RW & CDRW TSST SH-S203D»]),

vpi:lboxAdd (Power, [«ZALMAN <CNPS8700 LED>(RTL) Cooler for Socket775/754/939/940/AM2», «HighPaq <FSC-H004_Silver>», «Glacial Tech <Igloo 7320 TC (E)> Cooler for Socket AM2/754/939/940/F»]),

vpi:lboxAdd (Monitor, [«19' MONITOR Acer AL1916Cs», «17' MONITOR 0.20 Samsung SyncMaster 793DF», «17' MONITOR ASUS VB171D BK»]),

vpi:lboxAdd (Hdd, [«750.0 Gb SATA-II 300 Hitachi 7200rpm», «250 Gb SATA-II 300 Seagate Barracuda 7200rpm», «500 Gb SATA-II 300 Western Digital 7200rpm»]).

onShow(_, _).

После этого выпадающие списки заполняются данными, которые мы указали.

4.8 Создание базы знаний

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

predicates

mainboard: (string, integer) nondeterm (i, o).

cpu: (string, integer) nondeterm (i, o).

video: (string, integer) nondeterm (i, o).

ram: (string, integer) nondeterm (i, o).

rom: (string, integer) nondeterm (i, o).

power: (string, integer) nondeterm (i, o).

mon: (string, integer) nondeterm (i, o).

hdd: (string, integer) nondeterm (i, o).

clauses

mainboard («ASUSTeK DSBF-D/SAS/2GBL (RTL) Dual Socket771<i5000P>», 15300).

mainboard («GigaByte GA-P35_DS4 (RTL) Socket775», 10000).

mainboard («INTEL S3000AHV (RTL) Socket775 <i3000>», 5600).

cpu («Intel Xeon X5355 BOX Active or 1U Passive 2.66», 16800).

cpu («Intel Pentium 4 3.4», 6200).

cpu («AMD ATHLON_64 X2 4600+», 8500).

video («Albatron NVidia GeForce4 Ti4200», 1200).

video («512Mb <PCI-E> DDR Gigabyte GV-NX86T512H (RTL)», 4000).

video («768Mb <PCI-E> DDR MSI MS-V801 NX8800GTX-T2D768E-HD-OC (RTL)», 20000).

ram («HYUNDAI/HYNIX DDR-II DIMM 1Gb <PC_5300>», 550).

ram («Corsair <TWIN3X2048-1333C9DHX> DDR-III DIMM 2Gb <PC_10664>», 15500).

ram («Kingmax DDR-II DIMM 2Gb KIT 2*1Gb <PC_8500>», 7000).

rom («RAM&DVDR/RW&CDRW ASUS DRW_1814BL», 1000).

rom («RAM & DVDR/RW & CDRW LG GSA-E50L», 1300).

rom («RAM & DVDR/RW & CDRW TSST SH-S203D», 1500).

hdd («750.0 Gb SATA-II 300 Hitachi 7200rpm», 11000).

hdd («250 Gb SATA-II 300 Seagate Barracuda 7200rpm», 1800).

hdd («500 Gb SATA-II 300 Western Digital 7200rpm», 5400).

power («ZALMAN <CNPS8700 LED>(RTL) Cooler for Socket775/754/939/940/AM2», 1500).

power («HighPaq <FSC-H004_Silver>», 1200).

power («Glacial Tech <Igloo 7320 TC (E)> Cooler for Socket AM2/754/939/940/F», 3700).

mon («19' MONITOR Acer AL1916Cs», 7000).

mon («17' MONITOR 0.20 Samsung SyncMaster 793DF», 5000).

mon («17' MONITOR ASUS VB171D BK», 5600).

4.9 Добавление обработчика кнопки

Чтобы добавить обработчик кнопки «Вывести стоимость», необходимо в окне «Properties» перейти на вкладку «Events» и добавить событие «onCost_pushButtonClick» в месте, указанном на рисунке ниже.

После двойным нажатием по событию перейти в окно ввода кода и добавить следующий кусок кода:

predicates

onPushButtonClick: button:clickResponder.

clauses

onPushButtonClick(_Source) = button:defaultAction:-

A = listEdit_ctl:getText(),

B = listEdit1_ctl:getText(),

C = listEdit2_ctl:getText(),

D=listEdit3_ctl:getText(),

E=listEdit4_ctl:getText(),

F=listEdit5_ctl:getText(),

G=listEdit6_ctl:getText(),

H=listEdit7_ctl:getText(),

mainboard (A, Stoimost1),

cpu (B, Stoimost2),

ram (C, Stoimost3),

power (D, Stoimost4),

video (E, Stoimost5),

hdd (F, Stoimost6),

rom (G, Stoimost7),

mon (H, Stoimost8),

Stoimost=Stoimost1+Stoimost2+Stoimost3+Stoimost4+Stoimost5+Stoimost6+Stoimost7+Stoimost8,

Summa=toString(Stoimost),

edit_ctl:setText(Summa),!.

onPushButtonClick(_Source) = button:defaultAction().

Теперь при нажатии кнопки «Вывести стоимость» в поле Edit будет выводится стоимость конфигурации компьютера.

5. Описание работы программы

При запуске программы BuildExecute (Ctrl+F5) появляется окно. При нажатии клавиши F7 (FileNew) появляется окно формы sostavPC.

Код к пункту File\New в TaskWindow.pro:

predicates

onFileNew: window:menuItemListener.

clauses

onFileNew (_Source, _MenuTag):-

Form=sostavPC:new(_Source),

Form:show().

Примечание: при выборе пункта File\New отобразить содержимое формы sostavPC на экран.

Для выбора устройств используются поля со списком - listEdit_ctl. Чтобы при загрузке формы варианты для выбора устройства сразу появлялись в списке, используется предикат onShow. Его код:

predicates

onShow: window:showListener.

clauses

onShow (_Source, _Data):-

Mainboard=listEdit_ctl:tryGetVpiWindow(),

Cpu=listEdit1_ctl:tryGetVpiWindow(),

Video=listEdit4_ctl:tryGetVpiWindow(),

Ram=listEdit2_ctl:tryGetVpiWindow(),

Rom=listEdit6_ctl:tryGetVpiWindow(),

Power=listEdit3_ctl:tryGetVpiWindow(),

Monitor=listEdit7_ctl:tryGetVpiWindow(),

Hdd=listEdit5_ctl:tryGetVpiWindow(),!,

vpi:lboxAdd (Mainboard, [«ASUSTeK DSBF-D/SAS/2GBL (RTL) Dual Socket771<i5000P>», «GigaByte GA-P35_DS4 (RTL) Socket775», «INTEL S3000AHV (RTL) Socket775 <i3000>»]),

vpi:lboxAdd (Cpu, [«Intel Xeon X5355 BOX Active or 1U Passive 2.66>», «Intel Pentium 4 3.4», «AMDATHLON_64 X2 4600+»]),

vpi:lboxAdd (Video, [«Albatron NVidia GeForce4 Ti4200», «512Mb <PCI-E> DDR Gigabyte GV-NX86T512H (RTL)», «768Mb <PCI-E> DDR MSI MS-V801 NX8800GTX-T2D768E-HD-OC (RTL)»]),

vpi:lboxAdd (Ram, [«HYUNDAI/HYNIX DDR-II DIMM 1Gb <PC_5300>», «Corsair <TWIN3X2048-1333C9DHX> DDR-III DIMM 2Gb <PC_10664>», «Kingmax DDR-II DIMM 2Gb KIT 2*1Gb <PC_8500>»]),

vpi:lboxAdd (Rom, [«RAM&DVDR/RW&CDRW ASUS DRW_1814BL», «RAM & DVDR/RW & CDRW LG GSA-E50L», «RAM & DVDR/RW & CDRW TSST SH-S203D»]),

vpi:lboxAdd (Power, [«ZALMAN <CNPS8700 LED>(RTL) Cooler for Socket775/754/939/940/AM2», «HighPaq <FSC-H004_Silver>», «Glacial Tech <Igloo 7320 TC (E)> Cooler for Socket AM2/754/939/940/F»]),

vpi:lboxAdd (Monitor, [«19' MONITOR Acer AL1916Cs», «17' MONITOR 0.20 Samsung SyncMaster 793DF», «17' MONITOR ASUS VB171D BK»]),

vpi:lboxAdd (Hdd, [«750.0 Gb SATA-II 300 Hitachi 7200rpm», «250 Gb SATA-II 300 Seagate Barracuda 7200rpm», «500 Gb SATA-II 300 Western Digital 7200rpm»]).

onShow(_, _).

После того как выбраны все устройства надо нажать на кнопку «Вывести стоимость», после этого в поле cost_edit_ctl выводится стоимость конфигурации.

Обработчик кнопки «Вывести стоимость»:

predicates

onPushButtonClick: button:clickResponder.

clauses

onPushButtonClick(_Source) = button:defaultAction:-

A = listEdit_ctl:getText(),

B = listEdit1_ctl:getText(),

C = listEdit2_ctl:getText(),

D=listEdit3_ctl:getText(),

E=listEdit4_ctl:getText(),

F=listEdit5_ctl:getText(),

G=listEdit6_ctl:getText(),

H=listEdit7_ctl:getText(),

mainboard (A, Stoimost1),

cpu (B, Stoimost2),

ram (C, Stoimost3),

power (D, Stoimost4),

video (E, Stoimost5),

hdd (F, Stoimost6),

rom (G, Stoimost7),

mon (H, Stoimost8),

Stoimost=Stoimost1+Stoimost2+Stoimost3+Stoimost4+Stoimost5+Stoimost6+Stoimost7+Stoimost8,

Summa=toString(Stoimost),

edit_ctl:setText(Summa),!.

onPushButtonClick(_Source) = button:defaultAction().

6. Руководство пользователя

1) Для запуска программы выбрать на панели задач команду BuildExecute(запуск) или нажать сочетание клавиш Ctrl+F5. На экране появится окно:

2. Нажмите FileNew или клавишу F7 и появится форма:

3) Выберите из выпадающих списков нужные устройства:

4) Нажмите кнопку «Вывести стоимость», чтобы узнать стоимость конфигурации компьютера:

Заключение

В данной курсовой работе были использованы и представлены основные возможности языка программирования Visual Prolog v. 7.4 для написания программы по выбору состава ПК. Visual Prolog v. 7.4 предоставляет разработчику богатые возможности по созданию подобных программ.

Список литературы

1) Костров Б.В., Ручкин В.Н., Фулин В.А. Основы искусственного интеллекта. - М., «Десс», 2012.

2) Costa Eduardo. Visual Prolog 7.0 for Typos.

3) Морозов М.Н., Курс лекций по дисциплине «Системы искусственного интеллекта», Марийский государственный технический университет, г. Йошкар-Ола, http://www.marstu.mari.ru:8101/mmlab/home/AI/index.html

4) Бурмистрова Н.А., Математическое моделирование и всеобщая компьютеризация или имитационные модели. Конференция «Информационные технологии в образовании, ИТО_98/99»

5) Джордж Ф. Люггер, Искусственный интеллект. Стратегии и методы решения сложных проблем. Москва, «Вильямс», 2003 г.

Приложение

Код программы

*****************************************************************************

Copyright (c) 2014 My Company

******************************************************************************/

implement sostavPC

inherits formWindow

open core, vpiDomains

clauses

display(Parent) = Form:-

Form = new(Parent),

Form:show().

clauses

new(Parent):-

formWindow:new(Parent),

generatedInitialize().

predicates

onShow: window:showListener.

clauses

onShow (_Source, _Data):-

Mainboard=listEdit_ctl:tryGetVpiWindow(),

Cpu=listEdit1_ctl:tryGetVpiWindow(),

Video=listEdit4_ctl:tryGetVpiWindow(),

Ram=listEdit2_ctl:tryGetVpiWindow(),

Rom=listEdit6_ctl:tryGetVpiWindow(),

Power=listEdit3_ctl:tryGetVpiWindow(),

Monitor=listEdit7_ctl:tryGetVpiWindow(),

Hdd=listEdit5_ctl:tryGetVpiWindow(),!,

vpi:lboxAdd (Mainboard, [«ASUSTeK DSBF-D/SAS/2GBL (RTL) Dual Socket771<i5000P>», «GigaByte GA-P35_DS4 (RTL) Socket775», «INTEL S3000AHV (RTL) Socket775 <i3000>»]),

vpi:lboxAdd (Cpu, [«Intel Xeon X5355 BOX Active or 1U Passive 2.66>», «Intel Pentium 4 3.4», «AMDATHLON_64 X2 4600+»]),

vpi:lboxAdd (Video, [«Albatron NVidia GeForce4 Ti4200», «512Mb <PCI-E> DDR Gigabyte GV-NX86T512H (RTL)», «768Mb <PCI-E> DDR MSI MS-V801 NX8800GTX-T2D768E-HD-OC (RTL)»]),

vpi:lboxAdd (Ram, [«HYUNDAI/HYNIX DDR-II DIMM 1Gb <PC_5300>», «Corsair <TWIN3X2048-1333C9DHX> DDR-III DIMM 2Gb <PC_10664>», «Kingmax DDR-II DIMM 2Gb KIT 2*1Gb <PC_8500>»]),

vpi:lboxAdd (Rom, [«RAM&DVDR/RW&CDRW ASUS DRW_1814BL», «RAM & DVDR/RW & CDRW LG GSA-E50L», «RAM & DVDR/RW & CDRW TSST SH-S203D»]),

vpi:lboxAdd (Power, [«ZALMAN <CNPS8700 LED>(RTL) Cooler for Socket775/754/939/940/AM2», «HighPaq <FSC-H004_Silver>», «Glacial Tech <Igloo 7320 TC (E)> Cooler for Socket AM2/754/939/940/F»]),

vpi:lboxAdd (Monitor, [«19' MONITOR Acer AL1916Cs», «17' MONITOR 0.20 Samsung SyncMaster 793DF», «17' MONITOR ASUS VB171D BK»]),

vpi:lboxAdd (Hdd, [«750.0 Gb SATA-II 300 Hitachi 7200rpm», «250 Gb SATA-II 300 Seagate Barracuda 7200rpm», «500 Gb SATA-II 300 Western Digital 7200rpm»]).

onShow(_, _).

predicates

mainboard: (string, integer) nondeterm (i, o).

cpu: (string, integer) nondeterm (i, o).

video: (string, integer) nondeterm (i, o).

ram: (string, integer) nondeterm (i, o).

rom: (string, integer) nondeterm (i, o).

power: (string, integer) nondeterm (i, o).

mon: (string, integer) nondeterm (i, o).

hdd: (string, integer) nondeterm (i, o).

clauses

mainboard («ASUSTeK DSBF-D/SAS/2GBL (RTL) Dual Socket771<i5000P>», 15300).

mainboard («GigaByte GA-P35_DS4 (RTL) Socket775», 10000).

mainboard («INTEL S3000AHV (RTL) Socket775 <i3000>», 5600).

cpu («Intel Xeon X5355 BOX Active or 1U Passive 2.66», 16800).

cpu («Intel Pentium 4 3.4», 6200).

cpu («AMD ATHLON_64 X2 4600+», 8500).

video («Albatron NVidia GeForce4 Ti4200», 1200).

video («512Mb <PCI-E> DDR Gigabyte GV-NX86T512H (RTL)», 4000).

video («768Mb <PCI-E> DDR MSI MS-V801 NX8800GTX-T2D768E-HD-OC (RTL)», 20000).

ram («HYUNDAI/HYNIX DDR-II DIMM 1Gb <PC_5300>», 550).

ram («Corsair <TWIN3X2048-1333C9DHX> DDR-III DIMM 2Gb <PC_10664>», 15500).

ram («Kingmax DDR-II DIMM 2Gb KIT 2*1Gb <PC_8500>», 7000).

rom («RAM&DVDR/RW&CDRW ASUS DRW_1814BL», 1000).

rom («RAM & DVDR/RW & CDRW LG GSA-E50L», 1300).

rom («RAM & DVDR/RW & CDRW TSST SH-S203D», 1500).

hdd («750.0 Gb SATA-II 300 Hitachi 7200rpm», 11000).

hdd («250 Gb SATA-II 300 Seagate Barracuda 7200rpm», 1800).

hdd («500 Gb SATA-II 300 Western Digital 7200rpm», 5400).

power («ZALMAN <CNPS8700 LED>(RTL) Cooler for Socket775/754/939/940/AM2», 1500).

power («HighPaq <FSC-H004_Silver>», 1200).

power («Glacial Tech <Igloo 7320 TC (E)> Cooler for Socket AM2/754/939/940/F», 3700).

mon («19' MONITOR Acer AL1916Cs», 7000).

mon («17' MONITOR 0.20 Samsung SyncMaster 793DF», 5000).

mon («17' MONITOR ASUS VB171D BK», 5600).

predicates

onPushButtonClick: button:clickResponder.

clauses

onPushButtonClick(_Source) = button:defaultAction:-

A = listEdit_ctl:getText(),

B = listEdit1_ctl:getText(),

C = listEdit2_ctl:getText(),

D=listEdit3_ctl:getText(),

E=listEdit4_ctl:getText(),

F=listEdit5_ctl:getText(),

G=listEdit6_ctl:getText(),

H=listEdit7_ctl:getText(),

mainboard (A, Stoimost1),

cpu (B, Stoimost2),

ram (C, Stoimost3),

power (D, Stoimost4),

video (E, Stoimost5),

hdd (F, Stoimost6),

rom (G, Stoimost7),

mon (H, Stoimost8),

Stoimost=Stoimost1+Stoimost2+Stoimost3+Stoimost4+Stoimost5+Stoimost6+Stoimost7+Stoimost8,

Summa=toString(Stoimost),

edit_ctl:setText(Summa),!.

onPushButtonClick(_Source) = button:defaultAction().

% This code is maintained automatically, do not update it manually. 14:00:47-16.6.2014

facts

listEdit_ctl: listEdit.

listEdit1_ctl: listEdit.

listEdit2_ctl: listEdit.

listEdit3_ctl: listEdit.

listEdit4_ctl: listEdit.

listEdit5_ctl: listEdit.

listEdit6_ctl: listEdit.

listEdit7_ctl: listEdit.

pushButton_ctl: button.

edit_ctl: editControl.

predicates

generatedInitialize: ().

clauses

generatedInitialize():-

setFont (vpi:fontCreateByName («Tahoma», 8)),

setText («sostavPC»),

setRect (rct (50,40,394,243)),

setDecoration (titlebar([closebutton(), maximizebutton(), minimizebutton()])),

setBorder (sizeBorder()),

setState([wsf_ClipSiblings, wsf_ClipChildren]),

menuSet(noMenu),

addShowListener(onShow),

StaticText6_ctl = textControl:new(This),

StaticText6_ctl:setText («Дисковод:»),

StaticText6_ctl:setPosition (16, 113),

StaticText6_ctl:setSize (80, 10),

StaticText7_ctl = textControl:new(This),

StaticText7_ctl:setText («Монитор:»),

StaticText7_ctl:setPosition (16, 131),

StaticText7_ctl:setSize (80, 10),

StaticText_ctl = textControl:new(This),

StaticText_ctl:setText («Материнская плата:»),

StaticText_ctl:setPosition (16, 15),

StaticText_ctl:setSize (80, 10),

StaticText1_ctl = textControl:new(This),

StaticText1_ctl:setText («Процессор:»),

StaticText1_ctl:setPosition (16, 31),

StaticText1_ctl:setSize (80, 10),

StaticText2_ctl = textControl:new(This),

StaticText2_ctl:setText («Оперативная память:»),

StaticText2_ctl:setPosition (16, 47),

StaticText2_ctl:setSize (80, 10),

StaticText3_ctl = textControl:new(This),

StaticText3_ctl:setText («Блок питания:»),

StaticText3_ctl:setPosition (16, 63),

StaticText3_ctl:setSize (80, 10),

StaticText4_ctl = textControl:new(This),

StaticText4_ctl:setText («Видеокарта:»),

StaticText4_ctl:setPosition (16, 80),

StaticText4_ctl:setSize (80, 10),

StaticText5_ctl = textControl:new(This),

StaticText5_ctl:setText («Жёсткий диск:»),

StaticText5_ctl:setPosition (16, 96),

StaticText5_ctl:setSize (80, 10),

listEdit_ctl:= listEdit:new(This),

listEdit_ctl:setText(«»),

listEdit_ctl:setPosition (122, 14),

listEdit_ctl:setWidth(176),

listEdit1_ctl:= listEdit:new(This),

listEdit1_ctl:setText(«»),

listEdit1_ctl:setPosition (122, 30),

listEdit1_ctl:setWidth(176),

listEdit2_ctl:= listEdit:new(This),

listEdit2_ctl:setText(«»),

listEdit2_ctl:setPosition (122, 46),

listEdit2_ctl:setWidth(176),

listEdit3_ctl:= listEdit:new(This),

listEdit3_ctl:setText(«»),

listEdit3_ctl:setPosition (122, 62),

listEdit3_ctl:setWidth(176),

listEdit4_ctl:= listEdit:new(This),

listEdit4_ctl:setText(«»),

listEdit4_ctl:setPosition (122, 78),

listEdit4_ctl:setWidth(176),

listEdit5_ctl:= listEdit:new(This),

listEdit5_ctl:setText(«»),

listEdit5_ctl:setPosition (122, 94),

listEdit5_ctl:setWidth(176),

listEdit6_ctl:= listEdit:new(This),

listEdit6_ctl:setText(«»),

listEdit6_ctl:setPosition (122, 112),

listEdit6_ctl:setWidth(176),

listEdit7_ctl:= listEdit:new(This),

listEdit7_ctl:setText(«»),

listEdit7_ctl:setPosition (122, 130),

listEdit7_ctl:setWidth(176),

pushButton_ctl:= button:new(This),

pushButton_ctl:setText («Вывести стоимость»),

pushButton_ctl:setPosition (16, 170),

pushButton_ctl:setWidth(72),

pushButton_ctl:defaultHeight:= true(),

pushButton_ctl:setClickResponder(onPushButtonClick),

edit_ctl:= editControl:new(This),

edit_ctl:setText(«»),

edit_ctl:setPosition (124, 172).

% end of automatic code

end implement sostavPC

Размещено на Allbest.ru


Подобные документы

  • Преимущества и недостатки моделей представления знаний. Модель, основанная на правилах, фреймовая модель. Семантическая сеть. Структура экспертных систем и этапы их разработки. Механизмы логического вывода. Стратегия "вверх-снизу", "от цели к ситуации").

    презентация [195,3 K], добавлен 29.10.2013

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

    дипломная работа [2,4 M], добавлен 06.03.2013

  • Определение понятия знания, модели его представления – фреймовая, продукционная, семантическая. Разбор аналитической платформы Deductor. Описание демо-примера программы Deductor– прогнозирование с помощью линейной регрессии, использование визуализатора.

    курсовая работа [1,1 M], добавлен 07.06.2011

  • Основные этапы и механизм процесса создания, ведения и модификации баз знаний в экспертных системах. Понятие предметного (фактуального) и проблемного (операционного) знания. Модели предоставления знаний: сетевая, фреймовая, логическая, продукционная.

    презентация [243,0 K], добавлен 16.10.2013

  • Фреймовые модели представления знаний. Разработка структуры фреймов для реализации экспертной системы. Разработка экспертной системы с фреймовой моделью представления знаний. Редактирование базы фактов кандидатов и описание режима консультации.

    курсовая работа [1,3 M], добавлен 13.10.2012

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

    реферат [203,3 K], добавлен 19.06.2010

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

    курсовая работа [715,1 K], добавлен 14.05.2014

  • Структура типичной экспертной системы. База данных (рабочая память), её назначение. Функция getsport как экземпляр класса cSport. Алгоритм работы экспертной системы. Реализация пользовательского интерфейса. Результаты тестирования системы пользователем.

    курсовая работа [1018,8 K], добавлен 13.06.2012

  • Построение баз знаний для семантической сети. Цели создания и язык представления онтологий. Структура исследований в области многоагентных интеллектуальных информационных систем, архитектура агента. Экономическое обоснование разработки базы знаний.

    дипломная работа [1,6 M], добавлен 29.09.2013

  • Аналитический обзор системы управления курсами Moodle, программное построение ее модулей. Разработка структурной схемы и базы знаний экспертной системы. Создание дерева вопросов и выбор алгоритма поиска решений. Анализ возможных угроз и защита информации.

    дипломная работа [534,7 K], добавлен 14.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.