사용자지침서
Gene1=[ 1 0 1 1 0 1, 1.56 ]; Gene2=[ 1 1 0 0 0 0, 2.58 ]; Gene3=[ 0 0 1 1 1 0, 1.97 ]; : : Population=[ Gene1; Gene2; Gene3; ]; Gene1=[ 12 123 56, 2.67]; Gene2=[111 96 11, 12.5]; Gene3=[ 4 36 100, 5.66]; : : Population=[Gene1; Gene2; Gene3;...];
CEMTool>> f=[2:5:0.1]; CEMTool>> a=0.7; // 조정상수 (scale constant) CEMTool>> b=0; // 조정상수 (scale constant) CEMTool>> newf=a*f+b;
CEMTool>> plot(f,newf) CEMTool>> mean(f) 3.5000 CEMTool>> mean(newf) 2.4500 순위 η η η
CEMTool>> f=[1:100:1]'; // 적합도의순위를 1에서 100까지만듦 CEMTool>> opt=1.5; CEMTool>> nf=bak_rank(f,opt); // Baker linear ranking 적용 CEMTool>> plot(f,nf)
CEMTool>>f=[1 2 3 4]; // 적합도를임의로할당 CEMTool>>sumf=sum(f); // 적합도의전체합으로각각의적합도나눔 CEMTool>>sumf 10 CEMTool>>newf=f/sumf newf = 0.1000 0.2000 0.3000 0.4000
CEMTool>> m1=[1 0 0 1 1 0 1]; CEMTool>> m2=[0 0 1 1 0 1 1]; CEMTool>> [c1,c2]=s_xover(m1,m2,0.7) c1 = 0 0 1 1 1 0 1 c2 = 1 0 0 1 0 1 1 교차위치
α α α α CEMTool>> m1=[12 25 5]; CEMTool>> m2=[123 4 34]; CEMTool>> opt=[0.5 0.5]; //Range와재결합이일어날확률을정의한다. CEMTool>> [c1 c2]=int_re(m1,m2,opt) c1 = 81.7853 33.7568 0.0796 c2 = 137.5377 6.7074 34.8350
CEMTool>> m=[1 0 1 0 ]; CEMTool>> opt=[0.5 1]; // 돌연변이확률 0.5, 시행회수 1 CEMTool>> c=s_mut(m,opt) c = 1 1 1 0 돌연변이연산이일어난지점
CEMTool>> [Pop ChromLen]=init_sga(PopSize,Bounds,"fdemo1",Options); for (Generation=1; Generation<=MaxGen; Generation=Generation+1) {
while (NewPopNum<=PopSize) { [Mate1, Mate2]=s_sel(Pop(:,TotalLen),[]); } [Child1,Child2]=s_xover(Pop(Mate1,:),Pop(Mate2,:),XoverOpt); } for (cnt=1;cnt<=popsize;cnt=cnt+1) Pop(cnt,:)=s_mut(Pop(cnt,:),MutOpt); BestIndi=sel_best(Pop,[]) --------------------------------------------------------------- [Pop ChromLen]=init_sga(PopSize,Bounds,"fdemo1",Options); for (Generation=1;Generation<=MaxGen;Generation=Generation+1)
{ while (NewPopNum<=PopSize) { [Mate1, Mate2]=s_sel(Pop(:,TotalLen),[]); [Child1,Child2]=s_xover(Pop(Mate1,:),Pop(Mate2,:),XoverOpt); } for (cnt=1;cnt<=popsize;cnt=cnt+1) Pop(cnt,:)= s_mut(pop(cnt,:),mutopt); } BestIndi=sel_best(Pop,[]) ---------------------------------------------------------------
CEMTool>> MaxGen=20; // 최대진화회수 CEMTool>> MaxPop=10; // 개체군의크기 CEMTool>> Bounds=[0 6]; // 개체가나타내는값의범위 CEMTool>> XoverOpt=[0.5]; // 교차율 CEMTool>> MutOpt=[0.1 10]; // 돌연변이율과회수
CEMTool>> Options=[0.01]; // 정밀도 CEMTool>> best=sga(maxpop, MaxGen, Bounds, "fdemo1", XoverOpt, MutOpt, Options); best = [0 1 0 0 0 0 1 1 0 1 18.5691]
함수최적화문제 (demo_sga.cem) ------------------------------------------------------------- MaxGen=20; MaxPop=10; Bounds=[0 6]; XoverOpt=[0.5]; MutOpt=[0.1 10]; Options=[0.01 0]; best=sga(maxpop,maxgen,bounds,"fdemo1",xoveropt,mutopt,options); [a b]=size(best); bestx=bin2float(best,bounds,b-1); besty=best(1;b); disp=[" 최적해 : (" num2str(bestx) ", " num2str(besty) ")"]; msgprint(" "); msgprint(disp); x=0:6:0.01;
[x y]=fdemo1(x); figure; plot(x,y,"b",bestx,besty,"ro"); title(" 찾아낸최적해의위치 "); -------------------------------------------------------------
교차연산교차방법 : Multi-point Crossover 교차확률 : 0.7 교차회수 : 4 돌연변이연산돌연변이방법 : Simple Mutation 돌연변이확률 : 0.05 돌연변이회수 : 20 선택연산 선택방법 : Tournament selection
토너먼트크기 : 5 적합도함수 : gp_fit CEMTool>>demo_gp(50,10) Genetic Algorithm Cemtool Toolbox Demo graph partitioning problem total node : 48 optimal fitness : 0 optimal gene 111111111111111111111111000000000000000000000000 or 000000000000000000000000111111111111111111111111 Crossover Option XoverOpt = 0.7000 4.0000 Mutation Option MutOpt = 0.0500 20.0000 Generation-> 1 Generation-> 2 Generation-> 3 Generation-> 4
48 개의노드를가진그래프분할문제의목적함수 (gp_fit.cem) ------------------------------------------------------------- function; v<> Pop; gp24=[ 1 2; 25 26; 1 3; 25 27; 2 11; 26 35; 2 3; 26 27; 11 2; 35 26; 11 12; 35 36; 11 10; 35 34; 9 10; 33 34; 8 1; 32 31; 7 9; 31 33; 8 9; 32 33; 8 23; 32 47; 7 6; 31 30; 6 4; 30 28; 6 5; 30 29; 4 3; 28 27; 17 1; 41 25; 17 16; 41 40; 17 18; 41 42; 16 15; 40 39; 15 13; 39 37; 13 14; 37 38; 13 12; 27 36; 15 14; 39 38; 14 24; 38 48; 24 23; 48 47; 24 22; 48 46; 22 21; 46 45; 21 19; 45 43; 19 20; 43 44; 19 18; 43 42; 18 17; 42 41 ]; ss=size(gp24); pp=size(pop); PopSize=pp(1); v=zeros(popsize,1); for (jj=1;jj<=popsize;jj=jj+1) {
temp=0; for (ii=1;ii<=ss(1);ii=ii+1) { if( (Pop(jj;gp24(ii;1))==1)&&(Pop(jj;gp24(ii;2))==0) ) temp=temp+1; else if ((Pop(jj;gp24(ii;1))==0)&&(Pop(jj;gp24(ii;2))==1) ) temp=temp+1; } Pop(jj;pp(2))=temp; v(jj)=temp; } return ------------------------------------------------------------- 전체알고리즘코드 (demo_gp.cem) ------------------------------------------------------------- function BestIndi <> PopSize,MaxGen; msgprint(""); msgprint(""); msgprint("genetic Algorithm Cemtool Toolbox Demo "); msgprint(" graph partitioning problem"); msgprint(" "); msgprint(" "); msgprint("total node : 48"); msgprint("optimal fitness : 0 "); msgprint(" "); msgprint("optimal gene "); msgprint("111111111111111111111111000000000000000000000000"); msgprint("or"); msgprint("000000000000000000000000111111111111111111111111"); msgprint(" "); msgprint(" "); msgprint("crossover Option"); XoverOpt=[0.7 4] msgprint(" "); msgprint("mutation Option"); MutOpt=[0.05 20] AvgFit=zeros(MaxGen,1); AvgRFit=zeros(MaxGen,1); VarFit=zeros(MaxGen,1); AvgVar=zeros(MaxGen,1);
BestFit=zeros(MaxGen,1); BestRFit=zeros(MaxGen,1); [Pop]=gpinit(PopSize); RanPop=gpinit(PopSize); GenPop=Pop; TotalLen=48+1; nn=ceil(popsize*60*0.01); for (Generation=1;Generation<=MaxGen;Generation=Generation+1) { NewPopNum=1; v=gp_fit(pop); Pop(:,TotalLen)=70-v; //[vv nnn]=sel_indis(pop,50); while (NewPopNum<=(PopSize-nn)) { for (ii=1;ii<100;ii=ii+1) { //simple selection 을사용합니다. //[Mate1, Mate2]=s_sel(Pop(:,TotalLen),[]); //tournament selection 을사용합니다. [Mate1, Mate2]=tour_sel(Pop(:,TotalLen),[5]); //truncation selection 을사용합니다. //[Mate1, Mate2]=trun_sel(Pop(:,TotalLen),[70]); if (hamdis(pop(mate1,:),pop(mate2,:))<5) break; } //simple crossover를사용합니다. [Child1,Child2]=m_xover(Pop(Mate1,:),Pop(Mate2,:),XoverOpt); } NewPop(NewPopNum,:)=Child1; if (NewPopNum==(PopSize-nn)) break; NewPopNum=NewPopNum+1; NewPop(NewPopNum,:)=Child2; NewPopNum=NewPopNum+1; //Pop(:,TotalLen-1)=NewPop(:,TotalLen-1); Pop(1:(PopSize-nn),:)=NewPop; for (cnt=1;cnt<=(popsize-nn);cnt=cnt+1)
{ //simple mutation을사용합니다. Pop(cnt,:)=s_mut(Pop(cnt,:),MutOpt); } v=gp_fit(pop); Pop(:,TotalLen)=70-v; // 적합도의평균을계산해낸다. AvgFit(Generation)=mean(v); // 적합도의편차를계산해낸다. AvgVar(Generation)=std(v); // 가장훌륭한개체를찾는다. BestIndi=sel_best(Pop,[]); BestFit(Generation)=70-BestIndi(TotalLen) ; [vv nnn]=sel_indis(pop,60); Pop((PopSize-nn+1):PopSize,:)=vv; Pop(PopSize,:)=BestIndi; // random search rv=gp_fit(ranpop); RanPop(:,TotalLen)=rv; BestRIndi=sel_best(RanPop,[]); RanPop=gpinit(PopSize); RanPop(PopSize,:)=BestRIndi; // 적합도의평균을계산한다. AvgRFit(Generation)=mean(rv); BestRFit(Generation)=70-BestRIndi(TotalLen); pg=1:generation; plot(pg,avgfit(pg),"r",pg,avgrfit(pg),"b",pg,bestfit(pg),"b", pg,bestrfit(pg),"g"); xtitle(" 세대수 red:avgfit black:avgrfit blue:bestfit green:bestrfit"); ytitle(" 평균적합도 "); } msgprint("generation->"); Generation ResPop=Pop; BestIndi=sel_best(Pop,[]); return -------------------------------------------------------------
적합도함수 함수이름 설명 쓰이는곳 fde1 첫번째 De Jong 함수 4장 fde2 두번째 De Jong 함수 4장 fde3 세번째 De Jong 함수 4장 fde4 네번째 De Jong 함수 4장 fde5 다섯번째 De Jong 함수 4장 plot_fun 적합도함수도시 4,6장 적합도할당전략 함수이름 설명 쓰이는곳 s_rank 선형순위재조정 4장 back_rank Baker 순위재조정 4장 whit_rank Whitley 순위재조정 4장 uni_rank 균일순위재조정 4장
진화연산자 함수이름 설명 쓰이는곳 s_sel 비례선택법 5.1절 loc_sel 지역선택법 5.1절 sto_sel 균등선택법 5.1절 tour_sel 토너먼트선택법 5.1절 trun_sel 절단선택법 5.1절 s_xover 1-point 교차 5.2절 m_xover multi-point 교차 5.2절 dis_re 이산재결합 5.2절 int_re 중간재결합 5.2절 line_re 선재결합 5.2절 s_mut 이진돌연변이 5.3절 알고리즘수행관련함수 함수이름 설명 쓰이는곳 init_sga simple GA 초기화 6장 sga simple GA 6장 sel_best 최적의개체를선택 6장 sel_indis 적합도가좋은개체를여러개선택 6장 공통함수 함수이름 설명 쓰이는곳 bin2float 2진수를실수로변환 2,3장 cal_bit 필요한비트수계산 2,3장 hamdis Hamming 거리계산 7장
fde1 목적 1 번째 De Jong 함수 문법 [x val]=fde1(x,options) 입력 x : 입력된값 Options : 쓰이지않는다. 출력 val : 계산된결과값 x : 입력된값이그대로저장된다. 설명 Ref De Jong(1975) : An analysis of the behaviour of a class of genetic adaptive systems 사용예제 CEMTool>> x=[-0.5:0.5:0.1]; CEMTool>> y=[-0.5:0.5:0.1]; CEMTool>> xy=[x' y']; CEMTool>> [xy val]=fde1(xy) xy = -0.5000-0.5000-0.4000-0.4000-0.3000-0.3000-0.2000-0.2000-0.1000-0.1000 0.0000 0.0000 0.1000 0.1000 0.2000 0.2000 0.3000 0.3000 0.4000 0.4000 0.5000 0.5000 val = 0.5000 0.3200 0.1800
0.0800 0.0200 0.0000 0.0200 0.0800 0.1800 0.3200 0.5000 관련함수 fde2, fde3, fde4, fde5 종류진화연산툴박스함수
fde2 목적 2 번째 De Jong 함수 문법 [x val]=fde2(x,options) 입력 x : 입력된값 Options : 쓰이지않는다. 출력 val : 계산된결과값 x : 입력된값이그대로저장된다. 설명 Ref De Jong(1975) : An analysis of the behaviour of a class of genetic adaptive systems 사용예제 CEMTool>> x=[-0.5:0.5:0.1]; CEMTool>> y=[-0.5:0.5:0.1]; CEMTool>> xy=[x' y']; CEMTool>> [xy val]=fde2(xy) xy = -0.5000-0.5000-0.4000-0.4000-0.3000-0.3000-0.2000-0.2000-0.1000-0.1000 0.0000 0.0000 0.1000 0.1000 0.2000 0.2000 0.3000 0.3000 0.4000 0.4000 0.5000 0.5000 val = 58.5000 33.3200
16.9000 7.2000 2.4200 1.0000 1.6200 3.2000 4.9000 6.1200 6.5000 관련함수 fde1, fde3, fde4, fde5 종류진화연산툴박스함수
fde3 목적 3 번째 De Jong 함수 문법 [x val]=fde3(x,options) 입력 x : 입력된값 Options : 쓰이지않는다. 출력 val : 계산된결과값 x : 입력된값이그대로저장된다. 설명 Ref De Jong(1975) : An analysis of the behaviour of a class of genetic adaptive systems 사용예제 CEMTool>> x=[-0.5:0.5:0.1]; CEMTool>> y=[-0.5:0.5:0.1]; CEMTool>> xy=[x' y']; CEMTool>> [xy val]=fde3(xy) xy = -0.5000-0.5000-0.4000-0.4000-0.3000-0.3000-0.2000-0.2000-0.1000-0.1000 0.0000 0.0000 0.1000 0.1000 0.2000 0.2000 0.3000 0.3000 0.4000 0.4000 0.5000 0.5000 val = -2-2 -2
-2-2 0 0 0 0 0 0 관련함수 fde1, fde2, fde4, fde5 종류진화연산툴박스함수
fde4 목적 4 번째 De Jong 함수 문법 [x val]=fde4(x,options) 입력 x : 입력 Options : x의차원 x=[1 2;3 4;5 6] 이면 Options=2이어야한다. Options은넣지않아도무방하다. 출력 val : 계산된결과값 x : 입력된값이그대로저장된다. 설명 Ref De Jong(1975) : An analysis of the behaviour of a class of genetic adaptive systems 사용예제 CEMTool>> x=[-0.5:0.5:0.1]; CEMTool>> y=[-0.5:0.5:0.1]; CEMTool>> xy=[x' y']; CEMTool>> [xy val]=fde4(xy) xy = -0.5000-0.5000-0.4000-0.4000-0.3000-0.3000-0.2000-0.2000-0.1000-0.1000 0.0000 0.0000 0.1000 0.1000 0.2000 0.2000 0.3000 0.3000 0.4000 0.4000 0.5000 0.5000 val =
0.6809 0.9537 0.7161 0.4139 1.0083-1.0571-0.6764-0.0589 1.0898 0.3045 1.8221 관련함수 fde1, fde2, fde3, fde5 종류진화연산툴박스함수
fde5 목적 5 번째 De Jong 함수 문법 [x val]=fde5(x,options) x : 입력된값 Options : 쓰이지않는다. 출력 val : 계산된결과값 x : 입력된값이그대로저장된다. 설명 Ref De Jong(1975) : An analysis of the behaviour of a class of genetic adaptive systems 사용예제 CEMTool>> x=[1 2;3 4;5 6;7 8]; CEMTool>> [a b]=fde5(x,[]) a = 1 2 3 4 5 6 7 8 b = 1.1156 1.0041 1.0022 1.0021 관련함수 fde1, fde2, fde3, fde4 종류진화연산툴박스함수
plot_fun 목적적합도함수를그래프로도시한다. 문법 plot_fun(funcname, Bounds, Options) 입력 FuncName : 적합도함수의이름 Bounds : 함수의범위 Options : [Precision..] 설명적합도함수를주어진범위내에서그래프로나타낸다. 이때점을구하는간격은옵션에서정밀도로준다. 사용예제 CEMTool>> plot_func("fdemo1", [0 6], [0.1]); 관련함수 종류진화연산툴박스함수
s_rank 목적 simple linear ranking 을수행하는함수이다. 문법 [NewFit]=s_rank(Fit,Option) 입력 Fit : 적합도함수에의해계산된적합도 ex> Fit=[ 1 ; 2; 3; 4] Option : [ SP ] SP : 상수 1 에서 2 까지 출력 NewFit : simple linear ranking 후의새로운적합도 설명적합도를순위를매겨서그순위에따라정해진최소값보다는크게할당한다. 2 ( SP - 1 )( Position - 1 ) NewFit(Position)= 2 - SP + ------------------------------ NumOfIndi - 1 SP 값에따라최소값이정해지고, 정해진순위에따라새로운적합도가할당된다. 적합도가가장나쁜개체도선택의기회가 2-SP 만큼은주어진다. 사용예제 CEMTool>> OldFit=[1;2;3;4]; CEMTool>> Opt=[1.6]; CEMTool>> NewFit=s_rank(OldFit,Opt); CEMTool>> OldFit 1 2 3 4 CEMTool>> NewFit 0.4000 0.8000 1.2000 1.6000 관련함수 bak_rank, whit_rank, uni_rank
종류진화연산툴박스함수
bak_rank 목적 Baker's ranking 을수행하는함수이다. 문법 [NewFit]=bak_rank(Fit,Option) 입력 Fit : 적합도함수에의해계산된적합도 ex> Fit=[ 1 ; 2; 3; 4] Option : [EtaMax] EtaMax : 상수 1 에서 2 까지 EtaMin = 2 - EtaMax 출력 NewFit : baker linear ranking 이후의새로운적합도단결과는확률의형태로 normalize 되어나온다. 설명 1 position - 1 NewFit(position)= --- * (EtaMax-(EtaMax-EtaMin) * -------------) N N - 1 EtaMax 와 EtaMin 사이를기존의적합도에따라매긴순번에의해서균등하게배분해준다. 그럼으로써, 일정하게제한된범위안에적합도를넣을수있다. Ref J. Baker(1987) : Adaptive Selection Methods for Genetic Algorithms, Proc. First ICGA, Jul. pp. 101-111 사용예제 CEMTool>> OldFit=[1;2;3;4]; CEMTool>> Opt=[1.6]; CEMTool>> NewFit=bak_rank(OldFit,Opt); CEMTool>> OldFit 1 2 3 4 CEMTool>>NewFit 0.1000 0.2000
0.3000 0.4000 관련함수 s_rank, whit_rank, uni_rank 종류진화연산툴박스함수
whit_rank 목적 Whitley s ranking 을수행하는함수이다. 문법 NewFit]=whit_rank(Fit,Option) 입력 Fit : 적합도함수에의해계산된적합도 ex> Fit=[ 1 ; 2; 3; 4] Option : [ WhitleyA ] WhitleyA : 상수 1 에서 2 까지 출력 NewFit : whitley linear ranking 이후의새로운적합도결과는확률의형태로정규화된다. 설명 λ λ (a : 1 에서 2 까지의상수, λ : random number on [0 1]) 실제계산된적합도에따라서개체들을선택할경우 premature convergence, local search problem 등의문제가생기므로, 이러한문제를적합도를새롭게할당해서해결하고자하는방법이다. Ref D. Whitley(1989) : The GENITOR Algorithm and Selection Pressure: Why Rank-Based Allocation of Reproductive Trials Is Best, Proc. Third ICGA, June 1989, pp. 116-121 사용예제 CEMTool>> OldFit=[1;2;3;4]; CEMTool>> Opt=[1.6]; CEMTool>> NewFit=whit_rank(OldFit,Opt); CEMTool>> OldFit 1 2 3 4 CEMTool>>NewFit
0.5339 1.9131 1.3703 1.0150 관련함수 s_rank, bak_rank, uni_rank 종류진화연산툴박스함수
uni_rank 목적적합도를동일하게할당해주는함수이다. 문법 NewFit=uni_rank(Fit,Option) 입력 Fit : 적합도함수에의해계산된적합도 ex> Fit=[ 1 ; 2; 3; 4] Option : 쓰이지않는다. 출력 NewFit : uniform linear ranking 이후의새로운적합도결과는확률의형태로정규화된다. 설명 1 NewFit(Ramda,a) = --- N uniform linear ranking 은적합도를모두동일하게할당해주므로모든개체가선택될확률이동일하게된다. Ref F. Hoffmeister and T. Back(1990) : Genetic Algorithms and Evolution Strategies:Similarities and Differences, Proc. First International Conference on PPSN, 1990, pp. 447-461 사용예제 CEMTool>> OldFit=[1;2;3;4]; CEMTool>> Opt=[]; CEMTool>> NewFit=uni_rank(OldFit,Opt); CEMTool>> OldFit 1 2 3 4 CEMTool>> NewFit 0.2500 0.2500
0.2500 0.2500 관련함수 s_rank, bak_rank, whit_rank 종류진화연산툴박스함수
s_sel 목적 simple linear selection 을수행하는함수이다. 문법 [Mate1, Mate2]=s_sel(Fit,Option) 입력 Fit : 개체들의적합도를나타낸다 ex> Fit=[2;3;5;4;7;1]; Option : 쓰이지않는다. 출력 Mate1, Mate2 : 선택된개체의번호를나타낸다. 설명개체의적합도에따라서적합도가높은개체는높은확률로, 적합도가낮은개체는낮은확률로선택의기회를주는선택연산자이다. Ref D.E. Goldberg, Genetic Algorithms in Search, Optimization, and Machine Learning, Addison-Wesley Publishing Company, Inc., 1989 사용예제 CEMTool>> oldfit=[2;3;5;4;7;1]; CEMTool>> opt=[]; CEMTool>> [sel1 sel2]=s_sel(oldfit,opt) sel1 = sel2 = 2 5 관련함수 loc_sel, stoc_sel, tour_sel, trun_sel 종류진화연산툴박스함수
loc_sel 목적일정한거리보다가까운개체들만사용해서선택연산자를적용한다. 문법 [Mate1, Mate2]=loc_sel(Fit,Option) 입력 Fit Option : 적합도함수에의해계산된적합도 ex> Fit=[ 1 ; 2; 3; 4] : [Distance] Distance : 선택하는개체들의범위 출력 Mate1,Mate2 : 선택된개체의번호 설명 local selection 이란아래숫자가개체를나타낸다고할때, 1-2 - 3-4 - 5-6 - 7-8 <- -> distance 가 1 이고 3 을중심으로선택한다면 2,3,4 개체만 selection 에참여시키는것이다. 2, 3, 4 만을가지고 selection operator 를적용시킬때에는 s_selection 함수를사용한다. Ref H.M. Voigt, J. Born, and Santibanez-Koref, I.(1991) : Modeling and Simulation of Distributed Evolutionary Search Processes for Function Optimization. in PPSN1, pp. 373-380 사용예제 CEMTool>> Fit=[3;4;1;7;5;9;2]; CEMTool>> Opt=[1]; CEMTool>> [Sel1 Sel2]=loc_sel(Fit,Opt) Center=> 5 Selected Subpopulation.. 4 5 6 Sel1 = 6
Sel2 = 5 관련함수 s_sel, sto_sel, trun_sel, tour_sel 종류진화연산툴박스함수
sto_sel 목적 universal stochastic selection( 모든개체에동일한확률로선택연산자를적용 ) 을수행하는함수이다. 문법 [Mate1, Mate2]=sto_sel(Fit,Option) 입력 Fit : 개체들의적합도를나타낸다 ex> Fit=[2;3;5;4;7;1]; Option : 쓰이지않는다. 출력 Mate1, Mate2 : 선택된개체의번호를나타낸다. 설명 simple selection 에서개체의적합도에따라서적합도가높은개체는높은확률로, 적합도가낮은개체는낮은확률로선택의기회가주어지는반면, universal stochastic selection 은모든개체들에게동일한확률을적용시켜선택의기회를균등하게준다. 사용예제 CEMTool>> oldfit=[2;3;5;4;7;1]; CEMTool>> opt=[]; CEMTool>> [sel1 sel2]=sto_sel(oldfit,opt) sel1 = sel2 = 4 2 관련함수 s_sel, tour_sel, loc_sel, tour_sel 종류진화연산툴박스함수
tour_sel 목적개체군에서임의로선택된크기만큼의개체만을가지고선택연산자를적용한다. 문법 [Mate1, Mate2]=tour_sel(Fit,Option) 입력 Fit Option : 적합도함수에의해계산된적합도 ex> Fit=[ 1 ; 2; 3; 4] : [Size] Size : tournament에참여하는개체수 출력 Mate1,Mate2 : 선택된개체의번호 설명초기에주어진크기 (Size) 만큼의개체를임의로뽑아 sub-population 을만들어선택연산자를적용시킨다. Ref D.E. Goldberg, and K. Deb(1991) : A Comparative Analysis of Selection Schemes Used in Genetic Algorithms, in FGA1, pp. 69-93 사용예제 CEMTool>> Fit=[3;4;1;7;5;9;2]; CEMTool>> Opt=[3]; CEMTool>> [Sel1 Sel2]=tour_sel(Fit,Opt) Selected subpopulation!! 6 1 7 Sel1 = Sel2 = 6 7 관련함수 s_sel, sto_sel, loc_sel, trun_sel 종류진화연산툴박스함수
trun_sel 목적 truncation selection( 적합도가높은개체만선택의후보가됨 ) 을수행하는함수이다. 문법 [Mate1, Mate2]=trun_sel(Fit,Option) 입력 Fit Option : 적합도함수에의해계산된적합도 ex> Fit=[ 1 ; 2; 3; 4] : [Threshold] Threshold : 참여시킬상위개체들의비율 (%) 출력 Mate1,Mate2 : 선택된개체의번호 설명 Threshold(%) 밑에있는개체들은 selection 에참여하지못하는 selection 방법이다. Ref T. Blickle and L. Thiele(1995) : A Comparison of Selection Schemes used in Genetic Algorithms, TIK Report Nr. 11, December J. Crow and M. Kimura(1970s) : An introduction of population genetics theory, New York: Harper and Row 사용예제 CEMTool>> Fit=[3 ; 4;1;7;5;9;2]; CEMTool>> Opt=[50]; CEMTool>> [Sel1 Sel2]=trun_sel(Fit,Opt) Sel1 = Sel2 = 5 5 관련함수 s_sel, sto_sel, tour_sel, loc_sel 종류진화연산툴박스함수
s_xover 목적 simple crossover 를수행하는함수이다. 문법 [Child1,Child2]=s_xover(Mate1, Mate2, XoverOption) 입력 Mate1, Mate2 XoverOption : 교차연산자가수행되어야할부모개체 : 교차연산확률 출력 Child1, Child2 : 교차연산이수행된다음생성된개체 설명교차연산자를가장간단한형태로구현한것으로, 두개의개체를교차연산확률에따라임의로선택된특정부분을중심으로두개체를교차하여새로운두개체를생성한다. Mate1 0 1 0 0 1 : 1 1 1 Mate2 1 1 1 0 0 : 0 1 1 교차연산이수행되는부분 교차연산이수행된이후의결과 Child1 0 1 0 0 1 : 0 1 1 Child2 1 1 1 0 0 : 1 1 1 Ref J. Holland(1975) : Adaptation in Natural and Artificial Systems, University of Michigan Press, Ann Arbor D.E. Goldberg(1989) : Genetic Algorithms in Search, Optimization, and Machine Learning, Addison-Wesley Publishing Company, Inc. 사용예제 CEMTool>> Mate1=[0 1 0 0 1 0 1]; CEMTool>> Mate2=[1 1 1 0 0 1 1]; CEMTool>> XoverOpt=[0.5]; CEMTool>> [Child1 Child2]=s_xover(Mate1,Mate2,XoverOpt) Child1 = 1 1 0 0 1 0 1 Child2 = 교차연산이일어난부분
0 1 1 0 0 1 1 관련함수 s_mut 종류진화연산툴박스함수
m_xover 목적 multi-point crossover 를수행하는함수이다. 문법 [Child1,Child2]=m_xover(Mate1, Mate2, XoverOption) 입력 Mate1, Mate2 XoverOption : 교차연산자가수행되어야할부모개체 : [XoverProbability XoverNumber] XoverProbability : 교차율 XoverNumber : 나누는점의수 출력 Child1, Child2 : 교차연산이수행된다음생성된개체 설명 Multi-point 교차연산자는두개의개체를교차연산확률에따라, 임의로선택된여러지점에서잘라교차하여새로운두개체를생성한다. Mate1 0 : 1 0 0 1 : 1 1 1 Mate2 1 : 1 1 0 0 : 0 1 1 교차연산이수행되는부분 교차연산이수행된이후의결과 Child1 1 1 0 0 1 : 0 1 1 Child2 0 1 1 0 0 : 1 1 1 Ref J. Holland(1975) : Adaptation in Natural and Artificial Systems, University of Michigan Press, Ann Arbor D.E. Goldberg(1989) : Genetic Algorithms in Search, Optimization, and Machine Learning, Addison-Wesley Publishing Company, Inc. 사용예제 CEMTool>> Mate1=[0 1 0 0 1 0 1 1 1 1 0 0 0 1]; CEMTool>> Mate2=[1 1 1 0 0 1 1 0 0 0 1 0 1 1]; CEMTool>> XoverOpt=[0.5 3]; CEMTool>> [Child1 Child2]=m_xover(Mate1,Mate2,XoverOpt) Child1 = 0 0 1 1 0 0 0 0 0 0 0 0 0 1 Child2 = 1 1 0 0 1 1 1 1 1 1 1 1 1 0
관련함수 s_xover 종류진화연산툴박스함수
dis_re 목적 discrete recombination 을수행하는함수이다. 문법 [Child1,Child2]=dis_re(Mate1, Mate2, XoverOption) 입력 Mate1, Mate2 : 입력된개체 XoverOption : [XoverProbability...] 출력 Child1, Child2 : 새로만들어진개체 설명두개체사이의값을교환하는방식으로새로운개체를생성한다. 선택할위치를임의로발생시킨다. Mate1 : 12 25 5 Mate2 : 123 4 34 Sel1 : 2 2 1 Sel2 : 1 2 1 위의부모개체들에 XoverProbability 를적용해서 Child 를생성한다. Child1 : 123 4 5 Child2 : 12 4 5 Ref H. Mullenbein and D. Schierkamp-Voosen : Predictive Models for the Breeder Genetic Algorithm: Continuous parameter optimization. Evolutionary Computation GEA toolbox manual by Hartmut Pohheim 사용예제 CEMTool>> m1=[12 25 5]; CEMTool>> m2=[123 4 34]; CEMTool>> opt=[0.5]; CEMTool>> [c1 c2]=dis_re(m1,m2,opt) c1 = 123 25 5
c2 = 123 4 34 관련함수 int_re, line_re 종류진화연산툴박스함수
int_re 목적 intermediate recombination 을수행하는함수이다. 문법 [Child1,Child2]=int_re(Mate1, Mate2, XoverOption) 입력 Mate1, Mate2 XoverOption : 입력된개체 : [XoverProbability Range] XoverProbability : 교차연산자가실행될확률 Range : 할당될값의상한선과하한선을제한하는값 출력 Child1, Child2 : 새로만들어진개체 설명두개체의값주변의값을할당하여새로운개체를생성한다. Child1 = Mate1 + α ( Mate2 - Mate1 ) Child2 = Mate1 + α ( Mate2 - Mate1 ) α, α : scaling factor. XoverOption 에서정해진 Range 값에의해 [-Range 1+Range] 까지의범위에서 uniform 한 random variable 에서선택된다. Mate1 : 12 25 5 Mate2 : 123 4 34 Range = 0.5 ([-0.5 1.5] 중에서선택된다 ) Alpha1 : 0.5 1.1-0.1 Alpha2 : 0.1 0.8 0.5 Child1 : 67.5 1.9 2.1 Child2 : 23.1 8.2 19.5 Ref H. Mullenbein and D. Schierkamp-Voosen : Predictive Models for the Breeder Genetic Algorithm: Continuous parameter optimization. Evolutionary Computation GEA toolbox manual by Hartmut Pohheim 사용예제 CEMTool>> m1=[12 25 5];
CEMTool>> m2=[123 4 34]; CEMTool>> opt=[0.5 0.5]; CEMTool>> [c1 c2]=int_re(m1,m2,opt) c1 = c2 = 81.7853 33.7568 0.0796 137.5377 6.7074 34.8350 관련함수 dis_re, line_re 종류진화연산툴박스함수
line_re 목적 line recombination 을수행하는함수이다. 문법 [Child1,Child2]=line_re(Mate1, Mate2, XoverOption) 입력 Mate1, Mate2 XoverOption : 입력된개체 : [XoverProbability] XoverProbability : 교차연산자가실행될확률 출력 Child1, Child2 : 새로만들어지개체 설명두개체의값주변의값을할당하면서새로운개체를생성한다. Child1 = α (Mate1 + Mate2) Child2 = α (Mate1 + Mate2) α α 0 에서 1 사이의 random 한값 Mate1 : 12 25 5 Mate2 : 123 4 34 Alpha1 : 0.5 Alpha2 : 0.1 Child1 : 67.5 14.5 19.5 Child2 : 23.1 22.9 7.9 Ref H. Mullenbein and D. Schierkamp-Voosen : Predictive Models for the Breeder Genetic Algorithm: Continuous parameter optimization. Evolutionary Computation GEA toolbox manual by Hartmut Pohheim 사용예제 CEMTool>> m1=[12 25 5]; CEMTool>> m2=[123 4 34]; CEMTool>> opt=[0.5 0.5]; CEMTool>> [c1 c2]=line_re(m1,m2,opt) c1 =
c2 = 105.1882 7.3698 29.3465 114.4803 5.6118 31.7741 관련함수 dis_re, int_re 종류진화연산툴박스함수
s_mut 목적 simple mutation 을수행하는함수이다. 문법 [Child]=s_mutation(Par,MutOption) 입력 Par : 개체를나타낸다. MutOption : [MutationProbability MutationNumber...] MutOpt : 돌연변이연산자의옵션 MutationProbability : 돌연변이가일어날확률 MutationNumber : 돌연변이연산자의시행횟수 출력 Child : 돌연변이연산을수행한후의개체 설명 simple mutation 을나타내고돌연변이연산자를가장간단한형태로구현한함수이다. 돌연변이가일어날확률과돌연변이횟수를정의해서돌연변이를일으킨다. Ref J. Holland(1975) : Adaptation in Natural and Artificial Systems, University of Michigan Press, Ann Arbor D.E. Goldberg(1989) : Genetic Algorithms in Search, Optimization, and Machine Learning, Addison-Wesley Publishing Company, Inc. 사용예제 CEMTool>> Par=[0 1 0 0 1 1 0]; // 부모개체 CEMTool>> MutOpt=[0.2 4]; // 돌연변이확률 0.2 횟수 4번 CEMTool>> Child=s_mut(Par,MutOpt) Child = 0 0 0 0 0 1 0 돌연변이가발생된위치 돌연변이가발생된위치 관련함수 s_xover 종류진화연산툴박스함수
init_sga 목적 simple GA 에쓰일유전자코드를초기화하는함수이다. 문법 [pop,chromosomelength]=init_sga(populationsize,bounds,fitfunc,options) 입력 PopSize : 개체군의크기 ( 개체수 ) Bounds : [ min max ] 개체의범위 FitFunc : 적합도함수의이름 Options : [Precision Type] Precision : 나누는구간의크기 Type : 쓰이지않음 FitOpt : Fitness function의 Options 출력 pop : 새로만들어진개체들 ChromLen : 각유전자의코드길이 설명유전자알고리즘을사용하기위해개체군의크기, 범위, 적합도함수등을사용해서개체군을초기화한다. Ref J. Holland(1975) : Adaptation in Natural and Artificial Systems, University of Michigan Press, Ann Arbor D.E. Goldberg(1989) : Genetic Algorithms in Search, Optimization, and Machine Learning, Addison-Wesley Publishing Company, Inc. 사용예제개체군의크기는 3 개, 0 과 1 사이에 default precision 0.1, 나머지파라미터들은모두 default 값을사용해서초기화한경우아래와같은유전자코드를얻을수있다. 처음 4 칸은유전자코드이고마지막칸은기본적합도함수에서계산된적합도값을나타낸다. CEMTool>>init_sga(3,[0 1]) 관련함수 1.0000 1.0000 0.0000 0.0000-11.8956 1.0000 0.0000 0.0000 0.0000 3.5717 1.0000 1.0000 1.0000 1.0000-14.8033
종류진화연산툴박스함수
sga 목적 simple GA 를수행하는함수이다. 문법 BestIndi=sga(PopSize,MaxGen,Bounds,FitFunc,XoverOpt,MutOpt,Options) 입력 PopSize : 개체의개수 MaxGen : 최대진화회수 Bounds : [Min Max] 변수의범위 FitFunc : 적합도함수이름 XoverOpt : 교배연산자옵션 MutOpt : [MutationProbability MutationNumber] MutationProbability : 돌연변이가일어날확률 MutationNumber : 돌연변이연산자의시행회수돌연변이가일어날확률, 돌연변이연산자의시행회수 Options : [Precision Type] Precision : 정밀도 ex> Bounds가 [0 5] 인경우정확도가 0.1이면유전자의크기는 5/0.1=50 Type : 쓰이지않음 출력 BestIndi : 최적의개체 설명진화연산알고리즘을구현한예제로 simple crossver 와 simple mutation 그리고 simple selection 을사용해서구현되어있다. 최대개체수와최대진화회수를정해주면진화연산알고리즘을수행해서가장훌륭한개체를리턴한다. Ref J. Holland(1975) : Adaptation in Natural and Artificial Systems, University of Michigan Press, Ann Arbor D.E. Goldberg(1989) : Genetic Algorithms in Search, Optimization, and Machine Learning, Addison-Wesley Publishing Company, Inc. 사용예제 CEMTool>> MaxGen=10; CEMTool>> MaxPop=10; CEMTool>> Bounds=[0 4]; CEMTool>> XoverOpt=[0.5]; CEMTool>> MutOpt=[0.1 10]; CEMTool>> Options=[0.1 0];
CEMTool>>sga(MaxPop,MaxGen,Bounds,"fdemo1",XoverOpt,MutOpt,Options) BestIndi = 0.0000 1.0000 1.0000 0.0000 0.0000 1.0000 18.5380 관련함수 s_xover, s_mut, s_sel, sel_best 종류진화연산툴박스함수
sel_best 목적개체들중가장적합도가높은것을찾아내는함수이다. 문법 val=sel_best(pop,option) 입력 Pop : 전체개체들을나타낸다 [ 유전자코드, 적합도 ] ex> [0 1 1 0 24.5] Option : 쓰이지않는다. 출력 val : 찾아낸가장적합도가높은개체를나타낸다. 설명개체들중가장적합도가높은것을찾아서리턴한다. 사용예제 CEMTool>> Pop=[1 0 1 22; 1 1 1 10 ; 0 0 0 5 ; 0 1 1 15]; CEMTool>> sel_best(pop,[]) 관련함수 sga 종류진화연산툴박스함수 1 0 1 22
sel_indis 목적개체군에서적합도가높은상위의개체들을찾는다. 문법 [val n]=sel_indis(pop,option) 입력 Pop : 전체개체군 [ 유전자코드, 적합도 ] Option : 선택할개체의수 (%) 출력 val n : 찾아낸개체들 : 찾아내개체의수 설명개체들중가장적합도가높은것을찾아서리턴한다. 사용예제 CEMTool>> Pop=[1 0 1 22; 1 1 1 10 ; 0 0 0 5 ; 0 1 1 15]; CEMTool>> [indis n]=sel_indis(pop,50) indis = n = 0 1 1 15 1 0 1 22 2 관련함수 sel_best 종류진화연산툴박스함수
bin2float 목적 2 진수를실수로바꿔주는함수이다. 문법 fval=bin2float(binval, Bounds, BitLength) 입력 BinVal : 2진수값 Bounds : [ min max ] 실수값의범위 BitLength : BinVal의전체길이 출력 fval : 변환된실수값 설명 2 진수를주어진범위에따라실수값으로변환한다. 사용예제 CEMTool>> BinVal=[0 1 0 1]; CEMTool>> Bounds=[0 1]; CEMTool>> BitLength=[4]; CEMTool>> fval=bin2float(binval,bounds,bitlength) fval = 0.3125 관련함수 종류진화연산툴박스함수
cal_bit 목적일정한범위를원하는정확도로나눌경우, 이를 2 진수의형태로표현했을때필요한비트수를계산해준다. 문법 bits=cal_bit(bounds, Prec) 입력 Bounds : [ min max ] 값의범위 Prec : 정확도. 범위가 [0 5] 인경우정확도가 0.1이면유전자의크기는 5/0.1=50 출력 bits : 필요한비트수 설명범위가 [0 5] 이고정확도가 0.1 인경우, 50 칸으로나누어지게되고, 이를 2 진수로표현했을경우필요한 bit 수는 2^6=64 이므로 6 bit 이필요하게된다. 사용예제 CEMTool>> a=cal_bit([0 5],0.1) a = 6 관련함수 종류진화연산툴박스함수
hamdis 목적 Hamming Distance 를계산한다. 문법 v=hamdis(m1, m2) 입력 m1 : 2 진벡터 m2 : 2 진벡터 출력 v : Hamming distance 설명두이진벡터에서서로다른원소의개수를리턴한다. 사용예제 CEMTool>> a1=[ 0 0 1 1]; CEMTool>> a2=[ 1 1 1 1]; CEMTool>> hamdis(a1,a2) 관련함수 종류진화연산툴박스함수 2