以Ras函數(Rastrigin's Function)為目標函數,求其在x1,x2∈[-5,5]上的最小值。這個函數對模擬退火、進化計算等算法具有很強的欺騙性,因為它有非常多的局部最小值點和局部最大值點,很容易使算法陷入局部最優,而不能得到全局最優解。如下圖所示,該函數只在(0,0)處存在全局最小值0。
Python代碼實現
import numpy as np
import matplotlib.pyplot as plt
# 目標函數定義
def ras(x):
y = 20 + x[0] ** 2 + x[1] ** 2 - 10 * (np.cos(2 * np.pi * x[0]) + np.cos(2 * np.pi * x[1]))
return y
# 參數初始化
w = 1.0
c1 = 1.49445
c2 = 1.49445
maxgen = 200 # 進化次數
sizepop = 20 # 種群規模
# 粒子速度和位置的范圍
Vmax = 1
Vmin = -1
popmax = 5
popmin = -5
# 產生初始粒子和速度
pop = 5 * np.random.uniform(-1, 1, (2, sizepop))
v = np.random.uniform(-1, 1, (2, sizepop))
fitness = ras(pop) # 計算適應度
i = np.argmin(fitness) # 找最好的個體
gbest = pop # 記錄個體最優位置
zbest = pop[:, i] # 記錄群體最優位置
fitnessgbest = fitness # 個體最佳適應度值
fitnesszbest = fitness[i] # 全局最佳適應度值
# 迭代尋優
t = 0
record = np.zeros(maxgen)
while t < maxgen:
# 速度更新
v = w * v + c1 * np.random.random() * (gbest - pop) + c2 * np.random.random() * (zbest.reshape(2, 1) - pop)
v[v > Vmax] = Vmax # 限制速度
v[v < Vmin] = Vmin
# 位置更新
pop = pop + 0.5 * v
pop[pop > popmax] = popmax # 限制位置
pop[pop < popmin] = popmin
'''
# 自適應變異
p = np.random.random() # 隨機生成一個0~1內的數
if p > 0.8: # 如果這個數落在變異概率區間內,則進行變異處理
k = np.random.randint(0,2) # 在[0,2)之間隨機選一個整數
pop[:,k] = np.random.random() # 在選定的位置進行變異
'''
# 計算適應度值
fitness = ras(pop)
# 個體最優位置更新
index = fitness < fitnessgbest
fitnessgbest[index] = fitness[index]
gbest[:, index] = pop[:, index]
# 群體最優更新
j = np.argmin(fitness)
if fitness[j] < fitnesszbest:
zbest = pop[:, j]
fitnesszbest = fitness[j]
record[t] = fitnesszbest # 記錄群體最優位置的變化
t = t + 1
# 結果分析
print(zbest)
plt.plot(record, 'b-')
plt.xlabel('generation')
plt.ylabel('fitness')
plt.title('fitness curve')
plt.show()
結果為
[0.99699579 0.00148844]
可以知道求解的點非最小值,算法陷入了局部最小值。
刪除自適應變異部分的注釋,運行后結果如下,可以看出收斂到全局最優解。
[0.00022989 0.00014612]
Matlab有個自帶的粒子群優化函數particleswarm也可以使用。本例的代碼如下:
y = @(x) 20 + x(1).^2 + x(2).^2 - 10*(cos(2*pi*x(1))+cos(2*pi*x(2)));
rng default
options = optimoptions('particleswarm','SwarmSize',200,'HybridFcn',@fmincon,'MaxIterations',200, 'Display','iter');
lb = [-5 -5]; % 這是變量的下限
ub = [5 5]; % 這是變量的上限
[x,fval,exitflag,output] = particleswarm(y,length(lb),lb,ub,options);
結果如下
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
MATLAB仿真
+關注
關注
4文章
176瀏覽量
19922 -
粒子群算法
+關注
關注
0文章
63瀏覽量
13031 -
python
+關注
關注
56文章
4792瀏覽量
84627
發布評論請先 登錄
相關推薦
粒子群優化模糊神經網絡在語音識別中的應用
針對模糊神經網絡訓練采用BP算法比較依賴于網絡的初始條件,訓練時間較長,容易陷入局部極值的缺點,利用粒子群優化算法(PSO)的全局搜索性能,將PSO用于模糊神經網絡的訓練過程.由于基本PSO
發表于 05-06 09:05
LabVIEW粒子群優化(PSO)算法實現
常常聽到這個算法那個算法的,今天就介紹一下粒子群優化算法的案例。實際效果圖如下:PSO算法網上有很多關于matlab實現的方式及原理講解,有
發表于 07-07 10:31
粒子群算法城鎮能源優化調度問題
computation)。源于對鳥群捕食的行為研究。粒子群優化算法的基本思想:是通過群體中個體之間的協作和信息共享來尋找最優解.PSO的優勢:在于簡單容易實現并且沒有許多參數的調節。目前已被廣泛應用于
發表于 07-07 06:04
什么是粒子群算法?
粒子群算法(1.初步了解)? 1995年,受鳥類捕食行為的啟發,Kennedy和Eberhart正式提出了粒子群優化算法的概念。研究中發現,在鳥類捕食過程中,個體并不知道如何找到食物以及自身離食物
發表于 07-07 07:50
【Simulink】粒子群算法(PSO)整定PID參數(附代碼和講解)精選資料分享
本文提供粒子群算法簡介和一個算法舉例,提供粒子群算法仿真PID的M文件代碼及simulink仿真。另外,本文還提供了一種動態simulink仿真方法,可以讓M文件和simulink文件之間互相交換數據,
發表于 09-08 07:53
基于模擬退火結合粒子群算法介紹
【優化選址】基于模擬退火結合粒子群算法求解分布式電源定容選址問題matlab源碼1 算法介紹1.1 模擬退火算法1.2 粒子群算法模型介紹見這里。1.3 含有分布式電源的配電網結構2 部分代碼
發表于 12-29 07:04
基于模擬退火結合粒子群算法相關資料分享
【優化選址】基于模擬退火結合粒子群算法求解分布式電源定容選址問題matlab源碼1 算法介紹1.1 模擬退火算法1.2 粒子群算法粒子群算法同遺傳算法相似,也是根據生物界中的種群行為而
發表于 01-03 07:58
基于matlab粒子群配電網重構簡介
一、簡介基于matlab粒子群配電網重構二、源代碼%主函數clearclcwarning offN=10;%節點總數(包括電源節點)R=16;%支路總數sizepop=10;%
發表于 01-03 07:05
基于混合粒子群算法的PID參數尋優
提出一種將單純形法SM與粒子群算法PSO結合的混合粒子群算法HPSO。通過對3種常用測試函數進行優化和比較,結果表明HPSO比PSO和SM都
發表于 05-25 16:29
?20次下載
基于灰度平均梯度與粒子群優化PSO算法的散焦圖像模糊參數估計
針對散焦模糊圖像的復原問題,提出一種基于灰度平均梯度與粒子群優化(PSO)算法相結合的散焦圖像模糊參數估計方法。首先,利用PSO算法隨機生成一群不同模糊半徑的點擴散函數,分別用維納濾波
發表于 12-21 09:27
?1次下載
基于粒子群優化PSO算法的部署策略
針對云計算基礎設施即服務(IaaS)中的虛擬機部署問題,提出一種基于粒子群優化(PSO)算法的部署策略。由于PSO算法在處理虛擬機部署這類大規模復雜問題時,具有收斂速度慢且容易陷入局部最優的缺點
發表于 12-26 10:32
?1次下載
基于粒子群算法的行李條碼閱讀器優化
問題;其次,通過標準粒子群優化(PSO)算法求解此優化問題;最后,依照模型特點對標準粒子群算法進行改進。仿真結果表明,與標準PSO算法相比,DPDF-
發表于 12-26 18:51
?0次下載
【物理應用】基于matlab粒子群配電網重構【含Matlab源碼 764期】
一、簡介基于matlab粒子群配電網重構二、源代碼%主函數clearclcwarning offN=10;%節點總數(包括電源節點)R=16;%支路總數sizepop=10;%
發表于 01-12 12:04
?2次下載
粒子群算法的MATLAB實現(2)
粒子群算法經常與其他算法混合使用。混合策略就是將其他進化算法、傳統優化算法或其他技術應用到PSO中,用于提高粒子多樣性、增強粒子的全局探索能力,或者提高局部開發能力、增強收斂速度與精度
評論