zoukankan      html  css  js  c++  java
  • 模拟退火

    贪心+概率

    解决:函数最值、TSP旅行商问题、最小园覆盖、最小求覆盖

    模板:

    //模拟退火
    int eps=1e-8;  //终止温度 
    int T=100;    //初始温度
    double delta=0.98; //降温系数
    double js(int x) ;  //评价函数
    double now,next;
    
    while(T>eps){
    	js(next);
    	js(now);
    	de=g(next)-g(now);
    	if(de>=0) now=next; //新状态更好,就受
    	else if(exp(de/T)>rand()) now=next;  //新状态更差,以一定概率接受
    	T*=delat; 
    } 
     
    

    hud 2899

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<stack>
    #include<cstdio>
    #include<queue>
    #include<map>
    #include<vector>
    #include<set>
    using namespace std;
    const int maxn=1010;
    const int INF=0x3fffffff;
    typedef long long LL;
    //模拟退火
    
    double y;
    double eps=1e-8;
    double js(double x){
    	return 6*pow(x,7)+8*pow(x,6.0)+7*pow(x,3)+5*pow(x,2)-y*x;
    }
    double solve(){
    	double T=100;  //初始温度 
    	double delta=0.98;
    	double x=50.0;   //x的初始值 
    	double now=js(x);
    	double ans=now; //存储最优值 
    	while(T>eps){
    		int f[2]={1,-1};
    		//按照概率改变x
    		double nex=x+f[rand()%2]*T;
    		if(nex<101&&nex>=0){
    			double next=js(nex);
    			ans=min(ans,next);
    			if(now-next>eps){
    				//新的更好
    				now=next;
    				x=nex; 
    			}
    		}
    		T*=delta; //按照时间降低 
    	}
    	return ans; 
    }
    
    
    int main(){
    	int tot;
    	scanf("%d",&tot);
    	while(tot--){
    		scanf("%lf",&y);
    		printf("%.4lf
    ",solve());
    	}
    return 0;
    }
    

      

  • 相关阅读:
    BNU校赛
    Latest Common Ancestor
    Codeforces Round #482 (Div. 2)
    Persistent Line Segment Tree
    2018HNCCPC(Onsite)
    2018HNCCPC
    2017 ACM Jordanian Collegiate Programming Contest
    Codeforces Round #480 (Div. 2)
    负载均衡SLB
    windows下的端口监听、程序端口查找命令
  • 原文地址:https://www.cnblogs.com/shirlybaby/p/12392291.html
Copyright © 2011-2022 走看看