diff --git a/.idea/RL-lab.iml b/.idea/RL-lab.iml
new file mode 100644
index 0000000..6711606
--- /dev/null
+++ b/.idea/RL-lab.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..a2e120d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..45d7b12
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..66d4cb5
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P_door
+ pos
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1577548737198
+
+
+ 1577548737198
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rl_lab.py b/rl_lab.py
new file mode 100644
index 0000000..16cf899
--- /dev/null
+++ b/rl_lab.py
@@ -0,0 +1,89 @@
+import numpy as np
+
+
+lab_size_x = 5
+lab_size_y = 5
+num_doors_per_room = 4
+
+
+P_door = np.ndarray((lab_size_x, lab_size_y, num_doors_per_room))
+P_door = np.random.uniform(0,1,P_door.shape)
+
+print('P_door.shape = ', P_door.shape)
+lab = np.rint(np.random.uniform(0, num_doors_per_room-1, size=(lab_size_x, lab_size_y)))
+
+
+# 1
+# |
+# 4 -0- 2
+# |
+# 3
+
+move = np.array([(0,0), (-1,0), (0,1), (1,0), (0,-1)])
+lab = np.array([
+ [3, 0, 0, 0, -1],
+ [3, 0, 0, 2, 1],
+ [2, 2, 3, 1, 4],
+ [3, 4, 4, 2, 1],
+ [2, 2, 2, 1, 0]
+])
+
+def choose_door(Pn):
+ Pnorm = np.cumsum(Pn)
+ size = len(Pn)
+ Z = np.random.uniform(0,1)
+
+ result = None
+ for n in range(0, size):
+ if Z <= Pnorm[n]:
+ result = n
+ break
+
+ return result
+
+def run(pos, N_trials, learning_rate):
+ lab_visited = np.zeros(P_door.shape)
+ moves_needed = 0
+ for n in range(0, N_trials):
+
+# print ("Pos={}".format(pos))
+ if lab[pos] == -1:
+ break
+
+ P = P_door[pos]
+ Pn = P/np.sum(P)
+
+ while True:
+ door = choose_door(Pn)
+ pos_new = tuple(pos + move[door + 1])
+
+ if pos_new[0] < 0 or pos_new[1] < 0:
+ continue
+
+ if pos_new[0] >= lab_size_x or pos_new[1] >= lab_size_y:
+ continue
+
+ if lab[pos_new] == 0:
+ continue
+
+ break
+
+ moves_needed += 1
+ k = lab_visited[pos][door]
+ P[door] = max(0, P[door] - learning_rate)
+ P_door[pos] = P
+
+ pos = pos_new
+ lab_visited[pos][door] += 1
+
+ return moves_needed, lab_visited
+
+for i in range(0, 100):
+ moves_needed, lab_visited = run(pos=(0,0), N_trials=1000, learning_rate=0.001)
+ print ('Visited map after {} trials: {}'.format(moves_needed, lab_visited))
+ print ('P_door after {} trials: {}'.format(moves_needed, P_door))
+
+moves_needed, lab_visited = run(pos=(0,0), N_trials=1000, learning_rate=0.0)
+print ('Finished after {} trials'.format(moves_needed))
+
+# P_door[pos, door] += learning_rate