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

📄 ant.~h

📁 利用蚂蚁演算法侦测物件支配点研究之原始码
💻 ~H
📖 第 1 页 / 共 5 页
字号:
                if(i == *replace_number)
                   continue;
                *(Template_solution + *count2) = *(solution + i+1);
                *(Template_Coordinate + *count2) = *(Template_Coordinate + i);
                (*count2)++;
             }
/*
          for(short i=0;i<solution[0]-2;i++)
             {
                Lposition = *(Template_Coordinate + i);
                Nposition = *(Template_Coordinate + i+2);
                now_distance= Nposition-Lposition;
                the_best_candidate=the_best_significant (total_number,contour_x_coordinate,contour_y_coordinate,Lposition,Nposition);
                *(Template_Coordinate +i+1)=the_best_candidate;
             }
          Lposition = *(Template_Coordinate +solution[0]-2);
          Nposition = *(Template_Coordinate);
          now_distance=*total_number-Lposition;
          the_best_candidate=the_best_significant (total_number,contour_x_coordinate,contour_y_coordinate,Lposition,Nposition);
          *(Template_Coordinate +solution[0]-1)=the_best_candidate;
*/
          for(short i=0;i< solution[0]-2 ;i++)
              {
                  now_position=*(Template_Coordinate+ i);
                  next_position=*(Template_Coordinate+i+1);
                  *now_ethlon += initial_Ethlon(total_number,contour_x_coordinate,contour_y_coordinate,now_position,next_position);
              }
          now_position=*(Template_Coordinate+(solution[0]-2) );
          next_position=*(Template_Coordinate);
          *now_ethlon += initial_Ethlon(total_number,contour_x_coordinate,contour_y_coordinate,now_position,next_position);
          if(*now_ethlon < ethlon && *min_ethlon < Threshold)
             {
                  for(short i=0;i<solution[0]-1;i++)
                      {
                         *(solution + i +1) = *(Template_solution + i) ;
                         *(Coordinate+i)=*(Template_Coordinate+ i);
                      }
                  *(solution +(solution[0]-1))=*(solution +1);
                  solution[0]=solution[0]-1;
             }
          return  *now_ethlon;
//          delete  Template_solution,Template_Coordinate,count,count1,count2;
//          delete  now_ethlon,min_ethlon,replace_number,original_ethlon;
      }
//-------------------------------------------------------
   float Improvement_Hybrid_KC (short **contour_x_coordinate,short **contour_y_coordinate,short *solution,short *Coordinate,float ethlon,short *total_number,double *K_cosine_1)
      {
          short *Template_solution = new short[solution[0]];
          short *Template_Coordinate = new short[solution[0]];
//          short *Template_2_Coordinate = new short[solution[0]];
          short *count = new short(0);
          short *count1 = new short(0);
          short *count2 = new short(0);
//          short *count3 = new short (0);
          short Lposition,Nposition,the_best_candidate,medium_position,now_position,next_position,the_large_distance,now_distance;
          float *now_ethlon = new float(0.0);
//          float *min_ethlon = new float(1000.0);
//          short *replace_number = new short (0);
//          float *original_ethlon = new float(0.0);
          double *max_curvature = new double(0.0);
//          the_large_distance=0;
          for(short i=0;i<solution[0];i++)
             {
                *(Template_solution + i) = *(solution + i+1);
                *(Template_Coordinate + i) = *(Coordinate + i );
             }
//          *Template_2_Coordinate = *Template_Coordinate;
          for(short i=0;i<solution[0]-2;i++)
             {
                Lposition = *(Template_Coordinate + i);
                Nposition = *(Template_Coordinate + i+2);
                *max_curvature = fabs(K_cosine_1[Lposition+1]);
                for(short j=Lposition+2;j<Nposition;j++)
                    if(fabs(K_cosine_1[j])>*max_curvature)
                        {
                           *max_curvature=fabs(K_cosine_1[j]);
                           *(Template_Coordinate +i+1)=j;
                        }
                *now_ethlon += Ethlon(total_number,contour_x_coordinate,contour_y_coordinate,Lposition,*(Template_Coordinate +i+1));
                *now_ethlon += Ethlon(total_number,contour_x_coordinate,contour_y_coordinate,*(Template_Coordinate +i+1),Nposition);
             }
          Lposition = *(Template_Coordinate +solution[0]-2);
          Nposition = *total_number;
          *max_curvature = fabs(K_cosine_1[Lposition+1]);
          for(short j=Lposition+2;j<Nposition;j++)
              if(fabs(K_cosine_1[j])>*max_curvature)
                  {
                     *max_curvature=fabs(K_cosine_1[j]);
                     *(Template_Coordinate +solution[0]-1)=j;
                  }
          *now_ethlon += Ethlon(contour_x_coordinate,contour_y_coordinate,Lposition,*(Template_Coordinate +solution[0]-1),Nposition);
          *now_ethlon += Ethlon(total_number,contour_x_coordinate,contour_y_coordinate,Lposition,*(Template_Coordinate +solution[0]-1));
          *now_ethlon += Ethlon(total_number,contour_x_coordinate,contour_y_coordinate,*(Template_Coordinate +solution[0]-1),Nposition);
          if(*now_ethlon < ethlon )
             {
                  for(short i=0;i<solution[0]-1;i++)
                      {
                         *(solution + i +1) = *(Template_solution + i) ;
                         *(Coordinate+i)=*(Template_Coordinate+ i);
                      }
                  *(solution +(solution[0]-1))=*(solution +1);
                  solution[0]=solution[0]-1;
             }
          return  *now_ethlon;
//          delete  Template_solution,Template_Coordinate,count,count1,count2;
//          delete  now_ethlon,min_ethlon,replace_number,original_ethlon;
      }
//-------------------------------------------------------
   float Improvement_Hybrid (short **contour_x_coordinate,short **contour_y_coordinate,short *solution,short *Coordinate,float ethlon,short *total_number,float *error,short *initial_number)
      {
          srand(time(NULL));
          short *Template_solution = new short[solution[0]-1];
          short *Template_Coordinate = new short[*initial_number];
          short *value = new short(0);
          short *count = new short(0);
          short *count1 = new short(0);
          short *count2 = new short(0);
//          short *count3 = new short (0);
          short now_position,next_position,now_candidate,medium_position,Lposition,Nposition,the_best_candidate;
          float *now_ethlon = new float(0.0);
//          float *minimul_ethlon = new float(10000);
          short *threshold = new short (1);
          short *replace_number = new short (0);
          float *original_ethlon = new float(0.0);
          float *Error= new float[2];
          Error[0]=Error[1]=0;
          *value = random(solution[0])+1;
          for(short i=0;i<solution[0];i++)
             {
                if(i == *value)
                   continue;
                *(Template_solution + *count2) = *(solution + i+1);
//                *(Template_Coordinate + *count2) = *(Coordinate + i );
                (*count2)++;
             }
//          *(Template_solution+ *count2)=*Template_solution;
          for(short i=0;i<*initial_number;i++)
             *(Template_Coordinate + i) = *(Coordinate + i );
/*
          do
             {
                now_position = *value -1;
                medium_position =*value +1;
                next_position = *value + 2;
                *replace_number=0;
                for(short i=0;i<solution[0] -1;i++)
                   {
//                     *minimul_ethlon=10000.0;
                      if(now_position == *value)
                         now_position++;
                      if(now_position < 0)
                         now_position = now_position + solution[0] -1;
                      if(now_position > (solution[0] -1))
                         now_position = now_position - solution[0];
                      if(next_position > (solution[0] -1))
                         next_position = next_position - solution[0];
                      if(next_position == *value)
                         next_position++;
                      if(medium_position > (solution[0] -1))
                         medium_position = medium_position - solution[0];
                      *count1 = *(Template_Coordinate + next_position) - *(Template_Coordinate + now_position)-1;
                      if(*count1 < 0)
                         *count1 = *total_number - *(Template_Coordinate + now_position) + *(Template_Coordinate + next_position) -1;
                      now_candidate = *(Template_Coordinate + now_position) +1;
                      Lposition = *(Template_Coordinate + now_position);
                      Nposition = *(Template_Coordinate + next_position);
                      the_best_candidate=the_best_significant (total_number,contour_x_coordinate,contour_y_coordinate,Lposition,Nposition);
                      *(Template_Coordinate +medium_position)=the_best_candidate;
                      now_position++;
                      medium_position++;
                      next_position++;
                   }
               (*count)++;
             }while(*count < 5 );
*/

                now_position = *value -1;
                medium_position =*value;
                next_position = *value +1;
                *replace_number=0;
                for(short i=0;i<solution[0] -1;i++)
                   {
//                     *minimul_ethlon=10000.0;
//                      if(now_position == *value)
//                         now_position++;
                      if(now_position < 0)
                         now_position = now_position + solution[0] -1;
                      if(now_position >= (solution[0] -1))
                         now_position = now_position - solution[0]+1;
                      if(next_position >= (solution[0] -1))
                         next_position = next_position - solution[0]+1;
//                      if(next_position == *value)
//                         next_position++;
                      if(medium_position >= (solution[0] -1))
                         medium_position = medium_position - solution[0] +1;
                      *count1 = *(Template_Coordinate + Template_solution[next_position]) - *(Template_Coordinate + Template_solution[now_position])-1;
                      if(*count1 < 0)
                         *count1 = *total_number - *(Template_Coordinate + Template_solution[now_position]) + *(Template_Coordinate + Template_solution[next_position]) -1;
                      now_candidate = *(Template_Coordinate + Template_solution[now_position]) +1;
                      Lposition = *(Template_Coordinate + Template_solution[now_position]);
                      Nposition = *(Template_Coordinate + Template_solution[next_position]);
                      the_best_candidate=the_best_significant (total_number,contour_x_coordinate,contour_y_coordinate,Lposition,Nposition);
                      *(Template_Coordinate +Template_solution[medium_position])=the_best_candidate;
                      now_position++;
                      medium_position++;
                      next_position++;
                   }

          *now_ethlon=0.0;
          for(short i=0;i< solution[0]-2 ;i++)
              {
                  now_position=*(Template_Coordinate+ Template_solution[i]);
                  next_position=*(Template_Coordinate+Template_solution[i+1]);
                  *now_ethlon += error_Ethlon(total_number,contour_x_coordinate,contour_y_coordinate,now_position,next_position,Error);
              }
          now_position=*(Template_Coordinate+ Template_solution[solution[0]-2]);
          next_position=*(Template_Coordinate+Template_solution[0]);
          *now_ethlon += error_Ethlon(total_number,contour_x_coordinate,contour_y_coordinate,now_position,next_position,Error);

          if(*now_ethlon < ethlon)
             {
                  error[0]=Error[0];
                  error[1]=Error[1];
                  for(short i=0;i<solution[0]-1;i++)
                     {
                       *(solution + i +1)=*(Template_solution + i);
//                       *(Coordinate + i) = *(Template_Coordinate + i);
                     }
//                      *(solution + i +1) = *(Template_solution + i) ;
                 // solution[solution[0]-1]=solution[1];
                  solution[solution[0]]=0;
                  solution[0]=solution[0]-1;
                  //(*test)++;

                  for(short i=0;i<*initial_number;i++)
                     *(Coordinate + i) = *(Template_Coordinate + i);

             }
          return  *now_ethlon;
//          delete  Template_solution,value,count1,now_ethlon,threshold,original_ethlon;
//          delete  Template_Coordinate,count,count2,minimul_ethlon,replace_number,Error;
      }
//-------------------------------------------------------


   float initial_Ethlon (short *total_number,short **contour_x_coordinate,short **contour_y_coordinate,short position,short next_position)
      {
          float *ethlon= new float(0.0);
          short *value = new short(0);
          *value = next_position - position;
          if(*value < 0)
              *value = *total_number - position + next_position ;
          if(

⌨️ 快捷键说明

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