logo
Диплом ИПОВС 2003 / Пояснительная запискаFinalVersion

Разработка программы

Разработка программы проводилась модульным способом. Все модули были созданы в среде BorlandDelphi. Ниже приведу описание одного из самых сложных модулей, который реализует работу генетического алгоритма.

В модуле объявлены классы TChromosomeиTGeneticAlgorithm. Это основные классы алгоритма, рассмотрим их подробнее.

Класс TChromosomeпорождён отTBitsи представляет собой хранилище информации, включающее методы обработки информации. В нём объявлены следующие переменные:

Private//Раздел частных объявлений класса

fDegree:integer; //Разрядность генов

fGeneCount:integer; //Количество генов

fGene:arrayofTGene; //Собственно, гены

Работа с объектами этого класса происходит при помощи следующих методов.

procedure SetGeneCount(Value : integer); // Установка количества генов

functionGetGeneSize:integer; //Установка размеров генов

procedureSetGeneSize(Value:integer); //Установка размера конкретного гена

function GetGene(Index:integer):LongWord; //Получение значения гена

procedure SetGene(Index:integer;Value:LongWord); //Установка значения гена

function GetGeneAsInteger(Index:integer):LongInt; //Получение значения гена

procedure SetGeneAsInteger(Index:integer;Value:LongInt); //Получение значения гена

function GetGeneAsFloat(Index:integer):double; //Получение значения гена

procedure SetGeneAsFloat(Index:integer;Value:double); //Получение значения гена

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

procedureAssign(Source:TChromosome); //Копирование информации из одной хромосомы в другую

property GeneCount : integer read fGeneCount write SetGeneCount; //Количество генов

property GeneSize : Integer read GetGeneSize write SetGeneSize; //Размер генов

property GeneValue[Index:integer] : Longword read GetGene write SetGene; //Значение гена

property GeneAsInteger[Index:integer] : LongInt read GetGeneAsInteger write SetGeneAsInteger; //Значение гена

property GeneAsFloat[Index:integer] : double read GetGeneAsFloat write SetGeneAsFloat; //Значение гена

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

Переменная fPopulationхранит набор хромосом, то есть рабочий материал для работы алгоритма.

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

Свойство Sutabilityхранит текущую приспособленность популяции, но его значение доступно только через свойствоfSutability, описание которого находится в разделеpublic.

Функция fGetSutability– это указатель на внешнюю функцию, которая определяет фитнесс-функцию текущей хромосомы.

fBestChromosome– лучшая особь данной популяции.

fInversion,fCrossover,fMutation– вероятности инверсии, кроссовера и мутации – важных параметров алгоритма.

Процедура OneEpochпроизводит один шаг эволюции.

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