日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2020A炉温曲线第三题模拟退火算法(附代码)

發布時間:2024/1/1 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020A炉温曲线第三题模拟退火算法(附代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在問題二的條件下求出面積的最小值

from matplotlib import pyplot as plt import numpy as np import random import math from 第二題 import k,T def test(v,T1,T2,T3,T4):t_list=np.linspace(0,400,801).tolist()u_list=[25]for i in t_list:kk=k(i,v)*(T(i,v,T1,T2,T3,T4)-u_list[-1])if abs(kk)>3:return Falseu_list.append(u_list[-1]+kk*0.5)u_list.pop()if len([i for i in u_list if i>=150 and i<=190])<60/0.5 or len([i for i in u_list if i>=150 and i<=190])>120/0.5:return Falseif len([i for i in u_list if i>=217])<40/0.5 or len([i for i in u_list if i>=270])>90/0.5:return Falsemax=np.array(u_list).max()if max>250 or max<240:return Falsereturn True#[start,end]為定義域 def initialization(start, end):return random.uniform(start, end) def initialication_tuple(start_list,end_list):#在定義域內構建初值while True:v=initialization(start_list[0],end_list[0])T1=initialization(start_list[1],end_list[1])T2=initialization(start_list[2],end_list[2])T3=initialization(start_list[3],end_list[3])T4=initialization(start_list[4],end_list[4])if test(v,T1,T2,T3,T4):return v,T1,T2,T3,T4 def in_range(x, start, end):return True if start <= x <= end else False def generate_new(x, start, end):while True:#采用高斯分布生成新解upper_bound = end - xlower_bound = start - xsigma = max(upper_bound, lower_bound) / 3new_x = random.gauss(x, sigma)#判斷是否在定義域內,在則返回;否則重復生成if in_range(new_x, start, end):return new_x def geerate_new_tuple(x_list,start_list,end_list):while True:#若不滿足條件則重復生成,直至滿足條件為止new_vt1t2t3t4=[generate_new(x,start,end)for x,start,end in zip(x_list,start_list,end_list)]if test(new_vt1t2t3t4[0],new_vt1t2t3t4[1],new_vt1t2t3t4[2],new_vt1t2t3t4[3],new_vt1t2t3t4[4]):return new_vt1t2t3t4def f(v,T1,T2,T3,T4):t_list=np.linspace(0,400,801).tolist()u_list=[25]for i in t_list:kk=k(i,v)*(T(i,v,T1,T2,T3,T4)-u_list[-1])u_list.append(u_list[-1]+kk*0.5)u_list.pop()list_217=[i for i in u_list if i>217]max_position=np.array(list_217).argmax()list_217=list_217[:max_position]return np.array(list_217).sum()-217*len(list_217)def search(all_vt1t2t3t4,all_fx):return all_vt1t2t3t4[np.array(all_fx).argmin()]def metropolis(fx,new_fx,t):if new_fx<=fx:return Trueelse:p=math.exp((fx-new_fx)/t)return True if random.random()<p else Falsedef tuihuo(t0, t_final, alpha, inner_iter,start_list,end_list):#t0為初始溫度,t_final為終止溫度,alpha為冷卻系數,inner_iter為內層迭代次數,[start,end]為定義域all_vt1t2t3t4=[]all_fx=[]v,T1,T2,T3,T4=initialication_tuple(start_list,end_list)all_vt1t2t3t4.append((v,T1,T2,T3,T4))all_fx.append(f(v,T1,T2,T3,T4))t=t0while t>t_final:v,T1,T2,T3,T4=search(all_vt1t2t3t4,all_fx)fx=f(v,T1,T2,T3,T4)for i in range(inner_iter):new_vt1t2t3t4=geerate_new_tuple([v,T1,T2,T3,T4],start_list,end_list)new_fx=f(new_vt1t2t3t4[0],new_vt1t2t3t4[1],new_vt1t2t3t4[2],new_vt1t2t3t4[3],new_vt1t2t3t4[4])if metropolis(fx,new_fx,t):v,T1,T2,T3,T4=tuple(new_vt1t2t3t4)fx=new_fxall_vt1t2t3t4.append((v,T1,T2,T3,T4))all_fx.append(f(v,T1,T2,T3,T4))t=alpha*tprint(fx*0.5)return search(all_vt1t2t3t4,all_fx),all_fxdef f_show(v,T1,T2,T3,T4):t_list=np.linspace(0,400,801).tolist()u_list=[25]for i in t_list:kk=k(i,v)*(T(i,v,T1,T2,T3,T4)-u_list[-1])u_list.append(u_list[-1]+kk*0.5)u_list.pop()list_217=[i for i in u_list if i>217]max_position=np.array(list_217).argmax()list_217=list_217[:max_position]plt.plot(t_list,u_list)plt.axhline(y=217,ls='--',color='g')plt.plot([i[0] for i in zip(t_list,u_list) if i[1]>217][:max_position],list_217)plt.show()if __name__=='__main__':all=tuihuo(3000,10,0.95,20,[65,165,185,225,245],[100,185,205,245,265])print(all[0])print(f(all[0][0],all[0][1],all[0][2],all[0][3],all[0][4])/2)f_show(all[0][0],all[0][1],all[0][2],all[0][3],all[0][4])plt.plot(all[1])plt.show()

最小面積 436.88723462346024

溫區

1-5

6

7

8-9

溫度

184.99999999300636

204.99999746941685

232.35526429807527

264.99884587932297

總結

以上是生活随笔為你收集整理的2020A炉温曲线第三题模拟退火算法(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。