diff --git a/selfplay_calibration_rank_elo.ipynb b/selfplay_calibration_rank_elo.ipynb index 00970da4a..5ab6d474d 100644 --- a/selfplay_calibration_rank_elo.ipynb +++ b/selfplay_calibration_rank_elo.ipynb @@ -2,25 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 65, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO ] [Logger ] Record log in C:\\Users\\sande\\.kivy\\logs\\kivy_20-07-04_62.txt\n", - "[INFO ] [deps ] Successfully imported \"kivy_deps.gstreamer\" 0.1.17\n", - "[INFO ] [deps ] Successfully imported \"kivy_deps.angle\" 0.2.0\n", - "[INFO ] [deps ] Successfully imported \"kivy_deps.glew\" 0.2.0\n", - "[INFO ] [deps ] Successfully imported \"kivy_deps.sdl2\" 0.2.0\n", - "[INFO ] [Kivy ] v2.0.0rc2, git-78fb93b, 20200429\n", - "[INFO ] [Kivy ] Installed at \"C:\\Users\\sande\\Anaconda3\\lib\\site-packages\\kivy\\__init__.py\"\n", - "[INFO ] [Python ] v3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)]\n", - "[INFO ] [Python ] Interpreter at \"C:\\Users\\sande\\Anaconda3\\python.exe\"\n" - ] - } - ], + "outputs": [], "source": [ "import json\n", "import math\n", @@ -40,7 +24,7 @@ " AI_WEIGHTED,\n", " AI_PICK,\n", " AI_TERRITORY,\n", - " AI_POLICY,\n", + " AI_POLICY,AI_INFLUENCE\n", ")\n", "\n", "from settings import Logger\n", @@ -49,33 +33,24 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "DB_FILENAME = \"tournament_ai_performance.pickle\"\n", "class AI:\n", - " def fix_settings(self):\n", - " pass\n", + " pass\n", "\n", - "try:\n", - " with open(DB_FILENAME, \"rb\") as f:\n", - " ai_database_loaded, all_results = pickle.load(f)\n", - " ai_database = []\n", - " for ai in ai_database_loaded:\n", - " try:\n", - " ai.fix_settings() # update as required\n", - " ai_database.append(ai)\n", - " except Exception as e:\n", - " print(\"Error loading AI\", ai.strategy,e)\n", - "except FileNotFoundError:\n", - " ai_database = []\n", - " all_results = []" + "class FixedEloCompetitor(EloCompetitor): # rating doesn't update on wins/losses\n", + " pass\n", + " \n", + "with open(DB_FILENAME, \"rb\") as f:\n", + " ai_database,_ = pickle.load(f)" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -83,7 +58,7 @@ "ranked = [ai for ai in ai_database if ai.strategy==AI_RANK]\n", "calibrate = [ai for ai in ai_database if ai.strategy==AI_WEIGHTED]\n", "policy = [ai for ai in ai_database if ai.strategy==AI_POLICY and ai.ai_settings['opening_moves']==0][0]\n", - "\n", + "policy_elo = 1700\n", "kyu_elo = [(r.ai_settings['kyu_rank'],r.elo_comp.rating) for r in ranked]\n", "#kyu_elo.append( (-5,policy.elo_comp.rating) ) # policy ~5d\n", "kyu_elo = sorted(kyu_elo)\n", @@ -92,17 +67,17 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[,\n", - " ]" + "[,\n", + " ]" ] }, - "execution_count": 4, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, @@ -127,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -139,32 +114,19 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" + "ename": "NameError", + "evalue": "name 'ys' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mpy\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mys\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'ys' is not defined" + ] } ], "source": [ @@ -173,127 +135,105 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 30, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "([0.5], [1.0], [1.25], [1.5], [1.75], [2], [2.5], [3.0])" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "x" + "DB_FILENAME = \"calibrated_ai_performance.jank.pickle\"\n", + "with open(DB_FILENAME, \"rb\") as f:\n", + " ai_database_jank,_ = pickle.load(f)" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "strat = AI_LOCAL\n", + "strat = AI_TENUKI\n", + "strat = AI_TERRITORY\n", + "strat = AI_INFLUENCE\n", + "local = [ai for ai in ai_database_jank if ai.strategy==strat]\n", + "loc_elo = [([r.ai_settings['pick_frac'],r.ai_settings['pick_n']],min(policy_elo,r.elo_comp.rating)) for r in local]\n", + "loc,elo = zip(*loc_elo)\n", + "\n", + "frac, n = zip(*loc)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "frac_x = np.unique(frac)\n", + "n_y = np.unique(n)\n", + "matrix = np.zeros( (len(n_y),len(frac_x)) )" + ] + }, + { + "cell_type": "code", + "execution_count": 68, "metadata": {}, "outputs": [], "source": [ - "ys = (1591.4486833932992,\n", - " 1266.2591850212696,\n", - " 1121.5661132041557,\n", - " 960.0966363156612,\n", - " 800.3124873968906,\n", - " 670.1137021076612,\n", - " 516.8371296455036,\n", - " 359.9621037249864)" + "for (f,n),elo in loc_elo:\n", + " xi, = np.where(frac_x==f)\n", + " yi, = np.where(n_y==n)\n", + " matrix[yi[0]][xi[0]] = elo\n", + " " ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[(0.5, 1591.4486833932992),\n", - " (1.0, 1266.2591850212696),\n", - " (1.25, 1121.5661132041557),\n", - " (1.5, 960.0966363156612),\n", - " (1.75, 800.3124873968906),\n", - " (2, 670.1137021076612),\n", - " (2.5, 516.8371296455036),\n", - " (3.0, 359.9621037249864)]" + "array([[1433.95918299, 483.92246022, 703.63329745, 898.80416596,\n", + " 1041.90611617, 1180.64701643, 1521.22844832, 1488.6024259 ],\n", + " [ 285.94611239, 598.8780026 , 673.84809013, 866.82639882,\n", + " 1032.48205655, 1334.28471216, 1502.55097318, 1571.77459082],\n", + " [ 478.3702873 , 643.86832596, 837.73488668, 945.32330087,\n", + " 1093.1194852 , 1396.09368572, 1484.49392758, 1564.14926031],\n", + " [ 570.84132865, 689.70796295, 848.31920809, 1021.70892457,\n", + " 1143.30909057, 1371.45351738, 1507.48527553, 1592.641045 ],\n", + " [ 749.49540671, 771.14405424, 865.1381579 , 1019.89505654,\n", + " 1107.95940949, 1383.37350536, 1508.29834616, 1549.81515732],\n", + " [ 882.9691111 , 902.88516506, 1057.30531618, 1178.39618159,\n", + " 1369.47479768, 1518.30319563, 1501.77213607, 1497.50803245]])" ] }, - "execution_count": 35, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "list(zip([a[0] for a in x],ys))" + "matrix" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[(39.36921298625589, 18),\n", - " (96.95581072853861, 17),\n", - " (154.54240847082144, 16),\n", - " (212.12900621310428, 15),\n", - " (269.7156039553871, 14),\n", - " (327.30220169766983, 13),\n", - " (384.88879943995266, 12),\n", - " (442.4753971822355, 11),\n", - " (500.06199492451833, 10),\n", - " (557.6485926668012, 9),\n", - " (615.235190409084, 8),\n", - " (672.8217881513667, 7),\n", - " (730.4083858936496, 6),\n", - " (787.9949836359324, 5),\n", - " (845.5815813782152, 4),\n", - " (903.168179120498, 3),\n", - " (960.7547768627808, 2),\n", - " (1018.3413746050636, 1),\n", - " (1075.9279723473464, 0),\n", - " (1133.5145700896292, -1),\n", - " (1191.101167831912, -2)]" + "array([ 0, 5, 10, 15, 25, 50])" ] }, - "execution_count": 37, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "[ (y,x) for x,y in [\n", - " (-2, 1191.101167831912),\n", - " (-1, 1133.5145700896292),\n", - " (0, 1075.9279723473464),\n", - " (1, 1018.3413746050636),\n", - " (2, 960.7547768627808),\n", - " (3, 903.168179120498),\n", - " (4, 845.5815813782152),\n", - " (5, 787.9949836359324),\n", - " (6, 730.4083858936496),\n", - " (7, 672.8217881513667),\n", - " (8, 615.235190409084),\n", - " (9, 557.6485926668012),\n", - " (10, 500.06199492451833),\n", - " (11, 442.4753971822355),\n", - " (12, 384.88879943995266),\n", - " (13, 327.30220169766983),\n", - " (14, 269.7156039553871),\n", - " (15, 212.12900621310428),\n", - " (16, 154.54240847082144),\n", - " (17, 96.95581072853861),\n", - " (18, 39.36921298625589),\n", - "]][::-1]" + "n_y" ] }, {