⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucom_rw.cpp

📁 遗传算法解决机组组合问题的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		      	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 + -