今天補班補課大家辛苦了
讓我們用複雜的GA來結束這一天
今天要介紹的是R語言的GA
套件
R Docmentation:Link
這個套件也是用以基因演算法的特色,求取最適合的解
參數有點多到無語
不過還是認真的來研究一下好了
ga(type = c("binary", "real-valued", "permutation"),
fitness, …,
lower, upper, nBits,
population = gaControl(type)$population,
selection = gaControl(type)$selection,
crossover = gaControl(type)$crossover,
mutation = gaControl(type)$mutation,
popSize = 50,
pcrossover = 0.8,
pmutation = 0.1,
elitism = base::max(1, round(popSize*0.05)),
updatePop = FALSE,
postFitness = NULL,
maxiter = 100,
run = maxiter,
maxFitness = Inf,
names = NULL,
suggestions = NULL,
optim = FALSE,
optimArgs = list(method = "L-BFGS-B",
poptim = 0.05,
pressel = 0.5,
control = list(fnscale = -1, maxit = 100)),
keepBest = FALSE,
parallel = FALSE,
monitor = if(interactive()) gaMonitor else FALSE,
seed = NULL)
type
:所求的解的型態,如binary
(二元運算)、real-valued
(實數)、permutation
(排列:以重新排列為目標)fitness
:適應函數,型態為string
lower
:搜尋時的下限(和其他套件的min
是一樣的意思)upper
:搜尋時的上限(和其他套件的max
是一樣的意思)nBits
:在二進制時的位數population
:初始群體,可以參考ga_Population的可用函數selection
:選擇的方式,可以參考ga_Selection的可用函數crossover
:交配的方式,可以參考ga_Crossover的可用函數mutation
:突變的方式,可以參考ga_Mutation的可用函數popSize
:初始群體的大小updatePop
:預設值為FALSE
,若設置為TRUE
則將回傳使用者所定義的適應函數的結果中第一個屬性(目前仍在測試階段)postFitness
:使用者自行定義,使用時會接收到目前演算法所使用的class
,執行過後會回傳新的版本以用於更新演算法的搜尋方式(目前仍在測試階段)pcrossover
:Crossove的機率,預設值為0.8pmutation
:Mutation的機率,預設值為0.1elitism
:菁英政策下所保留的染色體數量maxiter
:最多的迭代數run
:在達到GA停止前,連續演化出相同適應值的代數maxFitness
:最大適應值names
:決策變數的名稱,為字串向量(a vector of character strings)suggestions
:包含在初始群體中的字串矩陣,其數量必須和decision variables的數量相同optim
:預設值為FALSE
,用於是否使用優化演算法來進行區域搜尋,使用的話參考optimArgs
optimArgs
:可使用method
、poptim
、pressel
、control
keepBest
:TRUE
或FALSE
,決定是否要保留每一世代最佳的染色體於bestSol
parallel
:詳情請參考文件monitor
:於每一世代輸出結果seed
:隨機產生整數值用於複製GA搜尋結果,需要搭配doRNG
套件
經過上面漏漏長的參數說明我只能說這個套件非常的完善但也非常複雜
有很多參數都是其他套件所沒有的
但若需要高客製化使用模型時就可以考慮使用GA
這個套件
安裝與使用套件
# GA
install.packages("GA")
library(GA)
vignette("GA")
這次的範例也是和過去一樣使用方程式來求解
f<-function(x1,x2,x3,x4,x5){
(((x1-7)^2 + (x2-77)^2 +(x3-777)^2 +(x4-7777)^2 +(x5-77777)^2))
}
設定相關的參數
這邊不一樣的是GA
是求適應函數最大值
所以在結果那改成1/f
GA <- ga(type = "real-valued",
fitness = function(x) 1/f(x[1], x[2],x[3],x[4],x[5]),
pcrossover = 0.5,
pmutation = 0.1,
maxiter = 2500,
lower = rep(0.0, times = 5),
upper = rep(99999.0, times = 5))
結果
summary(GA)
plot(GA)
今天的程式碼:Github
相關參考資料:https://www.rdocumentation.org/packages/GA/versions/3.2/topics/ga
不知不覺就已經到了第20天了
不知道有多少人堅持著在這條不歸路(誤xdd)
其實每天更一篇真的很吃力
要高效的運用每分鐘
希望明天的我可以把週一所以報告都完成
不,要從現在開始奮戰30小時就可以迎接美麗的曙光(撞牆)