📄 ant.~h
字号:
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 + -