模擬退火學習

模擬退火學習

作業部落
網上講的不錯的(他好像還有一些其他的東西、、、)

引入

對于一些題目,無法直接算出答案或者想不到正解,想到隨機找答案,那么模擬退火就是一種有系統方法的隨機算法

沒用的不需要了解的來源

百度百科......
模擬退火算法來源于固體退火原理,是一種基于概率的算法,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最后在常溫時達到基態,內能減為最小。

幾個要記下來的東西

  1. 溫度:大概理解為答案的波動范圍,看是否會接受不那么好的解
  2. 爬山算法:找很多個答案起點,遇到峰值就記錄答案,最后找最大(小)答案

用途

  1. 數據范圍不大但爆搜顯然過不了的題目
  2. 有一定的求解規律但又不完全符合規律的題目
  3. 多峰函數題或者算數幾何之類的題目
  4. 題目想不出,退火總比爆0好的題目

主要思想

  • 把當前答案看成一只退火兔,一開始很急躁(溫度很高),所以答案到處亂跑(這中間會記錄最優解),最后兔子慢慢冷靜下來(溫度逐漸降低),就找到答案
  • 利用rand來尋找答案接受劣解的波動范圍(當然T也是一個決定性參數)
  • 退火找答案之后,可能會有更優答案在自己周圍很近的地方,所以rand去周圍看一看是否更優
  • 一開始根據自己的猜測來找一個答案“開始”點,可以降低一定時間復雜度......

板子

我只講大致的思想,具體實現根據模板題及luogu的題解講述來學習吧
主要是懶

first

luogu板子題平衡點/吊打xxx
然后,我的優美代碼......

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<ctime>
#include<queue>
#include<stack>
#include<vector>
#define rg register
#define il inline
#define lst long long
#define ldb long double
#define cold 0.99
#define N 1050
#define RD T*((rand()<<1)-RAND_MAX)//rand一個-T到T的數,隨機跳多遠
#define Time() (ldb)clock()/(ldb)CLOCKS_PER_SEC
using namespace std;
const int Inf=1e9;int n;
ldb ansx,ansy,ans;
ldb etlx,etly,etl;
struct WEI{ldb x,y,m;
}ljl[N];il int read()
{rg int s=0,m=0;rg char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')m=1;ch=getchar();}while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();return m?-s:s;
}il ldb f(rg ldb xx,rg ldb yy)
{rg ldb res=0;for(rg int i=1;i<=n;++i){rg ldb dx=xx-ljl[i].x,dy=yy-ljl[i].y;res+=sqrt(dx*dx+dy*dy)*ljl[i].m;}return res;
}int main()
{srand(time(NULL));n=read();for(rg int i=1;i<=n;++i){scanf("%Lf%Lf%Lf",&ljl[i].x,&ljl[i].y,&ljl[i].m);ansx+=ljl[i].x,ansy+=ljl[i].y;}etlx=ansx=ansx/n,etly=ansy=ansy/n;etl=ans=f(ansx,ansy);while(Time()<0.3){rg ldb nans=etl,nx=etlx,ny=etly;for(rg ldb T=1000;T>=1e-16;T*=cold){rg ldb xx=nx+RD,yy=ny+RD;//模擬退火答案的波動范圍rg ldb res=f(xx,yy);//找答案的ansif(ans>res)ans=res,ansx=xx,ansy=yy;//更新答案if(nans>res||exp((res-nans)/T)*RAND_MAX<rand())nans=res,nx=xx,ny=yy;}}printf("%.3Lf %.3Lf\n",ansx,ansy);return 0;
}

second

有難度,luogu均分數據

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<ctime>
#include<queue>
#include<stack>
#include<vector>
#define rg register
#define il inline
#define lst long long
#define ldb long double
#define N 25
#define M 10
#define Time() (ldb)clock()/(ldb)CLOCKS_PER_SEC
using namespace std;
const int Inf=1e5;int n,m;
ldb tot,ans=Inf;
ldb v[N],sum[N];
ldb dp[N][N];il int read()
{rg int s=0,m=0;rg char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')m=1;ch=getchar();}while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();return m?-s:s;
}il ldb PF(rg ldb x){return x*x;}
il ldb sol()
{for(rg int i=1;i<=n;++i)sum[i]=sum[i-1]+v[i];for(rg int i=0;i<=n;++i)for(rg int j=0;j<=m;++j)dp[i][j]=Inf;dp[0][0]=0;for(rg int i=1;i<=n;++i)for(rg int j=1;j<=m;++j)for(rg int k=0;k<i;++k)dp[i][j]=min(dp[i][j],dp[k][j-1]+PF(sum[i]-sum[k]-tot));ans=min(ans,dp[n][m]);return dp[n][m];
}il void SA(rg ldb T)
{rg ldb nans=ans;for(;T>1e-3;T*=0.98){rg int xx=1+rand()%n,yy=1+rand()%n;if(xx==yy)continue;swap(v[xx],v[yy]);rg ldb res=sol();if(res<nans||exp((res-nans)/T)*rand()-RAND_MAX<0)nans=res;else swap(v[xx],v[yy]);}
}int main()
{n=read(),m=read();for(rg int i=1;i<=n;++i)v[i]=read(),tot+=v[i];tot/=m,sol();while(Time()<0.3)SA(1000);printf("%.2Lf\n",sqrt(ans/m));return 0;
}

轉載于:https://www.cnblogs.com/cjoierljl/p/9394519.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388978.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spotify 數據分析_我的Spotify流歷史分析

spotify 數據分析Spotisis /spo-ti-sis/ noun The analysis of one’s Spotify streaming history using Python.Spotisis / spo-ti-sis / 名詞使用Python分析一個人的Spotify流歷史。 I was reading through a lot of data science related guides and project ideas when I …

idea 搜索不到gsonformat_Idea中GsonFormat插件安裝

這個教不的期是范添事大部會基近說小間進圍磚本的程主要是學習IntelliJ IDEA 如何通過GsonFormat插件將JSONObject格式的String 支器事的后功發久這含層請間業在屏有隨些氣和域&#xff0c;實按控幻近持的前時來能過后些的處求也務瀏蔽等機站風滾或默現鈕制燈近持的前時來能過后…

intellig idea中jsp或html數據沒有自動保存和更換字體

主題一:保存數據jsp intellig idea是自動保存數據的,看到沒有保存 解決方案&#xff1a; 成功解決 主題二:更換字體: 或者快捷鍵CtelAlts 成功解決 轉載于:https://www.cnblogs.com/weibanggang/p/9398498.html

java 環境變量

1.確保安裝jrd jdk 2.環境變量配置 (1)新建->變量名"JAVA_HOME"&#xff0c;變量值"C:\Java\jdk1.8.0_05"&#xff08;JDK的安裝路徑&#xff09; (2)編輯->變量名"Path"&#xff0c;在原變量值的最后面加上“;%JAVA_HOME%\bin;%JAVA_HOME…

陸濤喜歡夏琳嗎_夏琳·香布利斯(Charlene Chambliss):從心理學到自然語言處理和應用研究

陸濤喜歡夏琳嗎技術系列中的女性 (WOMEN IN TECHNOLOGY SERIES) Interest in data science has been exponentially increasing over the past decade, and more and more people are working towards making a career switch into the field. In 2020, articles and YouTube v…

【angularJS】簡介

簡介 AngularJS 是一個 JavaScript 框架。它可通過 <script> 標簽添加到 HTML 頁面。 AngularJS 通過 指令 擴展了 HTML&#xff0c;且通過 表達式 綁定數據到 HTML。 AngularJS 是一個 JavaScript 框架。它是一個以 JavaScript 編寫的庫。 AngularJS 是以一個 JavaScrip…

爬取淘寶商品信息selenium+pyquery+mongodb

爬取淘寶商品信息,通過selenium獲得渲染后的源碼,pyquery解析,mongodb存儲 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import Timeout…

紋個雞兒天才小熊貓_給熊貓用戶的5個提示

紋個雞兒天才小熊貓A popular Python library used by those working with data is pandas, an easy and flexible data manipulation and analysis library. There are a myriad of awesome methods and functions in pandas, some of which are probably less well-known tha…

本人服務器遭受黑客長期攻擊,特把這幾天做的一些有用的安全方面總結出來,以方便以后查閱

消息隊列iis360northrarsql2000 netscren本人服務器遭受黑客長期攻擊&#xff0c;特把這幾天做的一些有用的安全方面總結出來&#xff0c;以方便以后查閱&#xff0c;希望這次徹底解覺黑客的攻擊&#xff0c;特次謝謝“冷雨夜”的一些提示。 windows 2003服務器安全設置方法 0…

用戶與用戶組管理

linux最優秀的地方之一&#xff0c;就在于他的多用用戶、多任務環境。 用戶及用戶組的概念 1、文件所有者 由于linux是一個多用戶、多任務的系統。因此可能常常會有很多人同時使用這臺主機來進行工作的情況發生&#xff0c;為了考慮每個人的隱私權以及每個人的喜好的工作環境&a…

代碼 摳圖_3 行 Python 代碼 5 秒摳圖的 AI 神器,根本無需 PS,附教程

曾幾何時&#xff0c;「摳圖」是一個難度系數想當高的活兒&#xff0c;但今天要介紹的這款神工具&#xff0c;只要 3 行代碼 5 秒鐘就可以完成高精度摳圖&#xff0c;甚至都不用會代碼&#xff0c;點兩下鼠標就完成了。感受下這款摳圖工具摳地有多精細&#xff1a;是不是很贊&a…

python函數使用易錯舉例

關于嵌套&#xff1a; 嵌套使用中&#xff0c; retrun inner ---> 返回的是函數的地址 retrun inner() &#xff1a; ---> 運行inner()函數 ---> 運行inner()函數后的返回值a&#xff08;假設&#xff09;返回上級 --> retrun inner()得到返回值a 如…

圖像離群值_什么是離群值?

圖像離群值你是&#xff01; (You are!) Actually not. This is not a text about you.其實并不是。 這不是關于您的文字。 But, as Gladwell puts it in Outliers, if you find yourself being that type of outlier, you’re quite lucky. And rare.但是&#xff0c;正如Gla…

混合模型和EM---混合高斯

2019獨角獸企業重金招聘Python工程師標準>>> 混合高斯 最大似然 用于高斯混合模型的EM 轉載于:https://my.oschina.net/liyangke/blog/2986520

永恒python地速_立竿見影地把你的 Python 代碼提速7倍

之前曾經測試計算斐波那契數列的幾種方法&#xff0c;其中基于遞歸的方法是速度最慢的&#xff0c;例如計算第 40 項的值&#xff0c;需要 36 秒。如下圖所示。要提高運算速度&#xff0c;根本辦法當然是改進算法。不過算法的提高是一個長期積累加上靈機一動的過程。我們今天要…

頂尖大學實驗室的科研方法_這是來自頂尖大學的5門免費自然語言處理課程

頂尖大學實驗室的科研方法Data Science continues to be a hot topic, but more specifically, Natural Language Processing (NLP) is increasing in demand.數據科學仍然是一個熱門話題&#xff0c;但更具體地說&#xff0c;自然語言處理(NLP)的需求正在增長。 Broadly spea…

Python學習---django知識補充之CBV

Django知識補充之CBV Django: url --> def函數 FBV[function based view] 用函數和URL進行匹配 url --> 類 CBV[function based view] 用類和URL進行匹配 POSTMAN插件 http://blog.csdn.net/zzy1078689276/article/details/77528249 基于CBV的登…

「CH2101」可達性統計 解題報告

CH2101 可達性統計 描述 給定一張N個點M條邊的有向無環圖&#xff0c;分別統計從每個點出發能夠到達的點的數量。N,M≤30000。 輸入格式 第一行兩個整數N,M&#xff0c;接下來M行每行兩個整數x,y&#xff0c;表示從x到y的一條有向邊。 輸出格式 共N行&#xff0c;表示每個點能夠…

藍圖解鎖怎么用_[UE4藍圖][Materials]虛幻4中可互動的雪地材質完整實現(一)

不說廢話&#xff0c;先上個演示圖最終成果&#xff08;腳印&#xff0c;雪地可慢慢恢復&#xff0c;地形可控制&#xff09;主要原理&#xff08;白話文&#xff09;&#xff1a;假如你頭上是塊白色并且可以透視的平地&#xff0c;來了個非洲兄弟踩上面&#xff0c;你拿起單反…

數據預處理工具_數據預處理

數據預處理工具As the title states this is the last project from Udacity Nanodegree. The goal of this project is to analyze demographics data for customers of a mail-order sales company in Germany.如標題所示&#xff0c;這是Udacity Nanodegree的最后一個項目。…