- FeedForward Multilayer Perceptron
- Population : 100
- Number of opponents for each neural network: 10
- Generation: 200
- Value Assign: Win: +1 point, Draw: 0 point, Lose: -1 point.
FeedForward Multilayer Perceptron(FFMLP),是典型的unsupervised neural network,了解[ANN] BackPropagation之後,FFMLP架構就更容易懂,因為在非監督的網路基本型裡的數學模組非常單純,但是要使用FFMLP來找出合適的fitness function就相當的困難。
這裡以最簡易的tic tac toe遊戲來展示簡易的FFMLP應用範例,在這個範例裡是使用Evolutionary Neural Network的方式來訓練,且沒有經過特別的參數調整和適應函式的使用,自然學習能力一定比監督型的較差。
Download : Evolution_TicTacToe.zip
網路架構如下:
很精簡的三層架構,輸入層、隱藏層、輸出層。
輸入層:9個nodes(因為典型tic tac toe是3x3的板子,共九格)。
隱藏層:9個nodes(簡單的對應到輸入層)。
輸出層:1個node(輸出值範圍為-1~+1,我們任意定義+1為優,-1為劣)。
網路計算公式如下(跟BackPropagation類似):
Transfer Function(Input Activity):
Mutation(weight跟bias的調整):
weight跟bias的改變量,則是簡單由Gaussian Random來給予,可想而知,這樣的網路要達到好的收斂值勢必有一定的困難。
這裡的mutation並不是針對原先的neural network做調整,而是由原先的neural network突變出下一代,例如原先有10個neural network,經過mutation之後就變成20個neural network,其中新產生出來的10個neural network就是原先的子代(offspring)。
模擬參數如下:
演化流程圖:
其中Tournament Selection的對手選擇方式使用了這一篇的程式碼[EP/GP] random opponent
範例畫面:
下面是經過200代的演化之後,挑出第一名的網路與人類對戰的情況,正常情況下,只要你有一點點的智商,基本上你是不可能會輸給電腦,最佳預期的狀況應該是平手,下面的Cross Player是我,Circle Player是電腦,我先取得優先權下了1,1這個中心位置(最佳位置),在第七步的時候我放一個水,最後電腦與我和局收場。
在大部分的情況下所找出來的fitness function都有缺陷,有可能只會攻擊不會防守,或者反之,要解決這個問題就要從如何找出合適的fitness function方向下手,有興趣的人可以把程式碼下回去玩玩看。
如果你想要讓程式圖形化,可以參考這一篇的[Gtk] Gtk Go/Reversi Board Template的原始碼,改成Tic Tac Toe的板子樣式修改即可。