-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprojeto.py
130 lines (98 loc) · 2.6 KB
/
projeto.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# importar numpy
#
# variável linhas
# variável colunas
#
# classe Estado
# função recompensa
#
# classe RL
# função qLearning
# função posicaoLivres
#
# classe Jogo
# função renderizar
import numpy as np
linhas = 3
colunas = 3
class Estado:
def __init__(self, tabela):
self.table = tabela
def recompensa(self):
for i in range(linhas):
if sum(self.table[i, :]) == 3:
return 1
elif sum(self.table[i, :]) == -3:
return -1
for i in range(colunas):
if sum(self.table[i, :]) == 3:
return 1
elif sum(self.table[i, :]) == -3:
return -1
diagonal = sum(self.table[i, i] for i in range(colunas))
diagonal_reverse = sum(self.table[i, colunas - i - 1] for i in range(colunas))
diagonalValor = max(abs(diagonal), abs(diagonal_reverse))
if diagonalValor == 3:
if diagonal == 3:
return 1
if diagonal_reverse == 3:
return 1
return -1
return 0
class RL:
def __init__(self, tabela):
self.tabela = tabela
self.tmp = None
def qLearning(self):
livres = self.posicaoLivres()
if len(livres) == 0:
exit("Fim de jogo")
self.tmp = self.tabela
p = livres[0]
for _ in livres:
self.tmp[_] = 1
estado = Estado(self.tmp)
R = estado.recompensa()
if R == 1:
return self.tmp
elif R == -1:
self.tmp = self.tabela
continue
else:
self.tmp = self.tabela
continue
return self.tabela[p]
def posicaoLivres(self):
posicoes = []
for i in range(linhas):
for j in range(colunas):
if self.tabela[i, j] == 0:
posicoes.append((i, j))
return posicoes
class Jogo:
def __init__(self, tabela):
self.tabela = tabela
def renderizar(self):
for i in range(linhas):
print('-' * 12)
out = '|'
for j in range(colunas):
if self.tabela[i, j] == 1:
s = 'X'
elif self.tabela[i, j] == -1:
s = 'O'
else:
s = ' '
out += s + ' | '
print(out)
print('-' * 12)
tabela = [
[0, 0, 1],
[1, -1, 1],
[-1, 0, 0]
]
matriz = np.array(tabela)
rl = RL(matriz)
matriz = rl.qLearning()
jogo = Jogo(matriz)
jogo.renderizar()