Генетические алгоритмыРефераты >> Программирование и компьютеры >> Генетические алгоритмы
§ Наличие нескольких популяций, как правило, одинакового фиксированного размера.
§ Фиксированная разрядность генов.
§ Любые комбинации стратегий отбора и формирования следующего поколения в каждой популяции. Можно сделать так, что в разных популяциях будут использоваться разные комбинации стратегий, хотя даже один вариант дает разнообразные решения на различных "островах".
§ Ограничений на тип кроссовера и мутации нет.
§ Случайный обмен особями между "островами". Если миграция будет слишком активной, то особенности островной модели будут сглажены, и она будет не очень сильно отличаться от моделей ГА без параллелизма.
5. CHC (Eshelman)
CHC расшифровывается как Cross-population selection, Heterogenous recombination and Cataclysmic mutation. Данный алгоритм довольно быстро сходится из-за того, что в нем нет мутаций, используются популяции небольшого размера, и отбор особей в следующее поколение ведется и между родительскими особями, и между их потомками. В силу этого после нахождения некоторого решения алгоритм перезапускается, причем лучшая особь копируется в новую популяцию, а оставшиеся особи подвергаются сильной мутации (мутирует примерно треть битов в хромосоме) существующих и поиск повторяется. Еще одной специфичной чертой является стратегия скрещивания: все особи разбиваются на пары, причем скрещиваются только те пары, в которых хромосомы особей существенно различны (хэммингово расстояние больше некоторого порогового плюс возможны ограничения на минимальное расстояние между крайними различающимися битами). При скрещивании используется так называемый HUX-оператор (Half Uniform Crossover) - это разновидность однородного кроссовера, но в нем к каждому потомку попадает ровно половина битов хромосомы от каждого родителя. Таким образом, модель обладает следующими свойствами:
§ Фиксированный размер популяции.
§ Фиксированная разрядность генов.
§ Перезапуск алгоритма после нахождения решения.
§ Небольшая популяция.
§ Особи для скрещивания разбиваются на пары и скрещиваются при условии существенных отличий.
§ Отбор в следующее поколение проводится между родительскими особями и потомками.
§ Используется половинный однородный кроссовер (HUX).
§ Макромутация при перезапуске.
Практическая часть
В данной курсовой работе приведен пример программы использующей генетический алгоритм. Программа создана посредством среды программирования Delphi 7 с использованием библиотеки компонентов GeneBase 2.0. Алгоритм компонента представляет собой применение методов, известных в теории эволюции, для эвристического поиска решений переборных задач.
Принцип работы программы
Сразу при запуске программы еще перед прорисовкой окна выполняется процедура FormCreate в которой производится инициализация внутренних переменных, инициализация интерфейса и прорисовка изображения. Прорисовка изображения проходит в процедуре CreateImage в два этапа: сначала необходимо рассчитать образ на экране при помощи одной из трёх целевых функций; и только после этого производится прорисовка посредством пикселей канвы объекта.
После этого программа переходит в режим ожидания во время которого вы можете изменить такие параметры алгоритма как: количество особей, вероятности кроссовера мутации и инверсии, разрядность генов, установить использование стратегии элитизма, выбрать принцип поиска решений (по максимуму или по минимуму значения целевой функции), выбрать саму целевую функцию и количество эпох, на протяжении которых значение целевой функции не меняется, для останова процесса обучения.
После выбора параметров нажатие на кнопку «Пуск алгоритма» приведет к запуску основной процедуры программы btnStartClick. В первые моменты выполнения программы происходит считывание установленных параметров в переменные и поля объекта GA1, который является прототипом класса TgeneticAlgorith, тем самым этому объекту задаются основные параметры для дальнейшей работы методов объекта. Затем вызывается метод Init объекта GA1 в который производит начальную инициализацию особей, используемых в генетическом алгоритме, случайными значениями. Переменные xCnt и xMaxCnt предназначены для отслеживания ситуации останова алгоритма. Переменная xOldS содержит значение приспособленности предыдущей, лучшей особи популяции. Затем запускается основной цикл программы и в нем, после проверок возможных ситуаций останова алгоритма, вызывается процедура OneEpoch объекта frmMain, в которой вызывается метод OneEpoch объекта GA1. Вызов данного метода приводит к выполнению одного шага генетического алгоритма. При этом производится вычисление приспособленности всех особей из популяции, а на основании этих данных формируется новая популяция. Далее происходит сравнивание приспособленностей: лучшего индивида текущей и предыдущей популяций и в случае малого различия наращивается переменная xCnt, а в противном случае – обнуляется. Затем обновляется переменная xOldS и выводятся основные значения лучшей особи текущей популяции.
Листинг программы
unit fmMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, genetic, math;
type
TTargetFunction = function(X1,X2 : double):double;
TfrmMain = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
GroupBox1: TGroupBox;
GA1: TGeneticAlgorith;
Label1: TLabel;
edtChromosomeCount: TEdit;
Label2: TLabel;
cbxGeneDegree: TComboBox;
Label3: TLabel;
edtCrossoverP: TEdit;
Label4: TLabel;
edtMutationP: TEdit;
Label5: TLabel;
edtInversionP: TEdit;
Label6: TLabel;
Label7: TLabel;
cbxOptimizeMethod: TComboBox;
Label8: TLabel;
cbxFunction: TComboBox;
imgFunction: TImage;
btnStart: TButton;
chbUseElitism: TCheckBox;
GroupBox2: TGroupBox;
Label9: TLabel;
Label10: TLabel;
stxTarget: TStaticText;
stxX: TStaticText;
stxY: TStaticText;
Label11: TLabel;
Label12: TLabel;
edtMaxCount: TEdit;
Label13: TLabel;
btnStop: TButton;
procedure FormCreate(Sender: TObject);
function GA1GetSutability(
Chromosome: TChromosome): Double;
procedure btnStartClick(Sender: TObject);
procedure cbxFunctionChange(Sender: TObject);
procedure btnStopClick(Sender: TObject);
private
{ Private declarations }
fTarget : TTargetFunction;
fImage : TBitmap;
public
{ Public declarations }
StopFlag : boolean;
procedure CreateImage;
property Target : TTargetFunction read fTarget write fTarget;
procedure OneEpoch;
end;
var
frmMain: TfrmMain;
xBmp : array [0 99,0 99] of double;
implementation
var
fMinX,fMaxX,fMinY,fMaxY : double;
{$R *.DFM}
function De_Jong_5(X1,X2:double):double;
var
J : integer;
xS1,xS2 : double;
begin
fMinX := -65.536;
fMinY := -65.536;