Skip to content

Instantly share code, notes, and snippets.

@hcarvalhoalves
Created June 10, 2017 15:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hcarvalhoalves/4e708f60beec72ac1be31b3f0497eeaf to your computer and use it in GitHub Desktop.
Save hcarvalhoalves/4e708f60beec72ac1be31b3f0497eeaf to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Circuit breaker with PID controller saturation\n",
"\n",
"## Rationale\n",
"\n",
"A proportional–integral–derivative controller (PID controller [1]) is a control loop feedback mechanism (controller) commonly used in industrial control systems. A PID controller continuously calculates an error value as the difference between a desired setpoint and a measured process variable. The controller attempts to minimize the error over time by adjustment of a control variable, such as the position of a control valve, a damper, or the power supplied to a heating element, to a new value determined by a weighted sum.\n",
"\n",
"We can implement a circuit breaker by implementing a PID controller with a fixed set point of 0 (meaning: no errors are acceptable) and checking when the control variable gets saturated by having it output a binary target [0,1]. When it saturates, we consider the breaker tripped.\n",
"\n",
"[1] https://en.wikipedia.org/wiki/PID_controller"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/henriquealves/anaconda/lib/python2.7/site-packages/IPython/html.py:14: ShimWarning: The `IPython.html` package has been deprecated. You should import from `notebook` instead. `IPython.html.widgets` has moved to `ipywidgets`.\n",
" \"`IPython.html.widgets` has moved to `ipywidgets`.\", ShimWarning)\n"
]
}
],
"source": [
"%matplotlib inline\n",
"from __future__ import division\n",
"\n",
"import numpy\n",
"import pandas\n",
"from IPython.html import widgets\n",
"from IPython.display import display"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def unreliable_process(b=1, n=100):\n",
" return (numpy.random.pareto(b, size=n)).clip(1) - 1"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def pid(col, kp, ki, kd, sp=0):\n",
" \"\"\"\n",
" Discrete PID controller.\n",
" Kp is the only gain assumed to be in real units (e.g. events per second).\n",
" \"\"\"\n",
" i = 0\n",
" d = 0\n",
" # x is sampled event rate, time is implicit (dt = 1)\n",
" for x in col:\n",
" error = sp - x\n",
" # Standard form, where proportional gain kp is applied to all other terms\n",
" adjustment = (1 / kp) * (error + (ki * i) + (kd * (error - d)))\n",
" i += error\n",
" d = error \n",
" yield adjustment"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"global failures\n",
"\n",
"def simulate_process(n, a):\n",
" global failures\n",
" failures = unreliable_process(a, n)\n",
" df = pandas.DataFrame({'failures': failures})\n",
" df.plot(figsize=[16, 3], subplots=True)\n",
"\n",
"def simulate_pid(kp, ki, kd):\n",
" decay = numpy.array(list(pid(failures, kp, ki, kd)))\n",
" saturation = numpy.apply_along_axis(lambda x: abs(x) >= 1, 0, decay.cumsum()).astype(bool)\n",
" df = pandas.DataFrame({'decay': decay, 'saturation': saturation})\n",
" df.plot(figsize=[16, 3], secondary_y=['saturation'])\n",
"\n",
"n_s = widgets.IntSlider(min=100, max=1000, step=10, value=500, description=\"Sample size (n)\")\n",
"a_s = widgets.FloatSlider(min=0.1, max=100, step=0.1, value=2.5, description=\"Reliability (alpha)\")\n",
"w_p = widgets.interactive(simulate_process, n=n_s, a=a_s)\n",
"\n",
"kp_s = widgets.FloatSlider(min=1, max=1000, step=10, value=100, description=\"Kp\")\n",
"ki_s = widgets.FloatSlider(min=0, max=1, step=0.01, value=0.1, description=\"Ki\")\n",
"kd_s = widgets.FloatSlider(min=0, max=1, step=0.01, value=0.2, description=\"Kd\")\n",
"w_t = widgets.interactive(simulate_pid, n=n_s, a=a_s, kp=kp_s, ki=ki_s, kd=kd_s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simulating unreliable process\n",
"\n",
"Sampling from a Pareto with a bias to get more life-like error pattern (burst failures, cascading failures)."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1076a7e90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(w_p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tuning PDI parameters\n",
"\n",
"- Proportional Gain (Kp): Equivalent to the acceptable error rate * decay.\n",
"- Integral Gain (Ki): How much past errors will govern the saturation.\n",
"- Derivative Gain (Kd): How much sudden error bursts will govern the saturation."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nwnlbssFd8FVKwun69bbg60pKikziNcu0IvOKFbKsUqtWjuFz/nzgllskJA8eLNeVlAD33AM89JDc\np18/4M47bfeZNQu44gqpYrvy11/AyZPydbljfNnqTEREREQArrvuOjz00EOhPgwKI5YKvnv2yIRS\nderIdcbkVtESfCdOBN5/3/2M1e6CLyDBd9268oMvIEsizZkjgfPoUWDvXgneTZpI+DQm9tMaePtt\n4LrrZK3hbdtkEq1VqyRAr10rIXfcOHm806flfuvXA6+9ZlsH2fho00a20VrC8ty5sn1BgUxytmmT\n8+WqOLkVEREREQEyezCXYCIzSwXfVauAc86RsalA9FV809KA7Gz329gH36pVy95+3nmeVXwBCbnn\nnSfrFq9cCVxwgSwjlZ4uS0kZayuvXi2htGNHGfc8eLCMKV6wQGaUVgq46CJZiqhpUwnexcUSYAcM\nkBB9/Ljto1EjWR/5vfdkjWQjKBcWylrEcXFSCTYzptfnHzgiIiIiArj8EpVlueBrXis32oKvJ8zB\n9+RJ/yq+gFSZn3oK+OknCbYGo+oLSLV36FBbJfrqq4F33rEFX7PWrSUob90q39OkJBn7a674/uc/\nwLPPynjm9u1tk5cVFMhJj6ZNHVutWe11rrgYeP31UB8FERERUcX69ddfccEFFyAlJQXDhw/H33//\nffa2hQsX4vzzz0d6ejq6du2KtWvXnr1t165dGDJkCM455xxkZGTgjtIJbbZu3YpevXohIyMDNWrU\nwOjRo5GXlwcAeOaZZ3DVVVeV2f/48eNx1113BeGZkq8sFXz//rvs8jrGrM4MvjbGzNZnzjhvdT7v\nPOC332RNZPNr6Urv3lI1fv55x+BrhM/335ewa8jJkdm39+4FLryw7OO1aSPB15gMy5n69YG775bb\n+/a1je0tKJDJuMyh2xDK8b3LlgEffRSSXZfr0CHgxhttM2ITERERRZqCggIMGjQIY8aMwdGjR3H1\n1Vfj/fffh1IKv/76K2688UbMmTMHR44cwdixYzFgwAAUFhaiuLgY/fv3R4MGDbBjxw7s2bMHw4cP\nP/u4kydPxr59+7Bhwwbs2rULU6ZMAQBcc801+Pzzz88G4aKiIrz99tsYM2ZMKJ4+echSwRdgxdcT\nRtXXWfA1WsUbN5a25fIoBUyaJAHKWcV3+3YgL0/aoA1xccCQITI+134fbdoAa9ZIu7Wr4AvImsML\nFsixmoNvOFZ8c3OBF14Iya7LVVgoVd8dO0J9JERERBTplArMh7d++uknFBUV4c4770RsbCyuvPJK\ndOjQAVprzJkzB2PHjkWHDh2glMK1116LxMRELFu2DCtWrMC+ffvwzDPPoHLlykhMTETXrl0BAI0a\nNULv3r0RHx+PjIwM3H333fjmm28AAJmZmejWrRveffddAMDnn3+OGjVqoG3btgF7LSnwLBN8MzKk\nJdY++EbT5Faechd8lZKqrydtzobBg4FXXwXq1rVd17SpBN+vvpKqsP1SRdOny7JG9ozgu26d++AL\nSGg2B9/CQrncpAmwfDnw9dcy6RYgSxkZa/geOuR88itPGfvzVH6+tIIXF/u+z4piVHq3bQvtcRAR\nEVHk0zowH97au3cvahvrb5aqVxoaduzYgenTpyM9Pf3sx+7du7Fv3z7s2rUL9erVQ4z9G1kABw4c\nwPDhw1GnTh2kpqbimmuuweHDh8/ePmbMGMwtnYF17ty5uOaaa7w/cAoqy6zjGxsr4dfcnsuKr3Pu\ngi8g42zT0z1/vJgYmbHZzKj4xseXXc/X4Gy/gMzKXLmyBOZ77y1/3wkJjmN8O3eW2aHvuQeoVQtY\nuNDW6jx/PnDttUD16rbJuDxx111Ar14SpOvVk7HFV14JVKnifPvq1W3jl0+elNd6/Xp5bcOJEeK3\nbg3tcRARERFVlKysLOzZs6fMdTt27ECjRo2QnZ2NyZMn44EHHnC437Jly7Bz504UFxcj1u5N4wMP\nPIDY2FisW7cOaWlp+Oijj86O/wWAgQMH4tZbb8W6deuwaNEiTJs2rWKeHAWMZYIvAAwcKOvBGszB\n15sgF+nKC76PPup5IHSlcWNgyxZZXurpp727b+vWwOLFQPPm5W+bmOg4xrduXQnOJ0/KLNe7dwNV\nqhcDJbG44w5ZbzglRarKnti4USbSWrkSmDdPgvywYcAXX7iu4v7vf3I8sbHyOickAD/+GH7B16j4\nMvgSERFRpOrSpQvi4uLw/PPPY9y4cfjkk0/w888/o3fv3rjpppswePBgXHzxxejQoQNOnTqF3Nxc\n9OjRA506dUJWVhYmTZqEqVOnIiYmBqtWrUKXLl2Qn5+P1NRUpKSkYM+ePXjmmWfK7LNy5cq48sor\nMXLkSHTq1Al1jPVWKWxZKvjOnl32sjn4mttwo115wTctLTD7SE2VgOnta9+mjVSLXVVTzZy1Ohuq\nVpXZpF97DRh6fTHyT8TijeeA88+X2xs29Ox4+veXn61ly6SSPG0acPHFZSfssvfuuxK8U1Lkde7a\nVYLvLbd4ts9gYaszERERRbr4+Hh88MEHuOmmm/Dggw/i8ssvx5VXXgkAaNeuHebMmYPbb78dmzdv\nRuXKldGtWzf06NEDMTEx+OSTTzB+/HjUrVsXSimMGjUKXbp0wSOPPIJrr70WqampaNKkCUaPHo0Z\nduP4xowZg1deeQWvvvpqKJ42eclSwdceZ3V2rrzgGyhNmpStwHuqUyfPg5izya3M/vEPCahLV5Sg\nUtsYjBzp/fHExAC33SYfeXnS8lwe42cvJUUC8KWXAi+/bLt93ToZ45yRIWsPOxk64lS7dkCXLrJG\n8ty5MlFYamr5969bF+jZU77+7DNp865Z0/aaseJLREREkaxdu3ZYtWqV09v69OmDPn36OL0tOzsb\nH374ocP1LVq0wMqVK8tcN2HChDKX69Wrd7byS+HP0sGXk1s5Zw6+VatW3H5GjpTqrbcGD3Zc39eV\n8oJvu3YSDP8+U4zUFN/7t6+/XmaSvv9+z0Kqeb3k/HwZE/zUU8DatbK80wsvyJJMWnse8ktKZNmo\npCRg506ZGbtKFQnj5fnxR6BDB2kNf+014I03gNGjpeLbpIkEX619mymRiIiIiMoqKSnB9OnTMWLE\nCCRVZKWJAsbywZcVX0dGKDt5smIrvr629SollUxP2E9uFR/v+FgffACcTihG33d9D75pacB77zmu\nO+yKcdIFkNc5OVkqtZ07A1ddBfzyi2/t98XFwJIlMvN2rVqe3+/UKWDKFPl81VW2FufCQqk679sH\n/PWXLGdFRERERL47efIkatasiQYNGuDzzz8P9eGQhxh8I1CwWp2DwTy5lf0YX0PDhsD2Y8VnlzPy\n1WWXeb6t0eoM2F7n11+X40tJ8f0YYmOdz5JdnipVbJOM3XyzY5W8USOp+jL4EhEREfmnatWqyDfe\nCJJlWGYdX2cYfJ2LpOBbXquzoUSXIFb5OVW1F+xbnZOSpLLqT+gNFPsJweLjbcGXiIiIiCgaWTr4\nVq0qrZ3HjzP4miUnA0eOyJhRV0HRKuyDr32rs8FYxzdYzMH35MmKHUvtrYSEsq3O8fFSFefMzkRE\nREQUrSzd6hwbC1SqBBw8yOBrlpwsYzqTkqw/mZGnFd9iXRzUiq/RbQCEX2U9Pt55xffNN4F33im7\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1079fa890>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(w_t)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Possible improvements\n",
"\n",
"- Dynamic setpoint (e.g., we can set a baseline error rate > 0 if failures are suddenly expected)\n",
"- Integral wind up\n",
"- Integral reset"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![Science](http://i0.kym-cdn.com/photos/images/newsfeed/000/517/111/fbd.jpg)"
]
}
],
"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.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment