-
Notifications
You must be signed in to change notification settings - Fork 0
/
model_robot_06.py
72 lines (60 loc) · 1.92 KB
/
model_robot_06.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
from pomegranate.distributions import Categorical
from pomegranate.distributions import ConditionalCategorical
from pomegranate.markov_chain import MarkovChain
import torch
'''
Ahora, las habitaciones 2 y 3, y 4 y 5 están conectadas.
Sin embargo, a la habitación 6 sólo puede accederse
desde la habitación 3.
Distribuímos las probabilidades de manera igual al inicio.
La probabilidad de permanecer en la misma habitación es 1/5,
y la de cambiar de habitación 2/5.
'''
# Probabilidades iniciales
start = Categorical([[
1/6,
1/6,
1/6,
1/6,
1/6,
1/6
]])
# Modelo de transicion
transitions = ConditionalCategorical([[
[1/5, 2/5, 0, 2/5, 0, 0],
[2/5, 1/5, 2/5, 0, 0, 0],
[0, 2/5, 1/5, 0, 0, 2/5],
[2/5, 0, 0, 1/5, 2/5, 0],
[0, 0, 0, 4/5, 1/5, 0],
[0, 0, 4/5, 0, 0, 1/5]
]], [start])
# Crear Markov chain
model = MarkovChain([start, transitions], k=3)
print("Probabilidades iniciales:")
# Probabilidades iniciales (Categorical)
print(model.distributions[0].probs[0])
# Probabilidades de transición o condicionadas (ConditionalCategorical)
print("Matriz de transicion:")
print(model.distributions[1].probs[0])
# vector de probabilidades iniciales
v = model.distributions[0].probs[0]
# matriz de transicion
P = model.distributions[1].probs[0]
# Probabilidades en el segundo dia de la serie
w = torch.matmul(v, P)
print(f'w = {w}')
# Probabilidades en el tercer dia de la serie
u = torch.matmul(w, P)
print(f'u = {u}')
# Probabilidades en el cuarto dia de la serie
t = torch.matmul(u, P)
print(f't = {t}')
'''
w = tensor([0.1667, 0.1667, 0.2333, 0.2333, 0.1000, 0.1000])
u = tensor([0.1933, 0.1933, 0.1933, 0.1933, 0.1133, 0.1133])
t = tensor([0.1933, 0.1933, 0.2067, 0.2067, 0.1000, 0.1000])
'''
samples = model.sample(20)
population = [ str(sample[0][0].item() + 1) + " -> " + str(sample[1][0].item() + 1) for sample in samples ]
print(f'Numero de muestras: {len(population)}')
print(" | ".join(population))