第三章 情境感知無所不在學習導引方法
3.3 學習導引之基因演算法
3.3.1 GAFUL 學習導引演算法
在本研究中,我們定義了一個多目標最佳學習路徑問題,假設在學習環境中有 n 個候選的學習點 C1,C2,…, Cn,每一個候選點接與其他點有不同的距離。而 GAFUL 學習 導引演算法的目的,就是從候選點中挑選 m 個學習點 x1,x2,…, xk,…, xm(基因 gene),排列 組合成為許多個有先後次序的序列(染色體 chromosome) X1,X2…,Xp,如圖 3.5,就是一 個基因長度為 6 的序列,其序列裡的直按照順序為 “ 0 -> 1 -> 4 -> 2 -> 5 -> 6 ” 。這些
簡單基因演算法概略演算流程之Pseudo Code如下所示。
Begin //簡單基因演算法開始 t = 0; //設定初始世代數為0
Initialize(Population( t ) ); //隨機初始第零代 Evaluate(Population( t ) ); //計算適配值 Repeat
{
Selection( Population( t ) ); //選擇與複製適配值較佳的基因字串 Crossover( Population ( t ) ); //子代交配運算
Mutation(Population( t ) ); //子代突變運算 Evaluate(Population( t ) ); //計算子代適配值 t = t + 1; // 切換到下一個世代
}
Until ( ( t > tmax) Or (termination criterion = = TRUE) ) //判斷是否到達停止條件 End //演算法結束
序列必須同時符合指定的條件,如:學習活動時間限制(LT)。
C1 C2
C4 C5
1 min
4 min
7 min 5 min
6 min
3 min
2 min C3
5 min
C0 C6
4 min
3 min
3 min
5 min
圖 3.5 GAFUL 染色體序列轉化路徑圖
综合以上敘述,列出 GAFUL 學習導引演算法所用到的 6 個基因演算法參數:
(1) P:「種族人口」(population size),每世代染色體數目。
(2) m:「基因長度」(gene length),每條染色體基因數目。
(3) pc:「交配機率」(probability of performing crossover),兩條染色體的交配機率值。
(4) pm:「突變機率」(probability of mutation),交換染色體上兩個位置的基因。
(5) plm:「長度突變率」(probability of length mutation),增加或刪除一個位置的基因。
(6) tc:「演化停止條件」(termination criteria),在此以演化世代數為停止條件。
以下表 3.3 列出 GAFUL 學習導引演算法所用到的 9 個環境參數:
表 3.3 GAFUL 所使用之參數表 參數 說明
效益 Gj 各點學習效益
時間
Tj 學習點預設學習時間
j
ti, Ci 到 Cj 移動時間 LT 學習總時間限制
空間
Mj 點上目前人數 PLi 每點人數限制 S 飽和率限制 Ri 目前飽和率
Fi 學習點之額滿指標
目標函式:
n
i
i,j x
x
i G F x X
X Fitness
0
where , ) 1 (
* )
( (2)
上面的公式(2)中,其值越大越好。Xi代表世代中的第 i 條染色體;Xi,j(即 x)為染色 體 Xi的第 j 個基因之值,其唯一學習點之編號;Gx為學習點 Cx之學習效益值;Fx為學 習點 Cx的學額滿指標。
以下為 GAFUL 法的限制式:
2
m (3)
n
m (4)
1 , 2 , 1 1
0 2 , 1 0
, ,
where
m i,j ij ijj x x m
j
x T LT x X x X x X
T (5)
j i 1
0
i,x {x ,x...x ...,x },x x
x j k m
(6)
上面的限制式中,限制式(3)主要是要讓路徑除了有經過起點與終點外,還需要經 過其他的學習點;限制式(4)則是限定挑選的點數不可超過學習環境之學習總點數;限 制式(5)則是限定染色體所規劃之的學習時間不可超過總學習時間限制。限制式(6)則是 限定基因不可重複出現在染色體中。
以下詳細介紹 GAFUL 的每一個步驟:
步驟一:染色體編碼
基因演算法是以染色體的形式存在,因此執行前必須先將染色體編碼,將要求解之 問題轉換成字串。GAFUL 法的解也是以染色體的形式存在,且根據本研究問題的特性,
編碼方式採用實數編碼[18],也就是用學習點的編號作為基因的值。設定可用的基因集 合{0, 1, 2, …, n+1 },n 為學習點數目,將從此集合中挑選基因元素加入染色體中。另 外,為了固定起點與終點,所以第一個基因固定為 C0,最後一個基因固定為 Cn+1。如 圖 3.4 所規劃的路徑為“0 -> 1 -> 4 -> 2 -> 5 -> 6”,則此路徑之染色體編碼如圖 3.6。
5 6 2
1 4
0 1 4 2 5 6
0
圖 3.6 染色體編碼範例圖
步驟二:決定適配函數
在 GAFUL 裡的適配函數為:
n
i
i,j x
x
i G F x X
X Fitness
0
where , ) 1 (
* )
(
其適配概念有兩個,第一、學習路徑的總學習效益值越大越好,第二、學習路徑上 人數已滿的學習點越少越好。因此,若染色體中人數已滿的學習點越多, Fx為 1 的機 會也越多,適配值也越小;反之,若人數已滿的學習點越少,Fx為 0 的機會也越少,適 配值則越大。有了 Fx變數的篩選,路徑能夠避免經過人數已滿的學習點,減少重新規 劃學習路徑的時間。
步驟三:染色體長度評估
由於選擇的學習路徑為不固定長度,若使用固定長度的簡單基因演算法(Simple Genetic Algorithm)則會漏掉不同長度的近似解,但若每種長度的解都去尋找,會花費更 多的運算時間。因此,為了加快搜尋不固定長度的近似解,先以長度評估區段找出接近 最佳解的序列長度,再搭配以長度的突變,找出較佳的近似解。
步驟四:隨機初始化
產生初始的第零代染色體,其以隨機的方式產生,而其世代中的染色體數目大小是 影響演算法求最佳解的重要因子之ㄧ,每世代的染色體數目越大,越容易找到最佳解,
但演化時間較長;若染色體數目較小,則容易過早收斂,不容易找到最佳解,但其演化 時間較短。假設每世代中,染色體數目預設為 P 條,每條染色體亂數法產生基因序列,
唯有第一個基因為起點(目前所在點)、最後一個基因為終點(Cn+1)固定不變。
步驟五:選擇與複製
選擇與複製的主要目的,在於保留較好的染色體於世代中,因此根據適配值 Fitness(X )從高到低排序,如:Fitness(i X ) ≧ Fitness(1 X ) ≧ Fitness(2 X ) ≧ … ≧3 Fitness(X )之後,複製出 P/2 條染色體子代。而為了產生出較優秀的子代,分為兩部分p 挑選父代。第一部份的作法:從適配值排名前百分之四十的染色體中,隨機選擇兩條複
製,複製出百分之八十的子代。第二部分的做法:從排名前百分之四十到五十的染色體 中,隨機選擇兩條染色體複製出百分之二十的子代。
步驟六:交配
接續步驟 5,複製出的兩條染色體,有 pc 的機率做交配,在此交配的方法為單點 交配(One–Point Crossover) [7],如圖 3.7 單點交配示意圖,從較短的染色體中,以亂數 法選擇交配點,將交配點後的基因序列交換,產生兩個染色體子代。若交配過後產生了 重複的基因號碼,擇其中一個重複的號碼,以尚未選入染色體的基因選擇一個加以替換。
圖 3.7 單點交配示意圖 步驟七:突變 1(基因順序)
接續步驟 6,有 pm 的機率,將交配後的染色體子代做突變,在此突變的方法為單 點突變(One-Point Mutation) [7],如圖 3.8 基因突變 1 示意圖 ,以亂數法選擇兩突變點,
將兩突變點做基因交換,產生新的染色體子代。
5 6
2 1 4 0
6 5 2 1 0
交配點
5 6
2 2 1 0
6 5 1 4 0
5 6 3
2 1 0
6 5 1 4 0
圖 3.8 基因突變 1 示意圖 步驟八:突變 2(基因長度)
接續步驟 7,完突變 1 後的染色體子代有 plm 的機率進行突變 2 如圖 3.9 突變 2 示 意圖,使用隨機法挑選突變點,再以百分之五十的機率,亂數法選擇學習點加入一個基 因,另外百分之五十的機率,刪除此突變點的基因,藉此方法尋找較好的隱性基因序列。
圖 3.9 基因突變 2 示意圖 步驟九:檢查是否停止演化
若演化過程已達到停止條件,如:預設的演化代數門檻或適配值已收斂,則停止演 化,將染色體解碼成為學習路徑,推薦給使用者。若尚未到達停止條件,則回到步驟 5 繼續演化。
最後,列出 GAFUL 法之 pseudo code 如圖 3.10,GAFUL 法之流程圖如 3.11。
5 6 2
1 4
0
突變點1 突變點2
5 6 1
2 4
0
突變點
5 6 1
2 4 0
1 5 3
2 4 0
6 5 2 4
0 6
刪去 增加
圖 3.10 學習導引之基因演算法
分析 GAFUL 法的時間複雜度,假設尋找最佳學習路徑演算法為 GAFUL,也就是 在所有學習點 Cj中,有順序性的挑選學習點成為學習路徑,在眾多候選學習路徑中,
選擇出較好的路徑推薦給學習者。若學習點總共有 n 個,則染色體長度則有可能為 2 到 m ( m ≦ n )。每世代皆有 P 條染色體,交換染色體的時間複雜度為 O(1),則排序染 色體複雜度為O
P21
,選擇父代所花費時間複雜度為O
P ,因此選擇染色體的時間 複雜度為O
P21P
O(P2);每條複製的時間複雜度為 O(1),交配的時間複雜度為 O(1),突變的時間複雜度為 O(1),因此染色體複製、交配、突變的時間複雜度為 O(1),可推知每世代複製、交配、突變的時間複雜度為O
P ,整個 GAFUL 的時間複雜度則 為O
P2P
OP2 On2 。而在附錄 A GAFUL 法之適配值變化圖 中,可證明 GAFUL 法確實具有基因演算法之遺傳演化之精神,族群演化朝向最佳解前進。學習導引之基因演算法概略演算流程之Pseudo Code如下所示。
Begin //GAFUL演算法開始 t = 0; //設定初始世代數為0
Evaluate_length( LT ); //以時間限制LT來評估染色體大概長度 Initialize( Population( t ) ); //以估算的染色體長度,隨機初始第零代 Evaluate( Population ( t ) ); //計算適配值
Repeat {
Selection( Population( t ) ); //選擇與複製較佳的基因字串 Crossover( Population( t ) ); //子代交配運算
Mutation1( Population( t ) ); //子代突變1運算(基因順序) Mutation2( Population( t ) ); //子代突變2運算(基因長度) Evaluate( Population( t ) ); //計算子代適配值
t = t + 1; // 切換到下一個世代 }
Until ( ( t > tmax) Or termination criterion = = true ) //判斷是否到達停止條件 End //演算法結束
隨機產生長度length 初始父代個體50個
染色體編碼
決定適存函數 (Fitness Function)
選擇與複製
交配
突變(基因順序)
收斂與否
染色體解碼
推薦最佳學習路線 預設length = 1
隨機產生長度length 個體1個
路線是否超過時限 Length +1
否
是
突變(基因長度) 長度評估區段
圖 3.11 GAFUL 流程圖