Курс : "Интеллектуальные системы " Разработал доцент каф. математического обеспечения компьютерных систем Крапивный Ю.Н. Лабораторная работа № 2: разработка модельного ИППП. Цель работы: проектирование и реализация модельного ИППП, обеспечивающего автоматический синтез цепочки программных модулей для решения поставленной задачи в рамках предметной области (ПО) пакета. ИППП должен состоять из следующих компонентов: Рабочая память (РП) – список всех атрибутов (объектов) ПО (объект TRPObject). Функциональное наполнение пакета (ФН) – библиотека программных модулей. Системное наполнение пакета (СН)- набор процедур, функций, интерфейсов для организации работы с ФН. ЗАМЕЧАНИЕ. Все примеры приведены на языке программирования DELPHI (Object Pascal). Модель предметной области (МПО) ИППП. Формально описание МПО выполнено в виде текстового файла, содержащего два блока: блок описания параметров МПО блок описания функциональных модулей Строка с элементом описания параметров имеет следующую структуру: номер параметра : идентификатор : название Строка с элементом описания функциональных модулей имеет следующую структуру: интерфейс модуля : название (назначение) модуля Пример содержимого файла описания МПО: #1 2 : b : сторона b треугольника 4 : Hc : Высота на сторону c треугольника 5 : S : площадь треугольника #2 S=F11(Hc,b) : Вычисление площади треугольника Взаимодействие ФН и СН осуществляется с использованием следующих объектов: TModuleInterface - описание интерфейса модуля TRPObject - атрибут ПО (элемент рабочей памяти) Рабочая память (РП). РП организована в виде глобального статического массива RP объектов типа TRPObject. Размер массива – 50 элементов. Реальное наполнение массива осуществляется в соответствии с содержимым текстового файла, описывающего МПО. Каждый элемент массива RP - это объект типа TRPObject: Type TRPObject=object Ident : ShortString; // атрибут ПО (элемент рабочей памяти) // условный идентификатор атрибута в рамках МПО 1 Name Value IsCalc end; : ShortString; : real; : boolean; // реальное название атрибута ПО // значение атрибута ПО // признак: вычислен или нет Каждому атрибуту МПО ставится в соответствие его порядковый номер в массиве RP, соответствующий его реальному расположению в массиве. Таким образом, Ident параметра и его порядковый номер образуют взаимно однозначное соответствие. Порядковый номер используется для программного доступа к значениям параметров при исполнении модулей и при установке и чтении значений параметров. Функциональное наполнение пакета (ФН). ФН реализуется в виде набора процедур без параметров, реализующих разрешения отношений МПО. Описание интерфейсов модулей ФН в СН реализуется через статический массив MI объектов типа TModuleInterface. Реальное наполнение массива осуществляется в соответствии с содержимым текстового файла, описывающего МПО. Вычисления в процедурах выполняются над глобальными переменными – элементами массива MI. Каждый элемент массива MI – это объект типа TModuleInterface: Type TModuleInterface=object ModuleIdent : ShortString; ModuleName : ShortString; ModuleParam : ShortString; end; // описание интерфейса модуля // условный идентификатор модуля // смысловое название модуля // номера входных и выходных параметров Каждому модулю (процедуре) условно ставится в соответствие его уникальный идентификатор ModuleIdent , который может совпадать с именем модуля в программной реализации ИППП. Для исполнения модулей необходимо создать единую процедуру: Procedure ExecModule(ModuleIdent:string); которая по имени модуля ModuleIdent вызывает соответствующий ему программный модуль. Это может быть сделано, например, так: …. IF ModuleIdent="F11" THEN F11; Таким образом, программная реализация ИППП должна содержать два массива, заполняемых динамически: Var MI : array [1..50] of TModuleInterface; Var RP : array [1..50] of TRPObject; - массив описаний интерфейсов модулей (массив элементов типа TModuleInterface); - массив элементов рабочей памяти пакета (массив элементов типа TRPObject) Поле ModuleParam объекта TModuleInterface содержит номера входных и выходных параметров модуля в формате: выходной параметр = <имя модуля ModuleIdent>(список входных параметров через запятую) Например: S=F11(Hc,b) – означает, что модуль использует параметры (атрибуты) с Identзначениями Hc и ba, вычисляет параметр S. 2 Все функциональные модули ИППП реализуются в ИППП как процедуры без параметров, которые выполняют операции над РП (глобальными переменными) - элементами массива RP. Например, Procedure F11; // соответствует модулю S=F11(Hc,b) begin MI[5].Value :=0.5*MI[2].Value*MI[4].Value; // соответствует S:=0.5*Hc*b MI[5].isCalc :=True; end; где 5,2 и 4 – номера параметров S,b и Hc соответственно в массиве RP. Системное наполнение пакета (СН)- набор процедур, функций, интерфейсов для организации работы с ФН. СН реализуется в виде отдельного проекта – МОНИТОРА (например, проекта Delphi). Проектом должна поддерживаться работа с текстовым файлом описания МПО заданной структуры (см. выше). СН должно обеспечить: Выбор файла с текстовым описанием настройки на МПО ИППП, его загрузка и формирование массивов MI и RP. Обнаружение ошибок в описании МПО – например, наличие такого ModuleIdent, которому нет соответствия в реальном ФН ИППП. Визуализацию элементов МПО: показать имена и текущие значения атрибутов ПО, показать имена, параметры всех модулей ФН. Начальное задание пользователем значений отдельных атрибутов МПО ИППП. Выбор атрибута МПО ИППП, подлежащего вычислению. Формирование и выполнение цепочки программных модулей, вычисляющих заданный атрибут МПО (использовать идею алгоритма паросочетаний). Инициализацию РП (сброс всех значений атрибутов). Варианты заданий № Предметная область 1 Параллелограмм 2 Ромб 3 Окружность вписанная в треугольник 4 Окружность вписанная в ромб 5 Треугольная пирамида 6 Шар вписанный в треугольную пирамиду 7 Трапеция 8 Окружность описанная вокруг треугольника 9 Окружность описанная вокруг трапеции 10 Четырёхугольная пирамида 11 Фар вписанный в 4-х угольную пирамиду 12 Конус 13 Шар вписанный в конус 14 Шестиугольная пирамида 3 15 Шар вписанный в шестиугольную пирамиду 4