标题:c语言遗传算法中加入模拟退火,怎么编写模拟退火程序呢
只看楼主
wangboran123
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-12-9
结帖率:0
已结贴  问题点数:20 回复次数:2 
c语言遗传算法中加入模拟退火,怎么编写模拟退火程序呢
这是我在遗传算法变异操作后加的模拟退火程序,怎么改正或是编写呢?
void mutationoperatorSA() //模拟退火扰动操作{
{
 int i,j;
    double p;
   
    for (i=0;i<popsize;i++)
 {   
  for(j=0;j<chromlength;j++)
  {
   p=rand()%1000/1000.0;//printf("@@@@p=%f",p);
   if (p<pm)
   {
                //printf("\nbianyi\n");
    population[i].chrom[j]=(population[i].chrom[j]=='0')?'1':'0';//问题
   }
  }
 }
}

void SA()
{
  int i,j;
  struct individual newpopulation[POPSIZE];
 
 // 冷却表参数
    int MarkovLength = 10000; // 马可夫链长度
 double Tolerance = 0.01; // 容差
  
 DecayScale = 0.95; // 衰减参数0.95

 double Temperature = 100; // 初始温度

 population[i],newpopulation[i]; // prior and next value of x

 int AcceptPoints = 0; // Metropolis过程中总接受点
 //srand((unsigned)time(NULL));
 //1.0f*rand()/RAND_MAX    //0~1之间的浮点数
 // 随机选点
 
 // 每迭代一次退火一次(降温), 直到满足迭代条件为止
 double StartTemperature = Temperature; //初始温度
 for(i=0;i<popsize; i++)
 {
  Temperature *=DecayScale;
  AcceptPoints = 0;
  // 在当前温度T下迭代loop(即MARKOV链长度)次
  for (int j=0;j<MarkovLength;j++)
  {   
   
   mutationoperatorSA();
            calculateobjectvalue();
            calculatefitnessvalue();
  
   // 3) Metropolis过程
   if( population[i].fitness - newpopulation[i].fitness > 0 )
   {
    // 接受, 此处lastPoint即下一个迭代的点以新接受的点开始
    population[i]=newpopulation[i];
   
    AcceptPoints++;
   }
   else
   {
    double change = -1 * ( newpopulation[i].fitness - population[i].fitness ) / Temperature ;
    if( exp(change) > 1.0f*rand()/RAND_MAX )
    {
     population[i]=newpopulation[i];
   
     AcceptPoints++;
    }
    // 不接受, 保存原解
   }while( fabs( newpopulation[i].fitness - population[i].fitness ) > Tolerance );

  }


 }

     


}

搜索更多相关主题的帖子: 退火 individual 
2012-12-09 23:17
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:10 
沉底贴帮顶

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-11 19:39
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
得分:10 
太深奥了听不懂...

I have not failed completely
2012-12-11 19:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-390377-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.104490 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved