iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 20
0
AI & Data

GA Note - 基因演算法的世界系列 第 20

【Day20】GA with you - R Package GA R套件GA

今天補班補課大家辛苦了
讓我們用複雜的GA來結束這一天


今天要介紹的是R語言的GA套件
R Docmentation:Link

Introduction 介紹

這個套件也是用以基因演算法的特色,求取最適合的解

Usage 用法

參數有點多到無語
不過還是認真的來研究一下好了

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)

Argument 參數

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.8
pmutation:Mutation的機率,預設值為0.1
elitism:菁英政策下所保留的染色體數量
maxiter:最多的迭代數
run:在達到GA停止前,連續演化出相同適應值的代數
maxFitness:最大適應值
names:決策變數的名稱,為字串向量(a vector of character strings)
suggestions:包含在初始群體中的字串矩陣,其數量必須和decision variables的數量相同
optim:預設值為FALSE,用於是否使用優化演算法來進行區域搜尋,使用的話參考optimArgs
optimArgs:可使用methodpoptimpresselcontrol
keepBest:TRUEFALSE,決定是否要保留每一世代最佳的染色體於bestSol
parallel:詳情請參考文件
monitor:於每一世代輸出結果
seed:隨機產生整數值用於複製GA搜尋結果,需要搭配doRNG套件

經過上面漏漏長的參數說明我只能說這個套件非常的完善但也非常複雜
有很多參數都是其他套件所沒有的
但若需要高客製化使用模型時就可以考慮使用GA這個套件

Examples 範例

安裝與使用套件

# 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)

Day20-GA

今天的程式碼:Github


相關參考資料:https://www.rdocumentation.org/packages/GA/versions/3.2/topics/ga


不知不覺就已經到了第20天了
不知道有多少人堅持著在這條不歸路(誤xdd)
其實每天更一篇真的很吃力
要高效的運用每分鐘
希望明天的我可以把週一所以報告都完成
不,要從現在開始奮戰30小時就可以迎接美麗的曙光(撞牆)


上一篇
【Day19】GA with you - R Package genalg R套件 genalg (3)
下一篇
【Day21】GA with you - R Package genoud R套件 genoud
系列文
GA Note - 基因演算法的世界30

尚未有邦友留言

立即登入留言