题
我更熟悉VBA,我试图为TIC TAC脚趾做一台机器学习程序。我不想只是努力赢得胜利的可能性。
我提出的最佳机器学习程序是拥有一个树结构,可以制作所有可能的动作,然后每当它丢失那个分支时都会有树的切割分支。
例如用以下方式表示人们已经播放的地方,并且字母被写为游戏的订单所在的订单已经进展
a|b|c
-----
d|e|f
-----
g|h|i
.
abdgfce - 意味着电脑赢,a是首先播放的,b秒,d第三....
我想拥有一个看起来的数据树:
等级0:a(计算机始终以a)
级别1:除a之外的所有字母,它已经播放
级别2:对于0级中的每个字母,所有字母除了它之前的所有字母和
等于树的所有级别,直到它们不再可能移动。
我试图在VBA中寻找实现这种结构的方法,但Microsoft网站没有帮助,论坛只讲双华或排序树。有人会把我指向正确的方向,还是给我一些指出我应该尝试的指针?如果这个解决方案不可行,可以更好地解决这个问题的方法是什么?
谢谢,
karim
解决方案
有“只有”362,880填写TIC-TAC-TOE表中的九个位置。完整的集可以在列 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放在其中的 x。然后有八个可能的地方放置她 o。
此收益率9 * 8 * 7 * 6 * 5 * 4 * 3 * 2或9阶段。
但是,游戏可以在所有九个地方填充之前结束。因此,许多362880变异可以丢弃............我只是不知道多少。不隶属于 StackOverflow