Теоретические выкладки по используемым структурам данных и типам алгоритмов
Постановка задачи (тема курсовой работы)
Разработать экспертную систему по выбору программного обеспечения для ПК пользователя. Входные данные:
-цели использования ПК;
-доступные ресурсы ПК;
-пределы стоимости требуемых приложений.
Выбор языка разработки
Разработка программы велась на строго типизированном объектно-ориентированном языке программирования Delphi, так как это эффективная система программирования, ориентированная на так называемую "быструю разработку". В основе систем быстрой разработки (Rapid Application Development – среда быстрой разработки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть рутинной работы, оставляя программисту работу по конструированию диалоговых окон и функций обработки событий. Производительность программиста при использовании RAD-систем фантастическая.
Так же для создания базы данных, где хранится вся информация о программном обеспечении, использовалась СУБД MSAccess.
Выбор используемых структур и компонентов
В программе для удобства пользователя и наглядности на форме используются компоненты следующих типов: TEdit, TComboBox, TLabel, TButton, TListBox, TRichEdit, TDBLookupListBox, TBevel, TPopupMenu.
Для соединения БД, созданной в Microsoft Access, с Delphi используются следующие компоненты: TADOQuery, TDataSource, TADOConnection.
Выбор алгоритма.
Экспертные системы рассматриваются совместно с базой знаний, которая в данной работе создана в СУБД MS Access. Так как выбор оптимального ПО зависит от конкретного пользователя и может варьироваться в зависимости от входных данных, то в основе программы будет использоваться нечеткая логика, то есть программа будет выводить возможные результаты с коэффициентом приемлемости того или иного приложения.
|
Основные задачи и структуры программы
Задачи, решаемые при проектировании
При проектировании данной программы необходимо было решить следующие задачи:
· реализация пользовательского интерфейса;
· решение программной части задачи:
o реализация базы знаний;
o реализация программного модуля, взаимодействующего с базой знаний.
Структура базы знаний
В базе знаний создано три таблицы, которые имеют связь между собой по ключевому идентификатору.
Таблица, которая включает цели использования ПО:
Ключевой столбец (id_purpose) имеет связь с общей таблицей (soft_purpose).
В каждом значении id_purpose записаны идентификаторы программ, которые относятся к данному типу ПО.
Таблица ПО:
Таблица содержит информацию о названии, цене, а также о подходящем процессоре, количестве оперативной и видеопамяти и других ресурсах. Последний столбец определяет важность программы при выводе конечного результата. Значения в столбцах «processor», «ram», «video», «other» присваивают программе тот или иной ресурс, необходимого для её работы. Данные значения хранятся в компоненте TComboBox программы в Delphi.
2.3 Реализация программного модуля, для работы с базой данных
Для связи базы данных и программы Delphi используются следующие элементы – .
ADOConnection обеспечивает подключение к базе данных; Для того, чтобы подключиться к БД Access необходимо прописать следующую команду:
|
adoconnection1.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + getcurrentdir() + '\db.mdb;
DataSource представляет собой источник данных, который обеспечивает связь между набором данных и компонентами отображения и редактирования данных; Чтобы подключить данный компонент с ADOQuery необходимо в инспекторе объектов в свойстве DataSet установить компонент ADOQuery.
ADOQuery используется для выполнения запросов просмотра данных или изменения данных. Для соединения данного компонента с ADOConnection необходимо в свойстве Connection установить этот компонент.
Функциональная схема программы
Функциональная схема программы представлена на рисунке 1.
Начало |
Ввод данных |
Интерфейс |
Получено событие ввода данных |
Заполните все поля |
Да
Условие ввода цели |
Цель не выбрана |
Вычисление коэффициента |
Вывод результатов на экран |
Конец |
Рисунок 1 – Функциональная схема программы
4 Анализ и обоснование выбора алгоритма решения
Экспертные системы возникли как значительный практический результат в применении и развитии методов искусственного интеллекта - совокупности научных дисциплин, изучающих методы решения задач интеллектуального (творческого) характера с использованием ЭВМ. Эти задачи характеризуются, как правило, отсутствием или сложностью формальных алгоритмов решения, неполнотой и нечеткостью исходной информации, нечеткостью достигаемых целей.
Одним из основных методов представления знаний в экспертных системах являются продукционные правила, позволяющие приблизиться к стилю мышления человека. Любое правило продукций состоит из посылок и заключения. Возможно наличие нескольких посылок в правиле, в этом случае они объединяются посредством логических связок И, ИЛИ. Обычно продукционное правило записывается в виде: «ЕСЛИ (посылка) (связка) (посылка)… (посылка) ТО (заключение)».
|
Главным же недостатком продукционных систем остается то, что для их функционирования требуется наличие полной информации о системе.
Системы, использующие нечеткую логику, тоже основаны на правилах продукционного типа, однако в качестве посылки и заключения в правиле используются лингвистические переменные, что позволяет избежать ограничений, присущих классическим продукционным правилам.
Таким образом, язык нечётких множеств и алгоритмов в настоящее время является наиболее адекватным математическим аппаратом, который позволяет максимально сократить переход от вербального словесного качественного описания объекта, которое характеризует человеческое мышление.
Именно поэтому был выбран алгоритм с использованием нечёткой логики.
Пример использования нечеткой логики в программе:
listbox1.Items.Clear; // очистка листбокса, в который выводится подобранное ПО adoquery2.First; // переходим к первой записи в наборе ПО
count:= 0; // количество подобранных программ изначально устанавливаем в ноль
// заносим все ПО, которое подходит по цене
for i:= 1 to adoquery2.RecordCount do
begin
// если ПО стоит не больше, чем всего выделено, тогда добавляем его в массив mas
if (adoquery2.Fields[2].AsFloat <= strtofloat(edit1.Text)) {and (adoquery2.Fields[2].AsFloat <> 0)} then
begin
count:= count + 1; // увеличиваем количество ПО на 1
mas[count, 1]:= adoquery2.Fields[1].AsString; // название ПО
mas[count, 2]:= adoquery2.Fields[2].AsString; // его стоимость
mas[count, 3]:= floattostr((get_processor_koeff(combobox1.ItemIndex + 1, adoquery2.Fields[3].AsInteger) *
get_ram_koeff(combobox2.ItemIndex + 1, adoquery2.Fields[4].AsInteger) *
get_video_koeff(combobox3.ItemIndex + 1, adoquery2.Fields[5].AsInteger) *
get_other_koeff(combobox4.ItemIndex + 1, adoquery2.Fields[6].AsInteger) +
get_priority_koeff(adoquery2.Fields[7].AsInteger) / 3) / 2); // общий коэффициент
// общий коэффициент определяется путем умножения всех коэффициентов друг на друга и усредняется с коэффициентом важности
end;
adoquery2.Next; // переход к след. записи в наборе ПО
end;