📄 ucom_rw.cpp
字号:
cost4 = cost4 + 3000;
}//end if
}//end if
if(demand != 1)
{
if(solution[demand - 1].chr[4] == 1 && tempop[i].chr[4] == 0)//assign shutdown cost
{
cost4 = cost4 + 1500;
}
}
tempop[i].fitness = tempop[i].fitness + cost1 + cost2 + cost3 + cost4;
}//end for
}//end if
if(x == 1)
{
maxfit = initpop[1].fitness;
minfit = initpop[1].fitness;
sumfit = 0.0;
avgfit = 0.0;
fittest = 0;
for(z=1;z<=popsize;z++)
{
if(initpop[z].fitness == maxfit)
maxfit = initpop[z].fitness;
if(initpop[z].fitness == minfit)
{
minfit = initpop[z].fitness;
fittest = z;
}
if(initpop[z].fitness > maxfit)
maxfit = initpop[z].fitness;
if(initpop[z].fitness < minfit)
{
minfit = initpop[z].fitness;
fittest = z;
}
sumfit = sumfit + initpop[z].fitness;
}
avgfit = sumfit / popsize;
}
if(x == 2)
{
maxfit = tempop[1].fitness;
minfit = tempop[1].fitness;
sumfit = 0.0;
avgfit = 0.0;
fittest = 0;
for(i=1;i<=popsize;i++)
{
if(tempop[i].fitness == maxfit)
maxfit = tempop[i].fitness;
if(tempop[i].fitness == minfit)
{
minfit = tempop[i].fitness;
fittest = i;
}
if(tempop[i].fitness > maxfit)
maxfit = tempop[i].fitness;
if(tempop[i].fitness < minfit)
{
minfit = tempop[i].fitness;
fittest = i;
}
sumfit = sumfit + tempop[i].fitness;
}
avgfit = sumfit / popsize;
}
}
void xover(int x, int y,int z)
{
int temp = parent[1];
int temp2 = parent[2];
ag:
ranum = random(10);//crossover point
if(ranum == 0)
goto ag;
for(i=x;i<=ranum + x - 1;i++)
{
if(z == 1)
{
offspring1[0].chr[i] = initpop[temp].chr[i];
offspring2[0].chr[i] = initpop[temp2].chr[i];
}
if(z == 2)
{
offspring1[0].chr[i] = tempop[temp].chr[i];
offspring2[0].chr[i] = tempop[temp2].chr[i];
}
}
for(j=ranum + x ;j<y;j++)
{
if(z == 1)
{
offspring1[0].chr[j] = initpop[temp2].chr[j];
offspring2[0].chr[j] = initpop[temp].chr[j];
}
if(z == 2)
{
offspring1[0].chr[j] = tempop[temp2].chr[j];
offspring2[0].chr[j] = tempop[temp].chr[j];
}
}
/*
cout<<"\nranum: "<<ranum<<endl;
cout<<"ANAK1\n";
for(i=1;i<=lchrom;i++)
{
if(i==5||i==15||i==25||i==35)
cout<<" ";
cout<<offspring1[0].chr[i];
}
cout<<endl;
cout<<"ANAK2\n";
for(i=1;i<=lchrom;i++)
{ if(i==5||i==15||i==25||i==35)
cout<<" ";
cout<<offspring2[0].chr[i];
}
cout<<endl;
*/
}
void mutate(int x, int y,int z)
{
int temp = parent[1];
int temp2 = parent[2];
ag2:
ranum = random(10) + 1;//mutation point
if(ranum == 0)
goto ag2;
for(i=x;i<y;i++)
{
if(z == 1)
{
offspring1[0].chr[i] = initpop[temp].chr[i];
offspring2[0].chr[i] = initpop[temp2].chr[i];
}
if(z == 2)
{
offspring1[0].chr[i] = tempop[temp].chr[i];
offspring2[0].chr[i] = tempop[temp2].chr[i];
}
}
if(offspring1[0].chr[ranum + x - 1]== 0)
offspring1[0].chr[ranum + x - 1] = 1;
else
offspring1[0].chr[ranum + x - 1] = 0;
if(offspring2[0].chr[ranum + x - 1]== 0)
offspring2[0].chr[ranum + x - 1] = 1;
else
offspring2[0].chr[ranum + x - 1] = 0;
}
void replicate(int x,int y,int z)
{
for(i=x;i<y;i++)
{
if(z == 1)
{
offspring1[0].chr[i] = initpop[parent[1]].chr[i];
offspring2[0].chr[i] = initpop[parent[2]].chr[i];
}
if(z == 2)
{
offspring1[0].chr[i] = tempop[parent[1]].chr[i];
offspring2[0].chr[i] = tempop[parent[2]].chr[i];
}
}
}
void correct_offspring()
{
//check for 1st bit
for(j=5;j<15;j++)
{
if(offspring1[0].chr[j] == 1)
{
offspring1[0].chr[1] = 1;
break;
}
else
offspring1[0].chr[1] = 0;
}
for(j=5;j<15;j++)
{
if(offspring2[0].chr[j] == 1)
{
offspring2[0].chr[1] = 1;
break;
}
else
offspring2[0].chr[1] = 0;
}
//check for 2nd bit
for(j=15;j<25;j++)
{
if(offspring1[0].chr[j] == 1)
{
offspring1[0].chr[2] = 1;
break;
}
else
offspring1[0].chr[2] = 0;
}
for(j=15;j<25;j++)
{
if(offspring2[0].chr[j] == 1)
{
offspring2[0].chr[2] = 1;
break;
}
else
offspring2[0].chr[2] = 0;
}
//check for 3rd bit
for(j=25;j<35;j++)
{
if(offspring1[0].chr[j] == 1)
{
offspring1[0].chr[3] = 1;
break;
}
else
offspring1[0].chr[3] = 0;
}
for(j=25;j<35;j++)
{
if(offspring2[0].chr[j] == 1)
{
offspring2[0].chr[3] = 1;
break;
}
else
offspring2[0].chr[3] = 0;
}
//check for 4th bit
for(j=35;j<45;j++)
{
if(offspring1[0].chr[j] == 1)
{
offspring1[0].chr[4] = 1;
break;
}
else
offspring1[0].chr[4] = 0;
}
for(j=35;j<45;j++)
{
if(offspring2[0].chr[j] == 1)
{
offspring2[0].chr[4] = 1;
break;
}
else
offspring2[0].chr[4] = 0;
}
}
void setpop(int x)
{
if(x == 1)
{
for(i=0;i<=popsize;i++)
{ for(j=0;j<=lchrom;j++)
tempop[i].chr[j] = 0;
}
}
if(x == 2)
{
for(i=0;i<=popsize;i++)
{ for(j=0;j<=lchrom;j++)
initpop[i].chr[j] = 0;
}
}
}
int migrate(int p,int x)//p - migrate to temp or init x - demand load
{
if((offspring1[0].chr[1] == 0) && (offspring1[0].chr[2] == 0) && (offspring1[0].chr[3] == 0) && (offspring1[0].chr[4] == 0))
return -1;
checksum = 0.0;
for(i=1;i<=4;i++)
{
p1 = 0.0;p2 = 0.0;p3 = 0.0;p4 = 0.0;
if(i == 1)
{
v1 = 0.0;
v2 = 0.0;
k = 0;
for(nomb=5;nomb<15;nomb++)
{
k++;
v1 = v1 + (offspring1[0].chr[nomb] * (pow(2, (10 - k))));
v2 = v2 + pow(2,(10 - k));
}
p1 = (((v1/v2) * 525) + 100);
if(p1 == 100)
p1 = 0.0;
//cout<<"\nJOMLAH:"<<p1;
}
if(i == 2)
{
v1 = 0.0;
v2 = 0.0;
k = 0;
for(nomb=15;nomb<25;nomb++)
{
k++;
v1 = v1 + (offspring1[0].chr[nomb] * (pow(2, (10 - k))));
v2 = v2 + pow(2,(10 - k));
}
p2 = (((v1/v2) * 525) + 100);
if(p2 == 100)
p2 = 0.0;
//cout<<"\nJOMLAH2:"<<p2;
}
if(i == 3)
{
v1 = 0.0;
v2 = 0.0;
k = 0;
for(nomb=25;nomb<35;nomb++)
{
k++;
v1 = v1 + (offspring1[0].chr[nomb] * (pow(2, (10 - k))));
v2 = v2 + pow(2,(10 - k));
}
p3 = (((v1/v2) * 525) + 75);
if(p3 == 75)
p3 = 0.0;
//cout<<"\nJOMLAH3:"<<p3;
}
if(i == 4)
{
v1 = 0.0;
v2 = 0.0;
k = 0;
for(nomb=35;nomb<45;nomb++)
{
k++;
v1 = v1 + (offspring1[0].chr[nomb] * (pow(2, (10 - k))));
v2 = v2 + pow(2,(10 - k));
}
p4 = (((v1/v2) * 425) + 75);
if(p4 == 75)
p4 = 0.0;
//cout<<"\nJOMLAH4:"<<p4;
}
checksum = checksum + p1 + p2 + p3 + p4;
}
if(x == 1)
{
if(checksum >= 1100 && checksum <= 1200)
{
for(j=1;j<=popsize;j++)
{
if(p == 1) //migrate to tempop
{
if(tempop[j].chr[0] == 0)
{
for(z=1;z<=lchrom;z++)
{
tempop[j].chr[z] = offspring1[0].chr[z];
tempop[j].chr[0] = 1;
}
//cout<<"MIGRATE1";
break;
}
}
if(p == 2) //migrate to initpop
{
if(initpop[j].chr[0] == 0)
{
for(z=1;z<=lchrom;z++)
{
initpop[j].chr[z] = offspring1[0].chr[z];
initpop[j].chr[0] = 1;
}
//cout<<"MIGRATE1";
break;
}
}
}//end for
}
}//endif x == 1
if(x == 2)
{
if(checksum >= 1400 && checksum <= 1500)
{
for(j=1;j<=popsize;j++)
{
if(p == 1) //migrate to tempop
{
if(tempop[j].chr[0] == 0)
{
for(z=1;z<=lchrom;z++)
{
tempop[j].chr[z] = offspring1[0].chr[z];
tempop[j].chr[0] = 1;
}
//cout<<"MIGRATE1";
break;
}
}
if(p == 2) //migrate to initpop
{
if(initpop[j].chr[0] == 0)
{
for(z=1;z<=lchrom;z++)
{
initpop[j].chr[z] = offspring1[0].chr[z];
initpop[j].chr[0] = 1;
}
//cout<<"MIGRATE1";
break;
}
}
}//end for
}
}//endif x == 2
if(x == 3)
{
if(checksum >= 1600 && checksum <= 1700)
{
for(j=1;j<=popsize;j++)
{
if(p == 1) //migrate to tempop
{
if(tempop[j].chr[0] == 0)
{
for(z=1;z<=lchrom;z++)
{
tempop[j].chr[z] = offspring1[0].chr[z];
tempop[j].chr[0] = 1;
}
//cout<<"MIGRATE1";
break;
}
}
if(p == 2) //migrate to initpop
{
if(initpop[j].chr[0] == 0)
{
for(z=1;z<=lchrom;z++)
{
initpop[j].chr[z] = offspring1[0].chr[z];
initpop[j].chr[0] = 1;
}
//cout<<"MIGRATE1";
break;
}
}
}//end for
}
}//endif x == 3
if(x == 4)
{
if(checksum >= 1800 && checksum <= 1900)
{
for(j=1;j<=popsize;j++)
{
if(p == 1) //migrate to tempop
{
if(tempop[j].chr[0] == 0)
{
for(z=1;z<=lchrom;z++)
{
tempop[j].chr[z] = offspring1[0].chr[z];
tempop[j].chr[0] = 1;
}
//cout<<"MIGRATE1";
break;
}
}
if(p == 2) //migrate to initpop
{
if(initpop[j].chr[0] == 0)
{
for(z=1;z<=lchrom;z++)
{
initpop[j].chr[z] = offspring1[0].chr[z];
initpop[j].chr[0] = 1;
}
//cout<<"MIGRATE1";
break;
}
}
}//end for
}
}//endif x == 4
if(x == 5)
{
if(checksum >= 1400 && checksum <= 1500)
{
for(j=1;j<=popsize;j++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -