前兩天介紹了genalg中的rbga.bin的用法
那我想要透過這個套件時實作第一個方程式的內容
那今天要使用的就是rbga
rbga(stringMin=c(),
stringMax=c(),
suggestions=NULL,
popSize=200,
iters=100,
mutationChance=NA,
elitism=NA,
monitorFunc=NULL,
evalFunc=NULL,
showSettings=FALSE,
verbose=FALSE)
stringMin
:設定每個基因的最小值stringMax
:設定每個基因的最大值suggestions
:染色體的建議列表popSize
:群體的大小,預設值為200iters
:迭代的次數,預設值為100mutationChance
:預設值為 1/(size+1)elitism
:預設值為20%的群體大小monitorFunc
:監控程式evalFunc
:適應函數方程式showSettings
:預設值為Falseverbose
:預設值為False
今天實際測試後發現
rbga的使用效果好像並沒有那麼理想
測試了很多是都沒有成功
適應函數(和mcga的用法相同)
evaluate <- function(x=c()) {
returnVal = ((x[1]-7)^2 + (x[2]-77)^2 +(x[3]-777)^2 +(x[4]-7777)^2 +(x[5]-77777)^2)
returnVal
}
相關的設定
rbga.results = rbga(rep(0.0, times = 5),
rep(99999.9, times = 5),
popSize = 200,
iters = 250,
evalFunc=evaluate,
verbose=TRUE,
mutationChance=0.05)
輸出結果
summary(rbga.results)
plot(rbga.results)
plot(rbga.results, type="hist")
plot(rbga.results, type="vars")
這樣看起來看不出結果
透過print
把結果顯示出來
可以看初結果和預期的還是有所落差
print(rbga.results$population[1:10,])
[,1] [,2] [,3] [,4] [,5]
[1,] 10.9838 200.3687 754.1052 7769.776 77776.12
[2,] 10.9838 200.3687 754.1052 7769.776 77776.12
[3,] 10.9838 200.3687 754.1052 7769.776 77776.12
[4,] 10.9838 200.3687 754.1052 7769.776 77776.12
[5,] 10.9838 200.3687 754.1052 7769.776 77776.12
[6,] 10.9838 200.3687 754.1052 7769.776 77776.12
[7,] 10.9838 200.3687 754.1052 7769.776 77776.12
[8,] 10.9838 200.3687 754.1052 7769.776 77776.12
[9,] 10.9838 200.3687 754.1052 7769.776 77776.12
[10,] 10.9838 200.3687 754.1052 7769.776 77776.12
所以看完結果後,
發現和mcga
第二天情況相同
情況並沒有到最好的結果
這邊也是有一樣的狀況
因為設定不適合的參數
所以當找到適合的參數也可以找出很接近的結果
> print(rbga.results$population[1:10,])
[,1] [,2] [,3] [,4] [,5]
[1,] 7.234623 72.92616 788.6307 7856.715 77750.48
[2,] 7.234623 72.92616 788.6307 7856.715 77750.48
[3,] 7.234623 72.92616 788.6307 7856.715 77750.48
[4,] 7.234623 72.92616 788.6307 7856.715 77750.48
[5,] 7.234623 72.92616 788.6307 7856.715 77750.48