def alphabeta(currState): value = -100 currNodeType = "MAX" action = 0 alpha = -100 beta = 100 clickArrAction = [] clickArrAction = possibleClicks(currState) print("possible action clicks", clickArrAction) temp = 0 global abcountNodes for i in clickArrAction: print(i) s = nextStates(currState, i, currNodeType) abcountNodes = abcountNodes + 1 print("state---", s) print("please wait, game tree on process.....") if terminalTest(s) and utilityValue(s) == 1: return i temp = abmin_value(s,alpha,beta) print("uti val--> ",temp) print("---------------") if temp > value: value = temp action = i alpha = max(alpha,value) if alpha >= beta: break return action
def utilityValue(state): if terminalTest(state): if checkWin(state.machineCoord): return 1 if checkWin(state.humanCoord): return -1 return 0
def b16clicked(self): if not possibleClicks(globalState).__contains__([3, 3]): self.winL.setText( "HUMAN TURN -- \nPlease place your coin in right position") self.winL.adjustSize() return else: self.b[15].setIcon(QIcon("blue.png")) self.b[15].setIconSize(QSize(50, 50)) self.b[15].setEnabled(False) globalState.humanCoord.append([3, 3]) if terminalTest(globalState) and utilityValue(globalState) == -1: self.winL.setText("HUMAN WON!! Please reset") self.winL.adjustSize() for i in range(16): self.b[i].setEnabled(False) return if self.gameType == "MINIMAX": action = minimax(globalState) elif self.gameType == "ALPHABETA": action = alphabeta(globalState) globalState.machineCoord.append(action) temp = coordToNo(action) self.b[temp - 1].setIcon(QIcon("green.png")) self.b[temp - 1].setIconSize(QSize(50, 50)) self.b[temp - 1].setEnabled(False) if terminalTest(globalState) and utilityValue(globalState) == 1: self.winL.setText("MACHINE WON!! Please reset") self.winL.adjustSize() for i in range(16): self.b[i].setEnabled(False) return self.winL.setText( "Machine already played ! \nHuman it's your Turn...Place your blue coin" ) self.winL.adjustSize()
def max_value(currState): if terminalTest(currState): return utilityValue(currState) value = -100 currNodeTpye = "MAX" clickArr = [] clickArr = possibleClicks(currState) for i in clickArr: temp = min_value(nextStates(currState, i, currNodeTpye)) if temp > value: value = temp return value
def abmax_value(currState, alpha, beta): if terminalTest(currState): return utilityValue(currState) value = -100 currNodeTpye = "MAX" clickArr = [] clickArr = possibleClicks(currState) global abcountNodes for i in clickArr: abcountNodes = abcountNodes + 1 temp = abmin_value(nextStates(currState, i, currNodeTpye),alpha,beta) if temp > value: value = temp alpha = max(alpha,value) if alpha >= beta: break return value