# NineLearning
**Repository Path**: blackldh/NineLearning
## Basic Information
- **Project Name**: NineLearning
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-04-01
- **Last Updated**: 2021-04-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# NjuptGo
> folk from [**NineLearning**](https://github.com/blont714/NineLearning)
>
> 实现9路幻影围棋的基础AI
## Pyaq
Pyaq是仅用Python实现的Go程序。
该程序是旨在学习和玩Go神经网络模型的深度学习教程。

更具体地讲,做了以下内容。
- 使用[TensorFlow](https://www.tensorflow.org/)学习9条记录
- 玩学习的模型
它是Go游戏和深度学习的最低必需实现,它具有约1000行的所有学习和执行代码。如果您想学习更高级的内容,请阅读源代码。当然也欢迎拉取请求。
### 1.准备
以下面的环境为例进行说明。
- Ubuntu 16.04
- Python 2.7
- TensorFlow
引进TensorFlow是[在Ubuntu安装TensorFlow](https://qiita.com/yudsuzuk/items/092c38fee18e4484ece9)请参考。
将GPU与TensorFlow一起使用时
- [CUDA工具包9.0](https://developer.nvidia.com/cuda-90-download-archive)
- [cuDNN v7.0](https://developer.nvidia.com/cudnn)
必须安装。此外,还需要nVidia生产的[CUDA Capability](https://developer.nvidia.com/cuda-gpus) 3.5或更高版本的图形板。
有关CUDA的[安装](https://qiita.com/JeJeNeNo/items/05e148a325192004e2cd),请参考[在Ubuntu 16.04LTS上安装的CUDA 8.0和cuDNN 6](https://qiita.com/JeJeNeNo/items/05e148a325192004e2cd)(注意:版本与链接不同)。
接下来,下载源代码。
```shell
$ git clone https://github.com/ymgaq/Pyaq
```
您也可以从右上角的“克隆或下载”手动下载它。
准备完成。
如果要立即运行,请将学习到的数据文件复制`Pyaq/pre_train/model.ckpt`到`Pyaq/`“,并使用[ GoGui。](#4.在GoGui上玩)
让我们检查一下测试匹配是否有效。
```shell
$ ./pyaq.py --self --random
```
如果获得以下输出,则说明成功。转到“ [2.学习](#2.学习)”。
```
A B C D E F G H J
9 . X X X X X X . X 9
8 X X X . X X X X X 8
7 O O X X X O O X O 7
6 O O O O O . O O O 6
5 O O X O O O O . O 5
4 X X X O . O . O O 4
3 . X O O O O O O . 3
2 X X X X X O O O O 2
1 X . X O O O O O . 1
A B C D E F G H J
A B C D E F G H J
9 . X X X X X X . X 9
8 X X X . X X X X X 8
7 O O X X X O O X O 7
6 O O O O O . O O O 6
5 O O X O O O O . O 5
4 X X X O . O . O O 4
3 . X O O O O O O . 3
2 X X X X X O O O O 2
1 X . X O O O O O . 1
A B C D E F G H J
result: W+16.0
```
### 2.学习
首先,扩展学习文件。
```shell
$ cd Pyaq
$ unzip sgf.zip
```
使用9个跟踪记录文件(* .sgf)进行学习。当您运行以下命令时,学习开始:
```shell
$ ./pyaq.py --learn
```
如果要在没有GPU的情况下进行训练,请`--cpu`添加一个选项。
(但是,纯CPU学习尚未经过全面测试。)
```shell
$ ./pyaq.py --learn --cpu
```
学习日志扩展如下:相同的内容也记录在log.txt中。
根据GPU的性能,学习将在大约3-4小时内完成。仅对于CPU,大约需要3天。
```
imported 34572 sgf files.
converting ...
learning rate=0.0003
progress: 0.10[%] 14.3[sec]
progress: 0.20[%] 13.3[sec]
progress: 0.30[%] 13.3[sec]
progress: 0.40[%] 13.4[sec]
progress: 0.50[%] 13.3[sec]
progress: 0.60[%] 13.4[sec]
progress: 0.70[%] 13.3[sec]
progress: 0.80[%] 13.3[sec]
progress: 0.90[%] 13.2[sec]
progress: 1.00[%] 13.2[sec]
progress: 1.10[%] 13.3[sec]
progress: 1.20[%] 13.3[sec]
progress: 1.30[%] 13.3[sec]
progress: 1.40[%] 13.2[sec]
progress: 1.50[%] 13.2[sec]
progress: 1.60[%] 13.2[sec]
progress: 1.70[%] 13.3[sec]
progress: 1.80[%] 13.3[sec]
progress: 1.90[%] 13.2[sec]
progress: 2.00[%] 13.2[sec]
progress: 2.10[%] 13.2[sec]
progress: 2.20[%] 13.4[sec]
progress: 2.30[%] 13.4[sec]
progress: 2.40[%] 13.2[sec]
progress: 2.50[%] 13.3[sec]
train: policy=46.95[%] value=0.469
test : policy=47.13[%] value=0.469
progress: 2.60[%] 15.5[sec]
progress: 2.70[%] 13.4[sec]
```
每2.5%对测试数据进行评估。`policy`是游戏分数的下一手和神经网络输出的一手之间的匹配率,并且`value`是分数分数与网络输出的评估值(-1至+1)之间的误差(均方误差)。最后,在测试数据中似乎策略为57%,值约为0.36。
学习完成后,将`model.ckpt`保存参数文件。
网络模型的`BLOCK_CNT`和`FILTER_CNT`或板,`KEEP_PREV_CNT`或改变,如改变该模型的形状,通过使用原始游戏记录数据,则可以产生更有力的参数。如果您有兴趣,请尝试为您创建最强大的网络。
### 3.让我们玩自我比赛(控制台)
使用在控制台上学习的模型,让我们首先进行不搜索的自我匹配。
```shell
$ ./pyaq.py --self --quick --cpu
```
无需搜索即可获得战斗结果。
```
A B C D E F G H J
9 . . . . . O O X . 9
8 . . O O . O X X X 8
7 . O X X O O O X . 7
6 . . . O X O X X . 6
5 O O . O X X O . . 5
4[X] X O O O X O . . 4
3 X X X O X X X . . 3
2 X . X O X . . . . 2
1 . X O O O X . . . 1
A B C D E F G H J
A B C D E F G H J
9 . . . . . O O X . 9
8 . . O O . O X X X 8
7 . O X X O O O X . 7
6 . . . O X O X X . 6
5 O O . O X X O . . 5
4 X X O O O X O . . 4
3 X X X O X X X . . 3
2 X . X O X . . . . 2
1 . X O O O X . . . 1
A B C D E F G H J
A B C D E F G H J
9 . . . . . O O X . 9
8 . . O O . O X X X 8
7 . O X X O O O X . 7
6 . . . O X O X X . 6
5 O O . O X X O . . 5
4 X X O O O X O . . 4
3 X X X O X X X . . 3
2 X . X O X . . . . 2
1 . X O O O X . . . 1
A B C D E F G H J
result: Draw
```
接下来,让我们与搜索进行自我匹配。
```shell
$ ./pyaq.py --self --byoyomi=3
```
如果没有GPU,则`--cpu`添加一个选项。
```shell
$ ./pyaq.py --self --byoyomi=3 --cpu
```
游戏每步进行3秒。
```
move count=3: left time=0.0[sec] evaluated=104
|move|count |rate |value|prob | best sequence
|D5 | 1114| 54.7| 56.3| 90.4| D5 ->C5 ->C4 ->E5 ->D6 ->E6 ->E7 ->E4
|E4 | 150| 51.3| 55.2| 0.8| E4 ->E3 ->D5 ->C5 ->E5 ->F3 ->C4 ->D3
|F4 | 20| 51.2| 54.3| 0.8| F4 ->D6 ->D7
|D6 | 1| 48.1| 48.1| 3.0| D6
|C6 | 1| 46.0| 46.0| 2.3| C6
|C3 | 1| 44.4| 44.4| 1.8| C3
A B C D E F G H J
9 . . . . . . . . . 9
8 . . . . . . . . . 8
7 . . . . . . . . . 7
6 . . . . . X . . . 6
5 . . . [X] . . . . . 5
4 . . . O . . . . . 4
3 . . . . . . . . . 3
2 . . . . . . . . . 2
1 . . . . . . . . . 1
A B C D E F G H J
```
思想记录的内容如下。
- `move count` 移动计数
- `left time` 剩余时间
- `evaluated` 以此想法评估的board数量
- `move` 选手步数
- `count` 搜索数
- `rate` 选手的胜率
- `value` 选手开始时的评估值
- `prob` 选手走棋的概率
- `best sequence` 最佳顺序
pyaq.py的命令行选项如下。
- `--cpu` 仅使用CPU
- `--learn` 从游戏记录中学习
- `--self` 在控制台上进行自我比试
- `--random` 随机play
- `--quick` 选择可能性最高的(不搜索)
- `--clean` 中止(仅在搜索时)
- `--main_time=600` 设定总时间10分钟
- `--byoyomi=10` 将读数时间设为10秒
### 4.在GoGui上玩
人谁不学习,学到的数据文件`Pyaq/pre_train`中`model.ckpt`的`Pyaq/`被复制到请。
使用[GoGui](https://sourceforge.net/projects/gogui/files/gogui/1.4.9/)与AI一起[玩](https://sourceforge.net/projects/gogui/files/gogui/1.4.9/)。
将菜单>游戏>面板尺寸设置为“ 9”后,从菜单>程序>新程序中注册“命令”和“工作目录”。

启动后,您可以使用GUI。可以从菜单>工具> GTP Shell中查看思想日志。

https://twitter.com/ymg_aq)
## 附录:
### 围棋英文术语:
- 贴目 (komi)
- 气 (*liberty*)
- 叫吃 (*atari*)
- 劫(Ko)
### 规则说明:
**让子**:是围棋的一种对弈制度,指持黑子的一方先在棋盘上摆上一定数目的子之後,再由执白子的一方开始下
**贴目**:指黑方由于先手,在布局上占有一定的优势,为了公平起见,在最后计算双方所占地的多少时,黑棋必须扣减一定的[目数](https://baike.baidu.com/item/目数)或子数。
**劫**:如图,轮[白下](https://www.baidu.com/s?wd=白下&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)子时,白在A位提黑一子;此时,黑不能立即回提A位的白子,必须寻找劫材,即在别处下一着,待白方应后,再回提A位的白子。但是,并非所有的劫材都会导致对方应一手,在价值判断取舍的情况下,对方也可能不应劫而解消劫争,“劫胜”也叫“消劫”。

### License
[MIT License](https://github.com/ymgaq/Pyaq/blob/master/LICENSE)
Author:
Thanks to origin Author: [Yu Yamaguchi](