Автор работы: Пользователь скрыл имя, 14 Ноября 2010 в 06:24, Не определен
Генетические алгоритмы в настоящее время широко используются для интеллектуальной обработки данных и решения задач оптимизации и поиска. Они успешно используются для решения ряда экономически значимых задач в бизнесе и инженерных разработках. Финансовые компании широко используют генетические алгоритмы для прогнозирования развития финансовых рынков.
Что же касается недостатков, то в общем случае генетические алгоритмы не находят оптимального решения очень трудных задач. Если оптимальное решение задачи (например, задача коммивояжера с очень большим числом городов) не может быть найдено традиционными способами, то и генетический алгоритм вряд ли найдет оптимум.
http://www.math.tsu.ru/russian
www.algolist.manual.ru
http://infoart.baku.az/inews/
http://cmc.cs.msu.su/labs/lvk/
http://www.iki.rssi.ru/ehips/
http://www.neuralbench.ru/rus/
http://fdmhi.mega.ru/ru/senn_
Программный код решения задачи коммивояжера с помощью генетических алгоритмов в Borland Delphi 6.0
Const //объявляем константу
x=5;
var
Form1: TForm1;
town: array [1..21,1..25] of string; // объявляем массив городов
implementation
{$R *.dfm}
procedure TForm1.N3Click(Sender: TObject); // выводит сообщение о выходе
const
mbYesNo = [mbYes, mbNo];
begin
if MessageDlg('Вы действительно хотите выйти?', mtConfirmation, mbYesNo, 0) = mrYes
then close;
end;
procedure TForm1.N2Click(Sender: TObject); // сообщение о программе
begin
ShowMessage('Демонстрация задачи коммивояжёра, решенной с помощью генетических алгоритмов. Для учебного пособия "Генетические алгоритмы"!!!');
end;
procedure TForm1.Button1Click(Sender: TObject);
var i, j, k, a, b, s1, s2, p: integer;
begin
for i:=1 to x do
begin
StringGrid1.Cells[i,i]:='0'; //выводит в массиве «0» на пересечении [i, i]
for j:=1 to x do
StringGrid1.Cells[i,j]:=
еnd;
town[1,1]:='12345'; // создает начальную популяцию
a:=2; // выбор точки разрыва
for k:=1 to 4 do
begin // процедура скрещивания
town[1,a]:=town[1,a-1]; // выбираются особи из популяции
town[1,a][4]:=town[1,a-1][5]; // оператор кроссовера
town[1,a][5]:=town[1,a-1][4];
town[1,a+1]:=town[1,a-1]; // помещаем хромосому в новую популяцию
town[1,a+1][3]:=town[1,a-1][5]
town[1,a+1][5]:=town[1,a-1][3]
town[1,a+2]:=town[1,a+1]; // помещаем хромосому в новую популяцию
town[1,a+2][5]:=town[1,a+1][4]
town[1,a+2][4]:=town[1,a+1][5]
town[1,a+3]:=town[1,a+2]; // помещаем хромосому в новую популяцию
town[1,a+3][3]:=town[1,a+2][5]
town[1,a+3][5]:=town[1,a+2][3]
town[1,a+4]:=town[1,a+3]; // помещаем хромосому в новую популяцию
town[1,a+4][5]:=town[1,a+3][
town[1,a+4][4]:=town[1,a+3][5]
town[1,a+5]:=town[1,a+4]; // помещаем хромосому в новую популяцию
town[1,a+5][5]:=town[1,a+4][
town[1,a+5][2]:=town[1,a+4][5]
a:=a+6; // новая популяция всех допустимых решений
end;
a:=0; //нахождение оптимального решения, оценивание приспособленности каждой особи
s2:=9999999;
for i:=1 to 24 do
begin
s1:=0;
for p:=1 to x do
begin
a:=StrToInt(town[1,i][p]);
if p=5 then b:=StrToInt(town[1,i][p-4])
else b:=StrToInt(town[1,i][p+1]);
s1:=s1+StrToInt(StringGrid1.
end;
if s1<s2 then
begin
s2:=s1;
town[2,1]:=town[1,i];
end;
end;
for i:=1 to 25 do
StringGrid2.Cells[1,i]:=town[
StringGrid2.Cells[2,1]:=
Edit2.Text:=town[2,1]; //вывод оптимального решения
Edit1.Text:=IntToStr(s2); // вывод минимального расстояния
end;
procedure TForm1.Button3Click(Sender: TObject); // строим массив
var i,j: integer;
begin
StringGrid1.ColCount:=x+1;
StringGrid1.RowCount:=x+1;
StringGrid2.ColCount:=x+1;
StringGrid2.RowCount:=26;
for i:=1 to x do// массив для начальной популяции
for j:=1 to x do
StringGrid1.Cells[i,j]:='' ''; //для ввода значений расстояний
for i:=1 to x do
begin
StringGrid1.Cells[i,i]:='0';
StringGrid1.Cells[i,0]:=
StringGrid1.Cells[0,i]:=
StringGrid2.Cells[i,0]:=
end;
for i:=1 to x*2 do // массив для популяции нового поколения
StringGrid2.Cells[0,i]:=
end;
end.