Разработка метода сетевого оператора для аппроксимации логического вывода экспертной системы

 

Введение


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

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

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

Главным достоинством экспертных систем является возможность накопления знаний и сохранение их длительное время.

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

обзор методов и подходов решения поставленной задачи аппроксимации логического вывода экспертной системы;

разработка и исследование метода сетевого оператора для решения поставленной задачи;

проведение вычислительного эксперимента.

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

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

В дипломной работе в качестве наглядного примера используется замкнутая комната с препятствиями, в которой мобильный робот должен переместиться в некоторые терминальные точки. Для этого была создана программа на основе генетического алгоритма. Для разработки эффективного вычислительного метода решения задачи аппроксимации логического вывода экспертной системы необходимо использовать последнее достижение в области вычислительных алгоритмов, которым является создание метода генетического программирования для решения различных математических задач с помощью ЭВМ. Наиболее важным результатом последних лет в этом направлении является создание метода генетического программирования в 1992 году (J. R. Koza) [8], которое позволяет получить с помощью вычислительной машины аналитические решения различных математических задач. В генетическом программировании для универсального описания математического выражения и его кодировки используется польская запись программного кода, которая представляет собой строку символов, описывающих операторы и операнды. Польская запись является промежуточным кодом, к которому преобразуют трансляторы исходные тексты программ при их переводе в машинные команды. Для строк польской записи Коза разработал генетические операции скрещивания и мутации.

Новый разработанный метод является развитием генетического алгоритма (Davis Lawrence, D.E. Goldberg, J.H. Holland), позволив реализовывать на вычислительной машине любые функциональные зависимости. Методы генетического программирования, основанные на использовании структуры данных в виде строк польской записи, обладают существенными недостатками, связанными с работой с динамической памятью и лексическим анализом строк, что приводит к значительным вычислительным затратам. Для повышения эффективности вычислительных алгоритмов в работе используется метод сетевого оператора, разработанный А.И. Дивеевым, позволяющий в наиболее удобной для поиска на компьютере форме представлять функциональные зависимости.

Основная идея метода сетевого оператора [8, 9] состоит в том, что он позволяет описывать произвольные математические выражения и представлять их в ЭВМ с помощью целочисленной матрицы. Матрица сетевого оператора - это целочисленная матрица, на диагонали которой расположены номера бинарных операций, а остальные элементы либо нули, либо номера унарных операций, причем при замене диагональных элементов на нули, а ненулевых недиагональных элементов на единицы получаем матрицу смежности графа сети, которая удовлетворяет свойствам сетевого оператора [8]. В матрице смежности сетевого оператора вместо единиц, которые соответствуют дугам графа, необходимо записывать соответствующие номера унарных операций, а на диагонали - соответствующие номера бинарных операций. Верхний треугольный вид матрицы сетевого оператора вычисляется по шагам сетевого оператора. Вектор узлов, с помощью которого можно легко совершать вычисления и хранить результаты. В основе дипломной работы лежит разработка генетического алгоритма для решения задачи аппроксимации логического вывода экспертной системы на основе метода сетевого оператора. При построении генетического алгоритма, работающего с матрицами сетевых операторов, используем принцип базисного решения для того, чтобы не нарушать структуру решения. Генетические операции выполняются не над самой структурой, а над множеством допустимых вариаций структуры. Для решения задачи на основе сетевого оператора необходимо определить конструктивные множества: переменных, параметров, унарных и бинарных операций. Затем необходимо установить размерность сетевого оператора, определить множество вариаций и выбрать базисные решения. После этого реализовать генетический алгоритм для поиска оптимальных решений в среде Delphi 6. Разработанный в дипломной работе метод аппроксимации логического вывода экспертной системы может быть использован в реальных экспертных системах.


1.Экспертные системы

экспертный сетевой оператор

Как было сказано выше, в контурах управления интеллектуальных систем используются динамические экспертные системы. Рассмотрим подробнее структуру, принципы работы и организацию экспертных систем.

Экспертная система [41] - компьютерная система, способная частично заменить специалиста-эксперта в разрешении проблемной ситуации. Современные экспертные системы начали разрабатываться исследователями искусственного интеллекта <#"justify">1)Интерпретация - процесс определения смысла данных, результаты которого должны быть согласованными и корректными.

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

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

)Мониторинг - непрерывное оповещение о состоянии системы, приложения или процесса.

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

)Диагностика - процесс распознавания состояния на основе имеющихся факторов.

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

Классификация экспертных систем:

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

В зависимости от способа учета временного признака, экспертные системы делят на статические и динамические:

Статические экспертные системы [36] предназначены для решения задач с неизменяемыми в процессе решения данными и знаниями, а динамические экспертные системы допускают такие изменения.

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

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

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

Продукционные экспертные сиситемы [2] представляют знания в форме предикатов первого порядка, а правила манипулирования ими - с помощью конструкций ЕСЛИ - ТО. База правил состоит из множества фраз типа:

ЕСЛИ объект системы управления не осуществил применение средства воздействия вида ПК (ПУСК = 0)

И объект системы управления имеет разрешение применения средства воздействия вида ПК (ПУСК = 1)

ТО система рекомендует применение средства воздейстия вида ПК.

Типовая структура экспертных систем:


Рис. 1 Типовая структура экспертных систем.


Экспертные системы имеют две категории пользователей и два отдельных "входа", соответствующих различным целям взаимодействия пользователей с ЭС:

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

.экспертная группа инженерии знаний, состоящая из экспертов в предметной области и инженеров знаний. В функции этой группы входит заполнение базы знаний, осуществляемое с помощью специализированной диалоговой компоненты ЭС - подсистемы приобретения знаний, которая позволяет частично автоматизировать этот процесс. Механизм логического вывода (МЛВ) [49] предназначен для получения новых фактов на основе сопоставления исходных данных из рабочей памяти и знаний из базы знаний. Механизм логического вывода во всей структуре экспертной системы занимает наиболее важное место. Он реализует алгоритмы прямого и/или обратного вывода и формально может быть представлен четверкой: <v,s,k,w>. Где:

·V процедура выбора из базы знаний и рабочей памяти правил и фактов;

·S процедура сопоставления правил и фактов, в результате которой определяется множество фактов к которым применимы правила для присвоения значений;

·K процедура разрешения конфликтов, определяющая порядок использования правил, если в заключении правила указаны одинаковые имена фактов с разными значениями;

·W процедура, осуществляющая выполнение действий, соответствующих полученному значению факта (заключению правила).


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


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

Рассмотрим подробнее формальную постановку задачи.


.1 Формальная постановка задачи


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


(1)

где


В соотношении (1) выбор одной системы управления определяет выполнение условия .

Значение дополнительной компоненты управления определяем по функции дополнительных признаков состояния объекта


(2)


где - целочисленная функция выбора, y - целочисленный вектор признаков определения выбора


. (3)


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


(4)


где

Соотношение (4) задаёт любая экспертная система, которая содержит запись вывода значения функции выбора по значениям векторов признаков

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

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

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


(5)


Необходимо найти аналитический вид функции выбора


(6)


обеспечивающей минимум функционала


(7)


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


3. Разработка алгоритма решения задачи


.1 Генетический алгоритм и генетическое программирование


Генетический алгоритм - адаптивный метод поиска, который в последнее время часто используется для решения задач функциональной оптимизации. Он основан на генетических процессах биологических организмов: биологические популяции развиваются в течение нескольких поколений, подчиняясь законам естественного отбора и по принципу выживает наиболее приспособленный [6]. Подражая этому процессу генетический алгоритм способен развивать решения реальных задач, если те соответствующим образом закодированы. Генетический алгоритм может использоваться для проектирования структуры моста, поиска максимального отношения прочности, для использования интерактивного управления процессом или балансировании загрузки на многопроцессорном компьютере [8]. Основные принципы генетического алгоритма были сформулированы Голландом (Holland, 1975) [8]. Алгоритм моделирует те процессы в популяциях, которые являются существенными для развития. Генетический алгоритм работает с совокупностью особей - популяцией, каждая из которых представляет возможное решение данной проблемы. Каждая особь оценивается мерой ее приспособленности согласно тому, насколько хорошо соответствующее ей решение задачи. Воспроизводится вся новая популяция допустимых решений, выбирая лучших представителей предыдущего поколения, скрещивая их и получая множество новых особей. Это новое поколение содержит более высокое соотношение характеристик, которыми обладают хорошие члены предыдущего поколения. Таким образом, из поколения в поколение, хорошие характеристики распространяются по всей популяции. Скрещивание наиболее приспособленных особей приводит к тому, что исследуются наиболее перспективные участки пространства поиска. В конечном итоге, популяция будет сходиться к оптимальному решению задачи.


Рис. 2 Основные этапы генетического алгоритма.


Особенности генетического алгоритма:

1.варианты решения кодируются битовой строкой (хромосома);

.поиск осуществляется в кодовом пространстве параметров;

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

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

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

.скрещивание обеспечивает построение пары новых кодов решений на основе двух отобранных;

.мутация обеспечивает случайную вариацию кода возможного решения;

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

9. решение - хромосома, которая дает наилучшее значение функции приспособленности.

Генетический алгоритм [8] является достаточно мощным средством и может с успехом применяться для широкого класса прикладных задач, включая те, которые трудно, а иногда и вовсе невозможно, решить другими методам. Однако, генетический алгоритм, как и другие методы эволюционных вычислений, не гарантирует обнаружения глобального решения за полиномиальное время, не гарантирует и того, что глобальное решение будет найдено, но они хороши для поиска достаточно хорошего решения задачи достаточно быстро. Главным же преимуществом генетического алгоритма является то, что они могут применяться даже на сложных задачах, там, где не существует никаких специальных методов. Генетическое программирование [6, 8, 28] впервые предложил Джон Коза в 1992 году, которое является развитием метода генетического алгоритма. Оно появилось при использовании генетического алгоритма для автоматического написания программ, то есть создание такой программы, которая могла бы создавать другие программы без детального описания алгоритма, используя только набор требований и условий. Преимуществом автоматического написания программ является то, что заранее не надо указывать размер, форму, сложность структуры решения. Генетическое программирование является поиском необходимой программы адаптивным и интеллектуальным способом. Интеллектуальный поиск на любом множестве начинается с выбора одной или более структур из данного множества и оценки ее пригодности при решении задачи. Затем эту информацию используем для изменения, улучшения и направления поиска видов выбора структур из множества. В алгоритме выбираем точку, ее пригодность сравниваем с пригодностью близлежащих точек, затем осуществляем движение точки в направлении точки с наилучшей пригодностью. Траектория движения точки зависит от информации, полученной на предыдущих итерациях. В генетическом программировании возможным решением является код программы, который удовлетворяет заданным требованиям или решает поставленную задачу. Для универсального описания и ее кодировки используется польская запись программного кода. Польская запись является промежуточным кодом, к которому преобразуют трансляторы исходные тексты программ при их переводе в машинные команды. Она является удобным и универсальным видом записи программы. Математическое выражение - это любая запись математических символов, допускающая однозначное вычисление. В генетическом программировании для описания возможного решения используют строку символов, которую называют записью. Каждый символ записи обозначает либо операцию, либо числовой параметр. Для выполнения операции необходимы операнды. Операции от операндов отличают последовательностью символов записи. Количество необходимых операндов определяют по типу операции. Символ числового параметра не требует операндов. Числовой параметр называют нульместной операцией. В отличие от генетических алгоритмов в генетическом программировании все операции производятся не над строками, а над деревьями. При этом используются такие же операторы, как и в генетических алгоритмах: селекция, скрещивание и мутация. В генетическом программировании хромосомами являются программы. Генетический алгоритм генерирует массу случайных программ - вариантов решения проблемы. Каждый вариант запускается и оценивается согласно ряду критериев. Алгоритм выбирает из каждого поколения лучшие варианты решения и получает от них потомство. Но в генетических алгоритмах используются кодированные строки, которые обрабатываются программой моделирования, и лучшие из них смешиваются, образуя новое поколение. В генетическом программировании участвуют не кодированные представления решений, а непосредственно компьютерные программы. Генетический алгоритм представляет собой новое направление в алгоритмизации.

Символьная запись:

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

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

.постфиксная (используется сначала аргумент, затем операция);

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

Недостатки генетического программирования:

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

2.число входящих переменных должно равняться числу листьев на дереве;

.необходимо определять подстроки символов при выполнении операции скрещивания;

.операция скрещивания может варьировать формулу;

.сложно задать структуру математического выражения.

Пример 1:



Рис.3 Функция 1, представленная в древовидной форме.


ОперацияСимволЧисло аргументов++2*2#1^1exp-1y=x@1xX0yY0zZ0


Рис.4 Функция 2, представленная в древовидной форме.


Произведем скрещивание первой записи и второй.


Рис.5 Оператор скрещивания для древовидного представления программ.


2.


Одним из основных проблем генетического программирования является способ кодирования программы. Программа должна быть закодирована так, чтобы можно было автоматически вносить случайные изменения (оператор мутации) и объединять два алгоритма в один (оператор скрещивания) и при этом, чтобы не доставляло никаких проблем и трудностей. Существуют два способа кодирования: прямое кодирование - генетический алгоритм работает с программой в явном виде и косвенное кодирование - генетический алгоритм работает не с самим кодом программы, а с правилами его построения. То есть генетический алгоритм работает с программой, которая генерирует нужную нам программу. В древовидном кодировании каждый узел дерева содержит функцию, а каждый лист - операнд, где оператор скрещивания реализуется обменом между двумя деревьями какими - либо узлами вместе с их потомками. Операнд - аргумент операции <#"21" src="doc_zip37.jpg" />- вектор аргументов, , возможно использование более эффективного с точки зрения вычислений аппарата сетевых операторов. Функциональная зависимость может быть представлена в виде дерева, во внутренних узлах которого находятся операции, а во внешних - операнды. Дерево является видом ориентированного связанного графа без циклов. Любой граф может быть представлен в виде матрицы смежности в котором - количество строк и столбцов равное количеству узлов графа, а элементы равны 1, если существует дуга от узла к узлу и 0, если такой дуги нет. Для повышения эффективности вычислительных алгоритмов в работе используется метод сетевого оператора, позволяющий в наиболее удобной для поиска на компьютере форме представлять функциональные зависимости.

Сетевой оператор [8] - структура данных, которая позволяет представить математическое выражение в форме графа. Также сетевой оператор - ориентированный граф, который обладает следующими свойствами:

1.граф не имеет циклов;

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

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

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

.каждая дуга графа соответствует какой - либо унарной операции ;

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

Для четкого понятия сетевого оператора, напишем ряд необходимых определений:

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

Множество параметров - это упорядоченное множество чисел, не меняющихся в процессе вычислений.

Множество унарных операций - это упорядоченное множество функций, заданных на числовом множестве.

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

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



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

Пример 2: , где - параметры, - переменные, - унарная операция, - бинарные операции. Таким образом, введем множество параметров , множество переменных , множество унарных операций , множество бинарных операций . Причем берем такие операции, которые

. коммутативны

. ассоциативны

. операции должны иметь единичный элемент .


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

Правила вычисления по сетевому оператору:

1.Вычисления начинаются с дуги, выходящей из узла, в который не входит никакая другая дуга;

2.Выполняется унарная, которая соответствует дуге, выходящей из найденного узла и бинарная операция, соответствующая узлу, в который дуга <#"justify">Вычисления выполняются до тех пор, пока в сетевом операторе не останутся только узлы - стоки, в которых хранятся результаты вычислений. Выполнение унарной операции согласно выходящей из узла дуге, осуществляется, если в узел, из которого данная дуга выходит, не входит ни одна дуга. Для любой формулы, данной в графическом виде, можно построить сетевой оператор.

Пример 3:



Пример 4:

Запишем множество параметров , множество переменных , множество унарных операций , множество бинарных операций .




Построение математического выражения в виде сетевого оператора:

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

Пример 5:



Пример 6:



Пример 7:



2.Графическая запись - программная запись, которая отвечает следующим свойствам:

а) внешняя операция бинарная;

б) аргументами бинарной операции могут быть только унарные операции;

в) аргументами унарной операции могут быть либо бинарная операция, либо параметр; (либо )

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

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

Пример 8:




Правило построения графа по графической записи:

Номер унарной операции соответствует дуге, а бинарной операции - узлу.








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

Пример 9:




Граф для графической записи является сетевым оператором.


.3 Матрица сетевого оператора


Сетевой оператор [8, 28] представляет собой ориентированный граф без циклов, поэтому его структуру можно описать с помощью матрицы смежности верхнего треугольного вида. Утверждение: матрица смежности любого ориентированного графа без циклов с помощью изменения номеров узлов всегда может быть представлена в верхнем треугольном виде.Матрица <#"23" src="doc_zip101.jpg" />, а остальные элементы либо нули, либо номера унарных операций , причем при замене диагональных элементов на нули, а ненулевых недиагональных элементов на единицы получаем матрицу смежности графа сети.Чтобы представить граф в памяти компьютера используется матрица смежности (показывает какой узел, с каким узлом соединяется), которая состоит из 1 и 0, имеет размерность , где - число узлов в графе. 1 находится на пересечении - строки и - столбцы, где - номер узла, откуда выходит дуга, а - номер узла, куда входит дуга. Для графической записи желательно пронумеровать узлы так, чтобы номер узла от дуги выходит, был меньше, куда дуга входит. Для ориентированного графа без циклов это всегда можно сделать. Матрица сетевого оператора имеет ту же структуру, что и матрица смежности, только вместо единиц стоят номера унарных операций , а на диагоналях стоят номера бинарных операций .

Пример 10:





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

Шаг 1. Задаем начальные значения вектора узлов


, ,


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

Шаг 2. .

Шаг 3. .Шаг 4. Если , то



Шаг 5. . Если , то переходим на шаг 4.Шаг 6. . Если , то переходим на шаг 3, иначе завершаем вычисления.


3.4 Метод вариаций сетевого оператора


Вариация сетевого оператора [8] - это такое изменение сетевого оператора, которое приводит к однотипному сетевому оператору. Верхний треугольный вид матрицы сетевого оператора вычисляется по шагам сетевого оператора. Он проходит строки матрицы и вычисляет их с помощью унарных операций , у которых ненулевые недиагональными элементы в строке, и бинарные операции , где номера являются диагональными элементами, расположенные в столбцах с ненулевыми недиагональными элементами. Вектор узлов , с помощью которого можно легко совершать вычисления и хранить результаты, где - количество узлов сетевого оператора. Для первого шага вычислений необходимо задать начальные значения вектора узлов. Векторы аргументов определяют номера узлов источников сетевого оператора. Если в бинарной операции имеется сложение, то единицей для данной операции является ноль, а, если умножение, то единица. Начальное значение вектора узлов , последовательно проходим в матрице сетевого оператора все строки по столбцам. Если встречаем в строке в столбце не нулевой элемент, то выполняем сначала унарную операцию , номер которой определяем по элементу матрицы сетевого оператора, над значением элемента вектора узлов. Затем над результатом вычислений выполняем бинарную операцию , номер которой определяем по элементу матрицы сетевого оператора, причем первым аргументом бинарной операции является последнее значение элемента вектора узлов. Результат вычислений присваиваем элементу вектора узлов. Рассмотрим операции по шагам, которые необходимо выполнить при каждой вариации. Для некоторых вариаций необходимо выполнить проверку ее допустимости. Вариация выполняется, если она допустима. При выполнении вариаций необходимо выполнить следующие действия:

Шаг 0. Определяем дугу и меняем номер унарной операции, с которой связана дуга, .Шаг 1. Определяем узел и меняем номер бинарной операции, с которой связан узел, , если .Шаг 2. Определяем два узла и добавляем дугу между ними вместе с унарной операцией . Шаг 3. Определяем дугу , проверяем, если в узел входит еще одна дуга, , то удаляем дугу , , . Шаг 4. Определяем номер , который будет присвоен последнему узлу , проверяем, если не существует узлов, начиная с номера , откуда выходят дуги, входящие в узел , то узлу присваиваем номер , и увеличиваем на единицу номера всех узлов, начиная с номера . Шаг 5. Определяем номер , которому будет присвоен последний номер , проверяем, если из узла не выходит ни одна дуга, то узлу присваиваем номер , а всем остальным узлам, начиная с номера , уменьшаем номера на единицу. Шаг 6. Добавляем еще один узел с бинарной операцией и дугу с унарной операцией . Шаг 7. Удаляем последний узел , , с входящей в него дугой . Задаем унарные и бинарные операции:



- единица для сложения, 1 - единица для умножения, Пример 11:



- матрица смежности,


- матрица сетевого оператора.


- матрица сетевого оператора, - вектор узлов.

Строка 1:

Строка 2:

Строка 3:

Строка 4:

- базисное решение.


Вариации сетевого оператора:

0 - изменение унарной операции, связанной с дугой сетевого оператора; 1 - добавление дуги вместе с унарной операцией;2 - изменение бинарной операции, связанной с узлом сетевого оператора;3 - удаление дуги, если узел, куда дуга входит, имеет еще и входящую дугу;4 - увеличение номеров узлов;5 - уменьшение номеров узлов;6 - добавление узла с бинарной операцией и входящей в узел дуги, связанной с унарной операцией;7 - удаление узла вместе с входящей в него дугой, если узел является узлом - стоком и в него входит только одна дуга.

Рассмотрим пример 11 далее:



Строка 1:

Строка 2: ,

Строка 3:

Строка 4:

Находим вариацию для данного примера, где - вектор вариации, - номер вариации; - номер строки; - номер столбца; - номер операции, - длина вариации.


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


4. Вычислительный эксперимент


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


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15














Рис. 6 Комната с препятствиями (пример)


Координаты терминальных точек (целей):

) 010

) 715

) 155

Расположение управления:

0

U 1

2

Далее приведена небольшая часть экспертной системы:
















Полную экспертную систему, загруженную в программу для обучения, можно посмотреть в приложении В. Таким образом, если робот находится в точке (0,1) и движется к цели № 3, то он выбирает путь движения (управление) 2, исходя из выхода экспертной системы. Либо, если робот находится в точке (5,14) и движется к цели № 2, то он выбирает путь движения (управление) 1. После загрузки экспертной системы в программу, производится обучение робота (получение функции, которая заменит собой экспертную систему) с помощью генетического алгоритма на основе сетевого оператора. Часть программного кода, разработанного в среде Delphi 6, представлена в приложении А.

4.1 Описание программы


Эксперимент проводится на программном комплексе для аппроксимации логического вывода экспертной системы в среде Delphi 6.


Рис. 7 Главное меню программы


Главное меню содержит следующие разделы:

1)Раздел Initial data:

a.Parameters of initial data - ввод количества входов, выходов, а так же количества точек.

b.Initial data - отображение введённой части экспертной системы. В этом окне можно загрузить экспертную систему из файла, сохранить её в файл, а так же изменять введённую экспертную систему.

2)Раздел Load ExpSys - загрузка полной экспертной системы (для проверки)

3)Раздел Network operator:

a.Parameters of Network Operator Matrix - ввод параметров матрицы сетевого оператора.

b.Network operator - матрица сетевого оператора. Её можно загрузить или сохранить, а так же изменять в этом окне.

4)Раздел Genetic algorithm:

a.Create object - Parameters of object for GA with NOM - Создание объекта для генетического алгоритма (ввод количества хромосом в популяции, количества функционалов и количества вариаций в одной хромосоме).

b.Parameters of GA - Genetic algorithm with network operator - Ввод параметров генетического алгоритма..Search of Pareto Set - поиск множества Парето

5)Раздел Solution:

a.Show - просмотр полученных выражений

b.Print to file - запись полученных выражений в файл

c.Clear - очистить окно

6)Раздел The set of Pareto:

a.Pareto set - множество Парето

7)Раздел Simulation:

a.Simulation after the teaching - Показывает полученные графики (совпадение точек, полученных с помощью выведенной формулы с точками из взятой нами полной экспертной системы). Так же в этом окне производится расчет выходного значения по заданным входам и цели.


.2 Моделирование эксперимента


Проводим эксперимент, используя часть составленной нами экспертной системы. Для поиска решений используем генетический алгоритм с параметрами, приведёнными в Таблице № 1 и программу из Приложения A для аппроксимации логического вывода экспертной системы методом сетевого оператора.

Таблица 1. Параметры генетического алгоритма

ПараметрЗначениеРазмер начальной популяции хромосом или возможных решений512Число поколений512Число пар в одном поколении128Число изменений в одной хромосоме8Число функционалов2Число искомых параметров3Число поколений в одной эпохе между сменой базисного решения10Число элитарных хромосом32Параметр для скрещивания0.4Вероятность мутации0.7Размер матрицы сетевого оператора32Число переменных3Число выходных параметров2

Рис. 8 Базисная матрица сетевого оператора.


Для решения используем множество унарных и бинарных операций из Приложения Б.

z_0=x_0_1=x_1_2=x_2_3=And2(2,z_0)

z_4=And2(2,z_1,z_0)_5=And2(2,z_2,not z_1,z_0)_6=Equ2(0,z_5,z_4,z_3)_7=Xor2(0,z_5,z_4,z_3)_8=Or2(0,z_7,z_6)_9=Or2(0,z_8)_10=And2(2,z_9)_11=Xor2(0,z_10)_12=Or2(0,z_11)_13=Or2(0,z_12)_14=Or2(0,z_13)_15=Or2(0,z_14,not z_12)_16=Or2(0,z_15)_17=Or2(0,z_16)_18=Or2(0,z_17,z_2)_19=Or2(0,z_18)_20=Or2(0,z_19)_21=Or2(0,z_20,not z_18)_22=Or2(0,z_21)_23=Or2(0,z_22)_24=Or2(0,z_23,not z_18)_25=Or2(0,not z_24)_26=Or2(0,z_25)_27=Or2(0,z_26,not z_3)_28=Xor2(0,z_27)_29=And2(2,z_28,not z_22)_30=Or2(0,z_29)

z_31=Or2(0,z_30)

Исследование 1:

Рассмотрим область Парето:


Рис. 9 Множество Парето


Условное множество Парето

№Кол-во решенийF_0F_10085110146851102538511037185110

По значению F_0 видно, что из 299 введённых точек экспертной системы, мы смогли обучить робота только на 214 точек (299-85=214). Значение F_1 показывает сумму, на которую отличается требуемое и полученное управления. Результаты моделирования представлены на рис. 10, 11 (Остальные графики моделирования представлены в приложении Г).


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


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


Из полученных графиков мы можем сделать вывод, о количестве совпавших точек :

Взяли выборку из 100 случайных точек: , и получили 73% совпадений, учитывая то, что введённая часть экспертной системы даёт только совпадений. Следовательно, полученная нами функция даёт достаточно хороший результат и может уже сейчас заменить собой данную экспертную систему.

Исследование 2:

Для получения более точного результата алгоритм был запущен ещё несколько раз.

Рассматриваем область Парето:


Рис. 12 Множество Парето


Таблица 2. Условное множество Парето

№Кол-во решенийF_0F_1007293117293…………962307293…………2135117293

В таблице 2 приведены номера возможных решений во множестве. В условном множестве Парето 512 точек.

По значению F_0 видно, что из 299 введённых точек экспертной системы, мы смогли обучить робота только на 227 точек (299-72=227). Значение F_1 показывает сумму, на которую отличается требуемое и полученное управления.

Базисное решение, записанное с помощью матрицы сетевого оператора размерностью , имеет вид :


0 4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0

0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 1 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 3 0 0 4 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 3 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


Результаты моделирования со сравнением решения от полученной формулы с изначальной экспертной системой представлены на последующих рисунках 13,14 (Остальные графики моделирования представлены в приложении Г):


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


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


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

, то есть мы получили 76% совпадений, учитывая то, что введённая часть экспертной системы даёт только совпадений.


Заключение


В данной дипломной работе было осуществлено решение следующих задач:

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

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

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

4.Программа разработана в среде Dеlphi 6, реализующая алгоритм для решения задачи аппроксимации логического вывода экспертной системы на основе генетического программирования с сетевым оператором. Несмотря на всю представленную сложность, алгоритм управления можно реализовать на ЭВМ.


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


1.Беллман Р. Динамическое программирование - М.: ИЛ, 1960;

2.Васильев С.Н., Жерлов А.К., Федосов Е.А., Федунов Б.Е. Интеллектуальное управление динамическими системами. - М.: Физико-математическая литература. 2000.-253с.-ISBN 5-9221-0-50-5.

3.Васильев В.И., Ильясов Б.Г. Интеллектуальные системы. Теория и практика. М.: Радиотехника, 2009. 392 с.

4.Васильевский А.С., Исследование принципов построения экспертных систем реального времени - отчет о НИР № 96-01-00595 (Российский фонд фундаментальных исследований)

5.Гаврилова Т.А. Хорошевский В.Ф. Базы знаний интеллектуальны систем. - Спб: Питер, 2000. - 384 c.

.Гладков Л.А., Курейчик В.В., Курейчик В.М. Генетические алгоритмы - М.: ФИЗМАТЛИТ, 2006;

7.Грибова В.В. <#"justify">Приложения


Приложение А

Unit1;

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

//*********************************************************, Messages, SysUtils, Variants, Classes,, Controls, Forms,Log02,, StdCtrls, ComCtrls, Menus, UnitLogObjects;= class(TForm): TSaveDialog;: TProgressBar;: TLabel;: TMemo;: TPopupMenu;: TMenuItem;: TMenuItem;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;LoadExpSys1Click(Sender: TObject);Printtofile1Click(Sender: TObject);Clear1Click(Sender: TObject);Show1Click(Sender: TObject);Simulation1Click(Sender: TObject);Paretoset1Click(Sender: TObject);SearchofParetoset1Click(Sender: TObject);ParametersofGA1Click(Sender: TObject);Createobject1Click(Sender: TObject);Networkoperator1Click(Sender: TObject);Initialdate1Click(Sender: TObject);Binaryoperations1Click(Sender: TObject);UnaryOperations1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };=class(TGANOPLog)Create (hh1, pp1, rr1, nfu1, lchr1, epo1,: integer; alfa1, pmut1: real; L1, Mout1,,kw1,kv1: integer);Func(var Fu:TArrInt); override;;:array[0..2] of integer=(0,1,2);:array[0..1] of integer=(31,31); //15,15:array[0..26,0..2]of integer=

((0,0,0),(0,0,1), (0,0,2),(0,1,0),

(0,1,1),(0,1,2), (0,2,0),(0,2,1),

(0,2,3),(3,0,0), (1,0,1),(1,0,2),

(1,1,0),(1,1,1), (1,1,2),(1,2,0),

(1,2,1),(1,2,2), (2,0,0),(2,0,1),

(2,0,3),(3,1,0), (2,3,1),(2,1,2),

(2,2,0),(2,2,1), (2,2,2));:array[0..26] of integer=

( 0, 1, 2, 3,

, 2, 0, 1,

, 3, 1, 0,

, 1, 2, 0,

, 2, 0, 1,

, 3, 1, 0,

, 1, 2);:array[0..31,0..31] of integer =

((0,0,0,1, 1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,1, 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 1,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,1, 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0));: TForm1;:TUser;:integer=512; //256 number of chromosomes in an initial population:integer=512; // number of generations:integer=128; //128 number of couples in one generation:integer=2; // number of functionals:integer=8; //number of variations in one chromosome:integer=10; // number of generations between exchange of basic NOM:integer=32; // number of elitaring chromosomes:real=0.4; // parameter for crossover:real=0.7; // probability of mutation:integer=32; // dimension of network operator matrix:integer=3; //cardinal of set of variables:integer=2; //cardinal of set of unary operations:integer=4; //cardinal of set of binary operations:integer=2; // number of outputs,:TArrInt;:TArrArrInt;:integer;// number of choose chromosome,xinp1:TArrArrInt;,yout1:TArrArrInt;:array of array of integer;:array of array of integer;

nx:integer=3;:integer=2;:integer=27;

Procedure UpProgressBar;Gendatas;

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

//*********************************************************Calc5, Calc4, Unit3, Unit2, Unit7, Unit11, Unit6, Unit8, Unit10, Unit12, Unit13;

{$R *.dfm}TForm1.Binaryoperations1Click(Sender: TObject);:=TForm5.create(self);.ShowModal;;TForm1.Clear1Click(Sender: TObject);.Clear;;TForm1.Createobject1Click(Sender: TObject);:=TForm6.create(self);.ShowModal;:=TUser.Create(hh1, pp1, rr1, nfu1, lchr1, epo1,,alfa1, pmut1, L1, Mout1,kp1,kw1,kv1);.NOP.SetPnum(Pnum1);.NOP.SetDnum(Dnum1);.NOP.SetPsi(Psi1);.EndGeneration:=Upprogressbar;.Enabled:=false;.Enabled:=true;;TForm1.FormCreate(Sender: TObject);

var:integer;: Integer;

Begin;.top:=212;.left:=0;.width:=ClientWidth;.Top:=0;.Left:=0;.Height:=progressbar1.top;.Width:=ClientWidth;.ReadOnly:=true;(xinp1,np,nx);(yout1,np,ny);.Enabled:=false;(Pnum1,kP1);(Dnum1,Mout1);;i:=0 to kP1-1 do[i]:=Pnumc[i];i:=0 to Mout1-1 do[i]:=Dnumc[i];(Psi1,L1,L1);i:=0 to L1-1 doj:=0 to L1-1 do[i,j]:=PsiBasc[i,j];;TForm1.Initialdate1Click(Sender: TObject);,j:integer;:=TForm3.create(self);.ShowModal;(xinp,np,nx);(yout,np,ny);:=TForm2.create(self);.ShowModal;i:=0 to np-1 doj:=0 to nx-1 do[i,j]:=xinp1[i,j];j:=0 to ny-1 do[i,j]:=yout1[i,j];;;TForm1.LoadExpSys1Click(Sender: TObject);:=TForm13.create(self);.ShowModal;;TForm1.Networkoperator1Click(Sender: TObject);,j:integer;:=TForm11.Create(self);.ShowModal;:=TForm7.create(self);.ShowModal;;TForm1.ParametersofGA1Click(Sender: TObject);:=TForm8.create(self);.ShowModal;.PP:=pp1;.RR:=rr1;.epo:=epo1;

EA.kel:=kel1;.alfa:=alfa1;

EA.pmut:=pmut1;;TForm1.Paretoset1Click(Sender: TObject);:=TForm10.create(self);.ShowModal;.Caption:=inttostr(kchoose);.ReadChromosome(kchoose,Psi1);;TForm1.Printtofile1Click(Sender: TObject);savedialog1.Execute then.Lines.SaveToFile(Savedialog1.FileName);;TForm1.SearchofParetoset1Click(Sender: TObject);.Enabled:=false;.Max:=EA.PP;.NOP.SetPsi(Psi1);.GenAlgorithm;.Enabled:=true;;TForm1.Show1Click(Sender: TObject);:string;:integer;.NOP.SetPsi(Psi1);.NOP.PsitoPasStr;i:=0 to EA.NOP.L-1 do.Lines.Add(EA.NOP.zs[i]);;TForm1.Simulation1Click(Sender: TObject);:=TForm12.Create(self);.ShowModal;;TForm1.Unaryoperations1Click(Sender: TObject);:=TForm4.create(self);.ShowModal;;UpProgressBar;.ProgressBar1.StepIt;.Refresh;;

{ TGANOPUser }TUser.Create(hh1, pp1, rr1, nfu1, lchr1, epo1,: integer; alfa1, pmut1: real; L1, Mout1,,kw1,kv1: integer);Create(hh1, pp1, rr1, nfu1, lchr1, epo1,, alfa1, pmut1, L1, Mout1, kp1,kw1,kv1);;TUser.Func(var Fu: TArrInt);,j,s0,s1:integer;

// inherited;:=0;:=0;i:=0 to np-1 doj:=0 to NOP.kP-1 do.Vs[j]:=xinp[i,j];.RPControl;yout[i,0]<>NOP.z[NOP.Dnum[0]] then:=s0+1;:=s1+abs(yout[i,0]-NOP.z[NOP.Dnum[0]]);;;[0]:=s0;[1]:=s1;;Gendatas;,j:integer;i:=0 to np- 1 doj:= 0 to nx-1 do[i,j]:=xinpc[i,j];[i,0]:=youtc[i];[i,1]:=yout1[i,0];;;.Unit2;

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

//*********************************************************, Messages, SysUtils, Variants, Classes,, Controls, Forms,, StdCtrls, Grids;= class(TForm): TStringGrid;: TButton;: TOpenDialog;: TSaveDialog;: TButton;: TButton;: TMemo;Button3Click(Sender: TObject);Button2Click(Sender: TObject);Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm2;:set of char;

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

//*********************************************************Unit1;

{$R *.dfm}TForm2.Button1Click(Sender: TObject);,j:integer;(xinp1,np,nx);(yout1,np,ny);i:=0 to np-1 doj:=0 to nx-1 do[i,j]:=StrtoInt(StringGrid1.Cells[j+1,i+1]);j:=0 to ny-1 do[i,j]:=StrtoInt(StringGrid1.Cells[j+1+nx,i+1]);;;;TForm2.Button2Click(Sender: TObject);,j:integer;:string;.FileName:='Input00.txt';SaveDialog1.Execute then.Clear;i:=0 to np-1 do:='';j:=0 to nx+ny-1 do:=s+StringGrid1.Cells[j+1,i+1]+' ';.Lines.Add(s);;.Lines.SaveToFile(SaveDialog1.FileName);;;TForm2.Button3Click(Sender: TObject);,j,k:integer;:string;.FileName:='Input00.txt';OpenDialog1.Execute then.Clear;.Lines.LoadFromFile(OpenDialog1.FileName);i:=0 to np-1 do:=1;j:=1 to length(Memo1.Lines[i]) doMemo1.Lines[i][j] in Cyfr then:=s1+Memo1.Lines[i][j].Cells[k,i+1]:=s1;:='';:=k+1;;;;;TForm2.FormCreate(Sender: TObject);,j:integer;:=RGB(250,200,250);.Color:=color;.ColCount:=nx+ny+1;.RowCount:=np+1;:=['0'..'9'];i:=0 to np-1 do.Cells[0,i+1]:=inttostr(i);j:=0 to nx-1 do.Cells[j+1,0]:='x['+inttostr(j)+']';j:=0 to ny-1 do.Cells[j+1+nx,0]:='y['+inttostr(j)+']';;.Unit3;

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

//*********************************************************, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;= class(TForm): TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TButton;Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm3;

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

//*********************************************************Unit1;

{$R *.dfm}TForm3.Button1Click(Sender: TObject);:=StrtoInt(Edit1.text);:=StrtoInt(Edit2.text);:=StrtoInt(Edit3.text);;;TForm3.FormCreate(Sender: TObject);:=RGB(220,220,250);.Color:=color;.Color:=color;.Color:=color;.text:=Inttostr(nx);.text:=Inttostr(ny);.text:=Inttostr(np);;.Unit6;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;= class(TForm): TEdit;: TLabel;: TEdit;: TLabel;: TLabel;: TEdit;: TButton;Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm6;Unit1;

{$R *.dfm}TForm6.Button1Click(Sender: TObject);:=strtoint(Edit1.Text);:=strtoint(Edit2.Text);:=strtoint(Edit6.Text);;;TForm6.FormCreate(Sender: TObject);:=RGB(250,250,100);.Color:=color;.Color:=color;.Color:=color;.Text:=inttostr(HH1);.Text:=inttostr(nfu1);.Text:=inttostr(lchr1);;.Unit7;

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

//*********************************************************, Messages, SysUtils,, Classes, Graphics,, Forms, Dialogs,, Grids;= class(TForm): TStringGrid;: TStringGrid;: TLabel;: TLabel;: TStringGrid;: TLabel;: TLabel;: TButton;: TButton;: TSaveDialog;: TButton;: TOpenDialog;: TMemo;Button4Click(Sender: TObject);Button3Click(Sender: TObject);Button2Click(Sender: TObject);Button1Click(Sender: TObject);StringGrid6Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };:set of char=['0'..'9'];: TForm7;

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

//*********************************************************Unit1;

{$R *.dfm}TForm7.Button1Click(Sender: TObject);,j:integer;i:=0 to kP1-1 do[i]:=strtoint(StringGrid3.Cells[1,i]);i:=0 to Mout1-1 do[i]:=strtoint(StringGrid5.Cells[1,i]);i:=0 to L1-1 doj:=0 to L1-1 do[i,j]:=strtoint(StringGrid6.Cells[j,i]);;;TForm7.Button2Click(Sender: TObject);,j:integer;:string;.Filename:='Psi00.txt';SaveDialog1.Execute then.Clear;i:= 0 to StringGrid6.RowCount-1 do:='';j:= 0 to StringGrid6.ColCount-1 do:=s+StringGrid6.Cells[j,i]+' ';.Lines.Add(s);;.Lines.SaveToFile(SaveDialog1.FileName);;;TForm7.Button3Click(Sender: TObject);,j,k:integer;:string;.FileName:='Psi00.txt';OpenDialog1.Execute then.Clear;.Lines.LoadFromFile(OpenDialog1.FileName);i:=0 to L1-1 do:=0; s1:='';j:=1 to length(Memo1.Lines[i]) doMemo1.Lines[i][j] in Cyfr then:=s1+Memo1.Lines[i][j].Cells[k,i]:=s1;:='';:=k+1;;;;;TForm7.Button4Click(Sender: TObject);,j:integer;:string;Opendialog1.Execute then.Clear;.Lines.LoadFromFile(Opendialog1.FileName);;;TForm7.FormCreate(Sender: TObject);,j:integer;:=RGB(240,240,100);.color:=color;.color:=color;.color:=color;.RowCount:=kP1;.RowCount:=Mout1;.RowCount:=L1;.ColCount:=L1;i:=0 to nx-1 do.Cells[0,i]:=InttoStr(i);.Cells[1,i]:=InttoStr(PNum1[i]);;i:=0 to High(DNum1) do.Cells[0,i]:=InttoStr(i);.Cells[1,i]:=InttoStr(DNum1[i]);;i:=0 to L1 -1 doj:=0 to L1 -1 do.Cells[j,i]:=InttoStr(Psi1[i,j]);;TForm7.StringGrid6Click(Sender: TObject);.Caption:='Psi['+inttostr(StringGrid6.Row)+','+(StringGrid6.Col)+']';;.Unit8;

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

//*********************************************************, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;= class(TForm): TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TButton;: TEdit;: TLabel;Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm8;

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

//*********************************************************Unit1;

{$R *.dfm}TForm8.Button1Click(Sender: TObject);:=strtoint(Edit2.Text);:=strtoint(Edit3.Text);:=strtoint(Edit9.Text);:=strtoint(Edit10.Text);:=strtofloat(Edit11.Text);:=strtofloat(Edit1.Text);;;TForm8.FormCreate(Sender: TObject);:=RGB(250,100,250);.Color:=Color;.Color:=Color;.Color:=Color;.Color:=Color;.Color:=Color;.Color:=Color;.Text:=inttostr(pp1); // number of generations.Text:=inttostr(rr1); // number of couples in one generation.Text:=inttostr(Epo1);//number of ganerations between exchange of basic NOM.Text:=inttostr(kel1); // number of elitaring chromosomes.Text:=floattostr(alfa1); // parameter for crossover.Text:=floattostr(pmut1); // probability of mutation;.Unit10;

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

//*********************************************************, Messages, SysUtils, Variants,, Graphics, Controls, Forms,, StdCtrls, Grids, TeEngine,, ExtCtrls, TeeProcs, Chart;= class(TForm): TChart;: TPointSeries;: TStringGrid;: TComboBox;: TComboBox;: TLabel;: TLabel;: TButton;: TButton;: TButton;: TSaveDialog;: TMemo;Button2Click(Sender: TObject);Button1Click(Sender: TObject);Button3Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm10;:integer;

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

//*********************************************************Unit1;

{$R *.dfm}TForm10.Button1Click(Sender: TObject);StringGrid1.Row>=1 then:=strtoint(StringGrid1.Cells[1,StringGrid1.Row]):=EA.Pareto[0];.ReadChromosome(kchoose,Psi1);;TForm10.Button2Click(Sender: TObject);,j:integer;:string;i:=0 to StringGrid1.RowCount-1 do:='';j:=0 to StringGrid1.ColCount-1 do:=s+StringGrid1.Cells[j,i]+' ';.Lines.Add(s);;.FileName:='Pareto';SaveDialog1.Execute then.SaveToBitmapFile(savedialog1.FileName+'.bmp');.Lines.SaveToFile(savedialog1.FileName+'.txt');;;TForm10.Button3Click(Sender: TObject);:integer;.Clear;i:=0 to kol-1 do.AddXY(EA.Fuh[EA.Pareto[i],ComboBox1.ItemIndex],.Fuh[EA.Pareto[i],ComboBox2.ItemIndex]);;TForm10.FormCreate(Sender: TObject);,j,k:integer;:=RGB(230,150,250);:=length(EA.Pareto);.ColCount:=nfu1+2;.RowCount:=kol+1;.Colwidths[0]:=32;.Colwidths[1]:=32;i:=0 to nfu1-1 do.Colwidths[i+2]:=96;i:=0 to kol-2 doj:=i+1 to kol-1 doEA.Fuh[EA.Pareto[i],0]>EA.Fuh[EA.Pareto[j],0] then:=EA.Pareto[i];.Pareto[i]:=EA.Pareto[j];.Pareto[j]:=k;;i:=0 to nfu1-1 do.Cells[2+i,0]:='F_'+inttostr(i);i:=0 to kol-1 do.Cells[0,i+1]:=inttostr(i);.Cells[1,i+1]:=inttostr(EA.Pareto[i]);;i:=0 to kol-1 doj:=0 to nfu1-1 do.Cells[j+2,i+1]:=inttostr(EA.Fuh[EA.Pareto[i],j]);.Clear;.Clear;.Clear;i:=0 to nfu1-1 do.Items.Add(inttostr(i));.Items.Add(inttostr(i));;.ItemIndex:=0;.ItemIndex:=1;.Click;;.Unit11;

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

//*********************************************************, Messages, SysUtils, Variants, Classes,, Controls, Forms,, StdCtrls;= class(TForm): TEdit;: TButton;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm11;

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

//*********************************************************Unit1;

{$R *.dfm}TForm11.Button1Click(Sender: TObject);:=StrtoInt(Edit1.Text);:=StrtoInt(Edit2.Text);:=StrtoInt(Edit3.Text);;;TForm11.FormCreate(Sender: TObject);:=RGB(200,250,200);.Color:=Color;.Color:=Color;.Color:=Color;.Text:=InttoStr(L1);.Text:=InttoStr(kP1);.Text:=InttoStr(Mout1);;.Unit12;

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

//*********************************************************, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Grids, StdCtrls;= class(TForm): TChart;: TPointSeries;: TButton;: TSaveDialog;: TButton;: TEdit;: TLineSeries;: TStringGrid;: TButton;Button3Click(Sender: TObject);Button2Click(Sender: TObject);Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm12;

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

//*********************************************************Unit1;

{$R *.dfm}TForm12.Button1Click(Sender: TObject);.fileName:='ModelLog.bmp';Savedialog1.execute then.SaveToBitmapFile(Savedialog1.fileName);;TForm12.Button2Click(Sender: TObject);,ii,j,kinp:integer;:=strtoint(Edit1.Text);.Clear;.Clear;.NOP.SetPsi(Psi1);i := 0 to kinp-1 do:=random(high(yetc1)+1);j:=0 to kP1-1 do.NOP.Vs[j]:=xetc1[ii,j];.NOP.RPControl;.AddXY(i,EA.NOP.z[EA.NOP.DNum[0]]);.AddXY(i,yetc1[ii,1]);;;TForm12.Button3Click(Sender: TObject);,j,qq1,qq2:integer;.NOP.Vs[0]:=strtoint(StringGrid2.Cells[0,1]);.NOP.Vs[1]:=strtoint(StringGrid2.Cells[1,1]);.NOP.Vs[2]:=strtoint(StringGrid2.Cells[2,1]);.NOP.SetPsi(Psi1);.NOP.RPControl;.Cells[3,1]:=inttostr(EA.NOP.z[EA.NOP.Dnum[0]]);:=0;(i<np)and(

(EA.NOP.Vs[0]<>xinp[i,0])or(EA.NOP.Vs[1]<>xinp[i,1])or

(EA.NOP.Vs[2]<>xinp[i,2])) do i:=i+1;i<np then.Cells[4,1]:=inttostr(yout[i,0]);.Cells[5,1]:=inttostr(yout[i,1]);;TForm12.FormCreate(Sender: TObject);,j:integer;:=clWhite;.Clear;.Clear;.NOP.SetPsi(Psi1);.ColCount:=nx+2;.RowCount:=2;i:=0 to np-1 doj:=0 to kP1-1 do.NOP.Vs[j]:=xinp[i,j];.NOP.RPControl;.AddXY(i,EA.NOP.z[EA.NOP.DNum[0]]);.AddXY(i,yout[i,0]);;.Cells[0,0]:='x1';.Cells[1,0]:='x2';.Cells[2,0]:='x3';.Cells[3,0]:='z';.Cells[4,0]:='y';.Cells[0,1]:=inttostr(xinp[0,0]);.Cells[1,1]:=inttostr(xinp[0,1]);.Cells[2,1]:=inttostr(xinp[0,2]);;.Unit13;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, Unit1;= class(TForm): TOpenDialog;: TStringGrid;: TButton;: TMemo;: TButton;Button2Click(Sender: TObject);FormCreate(Sender: TObject);Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };:integer = 648;: TForm13;:set of char;

{$R *.dfm}TForm13.Button1Click(Sender: TObject);,j,k:integer;:string;.FileName:='ExpSys.txt';OpenDialog1.Execute then.Clear;.Lines.LoadFromFile(OpenDialog1.FileName);i:=0 to nf-1 do:=1;j:=1 to length(Memo2.Lines[i]) doMemo2.Lines[i][j] in Cyfr then:=s2+Memo2.Lines[i][j].Cells[k,i+1]:=s2;:='';:=k+1;;;;;TForm13.Button2Click(Sender: TObject);,j:integer;(xetc1,nf,nx);(yetc1,nf,ny);i:=0 to nf-1 doj:=0 to nx-1 do[i,j]:=StrtoInt(StringGrid1.Cells[j+1,i+1]);j:=0 to ny-1 do[i,j]:=StrtoInt(StringGrid1.Cells[j+1+nx,i+1]);;;;TForm13.FormCreate(Sender: TObject);,i:integer;.ColCount:=nx+ny+1;.RowCount:=nf+1;:=['0'..'9'];i:=0 to nf-1 do.Cells[0,i+1]:=inttostr(i);j:=0 to nx-1 do.Cells[j+1,0]:='x['+inttostr(j)+']';j:=0 to ny-1 do.Cells[j+1+nx,0]:='y['+inttostr(j)+']';;.UnitLogObjects;

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

//*********************************************************Log02,SysUtils;=array of integer;=array of TArrInt;Int=array [0..3]of integer;Int=array of TArr4Int;int=array of TArrArr4Int;=array of real;=array of TArrReal;=array of string;=Procedure;=class(TObject):integer; //dimention of network operator matrix:integer;//number of outputs:TArrInt;//set of variables:integer;//number of unary operations:integer;//number of binary operations:integer;//cardinal of the set of variables:TArrInt;//vector of number nodes for variables:TArrInt;//vector of number nodes for outputs:TArrInt;//vector of nodes:TArrString;//string for mathematical expression,Psi0:TArrArrInt;//Network operator matricesCreate(L1,Mout1,kp1,kw1,kv1:integer);//create of NOPSetVs(vs1:TArrInt);SetPnum(pnum1:TArrInt);SetDnum(dnum1:TArrInt);SetPsiBas(Psi1:TArrArrInt);SetPsi(Psi1:TArrArrInt);GenVar(var w:TArr4Int);Variations(w:TArr4Int);RPControl;PsitoPas;PsitoTex;PsitoPasStr;PsitoTexStr;ReadPsi(var Psi1:TArrArrInt);ReadPsi0(var Psi1:TArrArrInt);;=class(TObject):TArrArrArr4Int;//массив структурных частей хромосом

HH:integer;// размерность популяции:integer;// число скрещиваемых пар:integer;// число поколений:integer;//число функционалов:integer;//длина структурной хромосомы:integer;//число поколений между эпохами:integer;//число элитарных хромосом:TArrArrInt;// массив значений функционалов:TArrInt;// массив растояний домножества Парето:TArrInt;// множество Паретоs,Son2s:TArrArr4Int;//структурные части потомков,L2,L3,L4:integer;// растояния до множества Парето потомков,Fu2:TArrInt;// значения функционалов для потомков:real;//параметр для отбора родителей:real;//вероятность мутации:TNetOperLog01;// сетевой оператор

EndGeneration:TProc;Create(hh1,pp1,rr1,nfu1,lchr1,Epo1,kel1:integer;,pmut1:real;,Mout1,kp1,kw1,kv1:integer);GenAlgorithm;// операции генетического алгоритмаChoosePareto;ImproveChrom(var StrChrom: TArrArr4Int);ReadChromosome(k:integer;var Psi1:TArrArrInt);Func(var Fu:TArrInt); virtual;// Вычисляет значения функционаловRast(Fu: TArrInt): integer;;

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

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

{ TNetOper }TNetOperLog01.Create(L1, Mout1, kp1, kw1, kv1: integer);Create;:=L1;

kP:=kp1;:=kv1;:=kw1;

Mout:=Mout1;(Psi,L,L);(Psi0,L,L);(z,L);(zs,L);(Vs,kP);(Pnum,kP);(Dnum,Mout);;TNetOperLog01.SetDnum(Dnum1: TArrInt);:integer;i:=0 to Mout-1 do[i]:=Dnum1[i];;TNetOperLog01.SetPnum(pnum1: TArrInt);:integer;i:=0 to kP-1 do[i]:=Pnum1[i];;TNetOperLog01.SetPsi(Psi1:TArrArrInt);,j:integer;i:=0 to L-1 doj:= 0 to L-1 do[i,j]:=Psi1[i,j];;TNetOperLog01.SetPsiBas(Psi1: TArrArrInt);,j:integer;i:=0 to L-1 doj:= 0 to L-1 do[i,j]:=Psi1[i,j];;TNetOperLog01.SetVs(Vs1: TArrInt);:integer;i:=0 to high(Vs1) do[i]:=Vs1[i];;TNetOperLog01.ReadPsi(var Psi1: TArrArrInt);,j:integer;i:=0 to L-1 doj:=0 to L-1 do[i,j]:=Psi[i,j];;TNetOperLog01.ReadPsi0(var Psi1: TArrArrInt);,j:integer;i:=0 to L-1 doj:=0 to L-1 do[i,j]:=Psi0[i,j];;TNetOperLog01.RPControl;,j:integer;:integer;i:=0 to L-1 doPsi[i,i] of

,2,3: z[i]:=0;

: z[i]:=2;;i:=0 to kP-1 do[Pnum[i]]:=Vs[i];i:=0 to L-2 doj:=i+1 to L-1 doPsi[i,j]<>0 thenPsi[i,j] of

: zz:=Phi_1(z[i]);

: zz:=Phi_2(z[i]);;Psi[j,j] of

: z[j]:=Omega_0(z[j],zz);

: z[j]:=Omega_1(z[j],zz);

: z[j]:=Omega_2(z[j],zz);

: z[j]:=Omega_3(z[j],zz);;;;TNetOperLog01.Variations(w:TArr4Int);

// Элементарные операции

// 0 - замена недиагонального элемента

// 1 - замена диагонального элемента

// 2 - добавление дуги

// 3 - удаление дуги,j,s1,s2:integer;

psipr:TArrArrInt;(w[0]<>0)or(w[1]<>0)or(w[2]<>0) thenw[0] of

: if Psi[w[1],w[2]]<>0 then Psi[w[1],w[2]]:=w[3];

: Psi[w[1],w[1]]:=w[3];

: if Psi[w[1],w[2]]=0 then Psi[w[1],w[2]]:=w[3];

::=0;i:=0 to w[2]-1 doPsi[i,w[2]]<>0 then s1:=s1+1;:=0;j:=w[1]+1 to L-1 do(Psi[w[1],j]<>0)then s2:=s2+1;s1>1 thens2>1 then[w[1],w[2]]:=0;;;;TNetOperLog01.GenVar(var w:TArr4Int);

// Генерация элементарной операции[0]:=random(4);w[0] of

,2,3: // замена недиагонального элемента, добавление и удаление дуги

begin[1]:=random(L-1);[2]:=random(L-w[1]-1)+w[1]+1;

w[3]:=random(kW)+1;;

: // замена диагонального элемента

begin[1]:=random(L);[2]:=w[1];[3]:=random(kV);;;;TNetOperLog01.PsitoPas;

// It tranforms from Psi to Pascal,j:integer;:string;i:=0 to L-1 doPsi[i,i] of

,4: zs[i]:='0';

: zs[i]:='1';

: zs[i]:='-inf';

: zs[i]:='inf';;i:=0 to kP-1 do[Pnum[i]]:='x['+inttostr(i)+']';i:=0 to L-2 doj:=i+1 to L-1 doPsi[i,j]<>0 thenPsi[i,j]=1 then:=zs[i]:='Ro_'+inttostr(Psi[i,j])+'('+zs[i]+')';((Psi[j,j]=0)and(zs[j]='0'))or

((Psi[j,j]=1)and(zs[j]='1'))or

((Psi[j,j]=2)and(zs[j]='-inf'))or

((Psi[j,j]=3)and(zs[j]='inf'))or

((Psi[j,j]=4)and(zs[j]='0')) then[j]:=zz[j]:='Xi_'+inttostr(Psi[j,j])+'('+zs[j]+','+zz+')';;;;TNetOperLog01.PsitoPasStr;,j:integer;j:=L-1 downto 0 do[j]:='z_'+inttostr(j)+'=';Psi[j,j] of

: zs[j]:=zs[j]+'Or2(0,';

: zs[j]:=zs[j]+'And2(2,';

: zs[j]:=zs[j]+'Xor2(0,';

: zs[j]:=zs[j]+'Equ2(0,';;i:=j-1 downto 0 doPsi[i,j]<>0 thenPsi[i,j]=1 then[j]:=zs[j]+'z_'+inttostr(i)+','[j]:=zs[j]+'not z_'+inttostr(i)+',';zs[j,length(zs[j])]=',' then[j,length(zs[j])]:=')'[j]:=zs[j]+')';;i:=0 to kP-1 do[Pnum[i]]:='z_'+inttostr(Pnum[i])+'=x_'+inttostr(i);;TNetOperLog01.PsitoTex;

// It tranforms from Psi to LaTeX,j:integer;:string;i:=0 to L-1 doPsi[i,i] of

,4: zs[i]:='0';

: zs[i]:='1';

: zs[i]:='-\infinity';

: zs[i]:='\infinity';;i:=0 to kP-1 do[Pnum[i]]:='x_{'+inttostr(i)+'}';i:=0 to L-2 doj:=i+1 to L-1 doPsi[i,j]<>0 thenPsi[i,j]=1 then:=zs[i]:='\rho_{'+inttostr(Psi[i,j])+'}('+zs[i]+')';((Psi[j,j]=0)and(zs[j]='0'))or

((Psi[j,j]=1)and(zs[j]='1'))or

((Psi[j,j]=2)and(zs[j]='-\infinity'))or

((Psi[j,j]=3)and(zs[j]='\infinity'))or

((Psi[j,j]=4)and(zs[j]='0')) then[j]:=zz[j]:='\chi_{'+inttostr(Psi[j,j])+'}('+zs[j]+','+zz+')';;;;TNetOperLog01.PsitoTexStr;,j:integer;j:=L-1 downto 0 do[j]:='$z_{'+inttostr(j)+'}=';Psi[j,j] of

: zs[j]:=zs[j]+'\text{Min}(';

: zs[j]:=zs[j]+'\text{Max}(';

: zs[j]:=zs[j]+'\text{Pol}(';;i:=j-1 downto 0 doPsi[i,j]<>0 thenPsi[i,j]<>1 then[j]:=zs[j]+'\rho_{'+inttostr(Psi[i,j])+'}(z_{'+inttostr(i)+'})'[j]:=zs[j]+'z_{'+inttostr(i)+'}';Psi[j,j] of

:zs[j]:=zs[j]+'+';

:zs[j]:=zs[j]+'*';;;(zs[j,length(zs[j])]='+')or(zs[j,length(zs[j])]='*') then[j,length(zs[j])]:=')'[j]:=zs[j]+')';[j]:=zs[j]+'$\\';;i:=0 to kP-1 do[Pnum[i]]:='z_{'+inttostr(Pnum[i])+'}=x_{'+inttostr(i)+'}';;TGANOPLog.ChoosePareto;,j:integer;:=0;i:=0 to HH-1 doLh[i]=0 then:=j+1;(Pareto,j);[j-1]:=i;;;TGANOPLog.Create(hh1,pp1,rr1,nfu1,lchr1,Epo1,kel1:integer;,pmut1:real;,Mout1,kp1,kw1,kv1:integer);Create;:=hh1;:=pp1;:=rr1;:=nfu1;

lchr:=lchr1;:=epo1;:=kel1;

alfa:=alfa1;:=pmut1;:=TNetOperLog01.Create(L1, Mout1, kp1,kw1,kv1);(PopChrStr,HH,lchr);(Fuh,HH,nfu);(Lh,HH);(Fu1,nfu);(Fu2,nfu);(Son1s,lchr);(Son2s,lchr);;TGANOPLog.Func(var Fu:TArrInt);:integer;.RPControl;i:=0 to nfu-1 do[i]:=NOP.z[NOP.Dnum[i]];;TGANOPLog.GenAlgorithm;

// Генетический алгоритм,j,i1,j1,k,pt,rt,k1,k2,lmax,imax,kmin,ks1,ks2:integer;,su,su1:real;:integer;:boolean;:real;

//генерация популяции.SetPsiBas(NOP.Psi);i:=0 to lchr-1 doj:=0 to 3 do[0,i,j]:=0;i:=1 to HH-1 doj:=0 to lchr-1 do.GenVar(PopChrStr[i,j]);

// формируем элитуi:=0 to kel-1 do:=random(HH-1)+1;(PopChrStr[j]);

end;

//вычисление значений функционалов для каждой хромосомы

for i:=0 to HH-1 do.SetPsi(NOP.Psi0);j:=0 to lchr-1 do.Variations(PopChrStr[i,j]);

Func(Fuh[i]);;

//вычисление расстояний до множества Парето

for i:=0 to HH-1 do[i]:=Rast(Fuh[i]);

//начало цикла поколений:=1; // первое текущее поколение

//начало цикла скрещивания:=1;//первая пара скрещивания

//отбор двух родителей:=random(HH);

k2:=random(HH);:=random;(ksi<(1+alfa*Lh[k1])/(1+Lh[k1])) or

(ksi<(1+alfa*Lh[k2])/(1+Lh[k2])) then

begin

//если условие скрещивания выполнено:=random(lchr);

//скрещивание, получение 4 потомковi:=0 to ks1-1 do

begins[i]:=PopChrStr[k1,i];s[i]:=PopChrStr[k2,i];;i:=ks1 to lchr-1 dos[i]:=PopChrStr[k2,i];s[i]:=PopChrStr[k1,i];;

//мутация для 1го потомкаrandom<pmut then.GenVar(son1s[random(lchr)]);

//вычисление функционалов для 1го потомка.SetPsi(NOP.Psi0);;

for j:=0 to lchr-1 do.Variations(son1s[j]);

Func(Fu1);

//вычисление расстояния для 1го потомка:=Rast(Fu1);

//нахождение хромосомы с наибольшим расстоянием

Lmax:=Lh[0];:=0;i:=1 to HH-1 doLh[i]>Lmax then:=Lh[i];:=i;

end;L1<Lmax then

//если расстояние у 1го потомка меньше, чем наибольшее, то

//...осуществляем заменуi:=0 to lchr-1 do[imax,i]:=son1s[i];i:=0 to nfu-1 do[imax,i]:=Fu1[i];

end;

//вычисляем все расстояния для популяции

for i:=0 to HH-1 do[i]:=Rast(Fuh[i]);

//мутация для 2го потомкаrandom<pmut then

NOP.GenVar(Son2s[random(lchr)]);

//вычисление функционалов для 2го потомка.SetPsi(NOP.Psi0);;

for j:=0 to lchr-1 do.Variations(son2s[j]);

Func(Fu2);

//вычисление расстояния для 2го потомка:=Rast(Fu2);

//нахождение хромосомы с наибольшим расстоянием

Lmax:=Lh[0];:=0;i:=1 to HH-1 doLh[i]>Lmax then:=Lh[i];:=i;

end;L2<Lmax then

//если расстояние у 2го потомка меньше, чем наибольшее, то

//...осуществляем заменуi:=0 to lchr-1 do[imax,i]:=son2s[i];i:=0 to nfu-1 do[imax,i]:=Fu2[i];

end;

//вычисляем все расстояния для популяции

for i:=0 to HH-1 do[i]:=Rast(Fuh[i]);

end;:=rt+1;

//конец цикла скрещиванияrt>RR;

// генерируем новые хромосомы:=pt+1;

//если эпоха закончилась, то необходимо сменить базис

if pt mod Epo=0 then

//...на наиболее близкую хромосому к утопической

// хромосоме в пространстве нормированных критериев:=Fuh[0,1];

kmin:=0;i:=1 to HH-1 doFuh[i,1]<Fumin then:=Fuh[i,1];:=i;;kmin<>0 then

// заменяем базис

// строим матрицу для найденной хромосомы

NOP.SetPsi(NOP.Psi0);j:=0 to lchr-1 do.Variations(PopChrStr[kmin,j]);

// меняем базисную матрицу на новую.SetPsiBas(NOP.Psi);

//генерируем тождественную хромосомуi:=0 to lchr-1 do

for j:=0 to 3 do[0,i,j]:=0;(Fuh[0]);i:=1 to HH-1 doj:=0 to lchr-1 do.GenVar(PopChrStr[i,j]);

end;

//вычисляем все фунционалы для всей популяции

for i:=1 to HH-1 do.SetPsi(NOP.Psi0);j:=0 to lchr-1 do.Variations(PopChrStr[i,j]);(Fuh[i]);;

// формируем элитуi:=0 to kel-1 do:=random(HH-1)+1;(PopChrStr[j]);;

//вычисляем новые расстоянияi:=0 to HH-1 do[i]:=Rast(Fuh[i]);

end;

//конец цикла поколений;

// form1.ProgressBar1.StepIt;

// Form1.Refresh;pt>PP;;

//строим множество Парето;TGANOPLog.ImproveChrom(var StrChrom: TArrArr4Int);,j,k:integer;:boolean;.SetPsi(NOP.Psi0);(Fu1);:=-1;i:=0 to lchr-1 do.Variations(StrChrom[i]);(Fu2);:=true;j:=0 to nfu-1 do

if Fu2[j]>Fu1[j] then flag:=false;

if flag thenj:=0 to nfu-1 do

Fu1[j]:=Fu2[j];:=i;;

end;i:=k+1 to lchr-1 doj:=0 to 3 do[i,j]:=0;;TGANOPLog.Rast(Fu: TArrInt): integer;i,j,k,count:integer;:=0;i:=0 to HH-1 do:=0;(j<nfu) and (Fu[j]>=Fuh[i,j]) do j:=j+1;j>=nfu then:=0;(k<nfu) and (Fu[k]=Fuh[i,k]) do k:=k+1;k<nfu then count:=count+1;;;:=count;;TGANOPLog.ReadChromosome(k: integer;var Psi1: TArrArrInt);:integer;.SetPsi(NOP.Psi0);i:=0 to lchr-1 do.Variations(PopChrStr[k,i]);.ReadPsi(Psi1);;.Log02;

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

//*********************************************************Phi_1(z:integer):integer;Phi_2(z:integer):integer;Omega_0(z1,z2:integer):integer;Omega_1(z1,z2:integer):integer;Omega_2(z1,z2:integer):integer;Omega_3(z1,z2:integer):integer;

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

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

{ TLogFunc }Omega_0(z1, z2: integer): integer;z1>=z2 then result:=z1:=z2;;Omega_1(z1, z2: integer): integer;z1<=z2 then result:=z1:=z2;;Omega_2(z1, z2: integer): integer;:=(z1+z2) mod 4;;Omega_3(z1, z2: integer): integer;z1=z2 then result:=2:=(z1+z2) mod 2;;Phi_1(z: integer): integer;:=z;;Phi_2(z: integer): integer;:=(z+2)mod 4;;

END.


Приложение Б


Унарные операции


- означает остаток от


Бинарные операции



Приложение В


0 2 1 1

0 3 2 2

1 1 1 1

1 2 1 1

1 3 2 2

2 1 1 1

2 2 1 1

2 3 2 2

3 1 1 1

3 2 1 1

3 3 2 2

4 1 1 1

4 2 1 1

4 3 2 2

7 3 2 2

8 1 1 1

8 2 2 2

8 3 2 2

9 1 1 1

9 2 1 1

9 3 3 3

10 2 1 1

13 3 2 2

14 1 3 3

14 2 2 2

14 3 2 2

15 1 3 3

15 2 2 2

15 3 2 2

0 1 1 1

0 2 1 1

0 3 2 2

1 1 1 1

4 3 2 2

5 1 1 1

5 2 1 1

5 3 3 3

6 1 1 1

6 2 1 1

6 3 3 3

7 1 1 1

7 2 1 1

7 3 1 1

8 1 0 0

8 2 2 2

13 2 2 2

13 3 2 2

14 1 0 0

14 2 2 2

14 3 2 2

2 1 1 1

2 2 1 1

2 3 2 2

3 1 1 1

3 2 1 1

3 3 2 2

4 1 0 0

4 2 2 2

4 3 2 2

8 1 0 0

8 2 2 2

8 3 2 2

9 1 3 3

2 2 1 1

2 3 2 2

3 1 1 1

3 2 1 1

3 3 2 2

4 1 0 0

4 2 1 1

4 3 2 2

5 1 3 3

5 1 3 3

5 2 1 1

5 3 2 2

6 1 3 3

6 2 2 2

6 3 2 2

8 1 0 0

8 2 1 1

8 3 2 2

9 1 0 0

14 3 3 3

15 1 0 0

15 2 3 3

15 3 3 3

0 1 1 1

0 2 1 1

0 3 2 2

1 1 1 1

1 2 1 1

6 2 2 2

6 3 2 2

8 1 0 0

8 2 1 1

8 3 2 2

9 1 0 0

9 2 1 1

9 3 2 2

11 2 1 1

11 3 2 2

12 1 0 0

12 2 2 2

12 3 2 2

1 2 0 0

1 3 2 2

5 1 1 1

5 2 1 1

5 3 2 2

6 1 1 1

6 2 1 1

6 3 2 2

7 1 1 1

7 2 1 1

7 3 2 2

8 1 0 0

8 2 1 1

8 3 2 2

10 1 0 0

10 2 1 1

10 3 2 2

11 1 0 0

11 2 1 1

11 3 2 2

12 1 0 0

7 1 1 1

7 2 1 1

7 3 2 2

8 1 0 0

8 2 1 1

8 3 2 2

9 1 0 0

9 2 1 1

9 3 2 2

10 1 0 0

10 2 1 1

10 3 2 2

11 1 0 0

11 2 1 1

11 3 2 2

12 1 0 0

12 2 2 2

12 3 2 2

3 3 2 2

5 1 0 0

5 2 0 0

5 3 2 2

7 1 0 0

7 2 1 1

7 3 2 2

8 1 0 0

12 3 2 2

13 1 3 3

13 2 1 1

13 3 2 2

14 1 3 3

14 2 1 1

14 3 2 2

15 1 3 3

2 3 2 2

3 1 1 1

3 2 1 1

3 3 2 2

4 1 1 1

4 2 1 1

4 3 2 2

5 1 0 0

5 2 0 0

5 3 2 2

7 1 0 0

7 2 1 1

11 2 1 1

11 3 2 2

12 1 0 0

12 2 1 1

12 3 2 2

13 1 0 0

1 3 2 2

2 1 1 1

2 2 1 1

2 3 2 2

3 1 1 1

3 2 1 1

3 3 2 2

4 1 1 1

4 2 1 1

4 3 2 2

5 1 0 0

5 2 2 2

11 1 0 0

11 2 1 1

11 3 3 3

12 1 0 0

12 2 0 0

12 3 2 2

14 1 0 0

14 2 1 1

14 3 0 0

5 1 0 0

5 2 1 1

5 3 2 2

6 1 3 3

6 2 1 1

6 3 2 2

7 1 1 1

7 2 1 1

9 2 1 1

9 3 2 2

10 1 0 0

10 2 0 0

10 3 2 2

12 1 0 0

12 2 0 0

12 3 2 2

2 3 2 2

3 1 1 1

3 2 1 1

3 3 2 2

4 1 1 1

4 2 1 1

4 3 3 3

5 1 0 0

5 3 2 2

6 1 0 0

6 2 1 1

6 3 2 2

7 1 0 0

7 2 1 1

7 3 2 2

8 1 0 0

8 2 1 1

8 3 2 2

9 1 0 0

15 1 3 3

15 2 3 3

15 3 2 2

0 1 1 1

0 2 1 1

0 3 2 2

1 1 1 1

1 2 1 1

1 3 2 2

5 1 0 0

5 2 1 1

5 3 2 2

6 1 0 0

6 2 1 1

6 3 2 2

7 1 0 0

7 2 1 1

7 3 2 2

13 1 0 0

13 2 0 0

13 3 2 2

14 1 0 0

14 2 0 0

14 3 2 2

15 1 0 0

15 2 0 0

5 1 1 1

5 2 1 1

5 3 1 1

6 1 1 1

6 2 1 1

6 3 1 1

7 1 1 1

7 2 1 1

7 3 2 2

8 1 0 0

8 2 1 1

8 3 2 2

12 1 0 0

12 2 0 0

12 3 2 2

13 1 0 0

13 2 0 0

13 3 2 2

14 1 0 0

14 2 0 0

14 3 2 2

7 2 1 1

7 3 2 2

8 1 0 0

8 2 1 1

8 3 2 2

9 1 0 0

9 2 1 1

9 3 2 2

10 1 0 0

10 2 1 1

10 3 2 2

6 1 1 1

6 2 1 1

6 3 3 3

7 1 0 0

7 2 1 1

7 3 3 3

8 1 0 0

8 2 1 1


Приложение Г


Графики к исследованию 1:


Рис. 15


Рис. 16


Рис. 17


Рис. 18


Рис. 19

Рис. 20


Рис. 21


Рис. 22

Графики к исследованию 2:


Рис. 23


Рис. 24


Рис. 25


Рис. 26


Рис. 27


Рис. 28


Рис. 29


Рис. 30


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

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2018 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ