Skip to content

Instantly share code, notes, and snippets.

@neychev
Created March 9, 2017 16:58
Show Gist options
  • Save neychev/508402689c65db1a9cee1b07abe22054 to your computer and use it in GitHub Desktop.
Save neychev/508402689c65db1a9cee1b07abe22054 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"# joblib and gym issue"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[2017-03-09 19:53:59,642] Making new env: Taxi-v2\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+---------+\n",
"|R: | : :G|\n",
"| : : : : |\n",
"| :\u001b[43m \u001b[0m: : : |\n",
"| | : | : |\n",
"|\u001b[35mY\u001b[0m| : |\u001b[34;1mB\u001b[0m: |\n",
"+---------+\n",
"\n"
]
}
],
"source": [
"import gym\n",
"import numpy as np, pandas as pd\n",
"\n",
"env = gym.make(\"Taxi-v2\")\n",
"env.reset()\n",
"env.render()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"n_states=500, n_actions=6\n"
]
}
],
"source": [
"n_states = env.observation_space.n\n",
"n_actions = env.action_space.n\n",
"\n",
"print(\"n_states=%i, n_actions=%i\"%(n_states,n_actions))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"policy = np.array([[ 1. / n_actions for a in range(n_actions)] for s in range(n_states)])"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Play the game\n",
"\n",
"Just like before, but we also record all states and actions we took."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"def generate_session(t_max=10**6):\n",
" \"\"\"\n",
" Play game until end or for t_max ticks.\n",
" returns: list of states, list of actions and sum of rewards\n",
" \"\"\"\n",
" states, actions = [], []\n",
" total_reward = 0.\n",
" \n",
" s = env.reset()\n",
" \n",
" for t in range(t_max):\n",
" \n",
" a = np.random.choice(range(n_actions), size=1, p=policy[s])[0] \n",
" new_s,r,done,info = env.step(a)\n",
" \n",
" total_reward += r\n",
" states.append(s)\n",
" actions.append(a)\n",
" \n",
" s = new_s\n",
" if done:\n",
" break\n",
" return states, actions, total_reward "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"# attention, n_jobs = 25"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.externals import joblib\n",
"def parallel_sessions(n_samples):\n",
" return joblib.Parallel(n_jobs=25)(joblib.delayed(generate_session)() for _ in range(n_samples))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n_samples = 25"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# to check if sessions are unique list is converted to set as follows:\n",
"# unique_data = [list(x) for x in set((tuple(x[0]), tuple(x[1])) for x in sessions)]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" Run 1\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 2\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 3\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 4\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 5\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 6\n",
"sizes with joblib: all:25, unique:3\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 7\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 8\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 9\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n",
"\n",
" Run 10\n",
"sizes with joblib: all:25, unique:2\n",
"sizes without joblib: all:25, unique:25\n"
]
}
],
"source": [
"for i in range(10):\n",
" sessions = parallel_sessions(n_samples)#[generate_session() for _ in range(n_samples)]\n",
" sessions_2 = [generate_session() for _ in range(n_samples)]\n",
" unique_data = [list(x) for x in set((tuple(x[0]), tuple(x[1])) for x in sessions)]\n",
" unique_data_2 = [list(x) for x in set((tuple(x[0]), tuple(x[1])) for x in sessions_2)]\n",
" print('\\n Run {}'.format(i+1))\n",
" print('sizes with joblib: all:{}, unique:{}'.format(len(sessions), len(unique_data)))\n",
" print('sizes without joblib: all:{}, unique:{}'.format(len(sessions_2), len(unique_data_2)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python (myenv)",
"language": "python",
"name": "myenv"
},
"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.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment