在R中已經有現成的粒子群演算法套件,可以直接網路下載安裝後使用,
避免重複造輪子之外也可以參考別人的寫法。
避免重複造輪子之外也可以參考別人的寫法。
首先要安裝和載入PSO package
install.packages("pso")
library("pso")
之後就可以開心使用了,首先設定目標函數:
fit <- function(x) 100 * (x[2] - x[1]^2)^2 + (1 - x[1])^2
開始一個簡單的最佳化吧!
psoptim(rep(NA, 2), fit, lower = -5, upper = 5)
## $par
## [1] 1 1
##
## $value
## [1] 8.117e-24
##
## $counts
## function iteration restarts
## 12000 1000 0
##
## $convergence
## [1] 2
##
## $message
## [1] "Maximal number of iterations reached"
##
函數說明 psoptim(par, fn, gr = NULL, …, lower = -1, upper = 1, control = list())
- par 定義最佳化問題的維度,一般用NA就可以了
- fn 適應值函數(最佳化的目標函數)
- gr 這個我不知道
- lower upper 搜索範圍
- control 其他選項的控制,選項如下:
- trace 是否顯示每次迭代的過程,顯示(trace=1)不顯示(trace=0),預設為0
- fnscale 最大化(fnscale=0)或最小化(fnscale=1),預設為1
- maxit 最大迭代次數,預設maxit=1000
- maxf 停止的條件,適應值函數的最大值,預設Inf
- abstol 停止的條件,適應值函數的最小值,預設-Inf
- REPORT 顯示迭代過程的步長,預設50
- s 粒子群的大小(數量),預設floor(10+2*sqrt(length(par)))
- w 粒子移動速度的權重,預設1/(2*log(2))
- c.p 個體最佳解的權重,預設5+log(2)
- c.g 整體最佳解的權重,預設5+log(2)
- v.max 移動速度的大小,預設v.max*d
可以自行設定參數使收斂效果更好
psoptim(rep(NA, 2), fit, lower = -5, upper = 5, control = list(trace = 1,
abstol = 1e-10, REPORT = 50, s = 30, v.max = 1))
## S=30, K=3, p=0.0967, w0=0.7213, w1=0.7213, c.p=1.193, c.g=1.193
## v.max=1, d=14.14, vectorize=FALSE, hybrid=FALSE
## It 50: fitness=0.001333
## It 100: fitness=1.375e-05
## It 150: fitness=2.661e-06
## It 200: fitness=4.68e-07
## It 250: fitness=4.7e-08
## It 300: fitness=5.039e-09
## It 350: fitness=1.47e-10
## Converged
## $par
## [1] 1 1
##
## $value
## [1] 8.67e-11
##
## $counts
## function iteration restarts
## 10770 359 0
##
## $convergence
## [1] 0
##
## $message
## [1] "Converged"
##
你好,能解释下输出的结果里value的值是什么吗,还有function的值是什么
回覆刪除