这是一个GitHub项目,介绍了一种基于遗传算法的带有板块尺寸自动检测功能的拼图游戏解决方案。
GitHub链接:https://github.com/nemanja-m/gaps
安装
把 repo 下载到本地
$ git clone https://github.com/nemanja-m/gaps.git $ cd gaps
安装要求
$ pip install -r requirements.txt $ sudo apt-get install python-tk
以可编辑模式安装项目:
$ pip install -e .
从图像中创建拼图
使用 create_puzzle 脚本从图像中创建拼图。
亦即
$ create_puzzle images/pillars.jpg --size=48 --destination=puzzle.jpg [SUCCESS] Puzzle created with 420 pieces
将从 images/pillars.jpg 创建分割成 420 块的拼图,每块拼图像素为 48x48px。
运行 create_puzzle --help 可以获得详细帮助。
注意:我们创建出来的拼图尺寸可能会比原图小,这取决于设置的拼图块的大小。最大的可能是以矩形从原始图像随机裁剪出来。
解决拼图问题
为了解决这个拼图问题,我们会用到 gaps 脚本。
亦即
$ gaps --image=puzzle.jpg --generations=20 --population=600
这将启动初始群体为 600 个(populations)和 20 代(generations)的遗传算法。
提供下列选项:
Option | Description |
--image | 指向拼图的路径 |
--size | 拼图块的像素尺寸 |
--generations | 遗传算法的代的数量 |
--population | 个体数量 |
--verbose | 每一代训练结束后展示最佳结果 |
--save | 将拼图还原为图像 |
运行 gaps --help 获得详细帮助。
尺寸检测
如果你不能明确的给 gaps 提供 --size 的参数,拼图块尺寸将自适应。
其实给 gaps 提供 --size 的具体参数总是可行的:
$ gaps --image=puzzle.jpg --generations=20 --population=600 --size=48
注意:尺寸检测功能适用于大多数图像,但是在某些边缘情况下尺寸检测会失效,并给出一个错误的尺寸。在这种情况下,你可以明确的给定一个尺寸。
终止条件
遗传算法的终止条件对于确定它的运行何时结束是很重要的。人们观察到在最初的时候,遗传算法进展非常快,每几次迭代都会产出更好的解决方案,但是在后期的改进非常小的时候,往往会趋于饱和。
gaps 将终止的情况:
- 当经过 X 次迭代在全量中没有改善的时候
- 当它演化到了某个绝对的代(generations)数的时候