Python-遺傳演算法君主交叉程式碼實現
import numpy as np
import matplotlib.pyplot as plt
# import math as mt
import seaborn as sns
sns.set_style('darkgrid')
def funcl(x):
y=0
for i in range(len(x)):
y=y+x[i]**2
return y
#%%
NP=100 # 初始化種群數
D=10 # 單條染色體基因數目 10
Pc=0.8 # 交叉率
Pm=0.1 # 變異率
G=200 # 最大遺傳代數
Xs=20 # 上限
Xx=-20 # 下限
jiyi=np.random.rand(NP,D)
f=jiyi*(Xs-Xx)+Xx # 隨機獲得初始種群
FIT=[]
sortf=[]
trace=[]
xtrace=[]
xtracemin=[]
test=[]
for i in range(NP):
FIT.append(funcl(f[i])) # 適應度函式
sortFIT=np.sort(FIT) # 升序排序
index= np.argsort(FIT) # 升序對應索引
for i in range(len(f)):
sortf.append(f[index[i]]) # 得到升序順序對應的種群
#%% 遺傳演算法迴圈
for i in range(G):
print(i)
Emper=sortf[0] # 產生君主
nf=sortf # 出新的種群,在其基礎上進行交叉、變異
for M in range(0,NP,2):
p=np.random.rand() # 君主交叉
if p<Pc:
for j in range(D):
nf[M][j]=Emper[j] # 將君主的染色體給偶數索引的染色體,
# 我覺得這一步好像談不上交叉,外匯跟單gendan5.com只是單純地將君主染色體所佔整體比重加大了
# 人為再加一手傳統的交叉過程,到時候將這個過程刪除,看看影響結果不
for M in range(0,NP,2):
p=np.random.rand() # 交叉
if p<Pc:
q=np.random.randint(0,high=2,size=(1,D))[0].tolist()
for j in range(D):
if q[j]==1:
temp=nf[M+1][j]
nf[M+1][j]=nf[M][j]
nf[M][j]=temp
for M in range(NP): # 變異
for n in range(D):
p=np.random.rand()
if p<Pm:
nf[M][n]=np.random.rand()*(Xs-Xx)+Xx
# 交叉變異結束之後,新一代 nf 加上前代 f 共 2*NP 個個體進行篩選
newf=np.vstack((sortf,nf)) # 垂直方向累加兩個 f
newFIT=[]
for j in range(len(newf)):
newFIT.append(funcl(newf[j])) # 適應度函式
sortFIT=np.sort(newFIT) # 升序排序
index= np.argsort(newFIT) # 升序對應索引
maxfit=max(newFIT)
minfit=min(newFIT)
sortf=[]
for j in range(len(f)):
sortf.append(newf[index[j]]) # 得到升序順序對應的種群
trace.append(minfit)
st=sortf[0].tolist()
xtrace.append(st)
xvalue=[]
for i in range(len(xtrace)):
xvalue.append(xtrace[i][0])
plt.plot(trace,color='green', marker='o',linewidth=2, markersize=3)
plt.xlabel('Number of iterations',fontsize = 10)
plt.ylabel('minyvalue',fontsize = 10)
plt.savefig('pic4',bbox_inches = 'tight',pad_inches = 0,dpi =350)
plt.close()
plt.scatter(list(range(0,200)),xvalue,color='red',s=3) #s 引數設定點的大小
plt.xlabel('Number of iterations',fontsize = 10)
plt.ylabel('x',fontsize = 10)
plt.savefig('pic5',bbox_inches = 'tight',pad_inches = 0,dpi =350)
plt.close()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2786690/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遺傳演算法與C++實現演算法C++
- 【演算法】遺傳演算法GA中幾種交叉運算元小結演算法
- python實現:目標優化演算法——遺傳演算法Python優化演算法
- 遺傳演算法演算法
- 遺傳演算法詳解與實驗演算法
- 遺傳演算法 (轉)演算法
- 基於Python的遺傳演算法特徵約簡(附程式碼)Python演算法特徵
- GAFT-一個使用Python實現的遺傳演算法框架Python演算法框架
- 智慧優化演算法——python實現免疫遺傳演算法的影像擬合優化演算法Python
- 遺傳演算法庫DEAP的示例程式碼的學習和分析演算法
- 透過MATLAB分別對比二進位制編碼遺傳最佳化演算法和實數編碼遺傳最佳化演算法Matlab演算法
- 遺傳演算法的基本框架演算法框架
- 遺傳演算法(一):Basic GA演算法
- 遺傳演算法 (Genetic Algorithm)演算法Go
- MATLAB實戰系列(十一)-多種群遺傳演算法的函式優化演算法(附MATLAB程式碼)Matlab演算法函式優化
- 人工智慧 (13) 遺傳演算法人工智慧演算法
- 10分鐘搞懂遺傳演算法演算法
- python遺傳演算法(詳解)Python演算法
- 使用matlab實現遺傳演算法解決飛行員偵查問題Matlab演算法
- 遺傳演算法解決TSP問題演算法
- 如何學習python遺傳演算法?Python演算法
- 遺傳演算法組卷使用心得演算法
- 遺傳演算法講解(Matlab描述)演算法Matlab
- 感知機演算法(PLA)程式碼實現演算法
- 粒子群演算法和遺傳演算法的比較演算法
- 用遺傳演算法進行特徵選擇演算法特徵
- Unity中利用遺傳演算法訓練MLPUnity演算法
- 基於遺傳演算法的地圖四色原理繪圖上色的Python程式碼演算法地圖繪圖Python
- python-機器學習程式碼總結Python機器學習
- DES演算法C++程式碼實現-密碼學演算法C++密碼學
- 圖解Dijkstra演算法+程式碼實現圖解演算法
- 利用遺傳演算法庫DEAP優化交易策略演算法優化
- 使用MPI並行化遺傳演算法框架GAFT並行演算法框架
- 利用遺傳學演算法求解工作分配問題演算法
- 遺傳演算法求解TSP問題(python版)演算法Python
- 遺傳演算法解決旅行商問題(TSP)演算法
- Python遺傳演算法框架DEAP-Operators and AlgorithmsPython演算法框架Go
- css實現的交叉邊框效果CSS