Решение задачи повышения надежности резервирования
Дипломная работа - Математика и статистика
Другие дипломы по предмету Математика и статистика
/p>
Приведем ниже несколько примеров работы программы с рекомендуемыми параметрами.
Рис. 6. Примеры работы программы с рекомендуемыми параметрами
По рис. 6 видно, что ГА хорошо приближает Парето-оптимальное множество данной задачи, кроме, может быть, тех точек, которые близки к экстремуму по одной из целевой функции. Такие точки на практике и не рассматриваются, т.к. они дают либо очень малую вероятность работы без отказа, либо очень большую стоимость, что неприемлемо.
Заключение
В ходе проделанной работы была изучена проблема повышения надежности резервирования компонентов стендовой информационно-управляющей системы для проведения огневых испытаний жидкостных ракетных двигателей и разработано приложение, позволяющее быстро получать множество альтернативных решений при выборе способа резервирования компонентов системы. При реализации программы были использованы методы эволюционного моделирования, которые являются достаточно универсальными, простыми, и в то же время довольно неприхотливыми к условиям задачи. Для эффективности тестирования в программе была также реализована возможность получения множества всех возможных решений с помощью метода перебора. В ходе тщательного тестирования были выявлены оптимальные параметры работы генетического алгоритма, а также оценена его производительность: скорость работы алгоритма очень слабо зависит от размерности задачи, что, бесспорно, является очень хорошим свойством. Также стоит отметить, что множество решений, получаемое с помощью ГА, хорошо покрывает множество всех возможных решений, получаемое с помощью перебора, что, несомненно, является плюсом. Все это говорит о том, что генетические алгоритмы являются хорошим средством решения различных оптимизационных задач.
Список источников
1.Половко А.М., Гуров С.В. Основы теории надежности / СПб.: БХВ-Петербург, 2008.
2.Испытания жидкостных ракетных двигателей. Учеб. пособие для авиац. специальностей вузов под. ред. В.З. Левина - М.: Машиностроение, 1981.
.Львович Я.Е., Каширина И.Л., Генетический алгоритм решения многокритериальной задачи повышения надежности резервирования.
.Каширина И.Л. Введение в эволюционное моделирование / Воронеж, 2007.
Приложение А
Листинг программы
unit Unit1;
interface, 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;
// Проверка введенных данных на корректность и инициализация
try;:= StrToInt (Form1. Edit_RecQuantity. Text);:= StrToInt (Form1. Edit_L. Text);:= StrToFloat (Form1. Edit_Pmut. Text);:= StrToFloat (Form1. Edit_Pcross. Text);(Pmut 1) or (G [i-1]<1) or (T [i-1]<=0) then;(Значения P, G или T введены некорректно);;;;;
ShowMessage (Введены некорректные данные);;
end;;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;
// Вывод результатов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 (Время выполнения ген. алгоритма: +
FormatDateTime (hh:mm:ss:zz, time2-time1));;TForm1. Button2Click (Sender: TObject);
// перебор= 3; // кол-во вариантов резервирования
type= 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
NotDominated: boolean; // флаг недоминируемости
// инициализация начальных переменных
time1:= now;;:= round (power(3, N)) - 1;(Kr, max + 1);(X, max + 1);_1:= 0;i:= 0 to N-1 do
Tavg_1:= Tavg_1 + 1/T[i];
// задание матрицы всех возможных значений Хj:= 0 to max do // перебор на основе перевода чисел в троичную систему
// выделение памяти под xj(X[j], N);
// перевод числа в троичную систему
k:= j;
for i:= 0 to N-1 do[j] [N-i-1]:= (k - (k div base) * base) + 1;:= k div base;;
// вычисление значения критериев
Kr[j] [1]:= - GetS (X[j]);
Kr[j] [2]:= GetP (X[j]);
Kr[j] [3]:= SumTxX (X[j]);;
// на этот момент мы имеем массив всех комбинаций
// и массив соответствующих значений критерия
// вывести недоминируемые точки
for 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
// добавление на график. AddXY (-Kr[j] [1], Kr[j] [2], , clBlue);;:= now;;j:= 0 to max do[j]:= nil;:= nil;:= nil;. Lines. Add (Время выполнения алгоритма перебора: +
FormatDateTime (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]:= IntTo