Genetic Algorithm

基因演算法

原本這堂是逆運動學 但我好累

所以來講啟發式演算法!

先講一下啟發式演算法是啥

人類提出了很多種的"問題"

其中有些問題很難解,我們沒有快速的演算法解決這類問題

嚴格定義就是沒有多項式時間解

此類問題稱為 NP 問題

而我們觀察大自然或是一些物理現象

學習其中的優點 提出一個演算法

此類演算法就是“啟發式演算法”

 

球僮問題

有一個撞球桌

我們想在上面放N個球,讓一個固定角度的竿子以

固定力度擊打,怎麼擺才能一竿清台

所以我們需要訓練一個球童來擺球

這個球童我們假設他們叫撞球星人

撞球星人的一生

只有一個任務

擺球

生小孩

讓小孩擺球

我們假設

撞球星人的基因是一串

二進制編碼,我們可以把編碼轉成

球的擺放方式(座標)

 

那問題就是

我們要怎麼找到最棒的撞球星人

以及他的基因序

GA 的流程

GA 的流程

我們會有 n 個撞球星人

他們是第一代祖先

 

我們讓撞球星人們都擺一遍球

打一遍,然後根據他擺得好不好,

評出一個分數 k

GA 的流程

150

150

150

75

75

把分數k們根據大小填入圓餅圖,

分數越高的佔比越大

GA 的流程

把分數k們根據大小填入圓餅圖,

分數越高的佔比越大

150

150

150

75

75

GA 的流程

把分數k們根據大小填入圓餅圖,

分數越高的佔比越大

150

150

150

75

75

轉這個轉盤,

隨機取出一個人

GA 的流程

把分數k們根據大小填入圓餅圖,

分數越高的佔比越大

150

150

150

75

75

轉這個轉盤,

隨機取出一個人

轉這個轉盤,

隨機再取出一個人

GA 的流程

讓兩位撞球星人生 n 個小孩

作為下一代

GA 的流程

讓兩位撞球星人生 n 個小孩

作為下一代

GA 的流程

再讓撞球星人們都擺一遍球

打一遍,然後根據他擺得好不好,

評出一個分數 k

如此往復...

直到我們找到一個很棒的撞球星人

怎麼生小孩?

基因突變

基因互換

基因互換

假設現在有兩個撞球星人要生小孩

0100110101101

1010010011101

基因互換

假設現在有兩個撞球星人要生小孩

0100110101101

1010010011101

隨機切兩刀

基因互換

假設現在有兩個撞球星人要生小孩

0100010011101

1010110101101

隨機切兩刀 將區段內的部分互換

隨便抓上面或下面其中一個作為小孩

基因突變

0100010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率30%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0100010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率30%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0100010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0100010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000010011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011011101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011010101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011010101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011010101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011010101

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011010100

互換還不夠

我們要讓他突變 增加多樣性

假設突變機率10%

我們會遍歷所有的基因序列,並決定他要不要突變 (1->0 0->1)

基因突變

0000011010100

互換還不夠

我們要讓他突變 增加多樣性

這樣一個小孩就算生好了

注意:突變跟互換的方法並不唯一

 

Genetic Algorithm

By wen Ian

Genetic Algorithm

  • 50