Решение задачи повышения надежности резервирования

Дипломная работа - Математика и статистика

Другие дипломы по предмету Математика и статистика

Str(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; // кол-во обновлений

procedure InitPopulation (var Pop: TPopulation);

// создание начальной популяции, состоящей из L особей длины N

procedure ErasePopulation (var Pop: TPopulation);

// удаление популяцииRankPopulation (var Pop: TPopulation);

// ранжирование индивидов в популяцииCountFitness (var Pop: TPopulation);

// вычисление значений целевых функцийSelectPopulation (var Pop: TPopulation; var tempPop: TPopulation);

// формирование временной популяции выбором из двух

procedure SelectPopulation2 (var Pop: TPopulation; var tempPop: TPopulation);

// формирование временной популяции выбором из трех

procedure CrossPopulation (var TempPop: TPopulation; var TempPopCr: TPopulation);

// скрещивание индивидов популяцииMutantPopulation (var TempPop: TPopulation);

// мутация популяцииFixPopulation (var TempPop: TPopulation);

// исправление популяцииInitTavg;

// вычисление T-среднего

function SumTxX (var Indiv: TIndivid): real;

// вычисление левой части ограничения по времениInitRecord;

// задание рекордного массива начальными числами

procedure AddToRecord (var TempPop: TPopulation);

// изменение рекордного множества при появлении новой популяции

procedure CopyPopulation (var PopFrom: TPopulation; var PopInto: TPopulation);

// копирование популяцийInitRec;

// инициализация рекордного множества

procedure EraseRec;

// удаление рекордного множестваInitInputArrays;

// инициализация входных массивовEraseInputArrays;

// удаление входных массивовGetS (var II: TIndivid): real;

// определение стоимости по решению

function GetP (var II: TIndivid): real;

// определение вероятности по решениюGetS (var II: TIndivid): real;j: integer;:= 0;j:= 0 to N-1 doII[j] of

: result:= result + S[j];

: result:= result + 2 * S[j] * G[j];

: result:= result + 4 * S[j];;;GetP (var II: TIndivid): real;j: integer;:= 1;j:= 0 to N-1 doII[j] of

: result:= result * P[j];

: result:= result * (2*P[j] - P[j]*P[j]);

: result:= result * (3*P[j]*P[j] - 2*P[j]*P[j]*P[j]);;;CountFitness (var Pop: TPopulation);i, j: integer;i:= 0 to L-1 do. Fitness[i].S:= - GetS (Pop. Individs[i]);. Fitness[i].P:= GetP (Pop. Individs[i]);;;InitPopulation (var Pop: TPopulation);i, j: integer;

//randomize; // задаем длину(Pop. Individs, L);(Pop. Fitness, L);(Pop. Rank, L);

// присваиваем случайные значения

for i:= 0 to L-1 do

begin(Pop. Individs[i], N);j:= 0 to N-1 do. Individs[i] [j]:= random(3)+1;;

// исправляем популяцию(Pop);

// вычисляем значения целевых функций(Pop);

for i:= 0 to L-1 do // а нужно ли??. Rank[i]:= 0;;ErasePopulation (var Pop: TPopulation);i, j: integer;i:= 0 to L-1 do. Individs[i]:= nil;. Individs:= nil;. Fitness:= nil;. Rank:= nil;;Sort (var Euc: TEucArray; p, q: integer); {p, q - индексы начала и конца сортируемой части массива}i, j: integer;, T: real;

Beginp<q then {массив из одного элемента тривиально упорядочен}

begin:=Euc[p].distance;:=p-1;:=q+1;i k) and (pos ( + IntToStr(k) + , str)=0) then(Pop. Fitness[index].S<=Pop. Fitness[k].S) and (Pop. Fitness[index].P <= Pop. Fitness[k].P) and

((Pop. Fitness[index].S<Pop. Fitness[k].S) or (Pop. Fitness[index].P < Pop. Fitness[k].P)) then:= false;;RankPopulation (var Pop: TPopulation);Scur, Stotal: string;: integer;: integer;: integer;: integer;: TEucArray;: integer;: integer;: integer;i:= 0 to L-1 do. Fitness[i].S:= - GetS (Pop. Individs[i]);. Fitness[i].P:= GetP (Pop. Individs[i]);. Rank[i]:= 0;;:= ;:= 1;

repeat

// выбрать недоминируемые элементы и присвоить им ранг

NumsInStr:= 0;:= ;i:= 0 to L-1 dopos ( +IntToStr(i)+ , Stotal)=0 thenIndivIsNotDominated (Pop, i, Stotal) then:= Scur + IntToStr(i) + ;. Rank[i]:= r;(NumsInStr);

end;

//m:= length(Scur); // создаем массив текущего ранга!!!!!!!!!!!!!

m:= NumsInStr;(EucArr, m);:= 0;k:= 0 to L-1 dopos ( +inttostr(k)+ , Scur)<>0 then[t].index:= k;(t);;k:= 0 to m-1 do // считаем расстрояния[k].distance:= 0;t:= 0 to m-1 do[k].distance:= EucArr[k].distance +(sqr(Pop. Fitness [EucArr[k].index].S-Pop. Fitness [EucArr[t].index].S) +(Pop. Fitness [EucArr[k].index].P-Pop. Fitness [EucArr[t].index].P));;(EucArr, 0, m-1); // сортируемk:= 0 to m-1 do. Rank [EucArr[k].index]:= r +(m-k-1)/m; // записываем ранки:= nil; // удаляем массив:= Stotal + Scur;(r);

(length(Scur)=1) or (r>L+2);

// после этого r - maxrank

// преобразовываем ранг

for i:= 0 to L-1 do. Rank[i]:= r + Pop. Rank[i] - 2 * trunc (Pop. Rank[i]) - 1;;SelectPopulation (var Pop: TPopulation; var TempPop: TPopulation);i, j: integer;, t2: integer; // индексы выбранных особейi:= 0 to L-1 do:= random (L);:= random (L);Pop. Rank[t1] >= Pop. Rank[t2] thenj:= 0 to N-1 do. Individs[i] [j]:= Pop. Individs[t1] [j];. Fitness[i].S:= pop. Fitness[t1].S;. Fitness[i].P:= Pop. Fitness[t1].P;. Rank[i]:= Pop. Rank[t1]j:= 0 to N-1 do. Individs[i] [j]:= Pop. Individs[t2] [j];. Fitness[i].S:= pop. Fitness[t2].S;. Fitness[i].P:= Pop. Fitness[t2].P;. Rank[i]:= Pop. Rank[t2];;;SelectPopulation2 (var Pop: TPopulation; var tempPop: TPopulation);i, j: integer;, t2, t3: integer; // индексы выбранных особейi:= 0 to L-1 do:= random (L);:= random (L);:= random (L);(Pop. Rank[t1] >= Pop. Rank[t2]) and (Pop. Rank[t1] >= Pop. Rank[t3]) thenj:= 0 to N-1 do. Individs[i] [j]:= Pop. Individs[t1] [j];. Fitness[i].S:= pop. Fitness[t1].S;. Fitness[i].P:= Pop. Fitness[t1].P;. Rank[i]:= Pop. Rank[t1](Pop. Rank[t2] >= Pop. Rank[t1]) and (Pop. Rank[t2] >= Pop. Rank[t3]) thenj:= 0 to N-1 do. Individs[i] [j]:= Pop. Individs[t2] [j];. Fitness[i].S:= pop. Fitness[t2].S;. Fitness[i].P:= Pop. Fitness[t2].P;. Rank[i]:= Pop. Rank[t2]j:= 0 to N-1 do. Individs[i] [j]:= Pop. Individs[t3] [j];. Fitness[i].S:= pop. Fitness[t3].S;. Fitness[i].P:= Pop. Fitness[t3].P;. Rank[i]:= Pop. Rank[t3];;CrossPopulation (var TempPop: TPopulation; var TempPopCr: TPopulation);i, j: integer;, t2: integer;: integer; //crossover point: 1..3;

{for i:= 0 to (L div 2) dorandom(101)/100 0 thenj:= 0 to N-1 do. Individs [L-1] [j]:=TempPop. Individs[t1] [j];;MutantPopulation (var TempPop: TPopulation);i, j: integer;: integer;

{for i:= 0 to L-1 doj:= 0 to N-1 dorandom(101)/100 <= Pmut then. Individs[i] [j]:= random(3) + 1;}i:= 1 to L-1 dorandom(101)/100 <= Pmut thenj:= 1 to N-1 dorandom(101)/100 <= Pmut then. Individs[i] [j]:= random(3) + 1;;SumTxX (var Indiv: TIndivid): real;: integer;:= 0;j:= 0 to N-1 doIndiv[j] of

: result:= result + 1/T[j];

: result:= result + 2/3/T[j];

: result:= result + 6/5/T[j];;;FixPopulation (var TempPop: TPopulati