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

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

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

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

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

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 0 0 0 0 0 0 0 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 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)

52. http://elibrary.ru -научная электронная библиотека (Дата обращения: 01.03.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;


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

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

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

  • Транспортная задача как одна из самых распространенных специальных задач линейного программирования: понятие, основное назначение. Формальное описание метода минимального элемента. Характеристика этапов разработки алгоритма решения поставленной задачи.

    курсовая работа [713,3 K], добавлен 19.10.2012

  • Описание алгоритма решения транспортной задачи по планированию перевозки зерна. Ход решения задачи вручную, в программе TORA методом наименьшего элемента, с помощью MS Excel. Разработка программы для решения задачи в общем виде средствами Delphi.

    курсовая работа [2,5 M], добавлен 22.11.2012

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

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

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

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

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

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

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

    курсовая работа [473,6 K], добавлен 09.02.2015

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

    отчет по практике [1,0 M], добавлен 23.03.2015

  • Краткий обзор решения транспортных задач. Экономическая интерпретация поставленной задачи. Разработка и описание алгоритма решения задачи. Построение математической модели. Решение задачи вручную и с помощью ЭВМ. Анализ модели на чувствительность.

    курсовая работа [844,3 K], добавлен 16.06.2011

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

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

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