我越来越熟悉VBA,我正在尝试为Tic Tac Toe做一个机器学习计划。我不想只是硬编码获胜的可能性。
我为机器学习程序提出的最好的方法是拥有一个树形结构,其中包含可以进行的所有可能的移动,然后让计算机在树枝丢失的时候剪掉树枝。
例如,通过以下方式表示人们在哪里玩,以及字母的顺序是按照游戏进度的顺序编写的
a|b|c
-----
d|e|f
-----
g|h|i
abdgfce - 表示计算机获胜,a先播放,b秒播放,第三播放....
我想要一个看起来像这样的数据树:
0级:a(计算机始终以a开头)
等级1:除了a之外的所有字母,因为它已被播放
等级2:对于等级0中的每个字母,除了前面的字母和
之外的所有字母对于树的所有级别等等,直到它们不再可能移动为止。
我试图寻找在VBA中实现此结构的方法,但微软网站没有任何帮助,论坛只提到二进制或排序树。有人会指出我正确的方向或给我一些指示,我应该尝试什么?如果这个解决方案不可行,有什么更好的方法来解决这个问题?
谢谢,
卡里姆
答案 0 :(得分:1)
只有"只有" 362,880方式填补了一个井字桌的九个位置。通过放置:
,可以在 A 列中生成完整集ABCDEFGHI
在单元格 B1 并运行 GetString():
Dim ll As Long
Dim CurrentRow As Long
Sub GetString()
Dim InString As String
InString = Sheets("Sheet1").Range("B1")
ActiveSheet.Columns(1).Clear
CurrentRow = 1
Application.ScreenUpdating = False
Call GetPermutation("", InString)
Application.ScreenUpdating = True
End Sub
Sub GetPermutation(x As String, y As String)
' The source of this algorithm is unknown
Dim i As Long, j As Long
j = Len(y)
If j < 2 Then
Cells(CurrentRow, 1) = x & y
CurrentRow = CurrentRow + 1
Else
For i = 1 To j
Call GetPermutation(x + Mid(y, i, 1), _
Left(y, i - 1) + Right(y, j - i))
Next
End If
End Sub
当然,大多数比赛将在所有九个名额都填满之前结束。如果计算机丢失,该项目被删除等
修改#1:强>
Wayne G. Dunn 建议可以减少变化的数量。计算机(玩家#1)有九个可能放置 X的地方。玩家#2然后有八个可能放置 O 等的地方。
这产生9 * 8 * 7 * 6 * 5 * 4 * 3 * 2或9阶乘。
然而,游戏可以在所有九个位置都填满之前结束。因此,许多362880变种可以被丢弃............我只是不知道有多少。