明天又要開始上課了(淚奔)
時間過太快了啦
東西都還沒有做完(拖延症發作中)
明明整個假日都電腦前工作(吐血)
R Documetation : https://www.rdocumentation.org/packages/mcga
是用於解決實數(real-valued)最佳化問題
突變(mutation)則是透過 -1/+1 進行改變
mcga(popsize, chsize, crossprob = 1.0, mutateprob = 0.01,
elitism = 1, minval, maxval, maxiter = 10, evalFunc)
這邊的參數就會跟前面所介紹的一一對應上
popsize
: 群體數量chsize
: 有多少參數crossprob
: 交配機率,預設值為 1.0mutateprob
: 突變機率,預設值為 0.01elitism
: 菁英策略,預設值為 1minval
: 最小數值maxval
: 最大數值maxiter
: 最多有多少代數,預設值為 10evalFunc
: 適應函數,預設情形都為求最小值
這邊會先用官網的範例示範一次
今天所使用的程式碼都來自R Documetation
第一次使用的時候要先安裝套件
install.packages("mcga")
在引用mcga
require("mcga")
如果出現以下訊息的話就要再多一個步驟(沒有就省略)
Loading required package: mcga
Loading required package: GA
Loading required package: foreach
Loading required package: iterators
____ _
/ ___| / \ Genetic
| | _ / _ \ Algorithms
| |_| |/ ___ \
\____/_/ \_\ version 3.2
Type 'citation("GA")' for citing this R package in publications.
Attaching package: 'GA'
The following object is masked from 'package:utils':
de
Please use 'citation("mcga")' for citing the R package mcga
上面寫說請用citation("mcga")
就按照指示輸入
citation("mcga")
尋求x[1]、x[2]、x[3]、x[4]、x[5]五個數值最佳的答案來求出其最小值
f<-function(x){
return ((x[1]-7)^2 + (x[2]-77)^2 +(x[3]-777)^2 +(x[4]-7777)^2 +(x[5]-77777)^2)
}
這邊的設定都先跟官網一樣
m <- mcga( popsize=200,
chsize=5,
minval=0.0,
maxval=999999999.9,
maxiter=2500,
crossprob=1.0,
mutateprob=0.01,
evalFunc=f)
cat("Best chromosome:\n")
print(m$population[1,])
cat("Cost: ",m$costs[1],"\n")
你以為這樣就完了嗎?!!!!
不~
我們來回顧一下剛剛執行的結果吧~
由於基因演算法 每個人的答案不一定會是一樣的
那就以我剛剛的輸出結果來講解
> cat("Best chromosome:\n")
Best chromosome:
> print(m$population[1,])
[1] 3.958119e-01 1.549891e+01 7.770356e+02 7.777070e+03 7.777600e+04
> cat("Cost: ",m$costs[1],"\n")
Cost: 3827.006
這邊可以看到m$population[1,]
所得到的結果是 3.958119e-01 1.549891e+01 7.770356e+02 7.777070e+03 7.777600e+04
是這樣一連串的東西
那這些是什麼呢???
請往上回憶一下下剛剛chsize
的設定
剛剛介紹說chsize
表示有多少參數對吧
所以chsize
這個就是代表這五個參數計算出來的結果
這時候你心中一定有個問號就是那個是數字嗎???
(沒有沒關係,就表示你很聰明知道那是啥)
我們分別把他抓出來看
> print(m$population[1,])
[1] 3.958119e-01 1.549891e+01 7.770356e+02 7.777070e+03 7.777600e+04
> print(m$population[1,][1])
[1] 0.3958119
> print(m$population[1,][2])
[1] 15.49891
> print(m$population[1,][3])
[1] 777.0356
> print(m$population[1,][4])
[1] 7777.07
> print(m$population[1,][5])
[1] 77776
這樣就可以知道其實數值算出來個別為
[1]: 0.3958119
[2]: 15.49891
[3]: 777.0356
[4]: 7777.07
[5]: 77776
把這個答案帶入原本的適應程度的函數 f
計算
f = (0.3958119-7)^2 + (15.49891-77)^2 +(777.0356-777)^2 +(7777.07-7777)^2 +(77776-77777)^2
就會得到 3827.006
(有沒有突然眼熟這個數字)
這個數字就是剛剛的 Cost
沒有沒關係 在列印一次總該有印象了吧~
> cat("Cost: ",m$costs[1],"\n")
Cost: 3827.006
有沒有覺得很神奇(<- 自己說)
這就是該染色體(chromosome)的適應程度
可以發現這樣的結果是最適合的
不知道這樣的講法大家能不能更加認識
我想就這樣一步一步帶大家瞭解基因演算法的奧妙(誤)
今天的程式碼也會放到Github上
相關資料來源:
R Documetation : https://www.rdocumentation.org/packages/mcga