python人工智能遺傳算法示例解析_第1頁(yè)
python人工智能遺傳算法示例解析_第2頁(yè)
python人工智能遺傳算法示例解析_第3頁(yè)
python人工智能遺傳算法示例解析_第4頁(yè)
python人工智能遺傳算法示例解析_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論