Skip to content

Instantly share code, notes, and snippets.

@jogonba2
Created August 26, 2015 18:22
Show Gist options
  • Save jogonba2/1947f281a46d75b239fa to your computer and use it in GitHub Desktop.
Save jogonba2/1947f281a46d75b239fa to your computer and use it in GitHub Desktop.
Minimax example
#!/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