模拟退火算法

 //模拟退火算法效果稍稍好于爬山算法,核心思想是以一定的概率接受一个比当前解更差的解

public Individual<G, X> solve(final IObjectiveFunction<X> f) {

    Individual<G, X> pcur, pnew;
    Random r =new Random();
    pcur = new Individual<>();
    pnew= new Individual<>();

    pcur.g = this.nullary.create(this.random);
    pcur.x = this.gpm.gpm(pcur.g);
    pcur.v = f.compute(pcur.x); 
    X tmp= pcur.x;

    int t=1;
    double Temp;

    while (!(this.termination.shouldTerminate())) {
      pnew.g = this.unary.mutate(pcur.g, this.random);
      pnew.x = this.gpm.gpm(pnew.g);
      pnew.v = f.compute(pnew.x);
      double value=pnew.v - pcur.v;
      if (value<=0) {
        pcur.assign(pnew);
        if(f.compute(pcur.x)<f.compute(tmp))
          tmp=pcur.x;
      }
      else{
        Temp=this.temperature. getTemperature(t);


        if(r.nextDouble()<Math.exp(-(value/Temp))){
          pcur.assign(pnew);
        }
      }
      t++;
    }
    pcur.x=tmp;
    pcur.v = f.compute(pcur.x); 
    return pcur;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值