学了两天 HTML 5 ,终于把棋盘用 <canvas>
画出来了😑。代码太脏,就不贴出来了:

想着最好能算出下一步最佳落子点。不想去写什么 alpha-beta 剪枝✂️,上笨办法,给每一种情况手工赋值(落子价值),然后把各个方向扫一遍,数值加总:
{
"🔳🔳🔳🔳🔳": [0, 0.05, 0.1, 0.05, 0],
"⭕️🔳🔳🔳🔳": [0, 0.1, 0, 0, 0],
"🔳⭕️🔳🔳🔳": [0.1, 0, 0.2, 0, 0],
"🔳🔳⭕️🔳🔳": [0, 0.2, 0, 0.2, 0],
"🔳🔳🔳⭕️🔳": [0, 0, 0.2, 0, 0.1],
"🔳🔳🔳🔳⭕️": [0, 0, 0, 0.1, 0],
"⭕️⭕️🔳🔳🔳": [0, 0, 0.2, 0, 0],
"⭕️🔳⭕️🔳🔳": [0, 0.2, 0, 0, 0],
"⭕️🔳🔳⭕️🔳": [0, 0.1, 0.1, 0, 0],
"⭕️🔳🔳🔳⭕️": [0, 0.05, 0, 0.05, 0],
"🔳⭕️⭕️🔳🔳": [0.2, 0, 0, 0.4, 0],
"🔳⭕️🔳⭕️🔳": [0, 0, 0.4, 0, 0],
"🔳⭕️🔳🔳⭕️": [0, 0, 0.2, 0.2, 0],
"🔳🔳⭕️🔳⭕️": [0, 0, 0, 0.2, 0],
"🔳🔳🔳⭕️⭕️": [0, 0, 0.2, 0, 0],
"🔳⭕️⭕️⭕️🔳": [0.5, 0, 0, 0, 0.5],
"🔳⭕️⭕️🔳⭕️": [0.05, 0, 0, 0.9, 0],
"🔳⭕️🔳⭕️⭕️": [0.1, 0, 0.9, 0, 0],
"🔳🔳⭕️⭕️⭕️": [0.1, 0.9, 0, 0, 0],
"⭕️🔳⭕️⭕️🔳": [0, 0.9, 0, 0, 0],
"⭕️🔳⭕️🔳⭕️": [0, 0.2, 0, 0.2, 0],
"⭕️🔳🔳⭕️⭕️": [0, 0.1, 0.2, 0, 0],
"⭕️⭕️🔳⭕️🔳": [0, 0, 0.2, 0, 0],
"⭕️⭕️🔳🔳⭕️": [0, 0, 0.4, 0.1, 0],
"⭕️⭕️⭕️🔳🔳": [0, 0, 0, 0.5, 0],
"🔳⭕️⭕️⭕️⭕️": [1, 0, 0, 0, 0],
"⭕️🔳⭕️⭕️⭕️": [0, 1, 0, 0, 0],
"⭕️⭕️🔳⭕️⭕️": [0, 0, 1, 0, 0],
"⭕️⭕️⭕️🔳⭕️": [0, 0, 0, 1, 0],
"⭕️⭕️⭕️⭕️🔳": [0, 0, 0, 0, 1]
}

现在手动调整我已经厌倦了,能不能自动推算出一个值来🤔?这种算法相当于手工发现特征,能不能自动识别特征(包括多个方向的特征),并推算落子价值?怎么感觉得上神经网络了☹️。
- 有哪些必胜阵形?
- 如何从这些必胜阵形获取信息?即如何从对弈记录中学习阵形特征?
- 哪些阵形是等价的?即如何运用图论知识减少计算?
- 哪些是好棋?
- 哪些是坏棋?
对于问题 3 ,因为需要考虑横竖撇捺四个方向,所以可以把五子棋问题拆解为六个二维空间的约束问题,即 <横, 竖>
<竖, 撇>
<撇, 捺>
<捺, 横>
<横, 撇>
<竖, 捺>
。现在我们可以通过变换把各式阵形变换为规范阵形了。
必胜阵形的本质是在某一个维度上增加一个点,同时也会在另一个维度上增加一,致使一颗子不能在两个维度上封堵。
(待续……)
网友评论