Решение задачи повышения надежности резервирования
Дипломная работа - Математика и статистика
Другие дипломы по предмету Математика и статистика
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