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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【演算法】遺傳演算法GA中幾種交叉運算元小結演算法
- 遺傳演算法演算法
- 基於Python的遺傳演算法特徵約簡(附程式碼)Python演算法特徵
- 遺傳演算法詳解與實驗演算法
- 智慧優化演算法——python實現免疫遺傳演算法的影像擬合優化演算法Python
- 透過MATLAB分別對比二進位制編碼遺傳最佳化演算法和實數編碼遺傳最佳化演算法Matlab演算法
- MATLAB實戰系列(十一)-多種群遺傳演算法的函式優化演算法(附MATLAB程式碼)Matlab演算法函式優化
- 遺傳演算法庫DEAP的示例程式碼的學習和分析演算法
- 遺傳演算法的基本框架演算法框架
- python遺傳演算法(詳解)Python演算法
- 遺傳演算法(一):Basic GA演算法
- 10分鐘搞懂遺傳演算法演算法
- 人工智慧 (13) 遺傳演算法人工智慧演算法
- 如何學習python遺傳演算法?Python演算法
- 基於遺傳演算法的地圖四色原理繪圖上色的Python程式碼演算法地圖繪圖Python
- 遺傳演算法組卷使用心得演算法
- 遺傳演算法解決TSP問題演算法
- 感知機演算法(PLA)程式碼實現演算法
- 圖解Dijkstra演算法+程式碼實現圖解演算法
- 粒子群演算法和遺傳演算法的比較演算法
- 用遺傳演算法進行特徵選擇演算法特徵
- 遺傳演算法求解TSP問題(python版)演算法Python
- Unity中利用遺傳演算法訓練MLPUnity演算法
- 手寫演算法-python程式碼實現Kmeans演算法Python
- 利用遺傳演算法庫DEAP優化交易策略演算法優化
- 使用MPI並行化遺傳演算法框架GAFT並行演算法框架
- 利用遺傳學演算法求解工作分配問題演算法
- 遺傳演算法解決旅行商問題(TSP)演算法
- 使阿里oss實現前端程式碼自動上傳阿里前端
- Python-程式Python
- 常見排序演算法原理及JS程式碼實現排序演算法JS
- 量子圖形加密演算法的MATLAB程式碼實現加密演算法Matlab
- 圖解KMP字串匹配演算法+程式碼實現圖解KMP字串匹配演算法
- 40行程式碼實現React核心Diff演算法行程React演算法
- python-機器學習程式碼總結Python機器學習
- Parasoft Jtest——如何征服遺留程式碼
- 遺傳演算法解決函式最佳化問題演算法函式
- 幾行程式碼實現負載均衡輪詢演算法行程負載演算法