模擬退火算法解決路徑優(yōu)化的源代碼_第1頁
模擬退火算法解決路徑優(yōu)化的源代碼_第2頁
模擬退火算法解決路徑優(yōu)化的源代碼_第3頁
模擬退火算法解決路徑優(yōu)化的源代碼_第4頁
模擬退火算法解決路徑優(yōu)化的源代碼_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、ÎÒÓÐ simulated annealing with metropolies(Monte Carlo×öµÄÒ»¸öÏîÄ¿µÄ´úÂ룬ÄãÒª¿´¿´Ã´£¿void anneal(int nparam, int nstep,

2、int nstep_per_block, double t0,const double * param_in,double cost_in, double * params_out, double * cost_out int nblock;int step;int block;int nactive;int rank;int n_accepted = 0;int i, j, n;double cost_current, cost_trial;int * param_index;double * param_current;double * param_trial;double * Q;dou

3、ble * S;double * u;double * dp;double * A;FILE * fp_log_file;char fnameFILENAME_MAX;double temp = t0;double tempmax = temp;double ebar, evar, emin, eta, specific_heat;double delta;double chi = 0.8; / Annealing scheduledouble chi_s = 3.0; / Vanderbilt/Louie 'growth factor'double rm;double roo

4、t3 = sqrt(3.0;double p = 0.02/sqrt(3.0; /max size of annealing stepparam_current = new doublenparam;param_trial = new doublenparam;cost_current = cost_in;MPI_Comm_rank(MPI_COMM_WORLD, &rank;fp_log_file = fopen(fname, "a"if (fp_log_file = (FILE * NULL errorMessage("fopen(log failed

5、n"/ Work out the number of active parameters, and set up the/ index table of the active parameters./ Note that the complete array of parameters (param_trial must/ be used to evaluate the cost function.nactive = 0;for (n = 0; n < nparam; n+ param_currentn = param_inn;param_trialn = param_inn;

6、if (P.is_activen nactive+;param_index = new intnactive;i = 0;for (n = 0; n < nparam; n+ if (P.is_activen param_indexi+ = n;/ Initialise the step distribution matrix Q_ijQ = new doublenactive*nactive;S = new doublenactive*nactive;u = new doublenactive;dp = new doublenactive;A = new doublenactive;d

7、ouble * Qtmp;Qtmp = new doublenactive*nactive;for (i = 0; i < nactive; i+ for (j = 0; j < nactive; j+ delta = (i = j;Qi*nactive + j = p*delta*param_currentparam_indexj;/ carry out annealing pointsnblock = nstep/nstep_per_block;rm = 1.0/(double nstep_per_block;for (block = 0; block < nblock;

8、 block+ / Set the schedule for this block, and initialise blockwise quantities./ We also ensure the step distribution matrix is diagonal.temp = chi*temp;for (i = 0; i < nactive; i+ Ai = 0.0;for (j = 0; j < nactive; j+ Si*nactive + j = 0.0;delta = (i = j;Qi*nactive + j *= delta;ebar = 0.0;evar

9、= 0.0;emin = cost_current;for (i = 0; i < nactive; i+ printf("Step: %d %gn", i, Qi*nactive + i;for (step = 0; step < nstep_per_block; step+ / Set the random vector u, and compute the step size dpfor (i = 0; i < nactive; i+ ui = root3*(r_uniform(*2.0 - 1.0;for (i = 0; i < nactiv

10、e; i+ dpi = 0.0;for (j = 0; j < nactive; j+ dpi += Qi*nactive + j*uj;for (i = 0; i < nactive; i+ n = param_indexi;param_trialn = param_currentn + dpi;if (param_trialn < P.minn param_trialn = P.minn;if (param_trialn > P.maxn param_trialn = P.maxn;/ calculate new cost function scorep_model

11、->setParameters(param_trial;cost_trial = p_costWild->getCost(;cost_trial += p_costLHY->getCost(;cost_trial += p_costTOC1->getCost(;cost_trial += p_costAPRR->getCost(;/ Metropolisdelta = cost_trial - cost_current;if (delta < 0.0 | r_uniform( < exp(-delta/temp for (n = 0; n < nparam; n+ param_currentn = param_trialn;cost_current = cost_trial;+n_accepted;/ 'Energy' statisticsebar += cost_current;evar += cost_current*cost_current;if (cost_current < emin emin = cost_current;/ Per

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論