{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "c0e2a42d", "metadata": {}, "outputs": [], "source": [ "from lottery import *\n", "from threading import Thread\n", "from pid import *\n", "import os" ] }, { "cell_type": "markdown", "id": "9c6c8b3b", "metadata": {}, "source": [ "# controller gains search space simulation. " ] }, { "cell_type": "markdown", "id": "414e5569", "metadata": {}, "source": [ "crawler converges fast towrds highest accuracy, here is how it works:\n", "## for all controller N pramaters:\n", "* start with some hueristic state $s_i | 0 < i <= N$ \n", "* look on the right, and left of s at random, within certain dynamic range, and step size that are changed every loop to either zoom in/out to converge fast as possible, and avoid getting stuck in local minima/maxima.\n", "* if new record is hit, or range is exhusted, move to new next controller parameter/dimension state $s_{i+1}$.\n", "* if a loop went by without hitting any new record (high controller accuracy), search space is scrutinized with smaller step, and larger space around $s_i$ in next round.\n", "* otherwise space range is decreased, and step is increased." ] }, { "cell_type": "markdown", "id": "49dc7d66", "metadata": {}, "source": [ "## auto crawler discrete controller" ] }, { "cell_type": "code", "execution_count": null, "id": "38e77bc3", "metadata": {}, "outputs": [], "source": [ "!python auto_crawler.py" ] }, { "cell_type": "code", "execution_count": null, "id": "10a81f04", "metadata": {}, "outputs": [], "source": [ "!cat highest_gain.txt " ] }, { "cell_type": "markdown", "id": "d2fc307d", "metadata": {}, "source": [ "## auto crawler hakahashi controller" ] }, { "cell_type": "code", "execution_count": null, "id": "6baf77e9", "metadata": {}, "outputs": [], "source": [ "!python auto_crawler_takahashi.py" ] }, { "cell_type": "code", "execution_count": null, "id": "3f55d753", "metadata": {}, "outputs": [], "source": [ "!cat highest_gain_takahashi.txt" ] }, { "cell_type": "markdown", "id": "caf6731c", "metadata": {}, "source": [ "# controller parameters results\n" ] }, { "cell_type": "markdown", "id": "beff0f57", "metadata": {}, "source": [ "the controller results shows that optimal gains are as follows: accuracy:0.7568862275449102, kp: -0.03999999999998902, ki:-0.005999999985257798, kd:0.01299999999999478\n" ] }, { "cell_type": "code", "execution_count": null, "id": "45e85da8", "metadata": {}, "outputs": [], "source": [ "def vesting_instance(kp, ki, kd, initial_distribution, vesting):\n", " os.system(\"rm f.hist; rm leads.hist\")\n", " RUNNING_TIME = len(next(iter(vesting.values())))*28800\n", "\n", " if __name__ == \"__main__\":\n", " darkies = []\n", " id = 0\n", " for name, distrib in vesting.items():\n", " darkies += [Darkie(initial_distribution[id], vesting=distrib)]\n", " id+=1\n", " airdrop = 0\n", " for darkie in darkies:\n", " airdrop+=darkie.stake\n", " print(\"network airdrop: {} on {} nodes\".format(airdrop, len(darkies)))\n", " dt = DarkfiTable(airdrop, RUNNING_TIME)\n", " for darkie in darkies:\n", " dt.add_darkie(darkie)\n", " dt.background(rand_running_time=False)\n", " dt.write()" ] }, { "cell_type": "markdown", "id": "0dd77352", "metadata": {}, "source": [ "# run lottery instance" ] }, { "cell_type": "code", "execution_count": 2, "id": "78372ae6", "metadata": {}, "outputs": [], "source": [ "def draw():\n", " LEAD_FILE = \"leads.hist\"\n", " F_FILE = \"f.hist\"\n", "\n", " LEAD_PROCESSED_IMG = \"lead_history_processed.png\"\n", " F_PROCESSED_IMG = \"f_history_processed.png\"\n", "\n", " SEP = \",\"\n", " NODES = 5 # nuber of nodes logged\n", "\n", " with open(LEAD_FILE) as f:\n", " buf = f.read()\n", " nodes = buf.split(SEP)[:-1]\n", " node_log = []\n", " for i in range(0, len(nodes)):\n", " node_log+=[int(nodes[i])]\n", " freq_single_lead = sum(np.array(node_log)==1)/float(len(node_log))\n", " print(\"single leader frequency: {}\".format(freq_single_lead))\n", " plt.plot(node_log)\n", " plt.legend(['#leads'])\n", " plt.savefig(LEAD_PROCESSED_IMG)\n", "\n", "\n", " with open(F_FILE) as f:\n", " buf = f.read()\n", " nodes = buf.split(SEP)[:-1]\n", " node_log = []\n", " for i in range(0, len(nodes)):\n", " node_log+=[float(nodes[i])]\n", " plt.plot(node_log)\n", " plt.legend(['#leads', 'f'])\n", " plt.savefig(F_PROCESSED_IMG)" ] }, { "cell_type": "code", "execution_count": null, "id": "d83e8a1f", "metadata": {}, "outputs": [], "source": [ "vesting = {}\n", "with open('vested_distribution.csv') as f:\n", " for node in f.readlines():\n", " keyval = node.split(',')\n", " key = keyval[0]\n", " val = ','.join(keyval[1:])\n", " vesting[keyval[0]] = eval(eval(val))" ] }, { "cell_type": "code", "execution_count": null, "id": "1741af9b", "metadata": {}, "outputs": [], "source": [ "nodes = len(vesting)\n", "# stakers intial distribution\n", "genesis_distribution = [1 for _ in range(nodes)]\n", "# using simulation output\n", "kp=-0.03999999999998902\n", "ki=-0.005999999985257798\n", "kd=0.01299999999999478\n", "vesting_instance(kp, ki, kd, genesis_distribution, vesting)\n", "draw()" ] }, { "cell_type": "markdown", "id": "3aa2e8fc", "metadata": {}, "source": [ "# randomize token in stake" ] }, { "cell_type": "code", "execution_count": 44, "id": "01b062b3", "metadata": {}, "outputs": [], "source": [ "def vesting_instance(kp, ki, kd, initial_distribution):\n", " os.system(\"rm f.hist; rm leads.hist\")\n", " RUNNING_TIME = len(initial_distribution)\n", "\n", " if __name__ == \"__main__\":\n", " darkies = [Darkie(initial_distribution[id]) for id in range(RUNNING_TIME)]\n", " airdrop = sum(initial_distribution)\n", " for darkie in darkies:\n", " airdrop+=darkie.stake\n", " print(\"network airdrop: {} on {} nodes\".format(airdrop, len(darkies)))\n", " dt = DarkfiTable(airdrop, RUNNING_TIME)\n", " for darkie in darkies:\n", " dt.add_darkie(darkie)\n", " dt.background(rand_running_time=False)\n", " dt.write()" ] }, { "cell_type": "code", "execution_count": 45, "id": "870df66b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "network airdrop: 21337567126.04948 on 1000 nodes\n", "single leader frequency: 0.07684630738522955\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "kp=-0.03999999999998902\n", "ki=-0.005999999985257798\n", "kd=0.01299999999999478\n", "NODES=1000\n", "genesis_distribution = [random.random()*ERC20DRK*0.01 for _ in range(NODES)]\n", "vesting_instance(kp, ki, kd, genesis_distribution)\n", "draw()" ] }, { "cell_type": "markdown", "id": "571219cb", "metadata": {}, "source": [ "#### " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }