Professional Documents
Culture Documents
15 Appendix
15 Appendix
typed ef struct
{
int rank,flag;
float var[nvar],crowd_dst,error,fitness[nfunc];
float disp[divsn+l ],vel[divsn+l ],accel[divsn+l ],jerk[divsn+l ],ping[divsn+l ];
float
cdisp[divsn+l],cvel[divsn+l],caccel[divsn+l],radcurv[divsn+l],load[divsn+l],comps
tress[divsn+l ],preang[divsn+l ],nload[divsn+l ];
} individual;
typedef struct
{
individual ind[popsize], *ind_ptr;
int maxrank, rankno[popsize], rankarfpopsize][popsize];
} population;
population oldpop,*old_pop_ptr,matepop,*mate_pop_ptr,newpop,*new_pop_ptr;
#include "random.h"
#include "initial.h"
#include "camforce.h"
#include "follchar.h"
#include "camchar.h"
163
Appendixc
#include "curarea.h"
#include "mutation.h'
#include "cross.h"
#include "function.h"
#include "bspline.h"
#include "rank.h"
#include "select.h"
#include "weight.h"
#include "elitist.h"
//#include "output.h"
void main()
{
FILE *fpl,*fp2,*fp3,*fp4,*fp5,*fp6,*fp7,*fp8,*fp9,*fpl0,*fpl I,*fpl2,*fpl3,
*fpl4;
int i,j,s,m,t,gen=50;
printf("enter the values of \nseed b/n 0 to 1 \npc\npm\nnc\nnm\nno
ofgenerations\n");
scanf("%f%f%f%f%f%d",&random_seed,&pcross,&pmut,&nc,&nm,&genera
tions);
printf("enter the values of mass in Kgs\n ks in N/mm\n kf in N/mm\n cs in N-
S/mm\n preload in N\n ');
scanf("%P/of%f%f%f',&mass,&ks,&kf,&cs,&preload);
warmuprandom(randomseed);
for(i=0;i<popsize;i++)
{
for(j=0;j <popsize;j++)
{
oldpop.rankar[i][j]=0;
}
oldpop.rankno[i]=0;
oldpop.ind[i].error=0;
oldpop.ind[i] .crowd_dst=0;
}
//clrscr();
fp 14=fopen( "paretofront"w");
fclose(fpl4);
fp 1 =fopen(" outp ut"," w");
initialize();
old_pop_ptr=&(oldpop);
oldfunc(old_pop_ptr);
old_pop_ptr=&(oldpop);
ranking(old_pop_ptr);
m=oldpop.maxrank;
for(i=0;i<m;i++)
crowding(i+l);
printf("\n \t\t initialgeneration ");
fprintf(fpl,"\n \t\t initialgeneration ");
for(i=0;i<popsize;i++)
{
164
jAppendhi
printf("\n");
fprintf(fpl,"\n");
if(oldpop.ind[i].error!=0.0)
{
fprintf(fpl ,"%d\t infeasible",i+1);
printf("%d\t infeasible", i+1);
}
else
{
fprintf(fp 1 ,"%d\t feasible",i+1);
printf("%d\t feasible",i+1);
}
for(j=0;j<nfimc;j++)
{
fprintf(fp 1, "\t%f',oldpop. ind[i]. fitness[j ]);
printf("\t%f',oldpop.ind[i].fitness[j]);
}
fprintf(fpl ,"\t %f',oldpop.ind[i].etTor);
printf("\t %f',oldpop.ind[i] .error);
}
fclose(fpl);
for(s=0;s<generations;s++)
{
fp 1 =fopen( "output"," a");
printf("\n");
old_pop_ptr=&(oldpop);
mate pop ptr=&(matepop);
selection(old_pop_ptr, mate_popjptr);
xover(new_pop_ptr,matejpop_ptr);
mutation(new_pop_ptr);
new_pop_ptr=&(newpop);
newfunc(new_pop_ptr);
old_pop_ptr=&(oldpop);
new_pop_ptr=&(newpop);
elitism();
for(i=0;i<popsize;i++)
{
for(j=0;j<nvar;j++)
oldpop.ind[i].var[j]=matepop.ind[i].var[j];
}
old_pop_ptr=&(oldpop);
oldfunc(old_pop__ptr);
old_pop_ptr=&(oldpop);
ranking(old_pop_ptr);
m=oldpop.maxrank;
for(i=0;i<m;i++)
crowding(i+l);
printf("\n");
fprintf(fpl,"\n");
printf("\n \t\t generation no=%d",s+l);
165
Appendix.
166
j-ippetidbi
printf("\n");
fprintf(fpl,"\n\n");
old_pop_ptr=&(oldpop);
pesudewei ght(o 1 d_pop_p tr);
printf("\t\t Weight vector");
fprintf(fpl,"\t\t weight vector");
m=oldpop.rankno[0];
for(i=0;i<m;i++)
{
t=oldpop.rankar[0] [i];
printf("\n%d",t+l);
fprintf(fpl,"\n%d",t+l);
for(j=0 ;j <nfunc;j++)
{
fprintf(fpl,"\t%f',pesuweight[i][j]);
printf( "\t%f\t" ,pesuweight[i] [j ]);
}
}
fclose(fpl);
fp2=fopen("disp","w");
for(i=0;i<popsize;i++)
{
fprintf(fp2,"\n\n %d ”,i+l);
for(j=0;j<=divsn;j++)
fprintf(fp2,"\t%f',oldpop.ind[i].disp[j]);
}
fclose(Q)2);
fp3=fopen("velocity","w");
for(i=0;i<popsize;i++)
{
fprintf(Q)3,"\n\n %d ",i+l);
for(j=0;j <=di vsn;j ++)
fprintf(fp3, "\t%f' ,oldpop. ind[i]. vel [j ]);
}
fclose(fp3);
fp4=fopen("accel","w");
for(i=0;i<popsize;i++)
{
fprintf(fp4,"\n\n %d ",i+l);
for(j=0;j<=divsn;j++)
fprintf(fp4,"\t%f',oldpop.ind[i].accel[j]);
}
fclose(tp4);
fp5=fopen("jerk","w");
for(i=0;i<popsize;i++)
{
167
fprintfTfp5,"\n\n %d ",i+l);
for(j=0 ;j <=di vsn;j++)
fprintf(fp5,"\t%f',oldpop.ind[i].jerk[j]);
}
fclose(fp5);
fp6=fopen("pmg'7'w");
for(i=0;i<popsize;i++)
{
fprintf(fp6,"\n\n %d ",i+l);
for(j=0 ;j <=divsn;j++)
fprintf(fp6,"\t%f',oldpop.ind[i].ping[j]);
}
fclose(fp6);
Q)8=fopen("camvel","w");
for(i=0;i<popsize;i++)
{
fprintf(fp8,"\n\n %d ",i+l);
for(j=0;j <=di vsn;j++)
fyrint f( fp 8," \t %f', oldpop. ind [ i ]. cvel [j ]);
}
fclose(fp8);
fp9=fopen("camaccel","w");
for(i=0;i<popsize;i++)
{
fprintf(fp9,"\n\n %d ",i+l);
for(j=0;j<=divsn;j++)
fprintf(fp9,"\t%f',oldpop.ind[i].caccel[j]);
}
fclose(fp9);
fplO=fopen("load","w");
for(i-0;i<popsize;i++)
{
fprintf(fplO,"\n\n %d ",i+l);
for(j=0 ;j <=d i vsn;j++)
fprintf(fplO,"\t%f',oldpop.ind[i].load[j]);
}
fclose(fplO);
168
Jippendvt
fpl l=fopen("radcurv","w");
for(i=0;i<popsize;i++)
{
fprintf(fpl l,"\n\n %d ",i+l);
for(j=0;j <=divsn;j++)
fprintf(fpl l,"\t%f',oldpop.ind[i].radcurv[j]);
}
fclose(fpll);
fpl2=fopen("compstress",''w");
for(i=0;i<popsize;i++)
{
fprintf(fpl2,"\n\n %d ",i+l);
for(j=0;j<=divsn;j++)
fprintf(fpl2,"\t%f',oldpop.ind[i].compstress[j]);
}
fclose(fpl2);
fpl 3=fopen("preang","w");
for(i=0; i<popsize;i++)
{
fprintf(fpl3,"\n\n %d ”,i+l);
for(j -0;j <=divsn;j++)
fprintf(fpl3,"\t%f',oldpop.ind[i].preang[j]);
}
fclose(fpl3);
getch();
169
Appendix
Random
#include <math.h>
/* variables are declared static so that they cannot conflict with names of */
170
Jippemfui
retum((randomnormaldeviate()*sigma) + mu);
}
//randomize(float randomseed)
/*Get seed number for random and start it up */
/*{
intjl;
if(numfiles : 0)
{
do
{
fprintf(outfp," Enter random number seed, 0.0 to 1.0 -> ");
fscanf(infp,"%f', &randomseed);
}
while((randomseed < 0.0) || (randomseed > 1.0));
}
else
{
fscanf(infp,"%f', &randomseed);
}
warmuprandom(randomseed);
} */
double randomnormaldeviate()
/* random normal deviate after ACM algorithm 267 / Box-Muller Method */
{
float randomperc();
double t, mdx 1;
if(mdcalcflag)
{
mdxl = sqrt(- 2.0*log((double) randomperc()));
t = 6.2831853072 * (double) randomperc();
mdx2 = sin(t);
mdcalcflag = 0;
retum(mdxl * cos(t));
}
else
{
171
flppendvt
mdcalcflag = 1;
retum(mdx2);
}
}
float randomperc()
/* Fetch a single random number between 0.0 and 1.0 - Subtractive Method */
/* See Knuth, D. (1969), v. 2 for details */
/* name changed from random() to avoid library conflicts on some machines*/
{
jrand++;
if(jrand >= 55)
{
jrand = 1;
advance_random();
}
retum((float) oldrandjjrand]);
172
Appendix
oldrand[54] = randomseed;
newrandom = 0.000000001;
prevrandom = randomseed;
for(jl = 1 ; jl <= 54; jl++)
{
ii = (21*jl)%54;
oldrand[ii] = new_random;
newrandom = prevrandom-newrandom;
if(new_random<0.0) new random = new random + 1.0;
prevrandom = oldrand[ii];
}
advance_random();
advance_random();
advance_random();
jrand = 0;
173
Appendix
Initial
void initialize();
void initialize!)
{
int i,j;
float x,a,b;
for(j=0;j<popsize;j++)
{
for(i=0;i<=n;i++)
{
if(i<5)
oldpop.indyj.varfij^O.O;
else
{
if(i<16)
{
a=oldpop.ind[j] .var[i-1 ];
do
{
b=mdreal(0.0,l .0);
}
while(a>b||(b-a)>0.25);
oldpop.ind[j].var[i]-b;
}
else
{
if(i<24)
oldpop.ind[j ]. var[i]= 1.0;
else
{
if(i<35)
{
a=oldpop. ind[j ]. var[i-1 ];
do
{
b=mdreal(0.0,1.0);
}
while(a<b||(a-b)>0.25);
oldpop.ind[j].var[i]=b;
}
else
oldpop.ind[j].var[i]=0.0;
}
}
}
}
174
Jippendvt
}
x=(1.0/(n+2-k));
for(i=0;i<=n+k;i++)
{
if(i<k)
u[i]=0.0;
else
{
if(i<=n)
u[i]=u[i-l]+x;
else
u[i]=l;
}
}
175
Jlppendvt
CAMFORCE
#include<math.h>
float pressureangle(float a, float b);
float radiouscurvature(float dis, float ve, float acce);
float compressivestress(float camcur, float nload);
float contactforce(float a, float b, float c);
float normalforce(float fy, float exload);
176
JippendLp
else
{
x=1.0/rr;
y=l ,0/fabs(camcur);
z=n_load*(x+y);
a=l ,0-pow(campois,2);
b=l .0-pow(follpois,2);
c=a/camyoung;
d=b/fo 11 young;
e=conlen*(c+d);
f=z/e;
g=sqrt(f)*0.57;
}
retum(g);
}
//dis:=pop3_ptr->ind_ptr->disp[j ];
//z=lift+clearance+rr;
//zteta=z-dis;
//p=2*mu*prd;
//q=mu*sin(fy)*((2*zteta)+b-p);
r=cos(fy);//-q;
s=exload/r;
retum(s);
}
177
Jlppetldb^
FOLLCHAR
#include<math.h>
float displacement(float v,int i,population *pop3_ptr);
float velocity(float v,int i,population *pop3_ptr);
float accelaration(float v,int i,population *pop3_ptr);
float jerkr(float v,int i,population *pop3_ptr);
float pong(float v,int i,population *pop3_ptr);
float blen(int a,float b,int c);
float blender(int a,int b,float c,int d);
178
JZppenduc
float ader,a,p;
pop3_ptr->ind_ptr=&(pop3_ptr->ind[i]);
ader=0.0;
for(j=0;j<-n;j++)
{
p=pop3_ptr->ind_ptr->var[j];
m=2;
ader=ader+p*blender(m,j ,v,k);
}
a=ader*(lift/pow(beta,2));
retum(a);
}
179
Jlppendhc
CAMCHAR
#include<math.h>
180
jlppending
CURAREA
181
Jippetidbi
CROSS
cl=par2-parl;
if(al<bl)
beta=l+(2*al)/cl;
else
beta=l+(2*bl)/cl;
expp=l+nc;
beta=l/beta;
alpha=2 -po w(beta, expp);
if(alpha<=0.0)
{
printf("error");
exit(-l);
}
182
Appendix
u 1 =randomperc();
if(ul<=1.0&&ul>=0.0)
ul=ul;
else
ul=0.4;
expp=l/(nc+l);
if(ul<=(l/alpha))
{
betaq=pow((alpha*ul ),expp);
}
else
{
if(alpha<0.0)
{
printf("error");
exit(-l);
}
betaq=pow(( 1 /(2-(alpha*ul ))),expp);
}
}
else
{
betaq=1.0;
}
child 1 =0.5*((par 1 +par2)-betaq*fabs(par2-parl));
child2=0.5 * ((par 1 +par2)+betaq* fabs(par2 -pari));
if(childl<l[i])
childl=l[j];
if(childl>h[j])
child l=h[j];
if(child2<l[j])
child2=l[j];
if(child2>h[j])
child2=h[j];
}
else
{
child l=parl;
child2-par2;
}
newpop.ind[i].var[j]=childl;
newpop.ind[i+1 ]. var[j]=child2;
}
mate_pop_ptr=&(matepop);
new_pop_ptr=&(newpop);
mate_pop_ptr->ind_ptr=&(mate_pop_ptr->ind[i]);
new_pop_ptr->ind_ptr=&(new_pop_ptr->ind[i]);
183
Appendix.
184
Jlppendvc
FUNCTION
cdisp=camdisplacement(disp,vel,accel);
p0p_ptr->ind_ptr->cdisp[j]=cdisp;
cvel=camvelocity( vel,accel,jerk);
pop_ptr->ind_ptr->cvel [j]=cvel;
caccel=camaccelaration( accel,jerk,ping);
pop_ptr->ind_ptr->caccel[j]=caccel;
preang=pressureangle(cdisp,cvel);
pop_ptr->ind_ptr->preang[j]=preang*( 180.0/pi);
radcurv=radiouscurvature(cdisp,cvel,caccel);
pop_ptr->ind_ptr->radcurv[j]=radcurv;
185
load=contactforce(disp,vel,accel);
p°p_ptr->indjptr->load[j]=load;
nload=normalforce(preang,load);
p°p_ptr->ind_ptr->nload[j]=nload;
compstress=compressivestress(radcurv,nload);
p°p_ptr->ind_ptr->comp stress [j ]=compstres s;
a=(load-1)/fabs(load);
if(a<0.0)
cstr[0][j]=(1.0/a);
else
cstr[0][j]=a;
b=compstress;
if(b=0.0)
cstr[l][j]=0.0;
else
cstr[l][j]=(1480.0/b)-l;
x=cdisp;
y=preang;
z=tan(y);
c=kl/(k2-x);
if(z==0.0)
cstr[2][j]=0.0;
else
cstr[2][j]=fabs(c/z)-l;
if(radcurv>0.0)
cstr[3 ] [j]=(fabs(radcurv)/( 1.5 *rr))-1;
else
{
if(radcurv==0.0)
cstr[3][j]=-1.0;
else
cstr [3 ] [j ]=(5.0-( 1.0/fabs(radcurv)))/5 0.0;
}
}
fit_ptr=&(pop_ptr->indjptr->fitness[0]);
err_ptr=&(pop_ptr->ind_ptr->error);
a=area(yl,(divsn+l));
ft0]=(8-a);
b=totalaccelaration(a 1 ,divsn+1);
f[l]=b;
for(s=0;s<nfune;s++)
{
*fit_ptr++=f[s];
}
error 1=0.0;
186
Jippeiufai
for(i=0;i<popsize;i++)
{
pop_ptr->ind_ptr=&(pop_ptr->ind [i ]);
new_pop_ptr=&(newpop);
for(j=0,v=0.0;j<=divsn;j++,v=v+( 1.0/divsn))
187
JLppendbc
{
disp=displacement(v,i,new_pop_ptr);
yl[j]=disp;
p°p_ptr->ind_ptr->di sp [j ]=di sp;
vel=velocity(v,i,new_pop_ptr);
popj>tr->indj>tr->vel (j ] ==vel;
accel=accelaration(v,i,new_pop_ptr);
al [j]=accel*pow((l 80.0/pi), 2);
P°P__ptr->ind_ptr->accel [j ]=accel;
j erk=j erkr(v, i ,new_pop_ptr);
pop_ptr->ind_ptr->j erk[j ]=jerk;
ping=pong(v,i,new_pop_ptr);
P°P_ptr_>ind_ptr->ping[j ]=ping;
cdisp-camdisplacement(disp,vel,accel);
p°p_ptr->ind_ptr->cdisp[j]=cdisp;
cvel=camvelocity(vel,acceljerk);
P°P_Ptr->ind_ptr->cvel[j ]=cvel;
caccel=camaccelaration(accel,jerk,ping);
pop_ptr->ind_ptr->caccel [j ]=caccel;
preang=pressureangle(cdisp,cvel);
pop_ptr->ind_ptr->preang[j ] =preang;
radcurv=radiouscurvature(cdisp,cvel,caccel);
p°p_ptr->ind_ptr->radcurv[j]=radcurv;
load=contactforce(disp,vel,accel);
PoP_ptr->ind_ptr-> lo ad [j ]=lo ad;
nload=normalforce(preang,load);
pop_ptr->ind_ptr->nlo ad[j]=nload;
compstress=compressivestress(radcurv,nload);
pop_ptr->ind_ptr->compstress[j]=compstress;
a=(load-1 )/fabs(load);
if(a<0.0)
cstr[0][j]=(1.0/a);
else
cstr[0][j]=a;
b=compstress;
if(b==0.0)
cstr[l][j]=0.0;
else
estr[ 1 ] [j]=( 1480.0/b)-1;
x=cdisp;
y=preang;
z=tan(y);
c=kl/(k2-x);
188
Jlppendvt
if(z=0.0)
cstr[2][j]=0.0;
else
cstr[2][j]=fabs(c/z)-1;
if(radcurv>0.0)
cstr[3][j]=(fabs(radcurv)/(l .5*rr))-l;
else
{
if(radcurv==0.0)
cstr[3][j]=-1.0;
else
cstr[3 ] [j ]=(5.0-( 1.0/fabs(radcurv)))/50.0;
}
}
fit_ptr=&(pop_ptr->ind_ptr->fitness[0]);
err_ptr=&(pop_ptr->ind_ptr->error);
a=area(yl ,(divsn+l));
f[0]=(8-a);
b=totalaccelaration(al ,divsn);
fll]=b;
for(s=0;s<nfimc;s++)
{
*fit_ptr++=f[s];
}
error 1=0.0;
for(s=0;s<nconstr;s++)
{
for(j=0;j<=divsn;j++)
{
cc=cstr[s][j];
if(cc<0.0)
errorl=errorl-cc;
}
}
/*
for(j=0;j<=nvar;j++)
{
if(j<=(nvar/2))
{
a=pop_ptr->ind_ptr->var[j+1 ];
b=pop_ptr->indjptr->var [j];
c=a-b;
if(c<0.0)
errorl=errorl-c;
}
else
189
JLppendvt
a=pop_ptr->ind_ptr->var[j-1 ];
b=pop_ptr->ind_ptr->var[j];
c-a-b;
if(c<0.0)
errorl =errorl-c;
}
}
*/
*err_ptr=errorl;
}
return;
}
190
Appendix
RANK
float fparal[popsize][2];
191
Appendix
fparal[i][0]=a;
fparal[i][l]=oldpop.ind[a].fitness[j];
}
sort(ml);
max=fparal [m 1 -1 ] [ 1 ];
min=fparal[0][l];
diff=max-min;
for(i=0;i<ml;i++)
{
if(i==0| |i==(m 1 -1))
!
length[i][0]=fparal[i][0];
length[i] [ 1 ]=100*max;
}
else
{
lengthfi] [0]=fparal [i ] [0];
if(diff!=0)
length[i] [ 1 ]=fabs(fparal [i+1 ] [ 1 ] -fparal[i-1 ] [ 1 ])/diff;
else
length[i][l]=1.0;
}
}
for(i=0;i<ml;i++)
{
a=length[i][0];
oldpop.ind[a] .crowd_dst+=length[i] [ 1 ];
}
}
return;
}
192
jlppendvt
if(m==nfunc)
{
if(nl==nfunc)
value=3;
else
value= 1;
}
else
{
m=0;
nl=0;
while(m<nfunc&&fit 1 [m]>=fit2[m])
{
if(fitl [m]==fit2[m])
nl++;
m++;
}
if(m==nfunc)
{
if(nl !=nfunc)
value=2;
else
value=3;
}
else
value=3;
}
retum( value);
}
193
Jippendbi
break;
mk=mk+l;
for(i=0;i<popsize;i++)
{
P°P_ptr->ind__ptr=&(pop_ptr->ind[i]);
if(pop_ptr->ind_ptr->rank==0)
{
ptrl=&(pop_ptr->ind_ptr->fitness[Oj);
err_ptr 1 =&(pop_ptr->ind_ptr->error);
for(j=0;j<popsize;j++)
{
if(i!=j)
{
i f(pop_ptr->ind [j ] .rank==01 |pop_ptr->ind [j ]. rank==mk)
{
p°p_ptr->ind_ptr=&(pop_ptr->ind[j]);
ptr2:=&(pop_ptr->ind_ptr->fitness[0]);
err_ptr2=&(pop_ptr->ind_ptr->error);
if(*err_ptrl <=0.0&&*err_ptr2>0.0)
continue;
else
{
if(*err_ptrl >0.0&&*errjptr2<=0.0)
break;
else
{
if(*err_ptrl > *err_ptr2)
break;
else
{
if(*errjptrl < *err_ptr2)
continue;
else
{
val=indcmp3(ptrl ,ptr2);
if(val-=2)
break;
if(val==l)
continue;
if(val==3)
continue;
}
}
}
}
}
}
}
if(j==popsize)
{
194
J-lppetidhi
p°p_ptr->ind[i] ,rank=mk;
pop_ptr->rankar[mk-1 ] [q]=i;
q++;
}
}
}
pop_ptr->rankno[mk-1 ]=q;
}
p°p_ptr->maxrank=nik;
return;
}
195
Appendix.
SELECT
else
{
if(*fit_ptrl <*fit_ptr2)
{
for(i=0;i<nvar;i++)
* select_ptr++=*s 1 _ptr++;
}
else
{
if(*fl_ptr<*f2_ptr)
{
for(i=0;i<nvar;i++)
* select__ptr++=* s2_ptr++;
}
else
{
for(i=0;i<nvar;i++)
*select__ptr++r=*s 1 _ptr++;
}
}
196
Jippendbc
}
}
return;
}
197
J4pperufix_
WEIGHT
/* This is the program to calculate weight vector */
float pesuweight[popsize][nfunc];
float function[nfunc][2];
void weightsort(int s, population *pop_ptr);
void pesudeweight(population *pop_ptr);
float a,b,c,d,e,f,din;
for(i=0;i<nfunc;i++)
{
weightsort(i, pop_ptr);
}
m=pop_ptr->rankno [ 0];
for(i=0;i<nfunc;i++)
{
for(j=0;j<m;j++)
{
t=pop_ptr->rankar[0] [j];
if(pop_ptr->ind[t].fitness[i]!=function[i][0])
{
a=function[i] [0]-popptr->ind[t] ,fitness[i];
b=function[i] [0]-function[i] [ 1 ];
c=a/b;
din=0;
for(r=0;r<nfune;r++)
{
d=funetion[r][0]-pop_ptr->ind[t].fitness[r];
e=function[r] [0]-function[r] [ 1 ];
if(d!=0)
f=d/e;
else
f=0.0;
din=din+f;
}
pesuweight[j][i]=c/din;
}
else
pesuweight[j][i]=0.0;
}
}
}
198
jippendvt
199
jZppeiu&t
ELITIST
typedef struct
{
int gmaxrank,grankar[gpopsize] [gpopsize],grankno[gpopsize];
individual indg[gpopsize], *indg ptr;
} globalpopulation;
globalpopulation globalpop, *global_pop_ptr;
float gparal[gpopsize][2];
void granking(globalpopulation *global_pop_ptr);
void gcrowdsort (int mk, int t);
void gcrowd(int rank);
void gsort(int ml);
void elitism();
void crowdsort (int mk, int t);
200
Appendix.
201
Jippendbi
break;
else
{
if(*err_ptrl < *err_ptr2)
continue;
else
{
val=indcmp3(ptrl ,ptr2);
if(val=2)
break;
if(val== 1)
continue;
if(val==3)
continue;
}
}
}
}
}
}
}
if(j==gpopsiz:e)
{
global_pop_ptr->indg[i] ,rank=mk;
global_pop_ptr->grankar[mk-1 ] [q]=i;
}
}
global_pop_ptr->grankno[mk-1 ]=q;
}
global_pop_ptr->gmaxrank=mk;
return;
}
202
Jippendb^
gparal[i][0]=a;
gparal[i][l]=globalpop.indg[a].fitness[j];
}
gsort(ml);
max=gparal [m 1 -1 ] [ 1 ];
min=gparal[0][l];
diff=max-min;
for(i=0;i<ml ;i++)
{
if(i~011 i==(m 1 -1))
{
glength[i] [0]—gparal[i] [0];
glength[i] [ 1 ]=100*max;
}
else
{
glength[i][0]=gparal[i][0];
glength[i][ 1 ]=fabs(gparal[i+1 ][ 1 ]-gparal[i-1 ] [ 1 ])/diff;
}
}
for(i=0;i<ml ;i++)
{
a=glength[i][0];
globalpop.indg[a] .crowd_dst+=glength[i] [ 1 ];
}
}
return;
}
void gsort(int m 1)
{
float temp, temp 1;
int i,s;
for(s=0;s<ml-l ;s++)
{
for(i=s+l ;i<ml ;i++)
{
if(gparal[s] [ 1 ]>gparal[i] [ 1 ])
{
temp=gp ar al [ s] [ 1 ];
templ=gparal[s][0];
gparal[s] [ 1 ]=gparal[i] [ 1 ];
gparaljs] [0]=gparal[i] [0];
gparal[i][ 1 ]=temp;
gparal[i][0]=templ;
}
}
}
return;
}
203
void elitism()
{
int i,j,r,m,t,a,extra,sel,sum,diff;
diff=gpopsize-popsize;
for(i=0;i<gpopsize;i++)
{
for(j=0;j<gpopsize;j++)
globalpop.grankar[i][j]=0;
globalpop.grankno[i]=0;
globalpop.indg[i] .error=0;
globalpop.indg[;] .crowd_dst=0;
globalpop.indg[i] .rank=0;
globalpop.indg[i].flag=0;
}
for(i=0;i<popsize;i++)
{
for(r=0;r<nvar;r++)
globalpop.indg[i].var[r=newpop.ind[i].var[r];
for(j=0 ;j <nfunc ;j++)
globalpop.indg[i].fitness[j]=newpop.ind[i].fitness[j];
globalpop.indg[i].error=newpop.ind[i].error;
}
for(i=0;i<popsize;i++)
oldpop.ind[i].flag=0;
m=oldpop.maxrank;
sum=0;
for(j=0;j<m;j++)
{
t=oldpop.rankno[j ];
sum=sum+t;
if(sum<=diff)
{
for(i=0;i<t;i++)
{
a=oldpop.rankar[j] [i];
oldpop.ind[a].flag=l;
}
}
else
{
extra=sum-diff;
sel=t-extra;
crowdsort(j,t);
for(i=0;i<sel;i++)
{
a=oldpop.rankar[j][i];
oldpop.ind[a].flag=l;
}
204
Appendix,
break;
}
}
for(r=0,i=popsize;r<popsize;r++)
{
if(oldpop.ind[r].flag==l)
{
globalpop.indg[i].error=oldpop.ind[r].error;
for(j=0 ;j <nvar;j++)
globalpop. indg[i]. var[j ]=oldpop. ind [r]. var[j ];
for(j=0 ;j <nfunc ;j++)
globalpop. indg[i].fitness[j]=oldpop.ind[r].fitness[j];
i=i+1;
}
}
globalpop.gmaxrank=0;
global_pop_ptr=&(globalpop);
granking(global_pop_ptr);
m=globalpop. gmaxrank;
for(i=0;i<m;i++)
{
gcrowd(i+l);
}
sum=0;
for(j=0;j<m;j++)
{
t=globalpop.grankno[j];
sum=sum+t;
if(sum<=popsize)
{
for(i=:0;i<t;i++)
{
a=globalpop.grankar[j] [i];
globalpop.indg[a].flag=l;
}
}
else
{
extra=sum-popsize;
sel=t-extra;
gcrowdsort(j,t);
for(i=0;i<sel;i++)
{
a=globalpop.grankar[j] [i];
globalpop.indg[ a].flag=l;
}
break;
}
}
205
for(r=0,i=0;r<gpopsize;r++)
{
if(globalpop.indg[r].flag==l)
{
for(j=0;j<nvar;j++)
matepop.ind[i].var[j]=globalpop.indg[r].var[j];
i=i+1;
}
}
return;
}
206