Решение задачи повышения надежности резервирования с помощью эволюционного моделирования
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
сех возможных решений, получаемое с помощью перебора, что, несомненно, является плюсом. Все это говорит о том, что генетические алгоритмы являются хорошим средством решения различных оптимизационных задач.
Список использованных источников
1.Половко А.М., Гуров С.В. Основы теории надежности / СПб.: БХВ-Петербург, 2008.
.Испытания жидкостных ракетных двигателей. Учеб. пособие для авиац. специальностей вузов под. ред. В.З.Левина - М.:Машиностроение, 1981.
.Львович Я. Е., Каширина И. Л., Генетический алгоритм решения многокритериальной задачи повышения надежности резервирования.
.Каширина И.Л. Введение в эволюционное моделирование / Воронеж, 2007.
Приложение А. Листинг программы
Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, Unit2, TeEngine, ExtCtrls, TeeProcs, Chart, Series,, Math;= 4;= 100;= class(TForm)_N: TEdit;_N: TLabel;: TStringGrid;: TButton;: TMemo;: TButton;: TLabel;: TLabel;: TLabel;_L: TEdit;_Pmut: TEdit;_Pcross: TEdit;: TLabel;_RecQuantity: TEdit;: TChart;: TPointSeries;: TButton;: TPointSeries;FormCreate(Sender: TObject);Edit_NChange(Sender: TObject);Button1Click(Sender: TObject);Button3Click(Sender: TObject);FormResize(Sender: TObject);Button2Click(Sender: TObject);
{ Private declarations }
{ Public declarations };: TForm1;, time2: TDateTime;
{$R *.dfm}InitInputData;i,j: integer;
1) or (Pcros 1) or (G[i-1]<1) or (T[i-1]<=0) then;(Значения P, G или T введены некорректно);;;;;(Введены некорректные данные);;;;TForm1.Button1Click(Sender: TObject);i,j,k: integer;: string;:= now;;;
//Создание начальной популяции:= 0;;;(Population);(TempPopulation);(TempPopulationCrossed);;(Population);(Population);
//ГА(Population, TempPopulation);(TempPopulation,TempPopulationCrossed);(TempPopulationCrossed);(TempPopulationCrossed);(TempPopulationCrossed);(TempPopulationCrossed, Population);(Population);(Population);(RefreshNum);RefreshNum = MaxRefreshNum;:= now;
-9999999 then.Lines.Add(=============================+IntToStr(k));.Lines.Add(S=+FloatToStr(-Rec[k].S));.Lines.Add(P=+FloatToStr(Rec[k].P));.AddXY(-Rec[k].S, rec[k].P,,clred);i := 0 to Rec[k].Quantity-1 do:= ;j := 0 to N-1 do:= str + IntTostr(Rec[k].Solutions[i][j]);.Lines.Add(str);.Lines.Add(FloatToStr(SumTxX(Rec[k].Solutions[i])));;.Lines.Add(=============================);">//Вывод результатовk := 1 to RecQuantity doRec[k].S <> -9999999 then.Lines.Add(=============================+IntToStr(k));.Lines.Add(S=+FloatToStr(-Rec[k].S));.Lines.Add(P=+FloatToStr(Rec[k].P));.AddXY(-Rec[k].S, rec[k].P,,clred);i := 0 to Rec[k].Quantity-1 do:= ;j := 0 to N-1 do:= str + IntTostr(Rec[k].Solutions[i][j]);.Lines.Add(str);.Lines.Add(FloatToStr(SumTxX(Rec[k].Solutions[i])));;.Lines.Add(=============================);
//очистка памяти;;(Population);(TempPopulation);(TempPopulationCrossed);.Lines.Add (Время выполнения ген. алгоритма: +(hh:mm:ss:zz, time2-time1));;TForm1.Button2Click(Sender: TObject);
//перебор= 3; //кол-во вариантов резервирования= array of Tindivid;= array [1..3] of real; //1 - S, 2 - P, 3 - T= array of TKrArr;,j,k: longint;: longint; //3^N_1: real; //среднее время: TKrList; //массив S P T: TSolutionArray; //массив x1 x2 ... xN: boolean; //флаг недоминируемости
//инициализация начальных переменных:= now;;:= round(power(3,N))-1;(Kr, max + 1);(X, max + 1);_1 := 0;i := 0 to N-1 do_1 := Tavg_1 + 1/T[i];
//задание матрицы всех возможных значений Хj := 0 to max do //перебор на основе перевода чисел в троичную систему
//выделение памяти под xj(X[j],N);
//перевод числа в троичную систему:= j;i := 0 to N-1 do[j][N-i-1] := (k - (k div base) * base) + 1;:= k div base;;
//вычисление значения критериев[j][1] := -GetS (X[j]);[j][2] := GetP (X[j]);[j][3] := SumTxX (X[j]);;
//на этот момент мы имеем массив всех комбинаций
//и массив соответствующих значений критерия
//вывести недоминируемые точкиj := 0 to max do(Kr[j][3]=Kr[j][2])) or
((Kr[i][1]>=Kr[j][1]) and (Kr[i][2]>Kr[j][2]))) and (Kr[i][3]<=Tavg_1) then:= false;;;NotDominated then
then_old := N;:= StrToInt(Edit_N.Text);.RowCount := N+1;i := N_old+1 to N doj := 1 to COlCount do.Cells[j,i] := ;.Cells[0,i] := IntToStr(i);;;;TForm1.FormCreate(Sender: TObject);i,j: integer;:= StrToInt(Edit_N.Text);.RowCount := N+1;.Cells[0,0] := i;.Cells[1,0] := Pi;.Cells[2,0] := Ti;.Cells[3,0] := Si;.Cells[4,0] := Gi;i := 1 to N do.Cells[0,i] := IntToStr(i);.ColWidths[0] := 15;;TForm1.FormResize(Sender: TObject);.Height := Height - 205;.Height := Height - 205;:= 937;;.Unit2;SysUtils;= array of 1..3;= array of real;= record: real;: real;= array of TIndivid;= array of TFitness;= record: TIndividArray;: TFitnessArray;: TRealArray;;= record: integer;: real;: real;= array of TEuc;= record: real;: real;: TIndividArray;: integer;;= array of TRecElement;">//добавление на график.AddXY(-Kr[j][1],Kr[j][2],,clBlue);;:= now;;j := 0 to max do[j] := nil;:= nil;:= nil;.Lines.Add (Время выполнения алгоритма перебора: +(hh:mm:ss:zz, time2-time1));;TForm1.Button3Click(Sender: TObject);.Lines.Clear;.Clear;.Clear;;TForm1.Edit_NChange(Sender: TObject);N_old: integer;,j: integer;Edit_N.Text <> then_old := N;:= StrToInt(Edit_N.Text);.RowCount := N+1;i := N_old+1 to N doj := 1 to COlCount do.Cells[j,i] := ;.Cells[0,i] := IntToStr(i);;;;TForm1.FormCreate(Sender: TObject);i,j: integer;:= StrToInt(Edit_N.Text);.RowCount := N+1;.Cells[0,0] := i;.Cells[1,0] := Pi;.Cells[2,0] := Ti;.Cells[3,0] := Si;.Cells[4,0] := Gi;i := 1 to N do.Cells[0,i] := IntToStr(i);.ColWidths[0] := 15;;TForm1.FormResize(Sender: TObject);.Height := Height - 205;.Height := Height - 205;:= 937;;.Unit2;SysUtils;= array of 1..3;= array of real;= record: real;: real;= array of TIndivid;= array of TFitness;= record: TIndividArray;: TFitnessArray;: TRealArray;;= record: integer;: real;: real;= array of TEuc;= record: real;: real;: TIndividArray;: integer;;= array of TRecElement;
//Individ: TIndivid;: TPopulation; //начальная популяция: TPopulation; //временная популяция: TPopulation; //временная популяция потомков
//NewPopulation: TPopulation;,T,S,G: TRealArray; //массивы входных данных,L: integer; //длина хромосомы и кол-во особей соот-но: real;//вероятность мутации: real;//вероятность скрещивания: real; //ср время: TRecord; //рекордное множество: integer; //количество рекордных решений: integer; //кол-во обновленийInitPopulation (var Pop: TPopulation);
//создание начальной популяции, состоящей из L особей длины NErasePopulation (var Pop: TPopulation);
//удаление популяцииRankPopulation (var Pop: TPopulation);
//ранжирование индивидов в популяцииCountFitness (var Pop: TPopulation);
//вычисле