亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qap.c

?? 用C編寫的部落尋優的優化算法
?? C
字號:

 //======================================================== F_QAP
 double f_qap(struct position pos,int option, int penalty,int rank1,int rank2,int level)
 {
 /*
   The matrix P   is a global variable. It contains the flow matrix  and the distance matrix
   problem is a global variable
   If rank1>=0, positions in rank1 and rank2 have just been switched
 */
 int        d;
 double  delta_eval;
  int        DD;
 int        i,j;
 int                    p_i,p_j;
 double total;

   DD=problem[level].P.size;
 /*
   When there has been just a switch between positions, the f_value could be (and will be in next version)
   evaluated by updating  at most 4 arcs values
 */
 if (rank1<0) delta_eval=1; else delta_eval=4/(double)DD;

eval_f[level]=eval_f[level]+delta_eval;
eval_f_tot[level]=eval_f_tot[level]+delta_eval;

// if (option==0) goto continuous;   // Not yet written

 // Option 1. Classical (discrete) way
  total=0;
for (i=0;i<DD;i++)
{
	p_i=(int)pos.p.x[i]+DD;
    for(j=0;j<DD;j++)
    {
       p_j=(int)pos.p.x[j];
       total=total+problem[level].P.val[i][j]*problem[level].P.val[p_i][p_j];
   }
 }


  if (penalty==0) goto end; // the penalty will be taken into account in continuous mode

  // ... else, add penalty if several times the same node
 d=check_seq(pos);
 if (d>0) total=total+d*problem[level].P.max_cont;
 goto end;

 /*
 //----------------------------------------- (to rewrite)
 continuous:  // Option 0
 test=1;
  switch(test)
 {
    case 1:
    p1=nearest_int(pos);
     d1=distance(pos,p1);
     big_value=1.1*DD*P.max_cont;
     max_d=sqrt(DD)/2;
     f1=p1.f+problem[recursive].target;
     total=  f1+d1*(big_value-f1)/max_d;
 //printf("\nf_tsp. f1 %f, d1 %f,  total %f",f1, d1,total);
     break;

 case 2:
  p1=nearest_int(pos);
  p2.p.size=DD;
   for (d=0;d<DD;d++)
 {
     if (pos.p.x[d]>p1.p.x[d]) {p2.p.x[d]=p1.p.x[d]+1;continue;}
     if (pos.p.x[d]<p1.p.x[d]) {p2.p.x[d]=p1.p.x[d]-1;  continue;}
     // pos.p.x[d] is already an integer
     if (pos.p.x[d]>1) p2.p.x[d]=p1.p.x[d]-1; else p2.p.x[d]=p1.p.x[d]+1;
 }
 break;

 }

  //printf("\n f: %f %f, d: %f %f, total %f",p1.f, p2.f,d1,d2,total);

  //Add penalty if values are not different enough
  for (i=0;i<DD-1;i++)
  {
    for (j=i+1;j<DD;j++)
    {
     d1=fabs(pos.p.x[i]-pos.p.x[j]);
      if (d1<1) total=total+P.max_cont*(1-d1);
    }
  }
 */

 end:
 //printf("\nf_qap. total %f",total);
 return total;
}

  //======================================================== INIT_PARTICLE_QAP
 struct particle init_particle_qap(int size,double target,int level)
{
int                     d;
struct particle part;
struct position   x0;

x0.p.size=size;
for( d = 0;d<size;d++)  // initial sequence
{
	x0.p.x[d] = d;
}

 x0.p=random_permut(x0.p);

 x0.f.f[0]=f_qap(x0,1,0,-1,-1,level);   // Evaluate. We are _sure_ there is no penalty to add
 x0.f.f[0]=fabs(target-x0.f.f[0]);
 part.x=x0;
 part.p_i=part.x; // Best previous = current
 part.prev_x=part.x; // Previous = current

 part.label=label[level];
 label[level]=label[level]+1;

 return part;

 }
 //======================================================== INIT_SWARM_QAP
struct tribe init_swarm_qap(int size,double target,int trace,int level)
{
/* Initialization of the swarm */

int 				i;
int                     init_level;
int                     init_option;
struct   position     s1;
struct tribe   T;
double            total;


	printf("\n Swarm initialization for QAP");
	if (size>10) printf(" Please wait");

init_option=2; // *** Hard coded
                        // 1 => use min_tour
                        // 2 => use best of min_tour, min_tour_2
T.size=size;
s1.f.size=problem[level].nb_f;

switch (init_option)
{
    case 1:  // Deterministic initialization, level 1
      for (i=0;i<size;i++)  // Define a permutation beginning on i, using systematically
                                    // the best next node still free
      {
        if (trace>1) printf("\n init particle %i",i+1);

           T.part[i].x=min_tour_qap(i,level);
         total=f_qap(T.part[i].x,1,0,-1,-1,level);   // Evaluate. We are _sure_ there is no penalty to add
         T.part[i].x.f.f[0]=fabs(target-total);
         T.part[i].x.f.size=problem[level].nb_f;
         T.part[i].p_i=T.part[i].x; // Best previous = current
         T.part[i].prev_x=T.part[i].x; // Previous = current
//display_position( T.part[i].x);
      }
      break;

 case 2:  // Deterministic initialization, level 2
 printf("\n init level 2");
 init_level=1;
 case2:
      for (i=0;i<size;i++)  // Define a permatutation beginning on i, using systematically
                                    // the smallest 2-arcs path still free
      {
         s1=min_tour_qap(i,level);
         total=f_qap(s1,1,0,-1,-1,level);  // Evaluate. We are _sure_ there is no penalty to add
           s1.f.f[0]=fabs(target-total);

         T.part[i].x=min_tour_2_qap(i,init_level,level);
         T.part[i].x.f.f[0]=f_qap(T.part[i].x,1,0,-1,-1,level);
         T.part[i].x.f.f[0]=fabs(target-T.part[i].x.f.f[0]);

         if (T.part[i].x.f.f[0]>s1.f.f[0]) T.part[i].x=s1; // Choose the best
                  T.part[i].x.f.size=problem[level].nb_f;
          T.part[i].p_i=T.part[i].x; // Best previous = current
          T.part[i].prev_x=T.part[i].x; // Previous = current
      }
      break;

 case 3:
 printf("\n init level 2a");
 init_level=2;
 goto case2;

 }

  for (i=0;i<size;i++)    // Set the labels
 {
  T.part[i].label=label[level];
 label[level]=label[level]+1;
}
 printf("\n End of swarm initialization for QAP ");

return T;

}

//============================================================ LOCAL_SEARCH_QAP
struct position local_search_qap(struct position x,double target,int level)
{
/*
 Check the immediate neighbours, as long as there is some improvement
 Note: pos is supposed to be an integer position
*/
int                     DD;
int                     d1,d2;
double               f;
double               node;
struct position x1,x2;

 DD=x.p.size;
 x1=x;
 x2=x;

 look_around:
 for (d1=0;d1<DD-1;d1++)
 {
      for (d2=d1+1;d2<DD;d2++)
      {
         // Transpose
         node=x2.p.x[d1];
         x2.p.x[d1]= x2.p.x[d2];
          x2.p.x[d2]=node;
        // Evaluate
        f=f_qap(x2,1,1,d1,d2,level);
        f=fabs(target-f);
        if (f<x1.f.f[0])  // if improvement, memorize and try again
        {
          x1=x2;
          x1.f.f[0]=f;
          if((problem[level].Max_Eval<0 && eval_f_tot[level]>-problem[level].Max_Eval) || problem[level].Max_Eval>clock_tick)
            return x1;
          goto look_around;
        }
        else  // Transpose back and continue
        {
           node=x2.p.x[d1];
           x2.p.x[d1]= x2.p.x[d2];
           x2.p.x[d2]=node;
        }
      }
 }
//printf("\nlocal_search_qap. %f => %f",pos.f,x1.f);
return x1;
}
  //============================================================ MIN_TOUR _QAP
 struct   position   min_tour_qap(int i,int level)
{
    //    Start from node i, and systematically add the smallest arc still free

 double        big_value;
 double        delta_val;
 int              DD;
  int             j;
  double       min;
  int             next;
  int             r;
  int             rank;
  double       val;
  struct position x;
  int          used[Max_C]={0};

  DD=problem[level].P.size;
  big_value= DD*DD*problem[level].P.max_cont+1;
  x.p.size=DD;
  rank=0;
  x.p.x[rank]=i;
  used[i]=1;

  loop:
  min=big_value+1;

  for (j =0;j<DD;j++) // Check all neighbours of x.p.x[rank]
  {
     if (used[j]==1) continue;
     val=0;
     for (r=0;r<rank;r++)
     {
        delta_val=problem[level].P.val[r][rank+1]*problem[level].P.val[ (int)x.p.x[r]+DD][j];
        val= val+delta_val;
     }

      if (val<min)
      {
         next=j;
         min=val;
       }
   }

   rank=rank+1;
   x.p.x[rank]=next;
   used[next]=1;
   if (rank<DD-1)  goto loop;
 //display_position(x);
  return x;
}

 //============================================================ MIN_TOUR_2_QAP
 struct   position   min_tour_2_qap(int i,int init_level,int level)
{
    //    Start from node i, and systematically add the smallest 2-arcs path still free

 double        big_value;
 int              DD;
 double        delta_val;
  int             j,k;
  double       min;
  int             next,next2;
  int             r;
  int             rank;
  double       val_k;
  struct position x;
  int          used[Max_C]={0};
  double    val;

   DD=problem[level].P.size;
  big_value= DD*DD*problem[level].P.max_cont+1;
  x.p.size=DD;
  rank=0;
  x.p.x[rank]=i;
  used[i]=1;

  loop:
 //printf("\n rank %i",rank);
  min=2*big_value+1;

  for (j =0;j<DD;j++) // Check all neighbours of x.p.x[rank]
  {
 //printf("\n %i, %i, %f /",j,used[j],min);
     if (used[j]==1) continue;
        val=0;
     for (r=0;r<rank;r++)
     {
        delta_val=problem[level].P.val[r][rank+1]*problem[level].P.val[ (int)x.p.x[r]+DD][j];
        val= val+delta_val;
     }


      if (rank==DD-2)
      {
         x.p.x[DD-1]=j;
         goto end;
      }

      for(k=0;k<DD;k++)
      {
 //printf("\n %i",k);
      if (k==j) continue;
      if (used[k]==1) continue;
        val_k= problem[level].P.val[ j][k];
        if (val_k<0) val_k=big_value;

         if (val+val_k<min)
         {
            next=j;
            next2=k;
            min=val+val_k;
         }
      }
  }
  //printf("\n next %i",next);
  if(level==1)
  {
   rank=rank+1;
       x.p.x[rank]=next;
       used[next]=1;
       if (rank<DD-1) goto loop;
  }

  if (level==2)
  {
       rank=rank+1;
       x.p.x[rank]=next;
       used[next]=1;

       rank=rank+1;
       x.p.x[rank]=next2;
       used[next2]=1;
       if (rank<DD-2) goto loop;
  }


 end:
  x.p.x[x.p.size]=x.p.x[0]; // To complete the tour
  return x;
}


 //========================================================  READ_GRAPH_QAP
struct matrix read_graph_qap(int trace)
{
/* Read data for Quadratic Assignment Problem
<dimension d>
<d*d flow matrix>
<d*d distance matrix>
Diagonal values are supposed to be null
*/

double            big_value;
char              graph[80];
struct matrix	Gt;  // Contains the two matrices
int 			i,j;
float         zzz;

FILE *file;

printf("\nFile name for the QAP matrices, please: ");
gets(graph);

file=fopen(graph,"r");

printf("\nI am reading the matrices");

fscanf(file,"%i\n",&Gt.size); // dimension

		for (i=0;i<2*Gt.size;i++)
			{
                for (j=0;j<Gt.size;j++)
				{
                        fscanf(file,"%f",&zzz);
                            Gt.val[i][j]=zzz;
					if (trace>2) printf(" %f",Gt.val[i][j]);
				}
			}
            	printf("\n Flows and distances read. %i lines %i columns",2*Gt.size,Gt.size);

   big_value=0;

  		for (i=Gt.size;i<2*Gt.size;i++)
			{
                for (j=0;j<Gt.size;j++)
				{
                        if (Gt.val[i][j]>big_value) big_value=Gt.val[i][j];
                     }
                  }
   // Replace the negative arc values   (unexistent arcs)

    		for (i=Gt.size;i<2*Gt.size;i++)
			{
                for (j=0;j<Gt.size;j++)
				{
                        if (Gt.val[i][j]<0) Gt.val[i][j]=1.1*(Gt.size*big_value);
                     }
                  }

Gt.max_cont=big_value;
big_value=0;   //  Memorize a big value value for future penalty
    		for (i=0;i<Gt.size;i++)
			{
                for (j=0;j<Gt.size;j++)
				{
                        if (Gt.val[i][j]>big_value) big_value=Gt.val[i][j];
                     }
                  }

Gt.max_cont=big_value*  Gt.max_cont;
 printf(" Max flow*distance value %f",Gt.max_cont);

 fclose(file);
  return Gt;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
懂色av噜噜一区二区三区av| 欧美日韩精品免费| 在线亚洲一区观看| 日韩欧美自拍偷拍| 亚洲一区影音先锋| 成人av免费在线播放| 日韩一区二区三区在线视频| 亚洲乱码中文字幕| 国产不卡视频一区| 精品久久久久久久久久久久包黑料| 亚洲欧洲精品一区二区三区不卡| 麻豆国产欧美日韩综合精品二区| 91丨九色丨蝌蚪丨老版| 久久综合狠狠综合久久综合88| 亚洲v日本v欧美v久久精品| 国产乱妇无码大片在线观看| 亚洲色图清纯唯美| 国产在线精品免费av| 欧美一区二区三区免费大片| 一区二区三区在线免费播放| 高清久久久久久| 久久久久久99精品| 国产一区在线视频| 久久久精品黄色| 国产精品亚洲一区二区三区妖精| 在线播放国产精品二区一二区四区| 亚洲女与黑人做爰| 99久久精品国产精品久久| 中文字幕一区二区三区不卡| 9人人澡人人爽人人精品| 国产精品入口麻豆九色| 国产激情精品久久久第一区二区| 亚洲精品一区二区三区在线观看| 看片网站欧美日韩| 精品乱人伦一区二区三区| 久久69国产一区二区蜜臀| 欧美男男青年gay1069videost| 亚洲午夜免费福利视频| 欧美日韩国产高清一区二区| 亚洲人成7777| 欧美欧美午夜aⅴ在线观看| 视频一区二区中文字幕| 3atv在线一区二区三区| 美脚の诱脚舐め脚责91| 日韩欧美不卡一区| 国产精品69久久久久水密桃| 亚洲欧洲一区二区三区| 日本久久一区二区三区| 五月婷婷另类国产| 欧美成人精精品一区二区频| 国产不卡免费视频| 夜夜嗨av一区二区三区四季av| 欧美日韩国产首页在线观看| 久久精品国产在热久久| 久久精品视频一区二区三区| 99精品欧美一区二区三区小说| 一区av在线播放| 日韩欧美国产综合一区 | 国产精品的网站| 欧美亚洲图片小说| 久久国产尿小便嘘嘘| 国产精品第五页| 9191久久久久久久久久久| 国产一级精品在线| 亚洲一区二区三区三| 欧美va亚洲va香蕉在线| 99re8在线精品视频免费播放| 婷婷夜色潮精品综合在线| 久久综合五月天婷婷伊人| 91视频在线观看免费| 麻豆精品一区二区| 亚洲男人电影天堂| 久久亚洲欧美国产精品乐播| 一本色道亚洲精品aⅴ| 国内精品伊人久久久久av影院 | 婷婷六月综合亚洲| 国产精品色在线观看| 欧美日韩美女一区二区| 狠狠色伊人亚洲综合成人| 一区二区三区在线观看网站| 日韩久久久精品| 91福利视频久久久久| 国产麻豆精品久久一二三| 五月激情六月综合| 亚洲人成网站影音先锋播放| 久久综合狠狠综合久久综合88 | 欧美激情综合五月色丁香小说| 欧美在线视频全部完| www..com久久爱| 国产成人免费视频网站高清观看视频| 亚洲图片欧美一区| 亚洲欧美视频在线观看视频| 国产日韩欧美一区二区三区乱码| 欧美专区日韩专区| 99综合电影在线视频| 国内精品嫩模私拍在线| 首页国产丝袜综合| 亚洲曰韩产成在线| 亚洲色图视频网| 亚洲欧洲一区二区在线播放| 久久久www免费人成精品| 日韩欧美国产精品一区| 欧美日韩三级在线| 91久久线看在观草草青青| 国产69精品久久777的优势| 久久99蜜桃精品| 久久97超碰国产精品超碰| 秋霞电影网一区二区| 亚洲aⅴ怡春院| 亚洲成va人在线观看| 亚洲综合精品自拍| 亚洲伊人色欲综合网| 亚洲综合偷拍欧美一区色| 亚洲欧美日韩久久精品| 亚洲女人小视频在线观看| 亚洲精品五月天| 一区二区三区四区不卡在线| 最新中文字幕一区二区三区| 自拍偷拍国产精品| 亚洲男人天堂一区| 亚洲午夜激情网页| 午夜一区二区三区视频| 日韩电影在线观看一区| 五月天一区二区| 蜜桃精品视频在线| 韩日av一区二区| 成人免费黄色大片| 91视频国产资源| 欧美丝袜丝nylons| 欧美一卡在线观看| 精品国产一区二区三区四区四| 久久久久久免费| 国产精品不卡在线| 亚洲一区二区在线免费观看视频 | 中文字幕一区二区三区视频| 亚洲视频小说图片| 亚洲成av人影院在线观看网| 免费不卡在线视频| 国产99精品视频| 在线一区二区观看| 精品国产一区二区三区久久影院| 国产欧美一区二区精品仙草咪| 综合激情网...| 日韩精品一二三| 国产成人精品免费一区二区| 91网站在线播放| 欧美一区二区三区视频在线观看| 精品第一国产综合精品aⅴ| 国产精品激情偷乱一区二区∴| 亚洲一级电影视频| 国产美女视频91| 欧美视频一区二区在线观看| 欧美成人一区二区三区片免费 | 中文字幕在线观看不卡| 无码av免费一区二区三区试看 | 日韩视频123| 国产精品国产三级国产aⅴ中文| 日韩有码一区二区三区| 成人网页在线观看| 欧美一区二区三区影视| 国产精品久久久久久久久晋中| 首页国产欧美日韩丝袜| 99视频在线精品| 精品嫩草影院久久| 一区二区三区四区乱视频| 国产精品77777竹菊影视小说| 欧美午夜精品久久久久久孕妇| 久久久久久影视| 日韩精品一二三四| 色婷婷av一区二区| 国产亚洲综合色| 欧美a级一区二区| 欧美无砖砖区免费| 中文字幕在线播放不卡一区| 久久国产日韩欧美精品| 欧美蜜桃一区二区三区| 亚洲美女屁股眼交| 国产成人免费高清| 精品免费一区二区三区| 天天综合天天综合色| 91免费小视频| 国产精品素人一区二区| 激情综合色综合久久综合| 在线不卡一区二区| 亚洲一区二区三区四区在线观看 | 亚洲综合男人的天堂| 国产91在线|亚洲| 久久久亚洲精品一区二区三区 | 日韩三级免费观看| 亚洲成人免费影院| 欧美专区在线观看一区| 亚洲与欧洲av电影| 91国模大尺度私拍在线视频| 亚洲欧洲制服丝袜| 99视频热这里只有精品免费| 国产亚洲一区二区三区四区| 久久99久久99小草精品免视看| 91精品国模一区二区三区| 亚洲国产aⅴ成人精品无吗| 91国偷自产一区二区使用方法|