문제

VBA에 더 잘 알고 있고 Tic Tac Toe를위한 기계 학습 프로그램을 시도하고 있습니다. 나는 단지 열심히 노력할 수있는 가능성을 원하지 않습니다.

기계 학습 프로그램을 위해 제기를 제시하는 것이 좋습니다. 가능한 모든 움직임이있는 트리 구조를 갖는 것이며, 그 분기로 잃을 때마다 컴퓨터의 분기를 자르십시오.

사람들이 어디에서 연주했는지를 나타내는 다음과 같은 방법으로, 글자가 게임이 진행되는 순서로 쓰여진 순서를 나타냅니다

a|b|c
-----
d|e|f
-----
g|h|i
.

abdgfce - 컴퓨터가 WINS를 의미하며, A는 첫 번째, B 초, D 세 번째 ....

i 데이터 트리를보고 싶습니다 :

레벨 0 : a (컴퓨터는 항상 a로 시작)

레벨 1 : 이미 재생 된 것처럼 모든 문자

레벨 2 : 레벨 0의 각 문자에 대해, 그 이전에 하나의 오른쪽을 제외한 모든 문자와

등의 트리의 모든 수준에 대해 더 이상 움직일 수 없을 때까지

VBA 에서이 구조를 구현할 수있는 방법을 찾으려고했지만 Microsoft 웹 사이트는 도움이되지 않았으며 포럼은 바이너리 또는 정렬 나무에만 이야기합니다. 누군가가 나를 올바른 방향으로 가리키거나 내가 시도해야 할 일에 관해서 어떤 포인터를 주시겠습니까? 이 솔루션이 실현 가능하지 않은 경우이 문제를 해결하는 더 좋은 방법은 무엇입니까?

고마워,

karim

도움이 되었습니까?

해결책

TIC-TAC-TOE 테이블에서 9 개의 위치를 채우는 "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
.

xx

물론, 9 개의 모든 장소가 채워지기 전에 게임의 대다수가 끝날 것입니다.컴퓨터가 잃으면 해당 항목이 제거됩니다.

편집 # 1 :

웨인 G. Dunn 은 변화의 수가 감소 될 수 있음을 제안했다.컴퓨터 (Player # 1)는 x. 플레이어 # 2의 9 개의 가능한 장소가 있습니다.

를 etc.

이 수확량은 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 또는 9 계승을

그러나 게임은 9 개의 모든 장소가 채워지기 전에 끝날 수 있습니다.따라서 362880 개의 변동 중 많은 사람들이 폐기 될 수 있습니다 ............ 나는 그저 얼마나 많은 것을 모른다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top