• 沒有找到結果。

第三章 情境感知無所不在學習導引方法

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 ij

j 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 jk 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 流程圖

相關文件