2012年6月17日 星期日

R PSO package 粒子群演算法套件

 R PSO(Particle Swarm Optimizer) package 粒子群演算法套件


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
還有更多的設定可以參閱:http://cran.r-project.org/web/packages/pso/pso.pdf

可以自行設定參數使收斂效果更好
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"
## 

1 則留言:

  1. 你好,能解释下输出的结果里value的值是什么吗,还有function的值是什么

    回覆刪除