diff --git a/AZUL Learn Opponent/run.py b/AZUL Learn Opponent/run.py
new file mode 100644
index 0000000000000000000000000000000000000000..8ff891053151e4ebc328a20e2fe040a977b38959
--- /dev/null
+++ b/AZUL Learn Opponent/run.py	
@@ -0,0 +1,134 @@
+# Written by Michelle Blom, 2019
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+#
+import random
+import time
+
+from MI_player import MI_PlayerHis, MI_PlayerPro
+from bfsPlayer import BFS_Player, BFS_PlayerPro
+from model import GameRunner,Player
+from MI_player import MI_Player
+from iplayer import InteractivePlayer
+from naive_player import NaivePlayer
+
+
+#players = [BFS_Player(0), NaivePlayer(1), NaivePlayer(2), NaivePlayer(3)]
+from testPlayers import Test_PlayerPro, Test_Player, TIME
+
+start = time.time()
+# players = [NaivePlayer(0), NaivePlayer(1)]
+# players = [BFS_Player(0), NaivePlayer(1),]
+# players = [BFS_Player(0), InteractivePlayer(1)]
+# players = [BFS_Player(0), Test_Player(1)]
+# players = [BFS_Player(0), InteractivePlayer(1)]
+# players = [MctsPlayer(0), Player(1)]
+
+#
+# gr = GameRunner(players, random.randrange(122222222222222222222223))
+# activity = gr.Run(True)
+# print("Player 0 score is {}".format(activity[0][0]))
+# print("Player 1 score is {}".format(activity[1][0]))
+
+
+
+
+ROUND = 500
+PLAYERS_NUM = 2
+
+
+
+win = [0]*4
+mark_sum = [0]*4
+
+marksList= [[], [], [], []]
+rowsList = [[], [], [], []]
+columnsList = [[], [], [], []]
+setsList = [[], [], [], []]
+penaltiesList = [[], [], [], []]
+placingList = [[], [], [], []]
+bounsList = [[], [], [], []]
+
+result = []
+
+#players = [Test_Player(0), NaivePlayer(1)]
+#players = [Test_Player(0), Test_Player2(1)]
+#players = [BFS_Player(0), InteractivePlayer(1)]
+# players = [BFS_PlayerPro(0), NaivePlayer(1)]
+players = [Test_PlayerPro(0), NaivePlayer(1)]
+#players = [MI_Player(0),MI_PlayerPro(1),]
+#players = [BFS_Player(0),MI_PlayerPro(1),]
+#players = [BFS_Player(0),BFS_PlayerPro(1),]
+# players = [Test_Player(0), Test_PlayerPro(1)]
+#players = [MI_Player(0),BFS_Player(1),]
+
+#players = [ NaivePlayer(0),MI_Player(1),]
+#players = [MI_Player(0),InteractivePlayer(1),]
+players.extend([NaivePlayer(i) for i in range(len(players), PLAYERS_NUM)])
+
+SEED = []
+for i in range(ROUND):
+    SEED.append(random.randrange(10000000000000))
+
+for i in range(ROUND):
+    gr = GameRunner(players, SEED[i])
+    activity = gr.Run(True)
+
+
+
+    resultList = [activity[i][0] for i in range(PLAYERS_NUM)]
+    for i in range(PLAYERS_NUM):
+        print("Player {} score is {}".format(i + 1, activity[i][0]))
+        mark_sum[i] += activity[i][0]
+
+        marksList[i].append(activity[i][0])
+        placingList[i].append(activity[i][2])
+        rowsList[i].append(activity[i][3])
+        columnsList[i].append(activity[i][4])
+        setsList[i].append(activity[i][5])
+        penaltiesList[i].append(activity[i][6])
+        bounsList[i].append(activity[i][7])
+
+        if activity[i][0] == max(resultList):
+            win[i] += 1
+
+    # assert activity[0][0] > activity[1][0]
+    result.append(resultList)
+    print(result)
+    print('time cost:', time.time() - start)
+    print('games:', i + 1)
+    # assert False
+for i in range(PLAYERS_NUM):
+    print("***-------------------------------------------------------------------------------------------***")
+    print("player {} | Overall | Win: {}/ {} | Winning rate: {}%.".format(
+        i + 1, win[i], ROUND, round(win[i] / ROUND * 100, 2)))
+    print("player {} | Marks | Max Mark: {} | Min Mark: {}: | Avg Mark: {}".format(
+        i + 1, max(marksList[i]), min(marksList[i]), sum(marksList[i]) / ROUND))
+    print("player {} | Placing Tails | Max Mark: {} | Min Mark: {}: | Avg Mark: {}".format(
+        i + 1, max(placingList[i]), min(placingList[i]), sum(placingList[i]) / ROUND))
+    print("player {} | Finished Rows | Max Finished: {} | Min Finished: {}: | Avg Finished: {}".format(
+        i + 1, max(rowsList[i]), min(rowsList[i]), sum(rowsList[i]) / ROUND))
+    print("player {} | Finished Columns | Max Finished: {} | Min Finished: {}: | Avg Finished: {}".format(
+        i + 1, max(columnsList[i]), min(columnsList[i]), sum(columnsList[i]) / ROUND))
+    print("player {} | Finished Sets | Max Finsihed: {} | Min Finished: {}: | Avg Finished: {}".format(
+        i + 1, max(setsList[i]), min(setsList[i]), sum(setsList[i]) / ROUND))
+    print("player {} | Penalties | Max Penalties: {} | Min Penalties: {}: | Avg Penalties: {}".format(
+        i + 1, min(penaltiesList[i]), max(penaltiesList[i]), sum(penaltiesList[i]) / ROUND))
+    print("player {} | Evaluation | PSE: {} % | RPE: {}: | CPE: {} | SPE: {} | BSE: {} ".format(
+        i + 1, round(sum(placingList[i]) / (ROUND * 150) * 100, 2), sum(rowsList[i]) / (ROUND * 5),
+        sum(columnsList[i]) / (ROUND * 5), sum(setsList[i]) / (ROUND * 5),
+        round(sum(rowsList[i]) / (ROUND * 5 * 5) + sum(columnsList[i]) * 7 / (ROUND * 5 * 10) + sum(setsList[i]) / (
+                    ROUND * 5), 2)))
+
+