Created
August 26, 2015 18:22
-
-
Save jogonba2/1947f281a46d75b239fa to your computer and use it in GitHub Desktop.
Minimax example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
# | |
# minimax.py | |
# | |
# Copyright 2015 Overxflow13 | |
# | |
class Node: | |
def __init__(self,state,value,sons): self.state,self.value,self.sons = state,value,sons | |
def getState(self): return self.state | |
def getValue(self): return self.value | |
def getSons(self): return self.sons | |
def getTerminal(self): return True if not sons else False | |
def sonsValues(self): | |
values = [] | |
for son in self.sons: | |
if son.getValue()>0: values.append(son.getValue()) | |
return values | |
def setValue(self,value): self.value = value | |
def setState(self,state): self.state = state | |
def setSons(self,sons): self.sons = sons | |
def addSon(self,son): self.sons.append(son) | |
def addSons(self,sons): | |
for son in sons: self.addSon(son) | |
def minimax(tree,minmax): | |
for son in tree.getSons(): minimax(son,(minmax+1)%2) | |
sonsVals = tree.sonsValues() | |
if len(sonsVals)>0: | |
if minmax==0: tree.setValue(max(sonsVals)) # 0->MAX,1->MIN # | |
else: tree.setValue(min(sonsVals)) | |
### Game tree example ### | |
root = Node([1,2,3],-1,[]) | |
n1,n2,n3,n4,n5,n6 = Node([1,2,3,4],-1,[]),Node([1,2,3,5],-1,[]),Node([1,2,3],5,[]),Node([1,2,6,2],2,[]),Node([1,2,6,2],7,[]),Node([1,2,6,2],3,[]) | |
root.addSons([n1,n2]) | |
n1.addSon(n3) | |
n2.addSon(n4) | |
n1.addSon(n5) | |
n2.addSon(n6) | |
############################# | |
minimax(root,0) | |
print root.getValue() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment