版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第python人工智能遺傳算法示例解析目錄一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)原理三、實(shí)驗(yàn)條件四、實(shí)驗(yàn)內(nèi)容五、實(shí)驗(yàn)結(jié)果
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉和掌握遺傳算法的原理、流程和編碼策略,并利用遺傳求解函數(shù)優(yōu)化問(wèn)題,理解求解流程并測(cè)試主要參數(shù)對(duì)結(jié)果的影響。
二、實(shí)驗(yàn)原理
遺傳算法的基本思想正是基于模仿生物界遺傳學(xué)的遺傳過(guò)程。它把問(wèn)題的參數(shù)用基因代表,把問(wèn)題的解用染色體代表(在計(jì)算機(jī)里用二進(jìn)制碼表示),從而得到一個(gè)由具有不同染色體的個(gè)體組成的群體。這個(gè)群體在問(wèn)題特定的環(huán)境里生存競(jìng)爭(zhēng),適者有最好的機(jī)會(huì)生存和個(gè)體組成的群體。后代隨機(jī)化地繼承了父代的最好特征,并也在生存環(huán)境的控制支配下繼續(xù)這一過(guò)程,群體的染色體都將逐漸適應(yīng)環(huán)境,不斷進(jìn)化,最后收斂到一族最適應(yīng)環(huán)境的類(lèi)似個(gè)體,即得到問(wèn)題最優(yōu)的解。
三、實(shí)驗(yàn)條件
Python3,Anaconda3,PyCharm
四、實(shí)驗(yàn)內(nèi)容
importmatplotlib.pyplotasplt
importrandom
importmath
#計(jì)算函數(shù)
deff(args):
returnf2(args)
deff1(args):
return(3-(math.sin(2*args[0]))**2-(math.sin(2*args[1]))**2)
deff2(args):
x=1
foriinrange(len(args)):
z=0
forjinrange(5):
z+=(j+1)*math.cos(((j+1)+1)*args[i]+(j+1))
x*=z
returnx
#適應(yīng)函數(shù)
defs(x):
returns2(x)
defs1(x):
returnmath.exp(-abs(x-1))
defs2(x):
returnmath.exp(-abs(x+187))
#計(jì)算2進(jìn)制序列代表的數(shù)值
解碼并計(jì)算值
group染色體
chrom_length染色體長(zhǎng)度
max_value,min_value上下限
div分界點(diǎn)
defb2d(b,chrom_length,max_value,min_value,div):
rwno=[]
#因?yàn)槿旧w里面有多個(gè)變量,所以需要div來(lái)分割
foriinrange(len(div)):
ifi==0:
star=0
end=div[i]
else:
star=div[i-1]+1
end=div[i]
t=0
forjinrange(star,end):#分隔參數(shù)[1,2,3||4,5,6]
t+=b[j]*(math.pow(2,j-star))
t=t*max_value/(math.pow(2,end-star+1)-1)-min_value
rwno.append(t)
returnrwno#這是一個(gè)list
計(jì)算當(dāng)前函數(shù)值
group染色體
chrom_length染色體長(zhǎng)度
max_value,min_value最大最小值
divid分割
defcalobjValue(group,chrom_length,max_value,min_value,divid):
obj_value=[]
foriinrange(len(group)):
x=b2d(group[i],chrom_length,max_value,min_value,divid)#這里面可能是多個(gè)變量
obj_value.append(f(x))
returnobj_value
#獲取適應(yīng)值
defcalfitValue(obj_value):
fit_value=[]
foriinrange(len(obj_value)):
temp=s(obj_value[i])#調(diào)用適應(yīng)函數(shù)計(jì)算
fit_value.append(temp)
returnfit_value
#累計(jì)適應(yīng)值方便計(jì)算平均
defsum_fit(fit_value):
total=0
foriinrange(len(fit_value)):
total+=fit_value[i]
returntotal
#轉(zhuǎn)輪盤(pán)選擇法
defselection(group,fit_value):
newfit_value=[]#[[[染色體],[錨點(diǎn)]],...]
newgroup=[]#[[父],[母],[父],[母],....]
#適應(yīng)度總和
total_fit=sum_fit(fit_value)
#設(shè)置各個(gè)的錨點(diǎn)
t=0
foriinrange(len(group)):
t+=fit_value[i]/total_fit
newfit_value.append([group[i],t])
#轉(zhuǎn)輪盤(pán)選擇法
foriinrange(len(newfit_value)):
parents=len(newfit_value)#初始化指針
r=random.random()#指針
forjinrange(len(newfit_value)):#看看指針指到睡了
ifnewfit_value[j][1]r:
parents=j
break
newgroup.append(newfit_value[parents][0])
returnnewgroup
defcrossover(group,fit_value,pc):
parents_group=selection(group,fit_value)#[[[父],[母]],....]
group_len=len(parents_group)
foriinrange(0,group_len,2):
if(random.random()pc):#看看是否要交配
cpoint=random.randint(0,len(parents_group[0]))#隨機(jī)交叉點(diǎn)
temp1=[]
temp2=[]
temp1.extend(parents_group[i][0:cpoint])
temp1.extend(parents_group[i+1][cpoint:len(parents_group[i])])
temp2.extend(parents_group[i+1][0:cpoint])
temp2.extend(parents_group[i][cpoint:len(parents_group[i])])
group[i]=temp1
group[i+1]=temp2
#基因突變
defmutation(group,pm):
px=len(group)
py=len(group[0])
foriinrange(px):#遍歷
if(random.random()pm):
mpoint=random.randint(0,py-1)#取要變異哪個(gè)
if(group[i][mpoint]==1):
group[i][mpoint]=0
else:
group[i][mpoint]=1
找出最優(yōu)解和最優(yōu)解的基因編碼
group種群染色去
fit_value種群適應(yīng)
defbest(group,fit_value):
px=len(group)
best_in=group[0]
best_fit=fit_value[0]
foriinrange(1,px):
if(fit_value[i]best_fit):
best_fit=fit_value[i]
best_in=group[i]
#print(best_in)
return[best_in,best_fit]
創(chuàng)建初代種群
group_size種群大小
chrom_length染色體長(zhǎng)度
defgetFisrtGroup(group_size,chrom_length):
#print('初代種群:')
group=[]
foriinrange(group_size):
temp=[]
forjinrange(chrom_length):
temp.append(random.randint(0,1))
group.append(temp)
#print(group)
returngroup
generation=50#繁衍代數(shù)(數(shù)量越小,出結(jié)果膾,迭代次數(shù)越少)
group_size=400#染色體數(shù)量,偶數(shù)
max_value=20#范圍
min_value=10#偏移修正
chrom_length=800#染色體長(zhǎng)度
divid=[399,chrom_length-1]#輸入值分界點(diǎn),最后一位必須是染色體長(zhǎng)度
pc=0.7#交配概率
pm=0.1#變異概率
results=[]#存儲(chǔ)每一代的最優(yōu)解
fit_value=[]#個(gè)體適應(yīng)度
points=[]#多個(gè)最優(yōu)解
#生成初代
group=getFisrtGroup(group_size,chrom_length)
foriinrange(generation):
ifi100:
pm=0.01
ifi1000:
pm=0.001
obj_value=calobjValue(group,chrom_length,max_value,min_value,divid)#個(gè)體評(píng)價(jià)
fit_value=calfitValue(obj_value)#獲取群體適應(yīng)值
best_individual,best_fit=best(group,fit_value)#返回最優(yōu)基因,最優(yōu)適應(yīng)值
xx=b2d(best_individual,chrom_length,max_value,min_value,divid)
if(abs(f(xx)+186.730909)0.000001):#找到最優(yōu)解
flag=False
forpinpoints:
if((abs(xx[0]-p[0])0.1)and(abs(xx[1]-p[1])0.1)):#剔除重復(fù)解
flag=True
break
ifflag==False:
print(xx)
points.append(xx)
results.append([i,best_fit,b2d(best_individual,chrom_length,max_value,min_value,divid),best_individual])#加進(jìn)坐標(biāo)里
crossover(group,fit_value,pc)#交配
mutation(group,pm)#變異
#results.sort(key=lambdax:x[1])
rank=sorted(results,key=lambdax:x[1])
#print('\n',rank[-1])
#print(results)
x=b2d(rank[-1][3],chrom_length,max_value,min_value,divid)
#最終結(jié)果
print("f(x)=",f(x),
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新疆克孜勒蘇柯?tīng)柨俗巫灾沃?025-2026學(xué)年八年級(jí)上學(xué)期1月期末考試物理試卷(無(wú)答案)
- 遼寧省朝陽(yáng)市2025-2026學(xué)年八年級(jí)上學(xué)期1月期末考試地理試卷(含答案)
- 湖南省衡陽(yáng)市衡陽(yáng)縣2025-2026學(xué)年高二上學(xué)期期末質(zhì)量檢測(cè)(創(chuàng)新實(shí)驗(yàn)班)生物試卷(含答案)
- 化工作業(yè)安全培訓(xùn)
- 沿海公共航路指南2026
- 化工企業(yè)安全生產(chǎn)培訓(xùn)課件
- 飛行事故預(yù)防培訓(xùn)課件
- 鋼結(jié)構(gòu)節(jié)能減排技術(shù)措施
- 2026山東事業(yè)單位統(tǒng)考臨沂市郯城縣招聘綜合類(lèi)崗位29人備考考試試題及答案解析
- 2026浙江寧波市升力同創(chuàng)科技咨詢服務(wù)有限公司招聘1人參考考試題庫(kù)及答案解析
- 第21章 反比例函數(shù)(單元測(cè)試·綜合卷)(含答案)-滬科版(2024)九上
- 鋼結(jié)構(gòu)橋梁施工監(jiān)測(cè)方案
- 2025年秋青島版(五四學(xué)制)小學(xué)數(shù)學(xué)五年級(jí)上冊(cè)(全冊(cè))知識(shí)點(diǎn)梳理歸納
- 箱包工廠合作合同范本
- 2026年張家界航空工業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試必刷測(cè)試卷必考題
- 【語(yǔ)文】陜西省西安市高新一小小學(xué)一年級(jí)上冊(cè)期末試卷
- 江蘇省南京市聯(lián)合體2026屆數(shù)學(xué)七年級(jí)第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 企業(yè)財(cái)務(wù)知識(shí)培訓(xùn)目的
- 建筑總承包戰(zhàn)略合作協(xié)議書(shū)標(biāo)準(zhǔn)范本
- 2025江蘇蘇州高新區(qū)獅山商務(wù)創(chuàng)新區(qū)下屬國(guó)有企業(yè)招聘9人筆試題庫(kù)及答案詳解
- xx市燃?xì)飧脑祉?xiàng)目可行性研究報(bào)告
評(píng)論
0/150
提交評(píng)論