Разработка метода сетевого оператора для аппроксимации логического вывода экспертной системы
Сущность интеллектуальных систем. Запись математического выражения в виде ориентированного графа. Особенности разработки генетического алгоритма для решения задачи аппроксимации логического вывода экспертной системы на основе метода сетевого оператора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 17.09.2013 |
Размер файла | 1,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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 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 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 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 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 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 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 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 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 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 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 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 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
Результаты моделирования со сравнением решения от полученной формулы с изначальной экспертной системой представлены на последующих рисунках 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.
6. Гладков Л.А., Курейчик В.В., Курейчик В.М. “Генетические алгоритмы” - М.: ФИЗМАТЛИТ, 2006;
7. Грибова В.В., Клещев А.С., Шалфеева Е.А. Управление программными средствами в интеллектуальных системах//Изв. РАН. ТиСУ. 2010. № 6. С. 122-137.
8. Дивеев А.И., Софронова Е.А. “Основы генетического программирования Учебно-методическое пособие” - М.: Изд-во РУДН, 2006;
9. Дивеев А.И., Шмалько Е.Ю. “Метод генетического программирования для решения задачи оптимального управления” - М.: Научная сессия МИФИ-2008, том 10, ”Интеллектуальные системы и технологии”, 2008;
10. Дивеев А.И., Софронова Е.А. Метод генетического программирования для автоматического подбора формул в задаче структурного синтеза системы управления // Труды института системного анализа РАН. Динамика неоднородных систем. / Под ред. Ю.С. Попкова. - Вып. 10(1). - М.: ИСА РАН, КомКнига, 2010. - С.14-26.
11. Дивеев А.И., Сафронова Е.А. Метод сетевого оператора и его применение в задачах управления. - М.:РУДН, 2012.-182с.
12. Дивеев А.И. Метод сетевого оператора. М.:Изд-во ВЦ РАН.2010.178 с.
13. Дивеев А.И. Метод сетевого оператора. - М.: Учреждение Российской академии наук Вычислительный центр им. А.А. Дородницына РАН, 2010.
14. Дивеев А.И., Софронова Е.А., Идентификация системы логического вывода методом сетевого оператора - Вестник Российского университета дружбы народов. Серия: Инженерные исследования. 2010.№ 4. С. 51-59.
15. Дивеев А.И., Софронова Е.А. Генетический алгоритм для многокритериального структурно-параметрического синтеза // Вестник Российского университета дружбы народов. Серия «Инженерные исследования». -- 2007. -- № 4. -- С. 126--131.
16. Дивеев А.И., Софронова Е.А. Метод сетевого оператора для идентификации систем управления // Вестник Российского университета дружбы народов. Серия «Инженерные исследования». -- 2008. -- № 4. -- С. 78--85.
17. Дивеев А.И., Софронова Е.А. Метод генетического программирования для автоматиче ского подбора формул в задаче структурного синтеза системы управления // Труды инсти тута Системного анализа РАН. Динамика неоднородных систем / Под ред. Ю.С. Попкова. -- М.: ИСА РАН: КомКнига, 2006. -- Вып. 10(1). -- С. 14--26.
18. Дивеев А.И., Крылова М.В., Софронова Е.А. Метод генетического программирования для многокритериального структурно-параметрического синтеза систем автоматического управления // Вопросы теории безопасности и устойчивости систем: Сб. статей. -- М.: ВЦ РАН, 2008. -- Вып. 10. -- С. 93--100.
19. Джарратано, Дж. Экспертные системы. Принципы разработки и программирование / ДжозефДжарратано, Гари Райли. - 4-е изд. - М. : Вильямс, 2006. - 1152 с.
20. Джексон П. Введение в экспертные системы. М.: Издательский дом «Вильямс», 2001. -624 c.
21. Долин Г., Что такое ЭС. - Компьютер Пресс, 1992/2.
22. Дюк В., Самойленко А., Data Mining: учебный курс. - СПб.: Питер, 2001. - 368 с.
23. Евстигнеев Д.В. “Интеллектуальный мобильный робот” - М.: Энергия, 2008;
24. Еремеев А.П., Проблема корректности базы знаний в динамических экспертных системах - Известия Южного федерального университета. Технические науки. 1997. Т. 6. № 3. С. 213-214.
25. Искусственный интеллект: современный подход. - М.: Издательский дом «Вильямс», 2006. - 1408 c.
26. Искусственный интеллект. Кн. 1. Системы общения и экспертные системы: Справочник/Под ред. Э.В. Попова. -М.: Радио и связь. 1990. -464 с.
27. Корнеев В.В., Гареев А.Ф., Васютин С.В., Райх В.В., Базы данных. Интеллектуальная обработка информации. - М.: Изд-во «Нолидж», 2000. - 352 c.
28. Курейчик B.M. “Генетические алгоритмы” - Таганрог: Изд-во ТРТУ, 1998;
29. Кусимов С.Т., Васильев В.И., Ильясов Б.Г. Управление динамическими системами в условиях неопределенности М.: Наука, 1998. 625 с.
30. Лернер А.Я., Розенман Е.А. “Оптимальное управление” - М.: Энергия, 1970;
31. Ли Э.Б., Маркус Л. “Основы теории оптимального управления” - М.: Наука, 1972;
32. Макаров И.М., Лохин В.М. Интеллектуальные системы автоматического управления - М ФИЗМАТЛИТ, 2001-576с - ISBN 5-9221-0162-5
33. Нейлор К. Как построить свою экспертную систему.: - М.: Энергоатомиздат, 1991.
34. Нзамба Сенуво, Чинакал В.О. Разработка структуры интеллектуальной системы поддержки принятия решений при управлении установкой первичной переработки нефти. Вестник Российского Университета Дружбы Наровод. Серия: Инжененрные исследования №4, 2010г. 79-87 стр.
35. Попов Э.В., Кисель Е.Б., Кондрашова Е.Н., Ломакина В.В., Ломохов Г.А., Тюжина Е.А., Фоминых И.Б., Теоретическое и экспериментальное исследование принципов создания и использования динамических экспертных систем - отчет о НИР № 95-01-01278 (Российский фонд фундаментальных исследований)
36. Попов Э.В., Фоминых И.Б., Кисель Е.Б., Шапот М.Д. Статические и динамические экспертные системы // под ред. Попова Э.В. - М.: Финансы и статистика, 1996. - 320 с.
37. Построение экспертных систем. Под ред. Ф. Хайеса-Рота и др. -М., «Мир», 1987.
38. Пупков К.А., Коньков В.Г. Интеллектуальные системы. // МГТУ им. Н.Э. Баумана. М., 2003.
39. Рутковская Д., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы. М.: Горячая линия, 2008. 355 с.
40. Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы: Пер. с польск. Рудинский И.Д. - М.: Горячая линия - Телеком, 2009 г. - 452с.
41. Сидоркина И.Г. Системы искусственного интеллекта. - КноРус. 2011. 248 с.
42. Сойер Б., Фостер Д.Л. Программирование экспертных систем на Паскале. - М.: Финансы и статистика, 1990.
43. Сороколетов П.В., К вопросу построения динамических экспертных систем - Известия ТРТУ
44. Таунсенд К., Фохт Д. Проектирование и программная реализация экспертных систем на персональных ЭВМ. - М.: Фининсы и статистика, 1990.
45. Электронный журнал «Молодежный научно-технический вестник». Издатель ФГБОУ ВПО "МГТУ им. Н.Э. Баумана". Эл No. ФС77-51038. ISSN 2307-0609.
46. Diveyev A.I., Sofronova E.A. Application of network operator method for synthesis of optimal structure and parameters of automatic control system // Proceedings of 17-th IFAC World Congress, Seoul, 2008, 05.07.2008--12.07.2008. -- P. 6106--6113.
47. Dorigo M., Maniezzo V. Parallel Genetic Algorithms: Introduction and Overview of Current Research. // Parallel Genetic Algorithms: Theory and Applications. / Ed. by J. Stenders. - Amsterdam, IOS Press, 2012.
48. Goldin D.A., Pavlov B.V., Chesnokov A.M. Structures of informational control complex of technical systems/IFAC Symposium on Manufacturing, Modeling, Management and Control. MIM 2000. Greece, 2000. Preprints, P. 217-221.
49. http://www.aiportal.ru - Экспертные системы, Структура экспертной системы (Дата обращения: 07.04.2013)
50. http://www.cosc.brocku.ca - Recursive problem of calibration of expert systems (Дата обращения: 18.04.2013)
51. http://www.deepdyve.com/lp/association-for-computing-machinery/modeling-of-thoughtful-behavior-with-dynamic-expert-system-0gizU90uVy?autoClickRent=true (Дата обращения: 05.05.2013)
Приложения
Приложение А
unit Unit1;
//*********************************************************
INTERFACE
//*********************************************************
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,Log02,
Dialogs, StdCtrls, ComCtrls, Menus, UnitLogObjects;
type
TForm1 = class(TForm)
SaveDialog1: TSaveDialog;
ProgressBar1: TProgressBar;
Label1: TLabel;
Memo1: TMemo;
PopupMenu1: TPopupMenu;
Unaryoperations1: TMenuItem;
Binaryoperations1: TMenuItem;
MainMenu1: TMainMenu;
Initialdate1: TMenuItem;
Networkoperator1: TMenuItem;
Ge1: TMenuItem;
Createobject1: TMenuItem;
ParametersofGA1: TMenuItem;
SearchofParetoset1: TMenuItem;
Paretoset1: TMenuItem;
Simulation1: TMenuItem;
Showsolution1: TMenuItem;
Show1: TMenuItem;
Printtofile1: TMenuItem;
Clear1: TMenuItem;
LoadExpSys1: TMenuItem;
procedure LoadExpSys1Click(Sender: TObject);
procedure Printtofile1Click(Sender: TObject);
procedure Clear1Click(Sender: TObject);
procedure Show1Click(Sender: TObject);
procedure Simulation1Click(Sender: TObject);
procedure Paretoset1Click(Sender: TObject);
procedure SearchofParetoset1Click(Sender: TObject);
procedure ParametersofGA1Click(Sender: TObject);
procedure Createobject1Click(Sender: TObject);
procedure Networkoperator1Click(Sender: TObject);
procedure Initialdate1Click(Sender: TObject);
procedure Binaryoperations1Click(Sender: TObject);
procedure UnaryOperations1Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TUser=class(TGANOPLog)
Constructor Create (hh1, pp1, rr1, nfu1, lchr1, epo1,
kel1: integer; alfa1, pmut1: real; L1, Mout1,
kp1,kw1,kv1: integer);
Procedure Func(var Fu:TArrInt); override;
end;
const
Pnumc:array[0..2] of integer=(0,1,2);
Dnumc:array[0..1] of integer=(31,31); //15,15
xinpc: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));
youtc:array[0..26] of integer=
( 0, 1, 2, 3,
1, 2, 0, 1,
2, 3, 1, 0,
0, 1, 2, 0,
1, 2, 0, 1,
2, 3, 1, 0,
0, 1, 2);
PsiBasc: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));
var
Form1: TForm1;
EA:TUser;
hh1:integer=512; //256 number of chromosomes in an initial population
pp1:integer=512; // number of generations
rr1:integer=128; //128 number of couples in one generation
nfu1:integer=2; // number of functionals
lchr1:integer=8; //number of variations in one chromosome
Epo1:integer=10; // number of generations between exchange of basic NOM
kel1:integer=32; // number of elitaring chromosomes
alfa1:real=0.4; // parameter for crossover
pmut1:real=0.7; // probability of mutation
L1:integer=32; // dimension of network operator matrix
kP1:integer=3; //cardinal of set of variables
kw1:integer=2; //cardinal of set of unary operations
kv1:integer=4; //cardinal of set of binary operations
Mout1:integer=2; // number of outputs
Pnum1,
Dnum1:TArrInt;
Psi1:TArrArrInt;
kChoose:integer;// number of choose chromosome
xinp,xinp1:TArrArrInt;
yout,yout1:TArrArrInt;
xetc1:array of array of integer;
yetc1:array of array of integer;
nx:integer=3;
ny:integer=2;
np:integer=27;
Procedure UpProgressBar;
Procedure Gendatas;
//*********************************************************
IMPLEMENTATION
//*********************************************************
Uses Calc5, Calc4, Unit3, Unit2, Unit7, Unit11, Unit6, Unit8, Unit10, Unit12, Unit13;
{$R *.dfm}
Procedure TForm1.Binaryoperations1Click(Sender: TObject);
Begin
Form5:=TForm5.create(self);
Form5.ShowModal;
End;
Procedure TForm1.Clear1Click(Sender: TObject);
Begin
memo1.Clear;
End;
Procedure TForm1.Createobject1Click(Sender: TObject);
Begin
Form6:=TForm6.create(self);
Form6.ShowModal;
EA:=TUser.Create(hh1, pp1, rr1, nfu1, lchr1, epo1,
kel1,alfa1, pmut1, L1, Mout1,kp1,kw1,kv1);
EA.NOP.SetPnum(Pnum1);
EA.NOP.SetDnum(Dnum1);
EA.NOP.SetPsi(Psi1);
EA.EndGeneration:=Upprogressbar;
Createobject1.Enabled:=false;
Simulation1.Enabled:=true;
End;
Procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
j: Integer;
Begin
randomize;
ProgressBar1.top:=212;
ProgressBar1.left:=0;
ProgressBar1.width:=ClientWidth;
Memo1.Top:=0;
Memo1.Left:=0;
Memo1.Height:=progressbar1.top;
Memo1.Width:=ClientWidth;
Memo1.ReadOnly:=true;
Setlength(xinp1,np,nx);
Setlength(yout1,np,ny);
Simulation1.Enabled:=false;
Setlength(Pnum1,kP1);
Setlength(Dnum1,Mout1);
Gendatas;
for i:=0 to kP1-1 do
Pnum1[i]:=Pnumc[i];
for i:=0 to Mout1-1 do
Dnum1[i]:=Dnumc[i];
SetLength(Psi1,L1,L1);
for i:=0 to L1-1 do
for j:=0 to L1-1 do
Psi1[i,j]:=PsiBasc[i,j];
End;
Procedure TForm1.Initialdate1Click(Sender: TObject);
var
i,j:integer;
Begin
Form3:=TForm3.create(self);
Form3.ShowModal;
SetLength(xinp,np,nx);
SetLength(yout,np,ny);
Form2:=TForm2.create(self);
Form2.ShowModal;
for i:=0 to np-1 do
begin
for j:=0 to nx-1 do
xinp[i,j]:=xinp1[i,j];
for j:=0 to ny-1 do
yout[i,j]:=yout1[i,j];
end;
End;
procedure TForm1.LoadExpSys1Click(Sender: TObject);
begin
Form13:=TForm13.create(self);
Form13.ShowModal;
end;
Procedure TForm1.Networkoperator1Click(Sender: TObject);
var
i,j:integer;
Begin
Form11:=TForm11.Create(self);
Form11.ShowModal;
Form7:=TForm7.create(self);
Form7.ShowModal;
End;
Procedure TForm1.ParametersofGA1Click(Sender: TObject);
Begin
Form8:=TForm8.create(self);
Form8.ShowModal;
EA.PP:=pp1;
EA.RR:=rr1;
EA.epo:=epo1;
EA.kel:=kel1;
EA.alfa:=alfa1;
EA.pmut:=pmut1;
End;
Procedure TForm1.Paretoset1Click(Sender: TObject);
Begin
Form10:=TForm10.create(self);
Form10.ShowModal;
label1.Caption:=inttostr(kchoose);
EA.ReadChromosome(kchoose,Psi1);
End;
Procedure TForm1.Printtofile1Click(Sender: TObject);
Begin
if savedialog1.Execute then
Memo1.Lines.SaveToFile(Savedialog1.FileName);
End;
Procedure TForm1.SearchofParetoset1Click(Sender: TObject);
Begin
Paretoset1.Enabled:=false;
ProgressBar1.Max:=EA.PP;
EA.NOP.SetPsi(Psi1);
EA.GenAlgorithm;
Paretoset1.Enabled:=true;
End;
Procedure TForm1.Show1Click(Sender: TObject);
var
s:string;
i:integer;
Begin
EA.NOP.SetPsi(Psi1);
EA.NOP.PsitoPasStr;
for i:=0 to EA.NOP.L-1 do
memo1.Lines.Add(EA.NOP.zs[i]);
End;
Procedure TForm1.Simulation1Click(Sender: TObject);
Begin
Form12:=TForm12.Create(self);
Form12.ShowModal;
End;
Procedure TForm1.Unaryoperations1Click(Sender: TObject);
Begin
Form4:=TForm4.create(self);
Form4.ShowModal;
End;
Procedure UpProgressBar;
Begin
Form1.ProgressBar1.StepIt;
Form1.Refresh;
End;
{ TGANOPUser }
Constructor TUser.Create(hh1, pp1, rr1, nfu1, lchr1, epo1,
kel1: integer; alfa1, pmut1: real; L1, Mout1,
kp1,kw1,kv1: integer);
Begin
Inherited Create(hh1, pp1, rr1, nfu1, lchr1, epo1,
kel1, alfa1, pmut1, L1, Mout1, kp1,kw1,kv1);
End;
Procedure TUser.Func(var Fu: TArrInt);
var
i,j,s0,s1:integer;
Begin
// inherited;
s0:=0;
s1:=0;
for i:=0 to np-1 do
begin
for j:=0 to NOP.kP-1 do
NOP.Vs[j]:=xinp[i,j];
NOP.RPControl;
if yout[i,0]<>NOP.z[NOP.Dnum[0]] then
begin
s0:=s0+1;
s1:=s1+abs(yout[i,0]-NOP.z[NOP.Dnum[0]]);
end;
end;
Fu[0]:=s0;
Fu[1]:=s1;
End;
Procedure Gendatas;
var
i,j:integer;
Begin
for i:=0 to np- 1 do
begin
for j:= 0 to nx-1 do
xinp1[i,j]:=xinpc[i,j];
yout1[i,0]:=youtc[i];
yout1[i,1]:=yout1[i,0];
end;
End;
END.
unit Unit2;
//*********************************************************
INTERFACE
//*********************************************************
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm2 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
Cyfr:set of char;
//*********************************************************
IMPLEMENTATION
//*********************************************************
Uses Unit1;
{$R *.dfm}
Procedure TForm2.Button1Click(Sender: TObject);
var
i,j:integer;
Begin
SetLength(xinp1,np,nx);
SetLength(yout1,np,ny);
for i:=0 to np-1 do
begin
for j:=0 to nx-1 do
xinp1[i,j]:=StrtoInt(StringGrid1.Cells[j+1,i+1]);
for j:=0 to ny-1 do
yout1[i,j]:=StrtoInt(StringGrid1.Cells[j+1+nx,i+1]);
end;
close;
End;
Procedure TForm2.Button2Click(Sender: TObject);
var
i,j:integer;
s:string;
Begin
SaveDialog1.FileName:='Input00.txt';
if SaveDialog1.Execute then
begin
Memo1.Clear;
for i:=0 to np-1 do
begin
s:='';
for j:=0 to nx+ny-1 do
s:=s+StringGrid1.Cells[j+1,i+1]+' ';
Memo1.Lines.Add(s);
end;
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
End;
Procedure TForm2.Button3Click(Sender: TObject);
var
i,j,k:integer;
s1:string;
Begin
OpenDialog1.FileName:='Input00.txt';
if OpenDialog1.Execute then
begin
Memo1.Clear;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
for i:=0 to np-1 do
begin
k:=1;
for j:=1 to length(Memo1.Lines[i]) do
if Memo1.Lines[i][j] in Cyfr then
s1:=s1+Memo1.Lines[i][j]
else
begin
StringGrid1.Cells[k,i+1]:=s1;
s1:='';
k:=k+1;
end;
end;
end;
End;
Procedure TForm2.FormCreate(Sender: TObject);
var
i,j:integer;
Begin
color:=RGB(250,200,250);
StringGrid1.Color:=color;
StringGrid1.ColCount:=nx+ny+1;
StringGrid1.RowCount:=np+1;
Cyfr:=['0'..'9'];
for i:=0 to np-1 do
StringGrid1.Cells[0,i+1]:=inttostr(i);
for j:=0 to nx-1 do
StringGrid1.Cells[j+1,0]:='x['+inttostr(j)+']';
for j:=0 to ny-1 do
StringGrid1.Cells[j+1+nx,0]:='y['+inttostr(j)+']';
End;
END.
unit Unit3;
//*********************************************************
INTERFACE
//*********************************************************
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
//*********************************************************
IMPLEMENTATION
//*********************************************************
Uses Unit1;
{$R *.dfm}
Procedure TForm3.Button1Click(Sender: TObject);
Begin
nx:=StrtoInt(Edit1.text);
ny:=StrtoInt(Edit2.text);
np:=StrtoInt(Edit3.text);
close;
End;
Procedure TForm3.FormCreate(Sender: TObject);
Begin
color:=RGB(220,220,250);
Edit1.Color:=color;
Edit2.Color:=color;
Edit3.Color:=color;
Edit1.text:=Inttostr(nx);
Edit2.text:=Inttostr(ny);
Edit3.text:=Inttostr(np);
End;
END.
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm6 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Label6: TLabel;
Edit6: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
Uses Unit1;
{$R *.dfm}
Procedure TForm6.Button1Click(Sender: TObject);
Begin
HH1:=strtoint(Edit1.Text);
nfu1:=strtoint(Edit2.Text);
lchr1:=strtoint(Edit6.Text);
close;
End;
Procedure TForm6.FormCreate(Sender: TObject);
Begin
color:=RGB(250,250,100);
Edit1.Color:=color;
Edit2.Color:=color;
Edit6.Color:=color;
Edit1.Text:=inttostr(HH1);
Edit2.Text:=inttostr(nfu1);
Edit6.Text:=inttostr(lchr1);
End;
end.
unit Unit7;
//*********************************************************
INTERFACE
//*********************************************************
uses
Windows, Messages, SysUtils,
Variants, Classes, Graphics,
Controls, Forms, Dialogs,
StdCtrls, Grids;
type
TForm7 = class(TForm)
StringGrid3: TStringGrid;
StringGrid5: TStringGrid;
Label3: TLabel;
Label5: TLabel;
StringGrid6: TStringGrid;
Label6: TLabel;
Label7: TLabel;
Button1: TButton;
Button2: TButton;
SaveDialog1: TSaveDialog;
Button3: TButton;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure StringGrid6Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
Cyfr:set of char=['0'..'9'];
var
Form7: TForm7;
//*********************************************************
IMPLEMENTATION
//*********************************************************
Uses Unit1;
{$R *.dfm}
Procedure TForm7.Button1Click(Sender: TObject);
var
i,j:integer;
Begin
for i:=0 to kP1-1 do
Pnum1[i]:=strtoint(StringGrid3.Cells[1,i]);
for i:=0 to Mout1-1 do
Dnum1[i]:=strtoint(StringGrid5.Cells[1,i]);
for i:=0 to L1-1 do
for j:=0 to L1-1 do
Psi1[i,j]:=strtoint(StringGrid6.Cells[j,i]);
Close;
End;
Procedure TForm7.Button2Click(Sender: TObject);
var
i,j:integer;
s:string;
Begin
SaveDialog1.Filename:='Psi00.txt';
if SaveDialog1.Execute then
begin
Memo1.Clear;
for i:= 0 to StringGrid6.RowCount-1 do
begin
s:='';
for j:= 0 to StringGrid6.ColCount-1 do
s:=s+StringGrid6.Cells[j,i]+' ';
Memo1.Lines.Add(s);
end;
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
End;
Procedure TForm7.Button3Click(Sender: TObject);
var
i,j,k:integer;
s1:string;
Begin
OpenDialog1.FileName:='Psi00.txt';
if OpenDialog1.Execute then
begin
Memo1.Clear;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
for i:=0 to L1-1 do
begin
k:=0; s1:='';
for j:=1 to length(Memo1.Lines[i]) do
if Memo1.Lines[i][j] in Cyfr then
s1:=s1+Memo1.Lines[i][j]
else
begin
StringGrid6.Cells[k,i]:=s1;
s1:='';
k:=k+1;
end;
end;
end;
End;
Procedure TForm7.Button4Click(Sender: TObject);
var
i,j:integer;
s:string;
Begin
if Opendialog1.Execute then
begin
memo1.Clear;
memo1.Lines.LoadFromFile(Opendialog1.FileName);
end;
End;
Procedure TForm7.FormCreate(Sender: TObject);
var
i,j:integer;
Begin
color:=RGB(240,240,100);
StringGrid3.color:=color;
StringGrid5.color:=color;
StringGrid6.color:=color;
StringGrid3.RowCount:=kP1;
StringGrid5.RowCount:=Mout1;
StringGrid6.RowCount:=L1;
StringGrid6.ColCount:=L1;
for i:=0 to nx-1 do
begin
StringGrid3.Cells[0,i]:=InttoStr(i);
StringGrid3.Cells[1,i]:=InttoStr(PNum1[i]);
end;
for i:=0 to High(DNum1) do
begin
StringGrid5.Cells[0,i]:=InttoStr(i);
StringGrid5.Cells[1,i]:=InttoStr(DNum1[i]);
end;
for i:=0 to L1 -1 do
for j:=0 to L1 -1 do
StringGrid6.Cells[j,i]:=InttoStr(Psi1[i,j]);
End;
Procedure TForm7.StringGrid6Click(Sender: TObject);
Begin
Label7.Caption:='Psi['+inttostr(StringGrid6.Row)+','+
inttostr(StringGrid6.Col)+']';
End;
END.
unit Unit8;
//*********************************************************
INTERFACE
//*********************************************************
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm8 = class(TForm)
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Edit9: TEdit;
Label9: TLabel;
Edit10: TEdit;
Label10: TLabel;
Edit11: TEdit;
Label11: TLabel;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form8: TForm8;
//*********************************************************
IMPLEMENTATION
//*********************************************************
Uses Unit1;
{$R *.dfm}
Procedure TForm8.Button1Click(Sender: TObject);
Begin
pp1:=strtoint(Edit2.Text);
rr1:=strtoint(Edit3.Text);
Epo1:=strtoint(Edit9.Text);
kel1:=strtoint(Edit10.Text);
alfa1:=strtofloat(Edit11.Text);
pmut1:=strtofloat(Edit1.Text);
close;
End;
Procedure TForm8.FormCreate(Sender: TObject);
Begin
color:=RGB(250,100,250);
Edit2.Color:=Color;
Edit3.Color:=Color;
Edit9.Color:=Color;
Edit10.Color:=Color;
Edit11.Color:=Color;
Edit1.Color:=Color;
Edit2.Text:=inttostr(pp1); // number of generations
Edit3.Text:=inttostr(rr1); // number of couples in one generation
Edit9.Text:=inttostr(Epo1);//number of ganerations between exchange of basic NOM
Edit10.Text:=inttostr(kel1); // number of elitaring chromosomes
Edit11.Text:=floattostr(alfa1); // parameter for crossover
Edit1.Text:=floattostr(pmut1); // probability of mutation
End;
END.
unit Unit10;
//*********************************************************
INTERFACE
//*********************************************************
uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, TeEngine,
Series, ExtCtrls, TeeProcs, Chart;
type
TForm10 = class(TForm)
Chart1: TChart;
Series1: TPointSeries;
StringGrid1: TStringGrid;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
SaveDialog1: TSaveDialog;
Memo1: TMemo;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form10: TForm10;
kol:integer;
//*********************************************************
IMPLEMENTATION
//*********************************************************
Uses Unit1;
{$R *.dfm}
Procedure TForm10.Button1Click(Sender: TObject);
Begin
if StringGrid1.Row>=1 then
kChoose:=strtoint(StringGrid1.Cells[1,StringGrid1.Row])
else
kchoose:=EA.Pareto[0];
EA.ReadChromosome(kchoose,Psi1);
End;
Procedure TForm10.Button2Click(Sender: TObject);
var
i,j:integer;
s:string;
Begin
for i:=0 to StringGrid1.RowCount-1 do
begin
s:='';
for j:=0 to StringGrid1.ColCount-1 do
s:=s+StringGrid1.Cells[j,i]+' ';
memo1.Lines.Add(s);
end;
savedialog1.FileName:='Pareto';
if SaveDialog1.Execute then
begin
Chart1.SaveToBitmapFile(savedialog1.FileName+'.bmp');
Memo1.Lines.SaveToFile(savedialog1.FileName+'.txt');
end;
End;
Procedure TForm10.Button3Click(Sender: TObject);
var
i:integer;
Begin
Series1.Clear;
for i:=0 to kol-1 do
Series1.AddXY(EA.Fuh[EA.Pareto[i],ComboBox1.ItemIndex],
EA.Fuh[EA.Pareto[i],ComboBox2.ItemIndex]);
End;
Procedure TForm10.FormCreate(Sender: TObject);
var
i,j,k:integer;
Begin
color:=RGB(230,150,250);
kol:=length(EA.Pareto);
StringGrid1.ColCount:=nfu1+2;
StringGrid1.RowCount:=kol+1;
StringGrid1.Colwidths[0]:=32;
StringGrid1.Colwidths[1]:=32;
for i:=0 to nfu1-1 do
StringGrid1.Colwidths[i+2]:=96;
for i:=0 to kol-2 do
for j:=i+1 to kol-1 do
if EA.Fuh[EA.Pareto[i],0]>EA.Fuh[EA.Pareto[j],0] then
begin
k:=EA.Pareto[i];
EA.Pareto[i]:=EA.Pareto[j];
EA.Pareto[j]:=k;
end;
for i:=0 to nfu1-1 do
StringGrid1.Cells[2+i,0]:='F_'+inttostr(i);
for i:=0 to kol-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i);
StringGrid1.Cells[1,i+1]:=inttostr(EA.Pareto[i]);
end;
for i:=0 to kol-1 do
for j:=0 to nfu1-1 do
StringGrid1.Cells[j+2,i+1]:=inttostr(EA.Fuh[EA.Pareto[i],j]);
ComboBox1.Clear;
ComboBox2.Clear;
Series1.Clear;
for i:=0 to nfu1-1 do
begin
ComboBox1.Items.Add(inttostr(i));
ComboBox2.Items.Add(inttostr(i));
end;
ComboBox1.ItemIndex:=0;
ComboBox2.ItemIndex:=1;
Button3.Click;
End;
END.
unit Unit11;
//*********************************************************
INTERFACE
//*********************************************************
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm11 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form11: TForm11;
//*********************************************************
IMPLEMENTATION
//*********************************************************
Uses Unit1;
{$R *.dfm}
Procedure TForm11.Button1Click(Sender: TObject);
Begin
L1:=StrtoInt(Edit1.Text);
kP1:=StrtoInt(Edit2.Text);
Mout1:=StrtoInt(Edit3.Text);
close;
End;
Procedure TForm11.FormCreate(Sender: TObject);
Begin
color:=RGB(200,250,200);
Edit1.Color:=Color;
Edit2.Color:=Color;
Edit3.Color:=Color;
Edit1.Text:=InttoStr(L1);
Edit2.Text:=InttoStr(kP1);
Edit3.Text:=InttoStr(Mout1);
End;
END.
unit Unit12;
//*********************************************************
INTERFACE
//*********************************************************
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Grids, StdCtrls;
type
TForm12 = class(TForm)
Chart1: TChart;
Series1: TPointSeries;
Button1: TButton;
SaveDialog1: TSaveDialog;
Button2: TButton;
Edit1: TEdit;
Series2: TLineSeries;
StringGrid2: TStringGrid;
Button3: TButton;
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form12: TForm12;
//*********************************************************
IMPLEMENTATION
//*********************************************************
Uses Unit1;
{$R *.dfm}
Procedure TForm12.Button1Click(Sender: TObject);
Begin
Savedialog1.fileName:='ModelLog.bmp';
if Savedialog1.execute then
Chart1.SaveToBitmapFile(Savedialog1.fileName);
End;
Procedure TForm12.Button2Click(Sender: TObject);
var
i,ii,j,kinp:integer;
Begin
kinp:=strtoint(Edit1.Text);
Series1.Clear;
Series2.Clear;
EA.NOP.SetPsi(Psi1);
for i := 0 to kinp-1 do
begin
ii:=random(high(yetc1)+1);
for j:=0 to kP1-1 do
EA.NOP.Vs[j]:=xetc1[ii,j];
EA.NOP.RPControl;
Series1.AddXY(i,EA.NOP.z[EA.NOP.DNum[0]]);
Series2.AddXY(i,yetc1[ii,1]);
end;
End;
Procedure TForm12.Button3Click(Sender: TObject);
var
i,j,qq1,qq2:integer;
Begin
EA.NOP.Vs[0]:=strtoint(StringGrid2.Cells[0,1]);
EA.NOP.Vs[1]:=strtoint(StringGrid2.Cells[1,1]);
EA.NOP.Vs[2]:=strtoint(StringGrid2.Cells[2,1]);
EA.NOP.SetPsi(Psi1);
EA.NOP.RPControl;
StringGrid2.Cells[3,1]:=inttostr(EA.NOP.z[EA.NOP.Dnum[0]]);
i:=0;
while (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;
if i<np then
StringGrid2.Cells[4,1]:=inttostr(yout[i,0]);
StringGrid2.Cells[5,1]:=inttostr(yout[i,1]);
End;
Procedure TForm12.FormCreate(Sender: TObject);
var
i,j:integer;
Begin
Color:=clWhite;
Series1.Clear;
Series2.Clear;
EA.NOP.SetPsi(Psi1);
StringGrid2.ColCount:=nx+2;
StringGrid2.RowCount:=2;
for i:=0 to np-1 do
begin
for j:=0 to kP1-1 do
EA.NOP.Vs[j]:=xinp[i,j];
EA.NOP.RPControl;
Series1.AddXY(i,EA.NOP.z[EA.NOP.DNum[0]]);
Series2.AddXY(i,yout[i,0]);
end;
StringGrid2.Cells[0,0]:='x1';
StringGrid2.Cells[1,0]:='x2';
StringGrid2.Cells[2,0]:='x3';
StringGrid2.Cells[3,0]:='z';
StringGrid2.Cells[4,0]:='y';
StringGrid2.Cells[0,1]:=inttostr(xinp[0,0]);
StringGrid2.Cells[1,1]:=inttostr(xinp[0,1]);
StringGrid2.Cells[2,1]:=inttostr(xinp[0,2]);
End;
END.
unit Unit13;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Unit1;
type
TForm13 = class(TForm)
OpenDialog1: TOpenDialog;
StringGrid1: TStringGrid;
Button1: TButton;
Memo2: TMemo;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
nf:integer = 648;
var
Form13: TForm13;
Cyfr:set of char;
implementation
{$R *.dfm}
procedure TForm13.Button1Click(Sender: TObject);
var
i,j,k:integer;
s2:string;
Begin
OpenDialog1.FileName:='ExpSys.txt';
if OpenDialog1.Execute then
begin
Memo2.Clear;
Memo2.Lines.LoadFromFile(OpenDialog1.FileName);
for i:=0 to nf-1 do
begin
k:=1;
for j:=1 to length(Memo2.Lines[i]) do
if Memo2.Lines[i][j] in Cyfr then
s2:=s2+Memo2.Lines[i][j]
else
begin
StringGrid1.Cells[k,i+1]:=s2;
s2:='';
k:=k+1;
end;
end;
end;
End;
procedure TForm13.Button2Click(Sender: TObject);
var
i,j:integer;
Begin
SetLength(xetc1,nf,nx);
SetLength(yetc1,nf,ny);
for i:=0 to nf-1 do
begin
for j:=0 to nx-1 do
xetc1[i,j]:=StrtoInt(StringGrid1.Cells[j+1,i+1]);
for j:=0 to ny-1 do
yetc1[i,j]:=StrtoInt(StringGrid1.Cells[j+1+nx,i+1]);
end;
close;
End;
procedure TForm13.FormCreate(Sender: TObject);
var
j,i:integer;
begin
StringGrid1.ColCount:=nx+ny+1;
StringGrid1.RowCount:=nf+1;
Cyfr:=['0'..'9'];
for i:=0 to nf-1 do
StringGrid1.Cells[0,i+1]:=inttostr(i);
for j:=0 to nx-1 do
StringGrid1.Cells[j+1,0]:='x['+inttostr(j)+']';
for j:=0 to ny-1 do
StringGrid1.Cells[j+1+nx,0]:='y['+inttostr(j)+']';
end;
end.
Unit UnitLogObjects;
//*********************************************************
INTERFACE
//*********************************************************
Uses Log02,SysUtils;
type
TArrInt=array of integer;
TArrArrInt=array of TArrInt;
TArr4Int=array [0..3]of integer;
TArrArr4Int=array of TArr4Int;
TArrArrArr4int=array of TArrArr4Int;
TArrReal=array of real;
TArrArrReal=array of TArrReal;
TArrString=array of string;
TProc=Procedure;
TNetOperLog01=class(TObject)
L:integer; //dimention of network operator matrix
Mout:integer;//number of outputs
Vs:TArrInt;//set of variables
kW:integer;//number of unary operations
kV:integer;//number of binary operations
kP:integer;//cardinal of the set of variables
PNum:TArrInt;//vector of number nodes for variables
DNum:TArrInt;//vector of number nodes for outputs
z:TArrInt;//vector of nodes
zs:TArrString;//string for mathematical expression
Psi,Psi0:TArrArrInt;//Network operator matrices
Constructor Create(L1,Mout1,kp1,kw1,kv1:integer);//create of NOP
Procedure SetVs(vs1:TArrInt);
Procedure SetPnum(pnum1:TArrInt);
Procedure SetDnum(dnum1:TArrInt);
Procedure SetPsiBas(Psi1:TArrArrInt);
Procedure SetPsi(Psi1:TArrArrInt);
Procedure GenVar(var w:TArr4Int);
Procedure Variations(w:TArr4Int);
Procedure RPControl;
Procedure PsitoPas;
Procedure PsitoTex;
Procedure PsitoPasStr;
Procedure PsitoTexStr;
Procedure ReadPsi(var Psi1:TArrArrInt);
Procedure ReadPsi0(var Psi1:TArrArrInt);
end;
TGANOPLog=class(TObject)
PopChrStr:TArrArrArr4Int;//массив структурных частей хромосом
HH:integer;// размерность популяции
RR:integer;// число скрещиваемых пар
PP:integer;// число поколений
nfu:integer;//число функционалов
lchr:integer;//длина структурной хромосомы
Epo:integer;//число поколений между эпохами
kel:integer;//число элитарных хромосом
Fuh:TArrArrInt;// массив значений функционалов
Lh:TArrInt;// массив растояний домножества Парето
Pareto:TArrInt;// множество Парето
Son1s,Son2s:TArrArr4Int;//структурные части потомков
L1,L2,L3,L4:integer;// растояния до множества Парето потомков
Fu1,Fu2:TArrInt;// значения функционалов для потомков
alfa:real;//параметр для отбора родителей
pmut:real;//вероятность мутации
NOP:TNetOperLog01;// сетевой оператор
EndGeneration:TProc;
Constructor Create(hh1,pp1,rr1,nfu1,lchr1,Epo1,kel1:integer;
alfa1,pmut1:real;
L1,Mout1,kp1,kw1,kv1:integer);
Procedure GenAlgorithm;// операции генетического алгоритма
Procedure ChoosePareto;
Procedure ImproveChrom(var StrChrom: TArrArr4Int);
Procedure ReadChromosome(k:integer;var Psi1:TArrArrInt);
Procedure Func(var Fu:TArrInt); virtual;// Вычисляет значения функционалов
Function Rast(Fu: TArrInt): integer;
end;
//*********************************************************
IMPLEMENTATION
//*********************************************************
{ TNetOper }
Constructor TNetOperLog01.Create(L1, Mout1, kp1, kw1, kv1: integer);
Begin
inherited Create;
L:=L1;
kP:=kp1;
kv:=kv1;
kw:=kw1;
Mout:=Mout1;
Setlength(Psi,L,L);
Setlength(Psi0,L,L);
Setlength(z,L);
Setlength(zs,L);
Setlength(Vs,kP);
Setlength(Pnum,kP);
Setlength(Dnum,Mout);
End;
Procedure TNetOperLog01.SetDnum(Dnum1: TArrInt);
var
i:integer;
Begin
for i:=0 to Mout-1 do
Dnum[i]:=Dnum1[i];
End;
Procedure TNetOperLog01.SetPnum(pnum1: TArrInt);
var
i:integer;
Begin
for i:=0 to kP-1 do
Pnum[i]:=Pnum1[i];
End;
Procedure TNetOperLog01.SetPsi(Psi1:TArrArrInt);
var
i,j:integer;
Begin
for i:=0 to L-1 do
for j:= 0 to L-1 do
Psi[i,j]:=Psi1[i,j];
End;
Procedure TNetOperLog01.SetPsiBas(Psi1: TArrArrInt);
var
i,j:integer;
Begin
for i:=0 to L-1 do
for j:= 0 to L-1 do
Psi0[i,j]:=Psi1[i,j];
End;
Procedure TNetOperLog01.SetVs(Vs1: TArrInt);
var
i:integer;
Begin
for i:=0 to high(Vs1) do
Vs[i]:=Vs1[i];
End;
Procedure TNetOperLog01.ReadPsi(var Psi1: TArrArrInt);
var
i,j:integer;
Begin
for i:=0 to L-1 do
for j:=0 to L-1 do
Psi1[i,j]:=Psi[i,j];
End;
Procedure TNetOperLog01.ReadPsi0(var Psi1: TArrArrInt);
var
i,j:integer;
Begin
for i:=0 to L-1 do
for j:=0 to L-1 do
Psi1[i,j]:=Psi0[i,j];
End;
Procedure TNetOperLog01.RPControl;
var
i,j:integer;
zz:integer;
Begin
for i:=0 to L-1 do
case Psi[i,i] of
0,2,3: z[i]:=0;
1: z[i]:=2;
end;
for i:=0 to kP-1 do
z[Pnum[i]]:=Vs[i];
for i:=0 to L-2 do
for j:=i+1 to L-1 do
if Psi[i,j]<>0 then
begin
case Psi[i,j] of
1: zz:=Phi_1(z[i]);
2: zz:=Phi_2(z[i]);
end;
case Psi[j,j] of
0: z[j]:=Omega_0(z[j],zz);
1: z[j]:=Omega_1(z[j],zz);
2: z[j]:=Omega_2(z[j],zz);
3: z[j]:=Omega_3(z[j],zz);
end;
end;
End;
Procedure TNetOperLog01.Variations(w:TArr4Int);
// Элементарные операции
// 0 - замена недиагонального элемента
// 1 - замена диагонального элемента
// 2 - добавление дуги
// 3 - удаление дуги
var
i,j,s1,s2:integer;
psipr:TArrArrInt;
Begin
if (w[0]<>0)or(w[1]<>0)or(w[2]<>0) then
case w[0] of
0: if Psi[w[1],w[2]]<>0 then Psi[w[1],w[2]]:=w[3];
1: Psi[w[1],w[1]]:=w[3];
2: if Psi[w[1],w[2]]=0 then Psi[w[1],w[2]]:=w[3];
3:
begin
s1:=0;
for i:=0 to w[2]-1 do
if Psi[i,w[2]]<>0 then s1:=s1+1;
s2:=0;
for j:=w[1]+1 to L-1 do
if (Psi[w[1],j]<>0)then s2:=s2+1;
if s1>1 then
if s2>1 then
Psi[w[1],w[2]]:=0;
end;
end;
End;
Procedure TNetOperLog01.GenVar(var w:TArr4Int);
// Генерация элементарной операции
Begin
w[0]:=random(4);
case w[0] of
0,2,3: // замена недиагонального элемента, добавление и удаление дуги
begin
w[1]:=random(L-1);
w[2]:=random(L-w[1]-1)+w[1]+1;
w[3]:=random(kW)+1;
end;
1: // замена диагонального элемента
begin
w[1]:=random(L);
w[2]:=w[1];
w[3]:=random(kV);
end;
end;
End;
Procedure TNetOperLog01.PsitoPas;
// It tranforms from Psi to Pascal
var
i,j:integer;
zz:string;
Begin
for i:=0 to L-1 do
case Psi[i,i] of
0,4: zs[i]:='0';
1: zs[i]:='1';
2: zs[i]:='-inf';
3: zs[i]:='inf';
end;
for i:=0 to kP-1 do
zs[Pnum[i]]:='x['+inttostr(i)+']';
for i:=0 to L-2 do
begin
for j:=i+1 to L-1 do
if Psi[i,j]<>0 then
begin
if Psi[i,j]=1 then
zz:=zs[i]
else
zz:='Ro_'+inttostr(Psi[i,j])+'('+zs[i]+')';
if((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
zs[j]:=zz
else
zs[j]:='Xi_'+inttostr(Psi[j,j])+'('+zs[j]+','+zz+')';
end;
end;
End;
Procedure TNetOperLog01.PsitoPasStr;
var
i,j:integer;
Begin
for j:=L-1 downto 0 do
begin
zs[j]:='z_'+inttostr(j)+'=';
case Psi[j,j] of
0: zs[j]:=zs[j]+'Or2(0,';
1: zs[j]:=zs[j]+'And2(2,';
2: zs[j]:=zs[j]+'Xor2(0,';
3: zs[j]:=zs[j]+'Equ2(0,';
end;
for i:=j-1 downto 0 do
if Psi[i,j]<>0 then
if Psi[i,j]=1 then
zs[j]:=zs[j]+'z_'+inttostr(i)+','
else
zs[j]:=zs[j]+'not z_'+inttostr(i)+',';
if zs[j,length(zs[j])]=',' then
zs[j,length(zs[j])]:=')'
else
zs[j]:=zs[j]+')';
end;
for i:=0 to kP-1 do
zs[Pnum[i]]:='z_'+inttostr(Pnum[i])+'=x_'+inttostr(i);
End;
Procedure TNetOperLog01.PsitoTex;
// It tranforms from Psi to LaTeX
var
i,j:integer;
zz:string;
Begin
for i:=0 to L-1 do
case Psi[i,i] of
0,4: zs[i]:='0';
1: zs[i]:='1';
2: zs[i]:='-\infinity';
3: zs[i]:='\infinity';
end;
for i:=0 to kP-1 do
zs[Pnum[i]]:='x_{'+inttostr(i)+'}';
for i:=0 to L-2 do
begin
for j:=i+1 to L-1 do
if Psi[i,j]<>0 then
begin
if Psi[i,j]=1 then
zz:=zs[i]
else
zz:='\rho_{'+inttostr(Psi[i,j])+'}('+zs[i]+')';
if((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
zs[j]:=zz
else
zs[j]:='\chi_{'+inttostr(Psi[j,j])+'}('+zs[j]+','+zz+')';
end;
end;
End;
Procedure TNetOperLog01.PsitoTexStr;
var
i,j:integer;
Begin
for j:=L-1 downto 0 do
begin
zs[j]:='$z_{'+inttostr(j)+'}=';
case Psi[j,j] of
2: zs[j]:=zs[j]+'\text{Min}(';
3: zs[j]:=zs[j]+'\text{Max}(';
4: zs[j]:=zs[j]+'\text{Pol}(';
end;
for i:=j-1 downto 0 do
if Psi[i,j]<>0 then
begin
if Psi[i,j]<>1 then
zs[j]:=zs[j]+'\rho_{'+inttostr(Psi[i,j])+'}(z_{'+inttostr(i)+'})'
else
zs[j]:=zs[j]+'z_{'+inttostr(i)+'}';
case Psi[j,j] of
0:zs[j]:=zs[j]+'+';
1:zs[j]:=zs[j]+'*';
end;
end;
if (zs[j,length(zs[j])]='+')or(zs[j,length(zs[j])]='*') then
zs[j,length(zs[j])]:=')'
else
zs[j]:=zs[j]+')';
zs[j]:=zs[j]+'$\\';
end;
for i:=0 to kP-1 do
zs[Pnum[i]]:='z_{'+inttostr(Pnum[i])+'}=x_{'+inttostr(i)+'}';
End;
Procedure TGANOPLog.ChoosePareto;
var
i,j:integer;
Begin
j:=0;
for i:=0 to HH-1 do
if Lh[i]=0 then
begin
j:=j+1;
setlength(Pareto,j);
Pareto[j-1]:=i;
end;
End;
Constructor TGANOPLog.Create(hh1,pp1,rr1,nfu1,lchr1,Epo1,kel1:integer;
alfa1,pmut1:real;
L1,Mout1,kp1,kw1,kv1:integer);
Begin
Inherited Create;
HH:=hh1;
PP:=pp1;
RR:=rr1;
nfu:=nfu1;
lchr:=lchr1;
Epo:=epo1;
kel:=kel1;
alfa:=alfa1;
pmut:=pmut1;
NOP:=TNetOperLog01.Create(L1, Mout1, kp1,kw1,kv1);
Setlength(PopChrStr,HH,lchr);
Setlength(Fuh,HH,nfu);
Setlength(Lh,HH);
Setlength(Fu1,nfu);
Setlength(Fu2,nfu);
Setlength(Son1s,lchr);
Setlength(Son2s,lchr);
End;
Procedure TGANOPLog.Func(var Fu:TArrInt);
var
i:integer;
Begin
NOP.RPControl;
for i:=0 to nfu-1 do
Fu[i]:=NOP.z[NOP.Dnum[i]];
End;
Procedure TGANOPLog.GenAlgorithm;
// Генетический алгоритм
var
i,j,i1,j1,k,pt,rt,k1,k2,lmax,imax,kmin,ks1,ks2:integer;
ksi,su,su1:real;
Fumin:integer;
tflag:boolean;
del:real;
Begin
//генерация популяции
NOP.SetPsiBas(NOP.Psi);
for i:=0 to lchr-1 do
for j:=0 to 3 do
PopChrStr[0,i,j]:=0;
for i:=1 to HH-1 do
for j:=0 to lchr-1 do
NOP.GenVar(PopChrStr[i,j]);
// формируем элиту
for i:=0 to kel-1 do
begin
j:=random(HH-1)+1;
ImproveChrom(PopChrStr[j]);
end;
//вычисление значений функционалов для каждой хромосомы
for i:=0 to HH-1 do
begin
NOP.SetPsi(NOP.Psi0);
for j:=0 to lchr-1 do
NOP.Variations(PopChrStr[i,j]);
Func(Fuh[i]);
end;
//вычисление расстояний до множества Парето
for i:=0 to HH-1 do
Lh[i]:=Rast(Fuh[i]);
//начало цикла поколений
pt:=1; // первое текущее поколение
repeat
//начало цикла скрещивания
rt:=1;//первая пара скрещивания
repeat
//отбор двух родителей
k1:=random(HH);
k2:=random(HH);
ksi:=random;
if (ksi<(1+alfa*Lh[k1])/(1+Lh[k1])) or
(ksi<(1+alfa*Lh[k2])/(1+Lh[k2])) then
begin
//если условие скрещивания выполнено
ks1:=random(lchr);
//скрещивание, получение 4 потомков
for i:=0 to ks1-1 do
begin
Son1s[i]:=PopChrStr[k1,i];
Son2s[i]:=PopChrStr[k2,i];
end;
for i:=ks1 to lchr-1 do
begin
Son1s[i]:=PopChrStr[k2,i];
Son2s[i]:=PopChrStr[k1,i];
end;
//мутация для 1го потомка
if random<pmut then
NOP.GenVar(son1s[random(lchr)]);
//вычисление функционалов для 1го потомка
NOP.SetPsi(NOP.Psi0);;
for j:=0 to lchr-1 do
NOP.Variations(son1s[j]);
Func(Fu1);
//вычисление расстояния для 1го потомка
L1:=Rast(Fu1);
//нахождение хромосомы с наибольшим расстоянием
Lmax:=Lh[0];
imax:=0;
for i:=1 to HH-1 do
if Lh[i]>Lmax then
begin
Lmax:=Lh[i];
imax:=i;
end;
if L1<Lmax then
//если расстояние у 1го потомка меньше, чем наибольшее, то
//...осуществляем замену
begin
for i:=0 to lchr-1 do
PopChrStr[imax,i]:=son1s[i];
for i:=0 to nfu-1 do
Fuh[imax,i]:=Fu1[i];
end;
//вычисляем все расстояния для популяции
for i:=0 to HH-1 do
Lh[i]:=Rast(Fuh[i]);
//мутация для 2го потомка
if random<pmut then
NOP.GenVar(Son2s[random(lchr)]);
//вычисление функционалов для 2го потомка
NOP.SetPsi(NOP.Psi0);;
for j:=0 to lchr-1 do
NOP.Variations(son2s[j]);
Func(Fu2);
//вычисление расстояния для 2го потомка
L2:=Rast(Fu2);
//нахождение хромосомы с наибольшим расстоянием
Lmax:=Lh[0];
imax:=0;
for i:=1 to HH-1 do
if Lh[i]>Lmax then
begin
Lmax:=Lh[i];
imax:=i;
end;
if L2<Lmax then
//если расстояние у 2го потомка меньше, чем наибольшее, то
//...осуществляем замену
begin
for i:=0 to lchr-1 do
PopChrStr[imax,i]:=son2s[i];
for i:=0 to nfu-1 do
Fuh[imax,i]:=Fu2[i];
end;
//вычисляем все расстояния для популяции
for i:=0 to HH-1 do
Lh[i]:=Rast(Fuh[i]);
end;
rt:=rt+1;
//конец цикла скрещивания
until rt>RR;
// генерируем новые хромосомы
pt:=pt+1;
//если эпоха закончилась, то необходимо сменить базис
if pt mod Epo=0 then
begin
//...на наиболее близкую хромосому к утопической
// хромосоме в пространстве нормированных критериев
Fumin:=Fuh[0,1];
kmin:=0;
for i:=1 to HH-1 do
if Fuh[i,1]<Fumin then
begin
Fumin:=Fuh[i,1];
kmin:=i;
end;
if kmin<>0 then
// заменяем базис
// строим матрицу для найденной хромосомы
begin
NOP.SetPsi(NOP.Psi0);
for j:=0 to lchr-1 do
NOP.Variations(PopChrStr[kmin,j]);
// меняем базисную матрицу на новую
NOP.SetPsiBas(NOP.Psi);
//генерируем тождественную хромосому
for i:=0 to lchr-1 do
for j:=0 to 3 do
PopChrStr[0,i,j]:=0;
Func(Fuh[0]);
end
else
begin
for i:=1 to HH-1 do
for j:=0 to lchr-1 do
NOP.GenVar(PopChrStr[i,j]);
end;
//вычисляем все фунционалы для всей популяции
for i:=1 to HH-1 do
begin
NOP.SetPsi(NOP.Psi0);
for j:=0 to lchr-1 do
NOP.Variations(PopChrStr[i,j]);
Func(Fuh[i]);
end;
// формируем элиту
for i:=0 to kel-1 do
begin
j:=random(HH-1)+1;
ImproveChrom(PopChrStr[j]);
end;
//вычисляем новые расстояния
for i:=0 to HH-1 do
Lh[i]:=Rast(Fuh[i]);
end;
//конец цикла поколений
EndGeneration;
// form1.ProgressBar1.StepIt;
// Form1.Refresh;
until pt>PP;
ChoosePareto;
//строим множество Парето
End;
Procedure TGANOPLog.ImproveChrom(var StrChrom: TArrArr4Int);
var
i,j,k:integer;
flag:boolean;
Begin
NOP.SetPsi(NOP.Psi0);
Func(Fu1);
k:=-1;
for i:=0 to lchr-1 do
begin
NOP.Variations(StrChrom[i]);
Func(Fu2);
flag:=true;
for j:=0 to nfu-1 do
if Fu2[j]>Fu1[j] then flag:=false;
if flag then
begin
for j:=0 to nfu-1 do
Fu1[j]:=Fu2[j];
k:=i;
end;
end;
for i:=k+1 to lchr-1 do
for j:=0 to 3 do
StrChrom[i,j]:=0;
End;
Function TGANOPLog.Rast(Fu: TArrInt): integer;
var i,j,k,count:integer;
Begin
count:=0;
for i:=0 to HH-1 do
begin
j:=0;
while (j<nfu) and (Fu[j]>=Fuh[i,j]) do j:=j+1;
if j>=nfu then
begin
k:=0;
while (k<nfu) and (Fu[k]=Fuh[i,k]) do k:=k+1;
if k<nfu then count:=count+1;
end;
end;
result:=count;
End;
Procedure TGANOPLog.ReadChromosome(k: integer;var Psi1: TArrArrInt);
var
i:integer;
Begin
NOP.SetPsi(NOP.Psi0);
for i:=0 to lchr-1 do
NOP.Variations(PopChrStr[k,i]);
NOP.ReadPsi(Psi1);
End;
END.
Unit Log02;
//*********************************************************
INTERFACE
//*********************************************************
Function Phi_1(z:integer):integer;
Function Phi_2(z:integer):integer;
Function Omega_0(z1,z2:integer):integer;
Function Omega_1(z1,z2:integer):integer;
Function Omega_2(z1,z2:integer):integer;
Function Omega_3(z1,z2:integer):integer;
//*********************************************************
Подобные документы
Обзор методов и подходов решения поставленной задачи аппроксимации логического вывода экспертной системы. Разработка и описание метода сетевого оператора для решения данной задачи. Разработка алгоритма решения. Проведение вычислительного эксперимента.
дипломная работа [1,5 M], добавлен 23.02.2015- Разработка и исследования метода сетевого оператора для адаптивного управления динамическим объектом
Генетическое программирование и алгоритм. Метод сетевого оператора. Матрица, вариации и вектор сетевого оператора. Метод интеллектуальной эволюции. Сетевой оператор базового решения. Движение робота в плоскости X,Y, симуляция с начальными условиями.
дипломная работа [2,6 M], добавлен 23.09.2013 - Разработка и исследование метода сетевого оператора для адаптивного управления динамическим объектом
Понятие адаптивного управления как совокупности действий и методов, характеризующихся способностью управляющей системы реагировать на изменения внешней среды. Применение метода сетевого оператора для синтеза адаптивного управления мобильным роботом.
дипломная работа [1,4 M], добавлен 17.09.2013 Понятия, классификация и структура экспертных систем. Базы знаний и модели представления знаний. Механизмы логического вывода. Инструментальные средства проектирования и разработки экспертных систем. Предметная область ЭС "Выбор мобильного телефона".
курсовая работа [2,2 M], добавлен 05.11.2014Решение задачи аппроксимации поверхности при помощи системы нечёткого вывода. Определение входных и выходных переменных, их термы; алгоритм Сугено. Подбор функций принадлежности, построение базы правил, необходимых для связи входных и выходных переменных.
курсовая работа [1,8 M], добавлен 31.05.2014Создание интеллектуальной экспертной системы по подбору комплектующих для стационарного компьютера. Медицина как пример экспертной системы с использованием метода Криса-Нейлора. Извлечение знаний, их структурирование, представление, стратегия вывода.
контрольная работа [827,5 K], добавлен 14.12.2012Реализация экспертных систем любой сложности, решение любых головоломок и шарад с помощью языка логического программирования Prolog. Основные понятия в языке Prolog. Правила логического вывода и запросы. Процедуры логического вывода и принятия решений.
курсовая работа [19,0 K], добавлен 24.05.2012Понятие и свойства лингвистической переменной, ее разновидности. Основы теории приближенных рассуждений. Нечеткие системы логического вывода с одной и несколькими входными переменными. Принципы нечеткого моделирования, вычисление уровней истинности.
презентация [152,7 K], добавлен 29.10.2013Виды и основные функции интеллектуальных систем. Выбор инструментального средства для создания экспертной системы. Физическое проектирование базы данных. Использование среды EsWin 2.1 для разработки и тестирования экспертной системы выбора должности.
курсовая работа [615,8 K], добавлен 22.03.2016Содержательная часть языка программирования С++. Правила автоматной грамматики, классификация Хомского. Принцип построения графов, разработка проекта средствами среды программирования Builder C++. Алгоритм синтаксического анализа оператора вывода.
контрольная работа [228,4 K], добавлен 22.05.2012