Skip to content

Instantly share code, notes, and snippets.

@jonasschneider
Created August 29, 2016 21:38
Show Gist options
  • Save jonasschneider/c36a35cbfeebb9914e2dba0921db70ef to your computer and use it in GitHub Desktop.
Save jonasschneider/c36a35cbfeebb9914e2dba0921db70ef to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"## My first trajop"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"hidden": true
},
"source": [
"Going from qinit to star!"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0 1.360000\n",
" 100 0.194962\n",
" 200 0.182319\n",
" 300 0.181837\n",
" 400 0.181819\n",
" 500 0.181818\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEACAYAAACj0I2EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGiRJREFUeJzt3XuYU/W59vHvM8NBUaGoFVsUFa3WahUUD62tjqICunft\nu/e7NwwoSvUVREGEMiAKMxUU8CwoAhU5iWKr7VbrARCc7fbASUEUB0XdynCoiFCtIAKT5/0jAcII\nMwlkslZW7s91zUXW5JfkMTNzu7JyJzF3R0REcl9B0AOIiEhmKNBFRCJCgS4iEhEKdBGRiFCgi4hE\nhAJdRCQiag10M5tgZp+b2ZIa1owys+VmttjMWmV2RBERSUUqe+gTgXZ7OtPMOgDHuvtPgO7A2AzN\nJiIiaag10N39NWBDDUsuA6Yk1s4DmphZs8yMJyIiqcrEMfTmQGXS9qrE90REJIv0pKiISETUy8B1\nrAKOTNo+IvG97zEzvXGMiMhecHerbU2qe+iW+NqdZ4GuAGZ2NvAPd/+8hqFC9VVaWhr4DLkyl2bS\nTPkwVxhnSlWte+hm9jhQBBxiZiuAUqBBPJt9vLu/YGaXmNlHwEagW8q3LiIiGVNroLt75xTW3JCZ\ncUREZG/l/ZOiRUVFQY+wW2GcSzOlRjOlLoxzhXGmVFk6x2f2+cbMPJu3JyISBWaGZ/BJURERCTkF\nuohIRCjQRUQiQoEuIhIRCnQRkYhQoIuIRIQCXUQkIhToIiIRoUAXEYkIBbqISEQo0EVEIkKBLiIS\nEQp0EZGIyMRH0ImISB3YvGUb14x5NOX1CnQRkZCJxZxbH3uWexYPpFHs8JQvp/dDFxEJkUdemku/\nl/rzXcEGbm5zJ4M7daCwsCCl90PXHrqISAjMems53aYNYk3hm1x57FDG9uhKg/qFaV2HAl1EJEBL\nP11L8djbeI/pXHRwPxb3msyhTRrt1XUp0EVEArB2w0aKR9/LK5se4FS7nIqeyzjhyEP36ToV6CIi\nWbR5yzauHTORaavLOKLqXOZ0nU/RqS0zct0KdBGRLIjFnMHTnuPuRQNpFGvGo5f+F1dedEZGb0OB\nLiJSxybMmEffF/vzXcF6BrW5m8GdOlBQUGtpJW0KdBGROpLcXOna8jbGXXdl2s2VdCjQRUQyLN5c\nGcp7PLHPzZV0KNBFRDJk7YaNdB59H3M23c8p1oWl11VwYosfZu32FegiIvsoubnSfNuvebnrPC5o\ndWzW51Cgi4jspVjMKZ32N+5cNID9Y4fVSXMlHQp0EZG9MGHGPPq9WMLmgi+5+fS7GFJ8SZ00V9Kh\nQBcRScPsRR9x1dRBrC58IyvNlXQo0EVEUlCx4gs6jRnKuzzOhU37sqj3pKw0V9KhQBcRqcG6rzZR\nPOo+Zm+8L5DmSjoU6CIiu7F5yzZ6jJ3M1MpSmledw6wr5tK29XFBj1UjBbqISJJYzCl7/HnufHsA\n+8V+yCOX/IVuF58Z9FgpUaCLiCRMnDmfm14oYXPBF5ScNpKyzpcG3lxJR0qBbmbtgfuBAmCCu4+s\ndv4hwGPAj4BC4B53n5TZUUVE6sacxR9z1ZRBrCp8ncuPKWPcdVexX4Pc29+t9TNFzawA+BBoC6wG\nFgCd3H1Z0ppSYD93v9nMDgU+AJq5+7Zq16XPFBWR0NiluXJAXx7v3Sd0zRUAM8vYZ4qeCSx3988S\nVzwduAxYlrTm78DPE6cPAr6sHuYiImGx7qtNdB51Py9vvJef05mlPcPbXElHKoHeHKhM2l5JPOST\n/RGYbWargQOBjpkZT0Qkc7ZsreLahyflVHMlHZk6SHQz8I67n29mxwKzzOwUd/+m+sKysrIdp4uK\niigqKsrQCCIiuxeLObc98QIj3hrAfrFDGN/haa5ud1bQY+1ReXk55eXlaV8ulWPoZwNl7t4+sT0Q\n8OQnRs3sBeB2d389sT0bGODuC6tdl46hi0hWJTdX+rcewR+6/EtONVcgs8fQFwDHmdlRwBqgE1Bc\nbU0FcCHwupk1A44HPklvZBGRzIlKcyUdtf7XuXuVmd0AzGRnbbHCzLrHz/bxwHBgopm9AxhQ4u7r\n63JwEZHdqVjxBcUPD2OJT6Nt05tYeMOjHNb0gKDHyopaD7lk9MZ0yEVE6kj15sr0noMj0VyBzB5y\nEREJrS1bq+j+8GSmVA7hx1W/jFxzJR0KdBHJScnNlYaxg0PfXMkGBbqI5JzJsxZw4/P9+bZgLSWt\nR+Zkc6UuKNBFJGfEmyu3sKre/9Dl6DLG9+wW+eZKOnRPiEjofVC5jo5jhrLEp3HBD/qwsNeEvGmu\npEOBLiKhte6rTXQZ/QCzvrmHk+nEuz3e56SjDwt6rNBSoItI6CQ3V35U9QtmdHmTi07/SdBjhZ4C\nXURCY2dzZSANY00Z1/4prml/dtBj5QwFuoiEwuRZC+jzfAmbCj7n961HMLTLv6q5kiYFuogESs2V\nzNG9JiKB+KByHZ3GDOMdn8r5aq5khAJdRLLq+82VCjVXMkSBLiJZsb25MrWylMOrzuLFzm/Qrs3x\nQY8VKQp0EalTsZgzdPqLDF84gIaxHzCm3Z+4tsMvgh4rkhToIlJnpry8kBv/1p9NBX+nX6sRDLv8\nN2qu1CEFuohkXPk7n3DllFtYWfjfFB9dxiM9f6fmShboHhaRjNmludKkDwt6PaLmShYp0EVkn63/\n+ls6j3qAmd/czUnekSU93ufkY5oFPVbeUaCLyF7bsrWKHmOnMGXFEDVXQkCBLiJpS26uNIg1UXMl\nJBToIpKWeHOlhE2Fq+nXaqSaKyGiQBeRlKi5En76aYhIjZav/JKODw1jsU+hqPGNzOv1Rw4/+MCg\nx5LdUKCLyG6puZJ7FOgisovk5kqzqjN5vvh1OpxxQtBjSQoU6CICxJsrw558iTsWlNAg1oSHLn6S\n7pf8MuixJA0KdBHhsdlv0fu5EjYWrlJzJYcp0EXy2KtL/peuk2+hsrCcTkeVMuH6q9VcyWH6yYnk\noerNlbm9xqu5EgEKdJE8ktxc+Zn/p5orEaNAF8kDW7ZW0XPcVCZ9NljNlQhToItE2PbmyvAFA6gf\na6zmSsQp0EUiKrm50ueU4Qzv+ls1VyJOgS4SMfHmyq1UFr6i5kqe0U9ZJCKWr/ySTmNuZ1FsMuc1\n7s3cXuPUXMkzBaksMrP2ZrbMzD40swF7WFNkZovM7D0zeyWzY4rInqz/+ls63D6SEx48ge+qNrOk\n+/u8UlqqMM9Dte6hm1kB8CDQFlgNLDCzZ9x9WdKaJsBDwMXuvsrMDq2rgUUkbmdzZQjNqs5Qc0VS\nOuRyJrDc3T8DMLPpwGXAsqQ1nYGn3X0VgLuvy/SgIhIXizl3/GkGt88vSTRXpqu5IkBqgd4cqEza\nXkk85JMdD9RPHGo5EBjl7lMzM6KIbDdtztv0eraEjYUr6XvqCG6/4jI1V2SHTD0pWg84DbgAOAB4\n08zedPePMnT9InlNzRVJRSq/EauAFknbRyS+l2wlsM7dNwObzexV4FTge4FeVla243RRURFFRUXp\nTSySR9RcyU/l5eWUl5enfTlz95oXmBUCHxB/UnQNMB8odveKpDU/BUYD7YGGwDygo7u/X+26vLbb\nE5F4c6XL6FHM+Ofd/Mz/g+k9SvWeK3nMzHD3Wo+t1bqH7u5VZnYDMJN4zXGCu1eYWff42T7e3ZeZ\n2QxgCVAFjK8e5iJSuy1bq7h+/GNM/HRwornymporkrJa99AzemPaQxfZrR3NlXkDqO8HcdfFd6q5\nIjtkbA9dROrWLs2VVmquyN5ToIsERM0VyTT99ohk2fKVX1I85g7ejk3mvMa91FyRjFGgi2TJ+q+/\n5fLRo3npn3fxM/8PlvRYquaKZJQCXaSOqbki2aJAF6kjsZgz/M8zGTa3hPp+kN5zReqcAl2kDqi5\nIkFQoItk0GvvfcoVE29lReEcNVck6/SbJpIBH69eT8cHb+ft2CTOPagXb/Yeq+aKZJ0CXWQfVG+u\nLO6+lFNaHh70WJKnFOgie0HNFQkjBbpIGnZtrhyo5oqEigJdJEVqrkjYKdBFaqHmiuQK/VaK7EFy\nc+W8xr15s5eaKxJuCnSRatRckVylQBdJSG6uHLatDc93VnNFcosCXfLerp8WpOaK5C4FuuS17c2V\nbwor6ddqpJorktMU6JKXkpsrHVsM4ZGeV9Nov/pBjyWyTxTokld2flqQmisSPQp0yQtqrkg+UKBL\npKm5IvlEgS6RVL25MvqiJ7ju0nOCHkukTinQJXLUXJF8pUCXyNjZXJlNxxalaq5I3lGgS85Tc0Uk\nToEuOSu5uXKi/181VyTvKdAl5+zaXDldzRWRBAW65Aw1V0RqpkCXnJDcXLnp1BEM7/pbNVdEqlGg\nS6i9uuR/6Tr5VioL56i5IlILBbqEUvXmytxe49RcEamFAl1CRe+5IrL3FOgSCnrPFZF9p0CXQOnT\ngkQyJ6VAN7P2wP1AATDB3UfuYd0ZwBtAR3f/S8amlEja3lzZWLiSvq1G6D1XRPZRrYFuZgXAg0Bb\nYDWwwMyecfdlu1k3AphRF4NKdOxsrrxCp6NKmXD91ezXQA8WRfZVKn9FZwLL3f0zADObDlwGLKu2\nrhfwFHBGRieUyNjZXJnMeY17qbkikmGpBHpzoDJpeyXxkN/BzH4M/NbdzzezXc4Tqd5cWdJjKScf\n0yzosUQiJ1OPc+8HBiRt60Co7NJcaVZ1Bs8Xq7kiUpdSCfRVQIuk7SMS30vWBphuZgYcCnQws63u\n/mz1KysrK9txuqioiKKiojRHlrDbtblykJorImkqLy+nvLw87cuZu9e8wKwQ+ID4k6JrgPlAsbtX\n7GH9ROC53bVczMxruz3Jbbs0V05Rc0UkE8wMd6/1D6nWPXR3rzKzG4CZ7KwtVphZ9/jZPr76RfZq\nYslpaq6IBK/WPfSM3pj20CMnublStH9vHu/VV80VkQzL2B66yO6ouSISPgp0SYuaKyLhpUCXlKi5\nIhJ+CnSpVXJzpV/rkQy7/DdqroiEkAJd9kjNFZHcor9O+Z7lK7+k05jbWRSbQpE+LUgkZyjQZYf1\nX39Ll9GjmPHPuznJ/1PNFZEco0AXtmytoue4qUz6bAiHV53Ji51fp12b44MeS0TSpEDPYzuaK/NL\nqB9rzJh2T3Jth18EPZaI7CUFep56bPZb9H6uhI2Fq+jXSs0VkShQoOeZeHPlFioLyyk+uoxHev5O\nzRWRiNBfcp5YvvJLOj40jMU+NdFcGa/mikjEKNAjbv3X39J51APM/OYeNVdEIk6BHlE7myuDObzq\nLDVXRPKAAj1iYjFn2JMvMXzBABrEmjCm3Z/UXBHJEwr0CNnRXClYTb9WI9RcEckzCvQI2Nlc+W+K\njy5Vc0UkT+mvPoclN1fOb3Ij83v9kcOaHhD0WCISEAV6DtrZXLmbk+nEuz3e56SjDwt6LBEJmAI9\nh2zZWkWPsVOYsmJIornyhporIrKDAj0HxGLO0OkvMnzhABrGfqDmiojslgI95Ka8vJAb/1bCpoI1\n/L71SIZ2+Vc1V0RktxToIVX+zidcOeUWVha+quaKiKRECREyH1Suo3jM7TuaKwt6PaLmioikRIEe\nEuu+2kSX0Q8w65t7OZmOaq6ISNoU6AHbtblyNjO6vMFFp/8k6LFEJAcp0AOya3OlKWPb/5lr2p8d\n9FgiksMU6AGIN1f6s6ngc37feoSaKyKSEQr0LEpurnQ5uozxPbupuSIiGaM0yYIPKtfRacww3vHH\nuKBJHzVXRKROKNDr0M7myj16zxURqXMK9DqwZWsV3R+ezJTKIfyo6hfM6PKmmisiUucU6BkUizm3\nPfECI94aSMNYU8a1f0rNFRHJGgV6hkyetYA+z5eouSIigVGg76M5iz/mqim3sKre/6i5IiKBUvLs\npYoVX1D88DCW+DQu+EEfFvaaoOaKiASqIJVFZtbezJaZ2YdmNmA353c2s3cSX6+Z2c8zP2o4rPtq\nExcPvYOTxpxIzGO82+N9Xh5yq8JcRAJX6x66mRUADwJtgdXAAjN7xt2XJS37BDjX3b8ys/bAH4FI\nPRu4ZWsV1z48iamVpfy46pdqrohI6KRyyOVMYLm7fwZgZtOBy4Adge7uc5PWzwWaZ3LIIO1srgyg\nYexgxnd4mqvbnRX0WCIi35NKoDcHKpO2VxIP+T25BnhxX4YKi4kz53PTCyV8W7CWktYj+UOXf1Fz\nRURCK6NPiprZ+UA34Fd7WlNWVrbjdFFREUVFRZkcISPizZVBrKr3Gpcf8wfGXXeVmisikjXl5eWU\nl5enfTlz95oXmJ0NlLl7+8T2QMDdfWS1dacATwPt3f3jPVyX13Z7QapY8QWdxgzlXR6n7QE3Me2G\nPnqyU0QCZ2a4e62HB1LZ7VwAHGdmRwFrgE5AcbUba0E8zK/YU5iH2bqvNtF51P28vPFefk5nlvas\n4MQWPwx6LBGRtNQa6O5eZWY3ADOJ1xwnuHuFmXWPn+3jgcHAwcAYMzNgq7vXdJw9FDZv2UaPsZN3\nNFdmXTGXtq2PC3osEZG9Uushl4zeWEgOucRiTtnjz3Pn2wNoGDuEezvcpeaKiIRWJg+5REq8udKf\nzQXr6N96hJorIhIZeRPosxd9xFVTB7G63utqrohIJEU+0XZprjS9ibdumKjmiohEUmQDfe2GjXR5\n8H5mb7xPzRURyQuRC/TNW7bR/eFJPLaqlObbfqXmiojkjcgEeizmlE77G3cuGsD+scN45JK/0u3i\n0DcnRUQyJhKBPmHGPPq+2J/vCr5kwGl3Utb5UjVXRCTv5HSg72iuFL7BFS3/wNgeV6q5IiJ5KyfT\nb+mnaykeO5T3eIILm/ZlUe9JHNqkUdBjiYgEKqcCfe2GjXQefR9zNt3HKXY5S69Tc0VEZLucCPTN\nW7Zx7ZiJTFtdRvNtv+blrvO5oNWxQY8lIhIqoQ70WMwZPO057l40kP1jh/Hopf/FlRedEfRYIiKh\nFNpA39lcWc/Np9/FkOJL1FwREalB6AJ91lvL6TZtEGsK36Rry9sYd92VNKhfGPRYIiKhF5pAjzdX\nbuM9pnPRwf1Y3GuymisiImkIPNDXbthI8eh7eWXT/ZxqV1DRcxknHHlo0GOJiOScwAJ985ZtXDPm\nUZ5YXcYRVecxp+sCik5tGdQ4IiI5L+uBHos5tz72LPcsHkij2OE8eukzaq6IiGRA1gO9ad9z+a5g\nA4Pa3MPgTh3UXBERyZCsB/q/H/s7xvboquaKiEiG5eWHRIuI5JJUPyS6IBvDiIhI3VOgi4hEhAJd\nRCQiFOgiIhGhQBcRiQgFuohIRCjQRUQiQoEuIhIRCnQRkYhQoIuIRIQCXUQkIhToIiIRoUAXEYkI\nBbqISESkFOhm1t7MlpnZh2Y2YA9rRpnZcjNbbGatMjumiIjUptZAN7MC4EGgHXASUGxmP622pgNw\nrLv/BOgOjK2DWetEeXl50CPsVhjn0kyp0UypC+NcYZwpVansoZ8JLHf3z9x9KzAduKzamsuAKQDu\nPg9oYmbNMjppHQnrDy+Mc2mm1Gim1IVxrjDOlKpUAr05UJm0vTLxvZrWrNrNGhERqUN6UlREJCJq\n/UxRMzsbKHP39ontgYC7+8ikNWOBV9z9ycT2MuA8d/+82nXpA0VFRPZCKp8pWi+F61kAHGdmRwFr\ngE5AcbU1zwLXA08m/gfwj+phnupAIiKyd2oNdHevMrMbgJnED9FMcPcKM+seP9vHu/sLZnaJmX0E\nbAS61e3YIiJSXa2HXEREJDdk7UnRVF6clE1mNsHMPjezJUHPsp2ZHWFmc8xsqZm9a2a9QzBTQzOb\nZ2aLEnPdEfRM25lZgZm9bWbPBj3Ldmb2qZm9k7i/5gc9D4CZNTGzP5tZReJneFbA8xyfuH/eTvz7\nVUh+129O3D9LzGyamTUIwUw3JrIgtTxw9zr/Iv4/jo+Ao4D6wGLgp9m47Rpm+hXQClgS5BzVZjoc\naJU4fSDwQdD3U2KWRol/C4G5wDlBz5SY5ybgMeDZoGdJmukToGnQc1SbaRLQLXG6HtA46JmSZisA\nVgNHBjzHUYmfXYPE9pNA14BnOglYAjRM/O3NBFrWdJls7aGn8uKkrHL314ANQc5Qnbv/3d0XJ05/\nA1QQgj6/u29KnGxI/A8w8PvNzI4ALgEeCXqWaowQ1YHNrDHwa3efCODu29z964DHSnYh8LG7V9a6\nsm59DWwBDjCzekAj4v+jCdKJwDx3/87dq4BXgX+r6QLZ+sVL5cVJksTMjib+CGJesJPsOLSxCPg7\nUO7u7wc9E3Af0B8I25NADswyswVm9v+CHgY4BlhnZhMThzjGm9n+QQ+VpCPwRNBDuPsG4B5gBfEX\nRv7D3V8OdireA35tZk3NrBHxHZgja7pAaPYkZCczOxB4CrgxsaceKHePuXtr4AjgXDM7L8h5zOxS\n4PPEoxlLfIXFOe5+GvE/vuvN7FcBz1MPOA14KDHXJmBgsCPFmVl94DfAn0MwS0vih/COAn4MHGhm\nnYOcyd2XASOBWcALwCKgqqbLZCvQVwEtkraPSHxPqkk83HsKmOruzwQ9T7LEQ/XngTYBj3IO8Bsz\n+4T43t35ZjYl4JkAcPc1iX+/AP5K/HBjkFYCle6+MLH9FPGAD4MOwFuJ+ypobYDX3X194vDGX4Bf\nBjwT7j7R3du4exHwD+DDmtZnK9B3vDgp8cxxJ+IvRgpa2PbuAB4F3nf3B4IeBMDMDjWzJonT+wMX\nEX9SOzDuPsjdW7h7S+K/S3PcvWuQMwGYWaPEoyvM7ADgYuIPmwPj8Rf4VZrZ8YlvtQXCcMgM4i9Q\nDPxwS8IHwNlmtp+ZGfH7qSLgmTCzHyb+bQH8H+Dxmtan8krRfeZ7eHFSNm57T8zscaAIOMTMVgCl\n2584CnCmc4AuwLuJY9YODHL3lwIc60fA5MQveQHxRw6zA5wnzJoBf028xUU9YJq7zwx4JoDewLTE\nIY5PCMEL/xLHhC8Erg16FgB3fyfxKO8t4oc1FgHjg50KgKfN7GBgK9Cztie09cIiEZGI0JOiIiIR\noUAXEYkIBbqISEQo0EVEIkKBLiISEQp0EZGIUKCLiESEAl1EJCL+P+PbOy4nGkA8AAAAAElFTkSu\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112b86310>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tf.reset_default_graph()\n",
"\n",
"NQ=2\n",
"T=10\n",
"q = tf.Variable(np.zeros((NQ,T)))\n",
"\n",
"\n",
"qshift = tf.concat(1, (q[:,0:1], q[:,0:T-1]))\n",
"\n",
"qinit = np.zeros((NQ))\n",
"qstar = np.ones((NQ))\n",
"\n",
"loss = tf.reduce_sum(tf.square(q-qshift)) + tf.reduce_sum(tf.square(q[:,T-1]-qstar)) + tf.reduce_sum(tf.square(q[:,0]-qinit))\n",
"\n",
"optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)\n",
"train = optimizer.minimize(loss)\n",
"\n",
"init = tf.initialize_all_variables()\n",
"\n",
"sess = tf.Session()\n",
"sess.run(init)\n",
"\n",
"from matplotlib import pyplot\n",
"%matplotlib inline\n",
"\n",
"progress = []\n",
"for step in xrange(501):\n",
" sess.run(train)\n",
" if step % 100 == 0:\n",
" thisloss = sess.run(loss)\n",
" thisq = sess.run(q)\n",
" print '%8d %f' % (step, thisloss)\n",
" progress.append((thisloss, thisq))\n",
"# print(step, )\n",
"# pyplot.plot([b for a,b in progress])\n",
"a,b = progress[-1]\n",
"[pyplot.plot(ys) for ys in b];"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"Adding the simplest possible dynamics model, and controls."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false,
"hidden": true,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]\n",
" 0 1.920880\n",
" 50 0.337184\n",
" 100 0.129911\n",
" 150 0.085803\n",
" 200 0.066121\n",
" 250 0.052959\n",
" 300 0.043035\n",
" 350 0.035262\n",
" 400 0.029069\n",
" 450 0.024087\n",
" 500 0.020056\n"
]
},
{
"data": {
"image/png": "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\nTCjQRUSGif8Px15qHbaiocUAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x114f09f90>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"<tensorflow.python.ops.variables.Variable object at 0x111c374d0>\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x114974e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tf.reset_default_graph()\n",
"\n",
"NQ=2\n",
"T=10\n",
"q = tf.Variable(np.zeros((NQ,T)))\n",
"\n",
"\n",
"\n",
"qinit = np.zeros((NQ))\n",
"qstar = np.ones((NQ))\n",
"\n",
"NU=2\n",
"u = tf.Variable(np.zeros((NU,T)))\n",
"ushift = tf.concat(1, (u[:,0:1], u[:,0:T-1]))\n",
"\n",
"dynamics = lambda xt, ut: xt+ut\n",
"x_rollout_t = [qinit]\n",
"for i in range(T-1):\n",
" x_rollout_t.append(dynamics(x_rollout_t[i], tf.transpose(u)[i,:]))\n",
"q_rollout = tf.transpose(tf.pack(x_rollout_t))\n",
"\n",
"sess = tf.Session()\n",
"sess.run(tf.initialize_all_variables())\n",
"\n",
"print sess.run(q_rollout)\n",
"\n",
"\n",
"loss = tf.reduce_sum(tf.square(q[:,T-1]-qstar)) + \\\n",
" tf.reduce_sum(tf.square(q[:,0]-qinit)) + \\\n",
" 1e-1 * tf.reduce_sum(tf.square(q-q_rollout)) + \\\n",
" 1e-3 * tf.reduce_sum(tf.square(u)) + \\\n",
" 1e-3 * tf.reduce_sum(tf.square(u-ushift))\n",
"\n",
"optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)\n",
"train = optimizer.minimize(loss)\n",
"\n",
"from matplotlib import pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"\n",
"progress = []\n",
"for step in xrange(501):\n",
" sess.run(train)\n",
" if step % 50 == 0:\n",
" thisloss = sess.run(loss)\n",
" thisq = sess.run(q)\n",
" print '%8d %f' % (step, thisloss)\n",
" \n",
" #print 'u',sess.run(u)\n",
" #print 'x',sess.run(q_rollout)\n",
" \n",
" progress.append((thisloss, thisq, sess.run(u)))\n",
" #print sess.run(xu)\n",
"# print(step, )\n",
"# pyplot.plot([b for a,b in progress])\n",
"a,b,c = progress[-1]\n",
"[plt.plot(ys) for ys in b];\n",
"plt.show()\n",
"[plt.plot(ys) for ys in c];\n",
"print u"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adding velocities"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Need to change learning rates: increasing weights on physics penalty leads to instability. First step(s) need to have low learning rate because of very high error, then increase (!) learning rate to really optimize. Should probably decay learning rate in the end. Conclusion: just use AdamOptimizer instead and everything is great."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0 184.000000\n",
" 100 56.162720\n",
" 200 49.158987\n",
" 300 45.831565\n",
" 400 43.832080\n",
" 500 42.455614\n",
" 600 41.452266\n",
" 700 40.691460\n",
" 800 40.094579\n",
" 900 39.615032\n",
" 1000 39.223903\n"
]
},
{
"data": {
"image/png": "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\nUUAZ8OieCt3MzgSud/ezzWwE8Dt3H7mX+1KhtxKDbr2Cjuldee+eXwUdJTBL1mzmzpmP89rW6dQm\n7eLbWZcz6fzL+c7QAUFHkzYmplMuZpYLPLeXQv8T8Hd3nxlZXg7kufuWPYxVobcCf325kGteH0/R\nbSvo3a1D0HECFw47M9/4kPvnTeej8JO0rzqM8w69nLsv+T59u3cMOp60AS1Z6M8B97r725Hl14Cf\nuPviPYxVoce52rowHW8dwaUDb2DqdZcHHSfulFfWcM/TL/F/H0ynOH0+favP5KphE/jJBafH7fH4\nrV047JRX1bCjrJIdZRWUlleys7ySneUV7KqopKyykp0VFeyuqqSssoLy6koqairZXV1BZW0llbWV\nVNRWUF1XSVVdJVXhCmq8MnKpoJZK6qySOqsgnFSJeQrJ4UxSyCTVM0m1TNKtHaHkzK8vman1l3Zp\nmWSlZ9I+lEn7jEw6ZmTSMTOTTu3qL13a11+6dsikQ2b6Ae+LirbQdV60fMOVD00jiRQe/o9/CzpK\nXMoMpXLPZedyz2XnsnrDF9w1cyb3LZzEpMU/5PjUS7nz7Amc9+2jgo4ZdzZs3cnClUV8tLaIFZuL\nWLu9iC2V66kMl1HrldRSSa1VRIq1knByBZ5UiSdXQkoleDLUhrC6DJLCIZLCIZLDGSQTIsVDpFoG\nqYRITQqRnpRBWlKI9OQQoZQMQikhOqR3IDM1g8y0EJlpIbLSM2iXHqJdKESHjAyyQiE6tssgK5RO\nVU0tO3aXs2N3OaXl5ZRWlLOropxdleWUVZWzu7qc8ppytpVvY8Oucirr6i/VXn+poZxaK6cuqf7i\nKfUXkquhJhOrzSSpLrP+RcPrL6mWSRqZpCf940UjI+UfLxrRikWhbwT6NFjuHfnZHk2ePPnr63l5\neeTl5cUggsRC0ZYdPLbxTqaPfUE7AKMwqHdXZtxyLXAtzy9czj3PP8r42aNJmhUiq64PHZOzOSSU\nQ3ZWNod2yWFAj2wG985hSP8cenbJCjp+zITDzvJ1W3lvdRFL1hWxqqSIdaVFlFQVsYMiqkJFeFIN\n6RW5dPBcuqXl0qd9Lif0GULXdh1oFwqRFSnW9hkhOmTWl2vHzBAd24XolBVKiHc/1TV1fLmrgi92\nlrO9rJwvy8rZURZ50SgvZ2fkRWNXVTlrP1nCptULqQnXUBOuifoxop1yOZT6KZdv7WHdWcB1kZ2i\nI4EHtFO0dTr2jh9TWVfO8vunBh2l1aquqeOVxatYuXETn24pZt32TWzaVcy2qmJKw5soTy6mNqMY\nPJnUyhwy67LplJzDIenZZLfP+Ubxf6tfNjld2wf9K1FdU8f7qzfy/mdFLNtQxKfbitiwq4it1UXs\nSi6iOmMdVptJqCqXTuTSM5RLbqdcDuuRyzF9cxl+WC4Dcrok9KGvzS2WR7k8AeQBXYEtwCQgDXB3\nnxoZ8yAwhvrDFq/Y0/x5ZJwKPU7NfmspFzx3Ksuu/YTBfbsFHSehhcPOhm07Wbp2E8s3FPNZySaK\nviyOFP8mSsPFVCRvoiZUDCSRWplNZl3ON4q/b+dsBvXM4fBe2Qzpn3NQxb+jrJJFK9fzwedFLNu4\nljVfFlG8u4gvaosoSymiLmMTSZXdaFeTS5fkXLIzc+nXOZcjsnMZ2i+X4Yf1Tah3HPFIJxZJ1MJh\np+vNp3Far3E8c9sNQceRiHDYKf5iF0s+L/5G8W8u28TWymJ2Rrb464vfIlv8OXRMzqZbeg4922eT\n27l+iz+7cyeWb9j49fz15ooivvQiKlKLCKdvJ6WiF1m1uRySkkuvrFz6d83lqF65HNs/l+GH9yEr\nIy3op6NNU6FL1G555BkeXvZztt+3WJ8f3go1LP4V/zTVs4nSumKqbAft6fX1/PWgbrkc3SeX4wfm\nMnRAtvaZxDkVukRlW2k5Pe8ezK9OnM6Pz88LOo6I7IEKXaJy8qSfsnbXStb9ZmbQUURkL3QcujSp\n4KM1LKh6iHeu2uNH74hIK6OJszbskv+7hdPa3cyIwX2aHiwicU9b6G3UvU+9wtbkJTx905NBRxGR\nGNEWehtUVlHN5IU38pMhv6VTVijoOCISIyr0NujiB/5Ah3A/fnHpOUFHEZEY0pRLG/PhZ5t4ofRe\nXrjkLZ2KLZJgdNhiGzPg1gl0Te/Bu/fcH3QUEYmSDluUfzL1pXdYm/Qab968IugoItIMNIfeRlTX\n1HHTKzdwdb8pcfEJfiISeyr0NuLKh/6XZE/noWsuDTqKiDQTTbm0AZ9v2s7jm+7i0XNf1I5QkQSm\nnaJtwJDbb6QmXM0n9/8p6CgicgC0U1QAmLXgYz72GSy/4ZOgo4hIM9McegILh50fPnMD/9ptEof3\nOSToOCLSzFToCeyW/32aKtvOozdeE3QUEWkBmnJJUCXbd/OHlbfy67zH9C1EIm2EdoomqFE//W/W\n7/6Mol/r0xRFWjvtFG3DXv/wM96u/iMLr/4o6Cgi0oI0h56ALp1+M6dn3cqww3sHHUVEWpC20BPM\n3TNeZlvSMp6+6amgo4hIC9MWegIpq6jm54v+kzuOfYAO7dKDjiMiLUyFnkAu/O3v6BQeyM//bWzQ\nUUQkAJpySRCLVxfz0s4pvHTp20FHEZGA6LDFBDHg1svpFsqh8O77go4iIjGmwxbbkD+/+DZr7XXe\n0hdXiLRpmkNv5apr6rjp1eu5ZsAUenbJCjqOiAQoqkI3szFmtsLMVpnZxD2s72pmL5nZh2b2sZn9\nIOZJZY+uePCvpHo7Hrz6kqCjiEjAmpxyMbMk4EHgNKAYWGRmc9y94fv764EP3f1MMzsEWGlmf3P3\n2mZJLQB8VvwlT27+KU+Om6cvrhCRqLbQhwOr3b3I3WuAGcB5jcZsBr76osr2wBcq8+Y37vc/5Ugu\n4MJThgYdRUTiQDQ7RXsB6xssb6C+5Bv6CzDfzIqBLODC2MSTvXnqjY9Y6k+x8oblQUcRkTgRq6Nc\n7gA+cvdTzWwA8KqZHePuZY0HTp48+evreXl55OXlxShC2xEOO1fn38iFfX7GoN5dg44jIjFWUFBA\nQUHBft+uyePQzWwkMNndx0SWbwfc3ac0GPMicI+7vxVZng9MdPf3Gt2XjkOPgRunzuAvy++j9P73\nSUtNDjqOiDSzaI9Dj2YOfREw0MxyzSwNuAiY22jMcuC7kQfuARwGrNm/yBKNzV+W8fDq2/jld/6g\nMheRb2hyysXd68zseuAV6l8AHnH35WZ2Tf1qnwrcC0wzs48AA37i7l82Z/C26oIH7qV3+GSuP+ek\noKOISJzRqf+tyPwPPuX0mSN5998/4oTDegUdR0RaSCynXCROXPLoTYxuf5vKXET2SJ/l0kr87IkX\n2Z60kpk/fiboKCISp7SF3grs3F3FPe//mDuP1xdXiMjeqdBbgQsfeIDO4cOZdMlZQUcRkTimKZc4\n996qjczb9Utevbww6CgiEue0hR7nvvfniYxMvZrTjh0YdBQRiXPaQo9jDz+/gPVJ/493btLntYhI\n07SFHqeqa+q4df4N/Gjg/friChGJigo9Tv3gD38hzTvwu6suCjqKiLQSmnKJQ6s3fMGMLZOYMf4V\nfXGFiERNp/7HoW9NvA4zY8l9DwYdRUTiQLSn/msLPc6sKyllafJjrLr286CjiEgrozn0ODMl/wW6\nV5yiL64Qkf2mQo8zc1blc3b/8UHHEJFWSIUeR7aVlrMx9Cp3jDs36Cgi0gqp0OPIL2fPo3P5ME23\niMgBUaHHkac/zueMPppuEZEDo0KPE2UV1axNe4GfnHt+0FFEpJVSoceJB+a8TlbFYI4blBN0FBFp\npVToceLxxfmc0kPTLSJy4HRiURyorqljpc3hz2frM89F5MBpCz0O/PHFBYSqe3HyMf2CjiIirZgK\nPQ5MK8zn25013SIiB0dTLgELh52ltfnknzEv6Cgi0sppCz1g019bRHJdFueOPDLoKCLSyqnQA/bn\nN/I5IUvTLSJy8FToAQqHncUVs/jRKSp0ETl4KvQAzXlnGWGr4ZJTjws6iogkgKgK3czGmNkKM1tl\nZhP3MibPzD4ws6Vm9vfYxkxMv39tFkPSxutr5kQkJpo8ysXMkoAHgdOAYmCRmc1x9xUNxnQEHgLO\ncPeNZnZIcwVOJIU78vn1aQ8FHUNEEkQ0W+jDgdXuXuTuNcAM4LxGYy4BZrn7RgB33xbbmIln/gef\nUp22hStH/0vQUUQkQURT6L2A9Q2WN0R+1tBhQBcz+7uZLTKzy2IVMFH9+sV8jmAcaanJQUcRkQQR\nqxOLUoDjgO8A7YB3zOwdd/+08cDJkyd/fT0vL4+8vLwYRWhd3tiWz39/+xdBxxCROFRQUEBBQcF+\n387cfd8DzEYCk919TGT5dsDdfUqDMROBkLv/LLL8V+Ald5/V6L68qcdrCxat3MCIaUMom7yZzFBq\n0HFEJM6ZGe7e5NET0Uy5LAIGmlmumaUBFwFzG42ZA4wys2QzywRGAMv3N3RbMWXubPrXnqMyF5GY\nanLKxd3rzOx64BXqXwAecfflZnZN/Wqf6u4rzGwesASoA6a6+yfNmrwVm78xn2uPvynoGCKSYJqc\nconpg2nKheXrtnLkHwfxxR2b6NIhI+g4ItIKxHLKRWJoyrNz6VM1WmUuIjGnQm9hL34+i3GD9dkt\nIhJ7KvQWtK6klK0ZC5g4/qygo4hIAlKht6Ap+S/QveIUcrq2DzqKiCQgFXoLenbVLM4ZcEHQMUQk\nQanQW8i20nKKQ68x8fxzgo4iIglKhd5Cfjl7Hp3LhzGod9ego4hIglKht5CnPp7F6D6abhGR5hOr\nD+eSfSirqKYo7QVmn//LoKOISALTFnoLeGDO62RVHMnQAdlBRxGRBKZCbwF/e38Wp/bUdIuINC8V\nejOrrqljVdIcbjlrXNBRRCTBqdCb2R9fXECoujcnH9Mv6CgikuBU6M1sWmE+J3bRdIuIND8d5dKM\nauvCLK3N59kzXgk6ioi0AdpCb0aPzX+P5Losxo4YHHQUEWkDVOjN6M9v5HNClj4qV0Rahgq9mYTD\nzuKKWVybp/lzEWkZKvRmMvvtpYSthovzjg06ioi0ESr0ZvLg/HyGpI0nKanJrwEUEYkJFXozKSyd\nxZUnarpFRFqOCr0ZvPr+aqpTtnLVmH8JOoqItCEq9Gbw25dnc4SdT0qynl4RaTlqnGbwxrZ8JgzT\ndIuItCwVeowtWrmB8vTVXD/2lKCjiEgbo0KPsSlzZ9O/9hwyQ6lBRxGRNkaFHmPzN+Zz4RCdHSoi\nLU+FHkPL121lR8YH3DbujKCjiEgbFFWhm9kYM1thZqvMbOI+xg0zsxoza5ObqPfNnkOfqtF0ygoF\nHUVE2qAmC93MkoAHgdHAUcDFZnbEXsbdB8yLdcjW4qW1+Ywb3CZfy0QkDkSzhT4cWO3uRe5eA8wA\nztvDuBuAZ4CSGOZrNYq27GBrxgImjj8r6Cgi0kZFU+i9gPUNljdEfvY1M8sBznf3PwJt8sNLpsx+\ngR4VeeR0bR90FBFpo2L1jUUPAA3n1vda6pMnT/76el5eHnl5eTGKEKw5q/IZO0DTLSJy8AoKCigo\nKNjv25m773uA2UhgsruPiSzfDri7T2kwZs1XV4FDgN3A1e4+t9F9eVOP1xqVbN9Nj1/m8On1nzMg\np0vQcUQkwZgZ7t7k7Ec0W+iLgIFmlgtsAi4CLm44wN37N3jgacBzjcs8kf3q2Xl0KR+uMheRQDVZ\n6O5eZ2bXA69QP+f+iLsvN7Nr6lf71MY3aYacce3ppfmc0UfTLSISrCanXGL6YAk45VJWUU2Hn/dk\n8ZXLGDogO+g4IpKAop1y0ZmiB+k3z84nq+JIlbmIBE6FfpCeWJzPqT013SIiwVOhH4TqmjpWJc3h\nlrPGBR1FRESFfjAefuFNQtV9OPmYfkFHERFRoR+MaYX5nNhF0y0iEh9idaZom1NbF2ZpXT5zzng1\n6CgiIoC20A/Y9NcWkVLXgbEjBgcdRUQEUKEfsKlv5jMsS9MtIhI/VOgHIBx2PqjI50d5KnQRiR8q\n9AMw++2luNVycd6xQUcREfmaCv0A/OG1WQxJG09SUpv86HcRiVMq9AOwcGc+PzxR0y0iEl9U6Pvp\n1fdXU52ylavG/EvQUUREvkGFvp9+83I+g20cKcl66kQkvqiV9tOb2/K5fJimW0Qk/qjQ98PC5esp\nT/+M68eeEnQUEZF/okLfD/c/N5sBteeQGUoNOoqIyD9Roe+H+cX5XDRE0y0iEp9U6FFatraE0owP\nuWXc6UFHERHZIxV6lKY8O4c+VWPolBUKOoqIyB6p0KP0UlE+Fxyp6RYRiV8q9CgUbdnBtoy3uG3c\nmUFHERHZKxV6FKbMfoGeFaeS07V90FFERPZKhR6FZ1fOYuxATbeISHxToTehZPtuNmXM5/Zx5wQd\nRURkn1ToTfjVs/PoUj6cATldgo4iIrJPKvQmPLV0FqP7XhB0DBGRJqUEHSCe7dxdxbq0F3n2vF8F\nHUVEpElRbaGb2RgzW2Fmq8xs4h7WX2JmH0UuC8zsW7GP2vIemPs6WRVHMXRAdtBRRESa1GShm1kS\n8CAwGjgKuNjMjmg0bA1wsrsPAe4G/hLroEF4fPEsvtNT0y0i0jpEs4U+HFjt7kXuXgPMAM5rOMDd\nC929NLJYCPSKbcyWV1ldy+rkOdw6dlzQUUREohJNofcC1jdY3sC+C/tK4KWDCRUP/vTiAkJVfRl1\n9KFBRxERiUpMd4qa2anAFcCoWN5vEKYV5jOqi6ZbRKT1iKbQNwJ9Gyz3jvzsG8zsGGAqMMbdt+/t\nziZPnvz19by8PPLy8qKM2nJq68Isrcvn3tGvBR1FRNqggoICCgoK9vt25u77HmCWDKwETgM2Ae8C\nF7v78gZj+gLzgcvcvXAf9+VNPV48eGTeQq6ddwVVv/kk6CgiIpgZ7m5NjWtyC93d68zseuAV6ufc\nH3H35WZ2Tf1qnwrcBXQBHjYzA2rcffjB/QrBmfpmPsOy9NktItK6NLmFHtMHawVb6OGwk37bIB49\n52kuzjs26DgiIlFvoevU/0by3/oYrI4LTx4adBQRkf2iQm/kwfn5DEkbT1JSky+GIiJxRYXeSOHO\nWVw1Socrikjro0JvYN57q6hJ2cYPR48MOoqIyH5ToTfwwLzZDLZxpCTraRGR1kfN1cCb22YxYbim\nW0SkdVKhR7zzyTrK09dw3dknBx1FROSAqNAjfvX8swyoPYfMUGrQUUREDogKPWJ+cT4XD9V0i4i0\nXip0YNnaEkozPuTm878bdBQRkQOmQgemPDuHPlVj6JQVCjqKiMgBU6EDLxXlc8GR+jAuEWnd2nyh\nF23ZwbaMt5g4/qygo4iIHJQ2X+j35T9Pz4pT6dklK+goIiIHpc0X+pxV+YwdqOkWEWn9Yvqdoq3F\nzt1VzHrrI57/sJBNGfO5fdxfg44kInLQEr7Qw2FnwdK1PP1OIQvWLuTTyoWUZS4hVD6IfqkjueuY\nxxmQ0yXomCIiBy3hvrFoXUkpM95YxKvLF/LxlwspSSvEPJWetSMZ0nUEo48ewYUnHa85cxFpNaL9\nxqJWXeiV1bXMLVzG3MULeXfjQtbVFVKVUUSH3cdxWLsRnNx/BBeNGsmww3vH7DFFRFpaQhb64tXF\nzHxrIQWfFrKybCGl7d4nraI3fZJGMCx7BOceP5LzRh6tz2MRkYTS6gt9W2k5T725mBc/LuTDrQvZ\nnFxIOLmcQ6pGcnSnEZw+eCQXnTSMftmdmzm1iEiwWlWh19aFeXXxavLfLeSddQtZU11IRbsVtNt9\nNP3TRzDq0JFcMGIEpw4ZoO/6FJE2J64LffWGL3jijYW8vmohy3YU8mXGuyTXdCI7PILje4zkzGNG\n8P2TjtVnq4iIEMeFnnrzQGrSS+hcfgKDO4wkb9AILh41gqP79WixHCIirUncFnr+go85e/hg0lKT\nW+xxRURas7gt9JZ8PBGRRBBtobf5z3IREUkUKnQRkQQRVaGb2RgzW2Fmq8xs4l7G/N7MVpvZh2Y2\nNLYxRUSkKU0WupklAQ8Co4GjgIvN7IhGY84EBrj7IOAa4E/NkLVZFBQUBB1hj+IxlzJFR5miF4+5\n4jFTtKLZQh8OrHb3InevAWYA5zUacx7wKIC7LwQ6mlmrOA4xXv/y4jGXMkVHmaIXj7niMVO0oin0\nXsD6BssbIj/b15iNexgjIiLNSDtFRUQSRJPHoZvZSGCyu4+JLN8OuLtPaTDmT8Df3X1mZHkFcIq7\nb2l0XzoIXUTkAERzHHo031i0CBhoZrnAJuAi4OJGY+YC1wEzIy8AOxqXebSBRETkwDRZ6O5eZ2bX\nA69QP0XziLsvN7Nr6lf7VHd/0czOMrNPgd3AFc0bW0REGmvRU/9FRKT5tNhO0WhOTmpJZvaImW0x\nsyVBZ/mKmfU2s9fNbJmZfWxmN8ZBpnQzW2hmH0Ry/U/Qmb5iZklmttjM5gad5StmttbMPoo8X+8G\nnQfAzDqa2dNmtjzydzgi4DyHRZ6fxZE/S+Pk3/odkedniZk9bmZpcZDpPyNdEF0fuHuzX6h/4fgU\nyAVSgQ+BI1risfeRaRQwFFgSZI5GmXoCQyPXs4CVQT9PkSyZkT+TgULgxKAzRfLcBPwNmBt0lgaZ\n1gCdg84wGthcAAADHklEQVTRKNP/AVdErqcAHYLO1CBbElAM9Ak4R27k7y4tsjwTuDzgTEcBS4D0\nyP+9V4D++7pNS22hR3NyUoty9wXA9iAzNObum939w8j1MmA5cXA8v7uXR66mU/8fMPDnzcx6A2cB\nfw06SyNGHB0ObGYdgJPcfRqAu9e6+86AYzX0XeAzd1/f5MjmtROoBtqZWQqQSf0LTZAGAwvdvcrd\n64A3gPH7ukFL/cOL5uQkacDMDqX+HcTCYJN8PbXxAbAZKHD3T4LOBPwWuA2It51ADrxqZovM7Kqg\nwwD9gG1mNi0yxTHVzDKCDtXAhcCTQYdw9+3Ar4F11J8YucPdXws2FUuBk8yss5llUr8B02dfN4ib\nLQn5BzPLAp4B/jOypR4odw+7+7FAb+BkMzslyDxmdjawJfJuxiKXeHGiux9H/X++68xsVMB5UoDj\ngIciucqB24ONVM/MUoFzgafjIEt/6qfwcoEcIMvMLgkyk7uvAKYArwIvAh8Adfu6TUsV+kagb4Pl\n3pGfSSORt3vPAI+5+5yg8zQUeav+AnBCwFFOBM41szXUb92damaPBpwJAHffFPlzKzCb+unGIG0A\n1rv7e5HlZ6gv+HhwJvB+5LkK2gnAW+7+ZWR6Ix/4dsCZcPdp7n6Cu+cBO4BV+xrfUoX+9clJkT3H\nF1F/MlLQ4m3rDuB/gU/c/XdBBwEws0PMrGPkegZwOvU7tQPj7v/l7n3dvT/1/5Zed/fLg8wEYGaZ\nkXdXmFk74Azq3zYHxutP8FtvZodFfnQaEA9TZlB/gmLg0y0RK4GRZhYyM6P+eVoecCbMrFvkz77A\nOOCJfY2P5kzRg+Z7OTmpJR57b8zsCSAP6Gpm64BJX+04CjDTicClwMeROWsH/svdXw4wVjYwPfKP\nPIn6dw7zA8wTz3oAsyMfcZECPO7urwScCeBG4PHIFMca4uDEv8ic8HeBq4POAuDuH0Xe5b1P/bTG\nB8DUYFMBMMvMugA1wLVN7dDWiUUiIglCO0VFRBKECl1EJEGo0EVEEoQKXUQkQajQRUQShApdRCRB\nqNBFRBKECl1EJEH8f/a9PGzdeVFjAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x114f88710>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x114174b10>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1141a8290>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nPzDh6ueMOcqhAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11450ac50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tf.reset_default_graph()\n",
"NQ=2\n",
"\n",
"###\n",
"# TASK: get from qinit to qstar\n",
"qinit = np.zeros((NQ))\n",
"qstar = np.ones((NQ))\n",
"####\n",
"\n",
"T=10\n",
"q = tf.Variable(np.zeros((NQ,T)))\n",
"\n",
"NV=2\n",
"xinit=tf.concat(0, (qinit, np.zeros((NV))))\n",
"NX=NQ+NV\n",
"assert xinit.get_shape() == [NX], str(xinit.get_shape())\n",
"\n",
"NU=2\n",
"u = tf.Variable(np.zeros((NU,T)))\n",
"ushift = tf.concat(1, (u[:,0:1], u[:,0:T-1]))\n",
"\n",
"def dynamics(xt, ut):\n",
" qpos, qvel = tf.split(0, 2, xt)\n",
" assert qpos.get_shape() == [NQ]\n",
" assert qvel.get_shape() == [NV]\n",
" qpos += qvel\n",
" qvel += ut\n",
" return tf.concat(0, (qpos, qvel))\n",
"x_rollout_t = [xinit]\n",
"for i in range(T-1):\n",
" x_rollout_t.append(dynamics(x_rollout_t[i], tf.transpose(u)[i,:]))\n",
"x_rollout = tf.transpose(tf.pack(x_rollout_t))\n",
"qpos_rollout = x_rollout[0:NQ,:]\n",
"qvel_rollout = x_rollout[NQ:,:]\n",
"\n",
"qstar_total = tf.transpose(tf.split(0,T,tf.tile(qstar, [T])))\n",
"\n",
"loss = 1e+1 * tf.reduce_sum(tf.square(q-qstar_total)) + \\\n",
" 1e+2 * tf.reduce_sum(tf.square(q[:,0]-qinit)) + \\\n",
" 1e+2 * tf.reduce_sum(tf.square(q-qpos_rollout)) + \\\n",
" 1e-4 * tf.reduce_sum(tf.square(u))\n",
" \n",
"optimizer = tf.train.AdamOptimizer(learning_rate=0.1)\n",
"train = optimizer.minimize(loss)\n",
"\n",
"sess = tf.Session()\n",
"sess.run(tf.initialize_all_variables())\n",
"\n",
"progress = []\n",
"for step in xrange(1001):\n",
" sess.run(train)\n",
" if step % 100 == 0:\n",
" thisloss = sess.run(loss)\n",
" thisq = sess.run(q)\n",
" thisv = sess.run(qvel_rollout)\n",
" print '%8d %f' % (step, thisloss)\n",
" \n",
" #print 'u',sess.run(u)\n",
" #print 'x',sess.run(q_rollout)\n",
" \n",
" progress.append((thisloss, thisq, sess.run(u), thisv, sess.run(qpos_rollout)))\n",
" #print sess.run(xu)\n",
"# print(step, )\n",
"# pyplot.plot([b for a,b in progress])\n",
"a,b,c,d,e = progress[-1]\n",
"plt.title('qpos')\n",
"[plt.plot(ys) for ys in b];\n",
"plt.show()\n",
"plt.title('qpos_rollout')\n",
"[plt.plot(ys) for ys in e];\n",
"plt.show()\n",
"plt.title('qvel')\n",
"[plt.plot(ys) for ys in d];\n",
"plt.show()\n",
"plt.title('u')\n",
"[plt.plot(ys) for ys in c];\n",
"import cPickle as pickle\n",
"with open('out.pkl', 'w') as f:\n",
" pickle.dump(b, f)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import mujoco_py\n",
"import cPickle as pickle\n",
"m=mujoco_py.MjModel('../conopt/conopt/worldgen/data/robot/particle/main.xml')\n",
"v = mujoco_py.MjViewer()\n",
"v.start()\n",
"v.set_model(m)\n",
"v.camid = 0\n",
"\n",
"with open('out.pkl', 'w') as f:\n",
" qpos = pickle.load(b)\n",
"\n",
"import numpy as np\n",
"for i in range(len(qpos)):\n",
" m.data.qpos = qpos[i]\n",
" m.forward()\n",
" v.loop_once()\n",
" #data, width, height = v.get_image()\n",
" #i= np.fromstring(data, dtype='uint8').reshape(height, width, 3)[::-1,:,:]\n",
" #np.sum(i)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment