我更熟悉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变异可以丢弃............我只是不知道多少。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top