Синтез системы управления спуском космического аппарата на поверхность Марса методом интеллектуальной эволюции

Метод сетевого оператора и его применение в задачах управления. Исследование на основе вычислительного эксперимента синтезируемой системы автоматизированного управления космического аппарата, методом интеллектуальной эволюции. Алгоритм пчелиного роя.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 17.09.2013
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

(ksi<(1+alfa*Lh[k2])/(1+Lh[k2])) then

begin

//если условие скрещивания выполнено

ks2:=random(p*(c+d));

//скрещивание, получение 2-х потомков

for i:=0 to ks2-1 do

begin

Son1p[i]:=PopChrPar[k1,i];

Son2p[i]:=PopChrPar[k2,i];

end;

for i:=ks2 to p*(c+d)-1 do

begin

Son1p[i]:=PopChrPar[k2,i];

Son2p[i]:=PopChrPar[k1,i];

end;

//мутация для 1го потомка

if random<pmut then

son1p[random(p*(c+d))]:=random(2);

//вычисление функционалов для 1го потомка

GreytoVector(son1p);

Func0(Fu1);

//вычисление расстояния для 1го потомка

L1:=Rast(Fu1);

//нахождение хромосомы с наибольшим расстоянием

Lmax:=Lh[0];

imax:=0;

for i:=1 to HH-1 do

if Lh[i]>Lmax then

begin

Lmax:=Lh[i];

imax:=i;

end;

if L1<Lmax then

//если расстояние у 1го потомка меньше, чем наибольшее, то

//...осуществляем замену

begin

for i:=0 to p*(c+d)-1 do

PopChrPar[imax,i]:=son1p[i];

for i:=0 to nfu-1 do

Fuh[imax,i]:=Fu1[i];

end;

//вычисляем все расстояния для популяции

for i:=0 to HH-1 do

Lh[i]:=Rast(Fuh[i]);

//мутация для 2го потомка

if random<pmut then

son2p[random(p*(c+d))]:=random(2);

//вычисление функционалов для 2го потомка

GreytoVector(son2p);

Func0(Fu2);

//вычисление расстояния для 2го потомка

L2:=Rast(Fu2);

//нахождение хромосомы с наибольшим расстоянием

Lmax:=Lh[0];

imax:=0;

for i:=1 to HH-1 do

if Lh[i]>Lmax then

begin

Lmax:=Lh[i];

imax:=i;

end;

if L1<Lmax then

//если расстояние у 2го потомка меньше, чем наибольшее, то

//...осуществляем замену

begin

for i:=0 to p*(c+d)-1 do

PopChrPar[imax,i]:=son2p[i];

for i:=0 to nfu-1 do

Fuh[imax,i]:=Fu2[i];

end;

//вычисляем все расстояния для популяции

for i:=0 to HH-1 do

Lh[i]:=Rast(Fuh[i]);

end;

rt:=rt+1;

//конец цикла скрещивания

until rt>RR;

// генерируем новые хромосомы

//проверка конца эпохи

pt:=pt+1;

//конец цикла поколений

EndGeneration;

until pt>PP;

ChoosePareto;

//строим множество Парето

End;

Procedure TGANOP.GreytoVector(y: TArrInt);

var

i,j,l1,l:integer;

g,g1:real;

Begin

l:=c+d;

l1:=high(y)+1;

for i:=0 to l1-1 do

if i mod l=0 then

zb[i]:=y[i]

else

zb[i]:=zb[i-1] xor y[i];

j:=-1;

g1:=1;

g:=1;

for i:=0 to c-2 do

g1:=g1*2;

for i:=0 to l1-1 do

begin

if i mod l=0 then

begin

j:=j+1;

q[j]:=0;

g:=g1;

end;

q[j]:=q[j]+g*zb[i];

g:=g/2;

end;

End;

Procedure TGANOP.ImproveChrom(q:TArrReal;var StrChrom: TArrArr4Int);

var

i,j,k:integer;

flag:boolean;

Begin

NOP.SetPsi(NOP.Psi0);

Func0(Fu1);

k:=-1;

for i:=0 to lchr-1 do

begin

NOP.Variations(StrChrom[i]);

Func0(Fu2);

flag:=true;

for j:=0 to nfu-1 do

if Fu2[j]>Fu1[j] then flag:=false;

if flag then

begin

for j:=0 to nfu-1 do

Fu1[j]:=Fu2[j];

k:=i;

end;

end;

for i:=k+1 to lchr-1 do

for j:=0 to 3 do

StrChrom[i,j]:=0;

End;

Function TGANOP.Rast(Fu: TArrReal): integer;

var i,j,k,count:integer;

Begin

count:=0;

for i:=0 to HH-1 do

begin

j:=0;

while (j<nfu) and (Fu[j]>=Fuh[i,j]) do j:=j+1;

if j>=nfu then

begin

k:=0;

while (k<nfu) and (Fu[k]=Fuh[i,k]) do k:=k+1;

if k<nfu then count:=count+1;

end;

end;

result:=count;

End;

Procedure TGANOP.ReadChromosome(k: integer; var q1: TArrReal;

var Psi1: TArrArrInt);

var

i:integer;

Begin

NOP.SetPsi(NOP.Psi0);

for i:=0 to lchr-1 do

NOP.Variations(PopChrStr[k,i]);

GreytoVector(PopChrPar[k]);

Readq(q1);

NOP.ReadPsi(Psi1);

End;

Procedure TGANOP.ReadFunc(k: integer; var Fu1: TArrReal);

var

i:integer;

Begin

for i:=0 to nfu-1 do

Fu1[i]:=Fuh[k,i];

End;

Procedure TGANOP.Readq(var q1: TArrReal);

var

i:integer;

Begin

for i:=0 to p-1 do

q1[i]:=q[i];

End;

Procedure TGANOP.Setq(q1: TArrReal);

var

i:integer;

Begin

for i:=0 to high(q1) do

q[i]:=q1[i];

End;

Procedure TGANOP.VectortoGrey(var y: TArrInt);

var

x,i,j,k:integer;

r:real;

Begin

for i:=0 to p*(c+d)-1 do

zb[i]:=0;

for j:=0 to p-1 do

begin

x:=trunc(q[j]);

r:=q[j]-x;

k:=c+j*(c+d)-1;

while k>=j*(c+d) do

begin

zb[k]:=x mod 2;

x:=x div 2;

k:=k-1;

end;

k:=c+j*(c+d);

while k<(c+d)*(j+1) do

begin

r:=2*r;

x:=trunc(r);

zb[k]:=x;

r:=r-x;

k:=k+1;

end;

y[j*(c+d)]:=zb[j*(c+d)];

for i:=j*(c+d)+1 to (j+1)*(c+d)-1 do

y[i]:=zb[i] xor zb[i-1];

end;

End;

{ TModel }

Constructor TModel.Create(hh1,pp1,rr1,nfu1,lchr1,p1,c1,d1,

Epo1,kel1:integer;alfa1,pmut1:real;

L1,Mout1,kp1,kr1,kw1,kv1,n1,m1,ll1,ny1:integer);

Begin

inherited Create(hh1,pp1,rr1,nfu1,lchr1,p1,c1,d1,

Epo1,kel1,alfa1,pmut1,

L1,Mout1,kp1,kr1,kw1,kv1);

n:=n1;

m:=m1;

lv:=ll1;

ny:=ny1;

SetLength(x,n);

SetLength(x0,n);

SetLength(xs,n);

SetLength(fa,n);

SetLength(fb,n);

SetLength(u,m);

SetLength(umax,m);

SetLength(umin,m);

SetLength(qymin,ny);

SetLength(qymax,ny);

SetLength(qy,ny);

SetLength(ixmax,ny);

SetLength(ix,ny);

SetLength(stepsqy,ny);

SetLength(y,lv);

SetLength(su,nfu);

SetLength(su1,nfu);

End;

Procedure TModel.Euler2;

var

i:integer;

Begin

RP(t,x,fa);

for i:=0 to n-1 do

xs[i]:=x[i]+dt*fa[i];

RP(t+dt,xs,fb);

for i:=0 to n-1 do

x[i]:=x[i]+dt*(fa[i]+fb[i])/2;

t:=t+dt;

End;

Procedure TModel.Func(var Fu: TArrReal);

var

i:integer;

Begin

for i:=0 to nfu-1 do

fu[i]:=0;

End;

Procedure TModel.Func0(var Fu: TArrReal);

var

i:integer;

Begin

Integr;

for i:=0 to nfu-1 do

Fu[i]:=su[i];

End;

Procedure TModel.Initial;

var

i:integer;

Begin

for i:=0 to n-1 do

x[i]:=x0[i];

t:=0;

End;

Procedure TModel.Integr;

var

i,j:integer;

flag:boolean;

Begin

for i:=0 to ny-1 do

ix[i]:=0;

for i:=0 to nfu-1 do

su[i]:=0;

repeat

for i:=0 to ny-1 do

qy[i]:=qymin[i]+stepsqy[i]*ix[i];

Func(su1);

for i:=0 to nfu-1 do

su[i]:=su[i]+su1[i];

LexPM(ix,flag);

until not flag;

End;

Procedure TModel.LexPM(var ix: tArrInt; var flag: boolean);

var

i,j:integer;

Begin

i:=ny-1;

while (i>=0)and(ix[i]=ixmax[i]) do i:=i-1;

if i>=0 then

begin

ix[i]:=ix[i]+1;

for j:=i+1 to ny-1 do

ix[j]:=0;

flag:=true;

end

else

flag:=false;

End;

Procedure TModel.OgrUpr;

var

i:integer;

Begin

for i:=0 to m-1 do

if u[i]>umax[i] then

u[i]:=umax[i]

else

if u[i]<umin[i] then

u[i]:=umin[i];

End;

Procedure TModel.RP(t1:real;x1:TArrReal;var f1:TArrReal);

const

TT=0.5;

ksi=0.09;

ko=1;

var

i:integer;

Begin

Upr;

f1[0]:=x[1];

f1[1]:=-2*ksi*x[1]/TT+(ko*u[0]-x[0])/sqr(TT);

for i:=0 to n-1 do

if abs(f1[i])>infinity then

f1[i]:=Ro_10(f1[i])*infinity;

End;

Procedure TModel.Setdt(dt1: real);

Begin

dt:=dt1;

End;

Procedure TModel.Setixmax(ix1: TArrInt);

var

i:integer;

Begin

for i:=0 to ny-1 do

ixmax[i]:=ix1[i];

End;

Procedure TModel.Setqymax(qymax1: TArrReal);

var

i:integer;

Begin

for i:=0 to ny-1 do

qymax[i]:=qymax1[i];

End;

Procedure TModel.Setqymin(qymin1: TArrReal);

var

i:integer;

Begin

for i:=0 to ny-1 do

qymin[i]:=qymin1[i];

End;

Procedure TModel.Setstepsqy(stepsqy1: TArrReal);

var

i:integer;

Begin

for i:=0 to ny-1 do

stepsqy[i]:=stepsqy1[i];

End;

Procedure TModel.Settf(tf1: real);

Begin

tf:=tf1;

End;

Procedure TModel.Setuogr(umin1, umax1: TArrReal);

var

i:integer;

Begin

for i:=0 to m-1 do

begin

umin[i]:=umin1[i];

umax[i]:=umax1[i];

end;

End;

Procedure TModel.Setx0(x01: TArrReal);

var

i:integer;

Begin

for i:=0 to n-1 do

x0[i]:=x01[i];

End;

Procedure TModel.Upr;

Begin

u[0]:=1;

End;

Procedure TModel.Viewer;

var

i:integer;

Begin

for i:=0 to n-1 do

y[i]:=x[i];

End; END.

Приложение Б

z_0=x_0

z_1=q_0

z_2=x_1

z_3=q_1

z_4=x_2

z_5=q_2

z_6=x_3

z_7=q_3

z8=Prod(z_1,z_0)

z9=Prod(z_3,z_2)

z10=Prod(z_5,z_4)

z11=Prod(z_7,z_6)

z12=Sum(z_9,z_8)

z13=Sum(z_11,z_10)

z14=Sum(z_12)

z15=Sum(z_13)

z16=Sum(z_12)

z17=Sum(z_13)

z18=Sum(Ro_18(z_13),z_12)

z19=Sum(z_17,Ro_9(z_14),Ro_23(z_6))

20=Sum(z_18)

z21=Sum(z_19)

z22=Sum(z_20,Ro_6(z_10))

z23=Sum(z_22,Ro_17(z_21))

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.