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

📄 ucom_rw.cpp

📁 遗传算法解决机组组合问题的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
							val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
							val2[i]=val2[i] + pow(2,(10 - k));

						}
						//power3[i] = (((val1[i]/val2[i]) * 525) + 75);
						//if(power3[i] >= 75 && power3[i] < 76)
						//	 power3[i] = 0.0;
                  ada++;
                  initpop[i].pow3 = (((val1[i]/val2[i]) * 525) + 75);
                  if(initpop[i].pow3 == 75)
                  	initpop[i].pow3 = 0.0;
					}
				}

				if(j==4)
				{
					val1[i] = 0.0;
					val2[i] = 0.0;
					k = 0;

					if(initpop[i].chr[j] == 0)
					{
						for(nomb=35;nomb<45;nomb++)
							initpop[i].chr[nomb] = 0;
						zero++;
						//power4[i] = 0.0;
                  initpop[i].pow4 = 0.0;
					}
					else
					{
						for(nomb=35;nomb<45;nomb++)
						{
							initpop[i].chr[nomb] = random(2);
							k++;
							val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
							val2[i]=val2[i] + pow(2,(10 - k));

						}
						//power4[i] = (((val1[i]/val2[i]) * 425) + 75);
						//if(power4[i] >= 75 && power4[i] < 76)
						//	 power4[i] = 0.0;
                  ada++;
                  initpop[i].pow4 = (((val1[i]/val2[i]) * 425) + 75);
                  if(initpop[i].pow4 == 100)
                  	initpop[i].pow4 = 0.0;

					}
				}

		}
		if(zero == 4)//make sure there's at least 1 unit on
      	goto jom;

		//if(ada == 4)
		//	goto jom;

		initpop[i].sumpowgen = initpop[i].sumpowgen + initpop[i].pow1+ initpop[i].pow2+ initpop[i].pow3+ initpop[i].pow4;

      if(x == 1)
      {
			if((initpop[i].sumpowgen > 1200) || (initpop[i].sumpowgen < 1100))
				goto jom;
      }
      if(x == 2)
      {
			if((initpop[i].sumpowgen > 1500) || (initpop[i].sumpowgen < 1400))
				goto jom;
      }
      if(x == 3)
      {
			if((initpop[i].sumpowgen > 1700) || (initpop[i].sumpowgen < 1600))
				goto jom;
      }
      if(x == 4)
      {
			if((initpop[i].sumpowgen > 1900) || (initpop[i].sumpowgen < 1800))
				goto jom;
      }
      if(x == 5)
      {
			if((initpop[i].sumpowgen > 1500) || (initpop[i].sumpowgen < 1400))
				goto jom;
      }
      if(x == 6)
      {
			if((initpop[i].sumpowgen > 1200) || (initpop[i].sumpowgen < 1100))
				goto jom;
      }



	}

}

void calc_power(int x)
{

	if(x == 1)
   {
			for(i=1;i<=popsize;i++)
		   	initpop[i].sumpowgen = 0.0;

			for(i=1;i<=popsize;i++)
			{
				zero  = 0;
		      initpop[i].sumpowgen = 0.0;
				for(j=1;j<=4;j++)
				{
						if(j==1)
						{
							//power1[i] = 0.0;
							initpop[i].pow1 = 0.0;
							val1[i] = 0.0;
							val2[i] = 0.0;
							k = 0;

							if(initpop[i].chr[j] == 0)
								//power1[i] = 0.0;
                        initpop[i].pow1 = 0.0;
							else
							{
								for(nomb=5;nomb<15;nomb++)
								{
									k++;
									val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
									val2[i]=val2[i] + pow(2,(10 - k));
								}
								//power1[i] = (((val1[i]/val2[i]) * 525) + 100);
								//if(power1[i] >= 100 && power1[i] < 101)
								//	 power1[i] = 0.0;
                        initpop[i].pow1 = (((val1[i]/val2[i]) * 525) + 100);
                        if(initpop[i].pow1 == 100)
                        	initpop[i].pow1 = 0.0;
							}
						}

						if(j==2)
						{
							//power2[i] = 0.0;
                     initpop[i].pow2 = 0.0;
							val1[i] = 0.0;
							val2[i] = 0.0;
							k = 0;

							if(initpop[i].chr[j] == 0)
	                     initpop[i].pow2 = 0.0;
							else
							{
								for(nomb=15;nomb<25;nomb++)
								{
									k++;
									val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
									val2[i]=val2[i] + pow(2,(10 - k));
								}

								//power2[i] = (((val1[i]/val2[i]) * 525) + 100);
								//if(power2[i] >= 100 && power2[i] < 101)
								//	 power2[i] = 0.0;
                        initpop[i].pow2 = (((val1[i]/val2[i]) * 525) + 100);
                        if(initpop[i].pow2 == 100)
                        	initpop[i].pow2 = 0.0;
							}
						}

						if(j==3)
						{
      					//power3[i] = 0.0;
                     initpop[i].pow3 = 0.0;
							val1[i] = 0.0;
							val2[i] = 0.0;
							k = 0;

							if(initpop[i].chr[j] == 0)
								initpop[i].pow3 = 0.0;
							else
							{
								for(nomb=25;nomb<35;nomb++)
								{
									k++;
									val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
									val2[i]=val2[i] + pow(2,(10 - k));

								}
								//power3[i] = (((val1[i]/val2[i]) * 525) + 75);
								//if(power3[i] >= 75 && power3[i] < 76)
								//	 power3[i] = 0.0;
                        initpop[i].pow3 = (((val1[i]/val2[i]) * 525) + 75);
                        if(initpop[i].pow3 == 75)
                        	initpop[i].pow3 = 0.0;

							}
						}

						if(j==4)
						{
							//power4[i] = 0.0;
                     initpop[i].pow4 = 0.0;
							val1[i] = 0.0;
							val2[i] = 0.0;
							k = 0;

							if(initpop[i].chr[j] == 0)
								initpop[i].pow4 = 0.0;
							else
							{
								for(nomb=35;nomb<45;nomb++)
								{
									k++;
									val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
									val2[i]=val2[i] + pow(2,(10 - k));

								}
								//power4[i] = (((val1[i]/val2[i]) * 425) + 75);
								//if(power4[i] >= 75 && power4[i] < 76)
								//	 power4[i] = 0.0;
                        initpop[i].pow4 = (((val1[i]/val2[i]) * 425) + 75);
                        if(initpop[i].pow4 == 75)
                        	initpop[i].pow4 = 0.0;

							}
						}

				}
		     		initpop[i].sumpowgen = initpop[i].sumpowgen + initpop[i].pow1 + initpop[i].pow2 + initpop[i].pow3 + initpop[i].pow4;
		   }

   }

	if(x == 2)
   {
			for(i=1;i<=popsize;i++)
		   	tempop[i].sumpowgen = 0.0;

			for(i=1;i<=popsize;i++)
			{
				zero  = 0;
		      tempop[i].sumpowgen = 0.0;
				for(j=1;j<=4;j++)
				{
						if(j==1)
						{
							//power1[i] = 0.0;
                     tempop[i].pow1 = 0.0;
							val1[i] = 0.0;
							val2[i] = 0.0;
							k = 0;

							if(tempop[i].chr[j] == 0)
								tempop[i].pow1 = 0.0;
							else
							{
								for(nomb=5;nomb<15;nomb++)
								{
									k++;
									val1[i]=val1[i] + (tempop[i].chr[nomb] * (pow(2, (10 - k))));
									val2[i]=val2[i] + pow(2,(10 - k));
								}
								//power1[i] = (((val1[i]/val2[i]) * 525) + 100);
								//if(power1[i] >= 100 && power1[i] < 101)
								//	 power1[i] = 0.0;
                        tempop[i].pow1 = (((val1[i]/val2[i]) * 525) + 100);
                        if(tempop[i].pow1 == 100)
                        	tempop[i].pow1 = 0.0;
							}
						}

						if(j==2)
						{
							//power2[i] = 0.0;
                     tempop[i].pow2 = 0.0;
							val1[i] = 0.0;
							val2[i] = 0.0;
							k = 0;

							if(tempop[i].chr[j] == 0)
	                     tempop[i].pow2 = 0.0;
							else
							{
								for(nomb=15;nomb<25;nomb++)
								{
									k++;
									val1[i]=val1[i] + (tempop[i].chr[nomb] * (pow(2, (10 - k))));
									val2[i]=val2[i] + pow(2,(10 - k));
								}

								//power2[i] = (((val1[i]/val2[i]) * 525) + 100);
								//if(power2[i] >= 100 && power2[i] < 101)
								//	 power2[i] = 0.0;
                        tempop[i].pow2 = (((val1[i]/val2[i]) * 525) + 100);
                        if(tempop[i].pow2 == 100)
                        	tempop[i].pow2 = 0.0;

							}
						}

						if(j==3)
						{
      					//power3[i] = 0.0;
                     tempop[i].pow3= 0.0;
							val1[i] = 0.0;
							val2[i] = 0.0;
							k = 0;

							if(tempop[i].chr[j] == 0)
								power3[i] = 0.0;
							else
							{
								for(nomb=25;nomb<35;nomb++)
								{
									k++;
									val1[i]=val1[i] + (tempop[i].chr[nomb] * (pow(2, (10 - k))));
									val2[i]=val2[i] + pow(2,(10 - k));

								}
								//power3[i] = (((val1[i]/val2[i]) * 525) + 75);
								//if(power3[i] >= 75 && power3[i] < 76)
								//	 power3[i] = 0.0;
                        tempop[i].pow3 = (((val1[i]/val2[i]) * 525) + 75);
                        if(tempop[i].pow3 == 75)
                        	tempop[i].pow3 = 0.0;
							}
						}

						if(j==4)
						{
							//power4[i] = 0.0;
                     tempop[i].pow4 = 0.0;
							val1[i] = 0.0;
							val2[i] = 0.0;
							k = 0;

							if(tempop[i].chr[j] == 0)
	                     tempop[i].pow4 = 0.0;
							else
							{
								for(nomb=35;nomb<45;nomb++)
								{
									k++;
									val1[i]=val1[i] + (tempop[i].chr[nomb] * (pow(2, (10 - k))));
									val2[i]=val2[i] + pow(2,(10 - k));

								}
								//power4[i] = (((val1[i]/val2[i]) * 425) + 75);
								//if(power4[i] >= 75 && power4[i] < 76)
								//	 power4[i] = 0.0;
                        tempop[i].pow4 = (((val1[i]/val2[i]) * 425) + 75);
                        if(tempop[i].pow4 == 75)
                        	tempop[i].pow4 = 0.0;


							}
						}

				}
		     		tempop[i].sumpowgen = tempop[i].sumpowgen + tempop[i].pow1 + tempop[i].pow2 + tempop[i].pow3 + tempop[i].pow4;
		   }

   }

}

void eval_fitness(int x,int demand)
{

 if(x == 1)// true for initpop
 {
	for(i=1;i<=popsize;i++)
   {
   	initpop[i].fitness = 0.0;
      cost1=0.0;cost2=0.0;cost3=0.0;cost4=0.0;

      //check for unit 1
    	if(initpop[i].chr[1] == 0)
      	cost1 = 0.0;
      else
      {
      	cost1 = (0.5 * 0.008 * initpop[i].pow1 * initpop[i].pow1) + (8 * initpop[i].pow1) + 500;

      	if(demand != 1)
         {
      		if(solution[demand - 1].chr[1] == 0 && initpop[i].chr[1] == 1)//assign startup cost
		      	cost1 = cost1 + 3000;
         }//end if

      }//end if

      if(demand != 1)
      {
      	if(solution[demand - 1].chr[1] == 1 && initpop[i].chr[1] == 0)//assign shutdown cost
			{
		     	cost1 = cost1 + 1500;
         }
      }

      //check for unit 2
    	if(initpop[i].chr[2] == 0)
      	cost2 = 0.0;
      else
      {
      	cost2 = (0.5 * 0.0096 * initpop[i].pow2 * initpop[i].pow2) + (6.4 * initpop[i].pow2) + 400;

      	if(demand != 1)
         {
      		if(solution[demand - 1].chr[2] == 0 && initpop[i].chr[2] == 1)//assign startup cost
		      	cost2 = cost2 + 3000;
         }//end if

      }//end if

      if(demand != 1)
      {
      	if(solution[demand - 1].chr[2] == 1 && initpop[i].chr[2] == 0)//assign shutdown cost
			{
		     	cost2 = cost2 + 1500;
         }
      }


      //check for unit 3
    	if(initpop[i].chr[3] == 0)
      	cost3 = 0.0;
      else
      {
      	cost3 = (0.5 * 0.01 * initpop[i].pow3 * initpop[i].pow3) + (7.9 * initpop[i].pow3) + 600;

      	if(demand != 1)
         {

      		if(solution[demand - 1].chr[3] == 0 && initpop[i].chr[3] == 1)//assign startup cost
		      	cost3 = cost3 + 3000;

         }//end if

      }//end if

      if(demand != 1)
      {
      	if(solution[demand - 1].chr[3] == 1 && initpop[i].chr[3] == 0)//assign shutdown cost
		   {
           	cost3 = cost3 + 1500;
         }
      }

      //check for unit 4
    	if(initpop[i].chr[4] == 0)
      	cost4 = 0.0;
      else
      {
      	cost4 = (0.5 * 0.011 * initpop[i].pow4 * initpop[i].pow4) + (7.5 * initpop[i].pow4) + 400;

      	if(demand != 1)
         {

      		if(solution[demand - 1].chr[4] == 0 && initpop[i].chr[4] == 1)//assign startup cost
		      	cost4 = cost4 + 3000;

         }//end if

      }//end if

		if(demand != 1)
      {
     		if(solution[demand - 1].chr[4] == 1 && initpop[i].chr[4] == 0)//assign shutdown cost
	      {
           	cost4 = cost4 + 1500;
         }
      }


      initpop[i].fitness = initpop[i].fitness + cost1 + cost2 + cost3 + cost4;

   }//end for

 }//end if


 if(x == 2)// true for tempop
 {
	for(i=1;i<=popsize;i++)
   {
   	tempop[i].fitness = 0.0;
      cost1=0.0;cost2=0.0;cost3=0.0;cost4=0.0;

      //check for unit 1
    	if(tempop[i].chr[1] == 0)
      	cost1 = 0.0;
      else
      {
      	cost1 = (0.5 * 0.008 * tempop[i].pow1 * tempop[i].pow1) + (8 * tempop[i].pow1) + 500;

      	if(demand != 1)
         {
      		if(solution[demand - 1].chr[1] == 0 && tempop[i].chr[1] == 1)//assign startup cost
		      	cost1 = cost1 + 3000;
         }//end if

      }//end if

      if(demand != 1)
      {
      	if(solution[demand - 1].chr[1] == 1 && tempop[i].chr[1] == 0)//assign shutdown cost
		   {
           	cost1 = cost1 + 1500;
         }
      }

      //check for unit 2
    	if(tempop[i].chr[2] == 0)
      	cost2 = 0.0;
      else
      {
      	cost2 = (0.5 * 0.0096 * tempop[i].pow2 * tempop[i].pow2) + (6.4 * tempop[i].pow2) + 400;

      	if(demand != 1)
         {
      		if(solution[demand - 1].chr[2] == 0 && tempop[i].chr[2] == 1)//assign startup cost
		      	cost2 = cost2 + 3000;
         }//end if

      }//end if

      if(demand != 1)
      {
      	if(solution[demand - 1].chr[2] == 1 && tempop[i].chr[2] == 0)//assign shutdown cost
		   {
           	cost2 = cost2 + 1500;
         }
      }

      //check for unit 3
    	if(tempop[i].chr[3] == 0)
      	cost3 = 0.0;
      else
      {
      	cost3 = (0.5 * 0.01 * tempop[i].pow3 * tempop[i].pow3) + (7.9 * tempop[i].pow3) + 600;

      	if(demand != 1)
         {
      		if(solution[demand - 1].chr[3] == 0 && tempop[i].chr[3] == 1)//assign startup cost
		      	cost3 = cost3 + 3000;
         }//end if

      }//end if

      if(demand != 1)
      {
      	if(solution[demand - 1].chr[3] == 1 && tempop[i].chr[3] == 0)//assign shutdown cost
		   {
           	cost3 = cost3 + 1500;
         }
      }

      //check for unit 4
    	if(tempop[i].chr[4] == 0)
      	cost4 = 0.0;
      else
      {
      	cost4 = (0.5 * 0.011 * tempop[i].pow4 * tempop[i].pow4) + (7.5 * tempop[i].pow4) + 400;

      	if(demand != 1)
         {
      		if(solution[demand - 1].chr[4] == 0 && tempop[i].chr[4] == 1)//assign startup cost

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -