U3.3b

Moderator: Einführung in die Künstliche Intelligenz

mProg
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 147
Registriert: 25. Apr 2015 00:10

U3.3b

Beitrag von mProg » 26. Mai 2018 13:54

Ich wollte den Alpha-Beta Algorithmus mit NegaMax Forumlierung anwenden , wie sie auf den Folien https://www.ke.tu-darmstadt.de/lehre/ss ... ctical.pdf Seite 2 definiert ist. So wie ich es aus dem vorherigen Foliensatz verstanden habe, muss ja auch hier das Ergebnis mit NegaMax dasselbe sein wie ohne NegaMax. Jedoch komme ich mit dem da geschilderten Algorithmus auf ganz komische Werte. Ich habe dafür auch einen einfachen Pythonprogramm geschrieben, was auch auf diese komische Werte kommt.

Bild
Mein Python Program sieht so aus:

Code: Alles auswählen

class Node(object):


    def __init__(self,name,val = None):
        self.name = name
        self.val = val
        self.nodes = []

    def addSecussor(self,node):
        self.nodes.append(node)

def AlphaBeta(node, alpha,beta):
    if(len(node.nodes) == 0):
        return node.val

    a = alpha
    for i in range(len(node.nodes)):
        print('{}[{},{}]'.format(node.nodes[i].name,-beta,-a))
        t = -AlphaBeta(node.nodes[i],-beta,-a)
        a = max(a,t)
        if (a >= beta):
            return a
    
    return a

A =  Node("A")
B1 = Node('B1')
B2 = Node('B2')
C1 = Node('C1')
C2 = Node('C2')
C3 = Node('C3')
C4 = Node('C4')
V1 = Node('V1',2)
V2 = Node('V2',5)
V3 = Node('V3',9)
V4 = Node('V4',4)
V5 = Node('V5',8)
V6 = Node('V6',3)
V7 = Node('V7',1)
V8 = Node('V8',4)

C1.addSecussor(V1)
C1.addSecussor(V2)
C2.addSecussor(V3)
C2.addSecussor(V4)
C3.addSecussor(V5)
C3.addSecussor(V6)
C4.addSecussor(V7)
C4.addSecussor(V8)

B1.addSecussor(C1)
B1.addSecussor(C2)
B2.addSecussor(C3)
B2.addSecussor(C4)

A.addSecussor(B1)
A.addSecussor(B2)

AlphaBeta(A,-100,100)

Karl Stelzner
Neuling
Neuling
Beiträge: 5
Registriert: 30. Mai 2018 12:26

Re: U3.3b

Beitrag von Karl Stelzner » 30. Mai 2018 12:46

Wie wir gestern in der Übung besprochen haben liegt das Problem darin, ob man die Rewards an den Blattknoten negiert oder nicht. In diesem Fall war in der Aufgabenstellung vermerkt, dass sie negiert werden sollen. Im allgemeinen Fall ist dies davon abhängig, wer den letzten Zug macht, da sichergestellt werden soll, dass die Evaluierungen an jedem Knoten der Sicht des Spielers entsprechen, der gerade am Zug ist.

Antworten

Zurück zu „Einführung in die Künstliche Intelligenz“