if successor.isWin(): successor = None elif successor.isLose(): # reward = -100 successor = None output.append((successor, prob, reward)) return output def discount(self): return self.tetris.discount() if __name__ == "__main__": # weights = TetrisGame.readWeights('weightsThiery.tetris') #weights = [0.10000000000000001, 0.5, -44.892192895842715, -88.868713917352991, -9.0845044328524125, 99.48473353935913, -0.10000000000000001, -0.10000000000000001, -46.3552758541178784, -44.894981251780582, -49.903753991739844, -48.776916252514777, -56.009249265806467, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # weights = [random.random() for _ in xrange(22)] weights = TetrisGame.readWeights('weights_ql400.tetris') # evaluator = AdvancedEvaluator(weights) evaluator = AdhocEvaluator(weights) baseSeq = [0,1,2,3,4,5,6]*100 # random.seed(21) random.shuffle(baseSeq); # state: (board, new piece) # action: (newGrid, reward) def featureExtractor(state, action): newState = state.generateSuccessor(0, action) output = evaluator.featureExtractor(newState) return output model = TetrisGameMDP(TetrisMDP(), ExpectimaxTetrisAgent(0, 1, evaluator), FinitePieceGenerator(baseSeq))
print 'std', std print '5%', percent5 print '95%', percent95 return mean, std, percent5, percent95 def printArr(arr): print '==========' for a in arr: print a if __name__ == '__main__': # weightFile = 'weights_ql500.tetris' results_lines = [] results_scores = [] for i in xrange(9,21): weightFile = 'weights_ce{}.tetris'.format(i) weights = game.readWeights(weightFile) linesV, scoresV = simulateGame(weights, 10) print '===lines===' results_lines.append(analyze(linesV)) print '===scores===' results_scores.append(analyze(scoresV)) results1 = zip(*results_lines) results2 = zip(*results_scores) print len(results1), len(results2) for result in results1: printArr(result) for result in results2: printArr(result)