1. 程式人生 > >Storm之——實現井字棋遊戲(人工智慧)

Storm之——實現井字棋遊戲(人工智慧)

一、下載原始碼

二、本地部署

這裡,我們直接執行Topology可實現本地部署。

執行ScoringTopology的結果如下:

3597 [main] INFO  com.lyz.storm.topology.ScoringTopology - SIMULATED LEAF NODE : [
---------
|O||X||O|
---------
|X||X||O|
---------
|O||X||X|
---------
] w/ state [GAME [OXOXXOOXX]: player(O)
   history [         ,   X     ,   X O   ,   X O  X,  OX O  X, XOX O  X, XOX OO X, XOXXOO X,OXOXXOO X,]]

執行DrpcTopology的結果如下:

3922 [main] INFO  com.lyz.storm.topology.DrpcTopology - Determing best move for O on:
---------
|X||O|| |
---------
| ||O|| |
---------
| || ||X|
---------

5419 [main] INFO  com.lyz.storm.topology.DrpcTopology - RECEIVED RESPONSE [[[
---------
|X||O|| |
---------
| ||O|| |
---------
| ||O||X|
---------
[10000]]]]
執行RecursiveTopology的結果如下:
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOOO XO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXOO   O, XXOO  XO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOOOX O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO O  O, XXO OX O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOOO XO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO O  O, XXO O XO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXOX O O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO  O O, XXOX O O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOX OOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO  O O, XXOX O O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXO XO O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO  O O, XXO XO O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXO XOOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO  O O, XXO XO O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXO  OXO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO  O O, XXO  OXO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOX OOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO   OO, XXOX  OO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXO XOOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O, XXO    O, XXO   OO, XXO X OO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXOX O O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,O XOX   O,OXXOX   O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOXXO O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,O XOX   O,O XOXX  O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOX OXO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,O XOX   O,O XOX  XO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [X XOX OOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX O O,X XOX O O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXOX O O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX O O, XXOX O O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOX OOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX O O, XXOX O O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOXXO O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX O O,  XOXXO O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [  XOXXOOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX O O,  XOXXO O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOX OXO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX O O,  XOX OXO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [X XOX OOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX  OO,X XOX  OO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOX OOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX  OO, XXOX  OO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [  XOXXOOO]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XOX   O,  XOX  OO,  XOXX OO,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXOOX  O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XO X  O,O XO X  O,OXXO X  O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXO XO O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XO X  O,O XO X  O,OXXO X  O,]]
12500 [Thread-12-b-0] INFO  com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOXXO O]: player(O)
   history [         ,   O     ,  XO     ,  XO    O,  XO X  O,O XO X  O,O XOXX  O,]]

三、遠端部署

為了在遠端呼叫topology,需要啟動一個SRPC伺服器,啟動這個服務和啟動Storm中其他服務是一樣的方法,用drpc作為引數執行storm指令碼:

bin/storm drpc
Storm叢集會連線到DRPC伺服器上接收命令。我們需要通過配置告訴Storm叢集DRPC伺服器的位置。在storm.yaml檔案中如下配置:
drpc.servers:
- 'drpchost1 '
- 'drpchost2 '
當配置了服務的伺服器啟動後,topology的提交方式和其他topology一樣,DRPC客戶端可以被其他任何需要大規模分散式非同步處理的Java應用程式來使用。為了從本地客戶端切換到遠端,唯一需要改變的是DRPC客戶端的命令。需要使用下面的程式碼來替換DrpcTopology類中的DRPC客戶端:
//遠端部署。host和port與storm.yaml檔案中的配置一致
DRPCClient client = new DRPCClient("drpchost1", 3772);
引數指定了DRPC服務的伺服器和埠,需要和YAML檔案中的配置一致。