From 666132407c8cc7dbe58c2ce2f2062a6b2eac3a7d Mon Sep 17 00:00:00 2001
From: Quentin Guilloteau <Quentin.Guilloteau@inria.fr>
Date: Thu, 2 Mar 2023 20:57:43 +0100
Subject: [PATCH] update pages

---
 example_lua_files/main.lua                    |  21 -
 example_lua_files/main_iter.lua               |  21 -
 flake.nix                                     | 103 ----
 julia_set/a.out                               | Bin 16152 -> 0 bytes
 julia_set/julia.txt                           | 200 --------
 julia_set/main.c                              |  86 ----
 jupyter_notebooks/00_Main.ipynb               |  56 ---
 jupyter_notebooks/01_System.ipynb             | 191 -------
 jupyter_notebooks/02_BangBang.ipynb           | 158 ------
 jupyter_notebooks/03_PController.ipynb        | 472 ------------------
 jupyter_notebooks/04_PIController.ipynb       | 238 ---------
 jupyter_notebooks/05_Identification.ipynb     | 268 ----------
 jupyter_notebooks/06_RealSystem.ipynb         | 150 ------
 pages/src/intro.md                            |  24 +-
 pages/src/motivation.md                       |  61 ++-
 src_real_system/Makefile                      |  22 -
 src_real_system/constants.h                   |  13 -
 src_real_system/log_thread.c                  |  53 --
 src_real_system/log_thread.h                  |  26 -
 src_real_system/main.c                        | 163 ------
 src_real_system/monte_carlo.c                 |  78 ---
 src_real_system/monte_carlo.h                 |  16 -
 tuto_control_lib/setup.py                     |  23 -
 tuto_control_lib/tuto_control_lib/__init__.py |   1 -
 tuto_control_lib/tuto_control_lib/plot.py     |  45 --
 tuto_control_lib/tuto_control_lib/systems.py  |  29 --
 26 files changed, 47 insertions(+), 2471 deletions(-)
 delete mode 100644 example_lua_files/main.lua
 delete mode 100644 example_lua_files/main_iter.lua
 delete mode 100755 julia_set/a.out
 delete mode 100644 julia_set/julia.txt
 delete mode 100644 julia_set/main.c
 delete mode 100644 jupyter_notebooks/00_Main.ipynb
 delete mode 100644 jupyter_notebooks/01_System.ipynb
 delete mode 100644 jupyter_notebooks/02_BangBang.ipynb
 delete mode 100644 jupyter_notebooks/03_PController.ipynb
 delete mode 100644 jupyter_notebooks/04_PIController.ipynb
 delete mode 100644 jupyter_notebooks/05_Identification.ipynb
 delete mode 100644 jupyter_notebooks/06_RealSystem.ipynb
 delete mode 100644 src_real_system/Makefile
 delete mode 100644 src_real_system/constants.h
 delete mode 100644 src_real_system/log_thread.c
 delete mode 100644 src_real_system/log_thread.h
 delete mode 100644 src_real_system/main.c
 delete mode 100644 src_real_system/monte_carlo.c
 delete mode 100644 src_real_system/monte_carlo.h
 delete mode 100644 tuto_control_lib/setup.py
 delete mode 100644 tuto_control_lib/tuto_control_lib/__init__.py
 delete mode 100644 tuto_control_lib/tuto_control_lib/plot.py
 delete mode 100644 tuto_control_lib/tuto_control_lib/systems.py

diff --git a/example_lua_files/main.lua b/example_lua_files/main.lua
deleted file mode 100644
index c0964a4..0000000
--- a/example_lua_files/main.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-Controller = {}
-Controller.__index = Controller
-
-function Controller:new()
-    local ret = {kp = 0.5500, ki = 0.5300, ref = 1.75, sum = 0}
-    setmetatable(ret, Controller)
-    return ret
-end
-
-function Controller:ctrl(sensor)
-    err = self.ref - sensor
-    self.sum = self.sum + err
-    u = self.kp * err + self.ki * self.sum
-    if u < 0 then
-        u = 0
-    end
-    print("sensor: " .. sensor .. ", ref: " .. self.ref .. ", actuator: " .. u .. ", nb threads: " .. math.floor(u))
-    return math.floor(u)
-end
-
-return Controller
diff --git a/example_lua_files/main_iter.lua b/example_lua_files/main_iter.lua
deleted file mode 100644
index cd3e451..0000000
--- a/example_lua_files/main_iter.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-Controller = {}
-Controller.__index = Controller
-
-function Controller:new()
-    local ret = {kp = 5.500, ki = 5.300, ref = 2.0, sum = 0}
-    setmetatable(ret, Controller)
-    return ret
-end
-
-function Controller:ctrl(sensor)
-    err = self.ref - sensor
-    self.sum = self.sum + err
-    u = self.kp * err + self.ki * self.sum
-    if u < 0 then
-        u = 0
-    end
-    print("sensor: " .. sensor .. ", ref: " .. self.ref .. ", actuator: " .. u .. ", nb iters: " .. math.floor(u))
-    return math.floor(u)
-end
-
-return Controller
diff --git a/flake.nix b/flake.nix
index 20045ac..5dee6e0 100644
--- a/flake.nix
+++ b/flake.nix
@@ -19,94 +19,7 @@
       };
     in
     rec {
-      apps.${system} = {
-        default = {
-          type = "app";
-          program = "${self.packages.x86_64-linux.app}/bin/tuto";
-        };
-      };
       packages.${system} = rec {
-        app =
-          let
-            myPython = (pkgs.python3.withPackages (ps: with ps; with pkgs.python3Packages; [
-              jupyterlab
-              matplotlib
-              tuto_control_lib
-            ]));
-          in
-          pkgs.writeScriptBin "tuto" ''
-            #!${pkgs.stdenv.shell}
-            ${myPython}/bin/jupyter-lab --port=8888 --ip=0.0.0.0 --allow-root ${./jupyter_notebooks}/
-          '';
-        tuto = pkgs.stdenv.mkDerivation {
-          name = "tuto-ctrl";
-          src = ./src_real_system;
-          buildInputs = [
-            pkgs.gcc
-            pkgs.lua5_4
-            pkgs.gnumake
-          ];
-          buildPhase = ''
-            mkdir -p $out/bin
-            make
-          '';
-          installPhase = ''
-            cp tuto-ctrl $out/bin
-            cp tuto-ctrl-iter $out/bin
-          '';
-        };
-
-        tuto_control_lib = pkgs.python3Packages.buildPythonPackage {
-          name = "tuto_control_lib";
-          inherit version;
-          src = ./tuto_control_lib;
-          propagatedBuildInputs = with pkgs.python3Packages; [
-            # ...
-            matplotlib
-            numpy
-          ];
-        };
-
-        tuto-py-docker = pkgs.dockerTools.buildImage {
-          name = "registry.gitlab.inria.fr/control-for-computing/tutorial/tuto";
-          tag = version;
-          contents = [
-            (pkgs.python3.withPackages (ps: with ps; with pkgs.python3Packages; [
-              jupyterlab
-              matplotlib
-              tuto_control_lib
-            ]))
-          ];
-
-          runAsRoot = ''
-            mkdir -p /tuto
-            mkdir -p /tuto/data
-            ln -s ${./jupyter_notebooks}/*.ipynb /tuto
-          '';
-          config = {
-            Cmd = [ "jupyter-lab" "--port=8888" "--ip=0.0.0.0" "--allow-root" "--no-browser" "/tuto" ];
-            ExposedPorts = {
-              "8888/tcp" = { };
-            };
-            WorkingDir = "/tuto";
-            Volumes = { "/tuto/data" = { }; };
-          };
-        };
-
-        tuto-system-docker = pkgs.dockerTools.buildImage {
-          name = "registry.gitlab.inria.fr/control-for-computing/tutorial/system";
-          tag = version;
-          contents = [
-            tuto
-          ];
-          config = {
-            Cmd = [ "${tuto}/bin/tuto-ctrl" ];
-            # Entrypoint = [ "${tuto}/bin/tuto-ctrl" ];
-            WorkingDir = "/data";
-            Volumes = { "/data" = { }; };
-          };
-        };
-
         mdbook-admonish = pkgs.callPackage ./pages/mdbook-admonish.nix { };
 
         doc = pkgs.stdenv.mkDerivation {
@@ -130,22 +43,6 @@
 
       };
       devShells.${system} = {
-        default = pkgs.mkShell {
-          buildInputs = [
-            pkgs.gcc
-            pkgs.lua5_4
-            pkgs.gnumake
-          ];
-        };
-
-        jpy = pkgs.mkShell {
-          buildInputs = [
-            pkgs.python3Packages.jupyterlab
-            pkgs.python3Packages.matplotlib
-            packages.${system}.tuto_control_lib
-          ];
-        };
-
         pages = pkgs.mkShell {
           buildInputs = [
             pkgs.mdbook
diff --git a/julia_set/a.out b/julia_set/a.out
deleted file mode 100755
index 6bc6e42cec6d07b667fa27873aa77c6d649b980a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16152
zcmb<-^>JfjWMqH=CI&kO5HCT%0W1U|85m}mgSlYBfx&`-m%)KSjzN}zje&uIg@J(q
zrp^J%g3&jaz*-n!GzWyszzo$V0b(#PFi0>%On}iLP<1dG<R*|1hz8jQVnZ-QAIt?F
zAO|rpFu-UA0f;J)K2{JD%4dN34@OHu^}%RlePH_(K$;mC7!;uPL1_)B|6nw-K9G?&
zbRqg~*h2Kd=m4m`2q+EH2jYVCy@2X_0o4biKY%>Kz`y{bVc`jKBM28j!?OSyo-i6>
zJ1mqK7|``?fa==-)d!>D-iCMs9M>Rb@Y9kMa_kF$>4O?v01ZbN9Ro6)fq?-=gX{na
z1wJiF0fh^QO$>%ba}d-%T=4*lHy8~KUIzWV%nJSDlKi4n{lv<&BGVjGql)ap!mK>w
zJd+H|thB`B^t|MZD#I%CV%_wd%%o&pBRykNT_YnC{hZ7s{hSotoXot^3f&3|GhH(i
zz2ba5Be1hU{xM)+U;w2>cfU{urUr%sATgM|j0}umJ||c;0|OJ350eL}1^Erc2k8eX
z14SJdh{3=B&R3vt0;vO~C6GN(DKG`n2T~8_Fff4gI!FwJVPeG48Vn2!LRb`v;SdL<
zH*D(9gR&GBb3pFFrk)`;F()TKnIS$tvA8(3s3bluF*AoDJ{}YW@x>*HMJ4gMiJ5r}
z1*Ij)8Hq&<AaPLWn=!cicse=98|fLFz?nvRrW8iB6;e7WFDR<0Fs;hY&Nej8D9AF)
zHY_tMOianD%*ik=E40kjO;1kNH8j*S)-%urr;*GghWPmO-26PK!{Zr1@y!g1a|Te{
zfr5pRfr$Z>UO;gU;%}KajSUpbRtyZ_BBN9)lM|%N6(q^Pz;MGJlG8zH0A>bA>H(5C
zC~bhmz}Nwzo*kMNz+wyx3>-+}$mvA@NgO?G!Ss&OqaiRF0;3@?8UmvsFd71*Aut*O
zgEs^|^UMA6Xnw=t(am~MpMk-n^*{;J{|g??M>r0H9sS?*ls*H)f7LVk3=I784h;WQ
zLHrDm+{*|5|NsB5dPtvvAp_K0e|Z7S-v#1>nw~EY{Qv(SWWM2B&(4c+9-WUonxA|K
z2yrz$V0hBw`0>}G4h;WAgY_90zNG2#%eR2cWB{o@jNne#q2b`b;9(0QON4iTlz^Pb
zxgR9(|3TV>!)XY`AouM9Nq98A15=$JJPy9I_c-{2*@N+z$Hjjof^ZYqp(dc~2if0X
z%d5}8z)&h2>e2c1Mb-cR|Btc$)?;8`j6IBDA4vV{E|5Zx<~ItT_yt{GeBu}MeXt+Y
zV1M!M-~ay}ovuGTx?O*K;uiqRF~B$vKJg1WaDaFx4}%N{PV?ZeJDA3=aS-gvU0~04
zo&bp+^5}HE;L#a+BaL6<R2sj=VT1~hG+fOAkIv8&pZEoQFMw=2@QFX-AjnA%KteY_
zLMLECFFd+kA9!?!zVPTg=FxfGqw}Cg=Vg!14{09!d8a|d0gvw3AGC8=<iSt;0-+!`
z`JVX1A9?B%e+<H@VAq3$L4FB60CM<^PyCUG$Z<R<d~gTq2anEBP|Wy#09o?k6MrPw
zN{|pJ#voRLj5q)elUPVZc{IO?014tY7aS1;B5Q+3XXp-(&e|0qs}F$U3FdD>*Bc(k
zU0;9_z$bnI)(##929WfFm+cH7mOv<2;SG;&R}jM&lqzn3-S@)x-~a!3Tn0)98$j0W
zz!L3`)A%(mrtxb)j7sCzIP)U)FT}V5pi~J;gCJ+z@Mv~@!HBTjgFo-Ui;4gK{|A}=
zAdO%DL>Zq)x9bZJYu6S0O}_vC|A+IYBBd&i<~Ic(-)-Us`3anF1X$NXIiM8Fx&q1p
zr4rV~P!7n)tn;88P-L-AgmOUXgtZ6CSpYJ+9m-kZ(d`Nn@Ld53r6(|Nd33t&04Y?1
zDg=kkhBSVC*B#}OI~5ch7<RcZFfi=nP;g+_&#&OX@Pg+z*q`8>?E2&76i9@)-T(#6
zhu6uVu>AmHPXMugfLJp?2_0m+E65ojao-vHQy3T+;6eRj`QQKlTMm@)>{n)BV0ba}
z*Z=>ox%Ptw$X@jRf>`(A6Muy336OE%gn9ww#1G{Y_k)IgUSvQO{QxNfCnRwC1x1DH
z5B~O;|Ns9_m;lMj9?fqAI&1%Ube4Vq7a=c-{{8<CW}Q3?E_=as0lf4FrNB`<8Umvs
zFd71*Aut*OqaiRF0;3@?oI(IJzXb9RXwpnCnW40xAhk%rP9ZP9C^tTtfq@~VD6u>~
zt28GwF}^sp1f&v#VUy<{_Jeo~3?J+v^baWihrO<|%<D&HQuecEg22uF#$fQ+o>7|F
z8Z@^HYPfEA|Ns92&|LQW|NkpM^MD`z|L<X7V7T_-|Nj#V3=HBQ|NjSdf;N2o|DT7E
zfg$(P|NjPz3=9W8{r?}p$iTq%<^TT@Mh1rJumAr~0gXT~FffQf9Kyg@6~w?;A;2ij
z!_F~*5i(aM!@$5$@c#dQHINz?b^%Zq9W=Mr^Zx&T*j$zh0|Nu7$<Oir|9|kz7@vR}
zpM)1bcR5D`gT0isma&QwNIS@^90mpkwh#aRJAwop`2^aSoO#)5c-TR6ouJk`$S>+2
z{{NqeEbrLN%rqIHW&;BQ!<-NQ|L;XtvmK%aWX}}_1_slQ|NjRgt6}m3D*)N^g@J(~
z<KzGTZlExLxx=-Ync0RBtOjI;1S11O*QfvgOOe$u7l0Lj<SiH(818@m{~u%?1I&zQ
zuy&BGqj)p~MnhmU1V%$(Gz3ONU^E0qLtr!nMnhl_hk%11xc9;!0Hs0AevorP{T&c3
z3nCa87y_X*50qwrcI|kfd>%1~Ig(I5Z2ht{ln?6bfS6Jsf`NhI0d&1Gs80bBg2}_y
z9A1E~FaG-Pe?CZ_fdyhdtpBwE$_K4q1j#Ev`JnzHh<^`6FfcH1Lum;pEefS!6l~4n
z3+TE>(1bKd&I3ds^%Fts9zjClAOeKhAnt*QUtopsVg7)HA8dUt%>IA>A^uqaRsSE#
zhlTqGD8COX53-7$7`A>K-A*%Te7iyEFer_#&fVGBN<qWjFH}>(0<?ma0Z9O|rWIWW
zDjyUMEDRt2ql!Y-p))ctGoY_G2d(|ZrXG}TnHcyO7NEIP9=vvzkKqEEIB3;1NIfhc
z!0ZR514af(2GBYIkQm5)AR4safRRB2o{m9cAY2VKAC|8`Vjv8fk!55MW`N}jkQfLr
z1MhFZ^zT~mI$Hq-(A*+O9Y2U*U|;~Pw!r4!Ghp>X3@S>HbO==rrm(5M1y(Q0fF9qE
z!8!yPVC(F`Tm}Y)Z(#M}46u9x69<jAfZ_nghtUd**w=kGGBPkIFi0>+K-UMu)Z2p9
z^D(qT%OUVs2m=FyCwNRo0v`S_^`LPbAqGB%G7*S>!Q&MS3=HugbC~!UVC4}^eJV&C
z#zCU%q2{Bzrw8m#B!y7sY_K_e40nYf_JYS+7#J89FfuR*GD$Efp!sVpNF1~R8@hi1
zR=(|lnqwdgF$X**!@$6B1}qM>42ilAcBdqR0h;+wK<b(J7$!i|Gpu}U1&K58F~Iic
zfXA{J7#RLQ&4Hz7m=zpMp!nir04=rwiGjy=7#J9Mq2dZq|ANP#7#J9&m>~W|H%ASm
zo{5J6RzHBu0%0AHI0GMp8#I2wV__hP<f0Noy?oF*{iMwJlEid|<f4+K)bz|ey?ln0
z)S}e%%;J*NqWF^B_~e}YywqZb`1q9k`1G9oq{N)~l#=|S;`qeU3WntT+=86clGGGE
z1MDi|(=zii;}eUD5-a0V^Gb>;8PbXpb5r9}N^^578RFxSc=4HenI$Mnp`)Jh@c}`u
zAt90RZlQk8A)fwz@$q^FAP1-BrGWk57Ubyb8t>}o5+BbH?-J?f=<Dgs5FhXE7aH&C
z5f72|a0z0FclYska`cJ!cXJDN4T%qNbn<bHhwVjhfbBp4Z9Bl&u>hAfHepCiNr{Je
zyn-P<H6^hm5q%sM>}ycqA~r$54S*OA(goR9fWFB9G`0&0%i{d_jKsW@oK%K*PyhJh
zl9bH6_|oFk6o$;=_{=<{L0`z03smz{^HLb%Q*z>qQgiZ?6H8J-R+VHX#}{O#GQ`Ix
z6&Hg9ib@zjA<U3lnp1-CP<)85Gb}7YF~X3SS`L?G&?~OYElEsb&?_z}g3uW-R%TvF
zYEc1$US57ls$P0tsa`=*enDzcNhMUs(aBR6l+wU*8HvRi40<V*dBv5v5W1v@0W4FN
zT2!2wpNGPUFJjOuO3g_GX@If{a!MHV!0yv4Nv$Yh&;unj2EC$uP{=aqrDi~rRz^w@
zf(Ow7Nn;QlFm_61USe)$GJ{@vehHY+16u$wEUCDdK`%K!H#ap8KE@8pMC4;o`wUd4
z!P-5reRZ(?cA$C=*>sRvWIkvm3aAYP(+}H62HRf-Dcuk{VC^HAh#3O|1G0Wt{SMn_
z1}leP>S5(4j1Q`xL1iAyeptKl0<>YL162rXC&KK9nFAWb|MvfXK1@HXoeA5(25X<9
z>xUZ4;0JAE!t}%1p$bq7CO{Q}{0Is=nEkN!U>I~S7EC{^UAqCQAJ&eA8Ux;k1!IHg
zI0gm=P#Y4aAJ%T{0|g2L0|TtR4s$<D9gNOqU|;~XNnw0gyL16mKdc>#?tYNnAY27*
zzkqfYfp`oIuy*hTH2pC9(ftov%?a|V6GS@$1GHTY-Y^Q<p9vKQ=?AsF(e?L%+a(Mz
z<%oI*G-<=YzyM0$P$R$;$SyDgN_3*>SAf=|3Q+y%=@%*ts?otFfEIRv;uYjRkN~W{
zO@Jy~4Gjm790)^&K};~7g=Rmj-NFOfAP1^{!Kx4hy8A)%Vj%lr@rT%V3ei&lq2MGe
z{9pnrp!UP`!`giX(2NI~gM+CB(dhPXL(_i&+RnKE)gJ+J97rP+quYOgfq{V!ng>8i
zVC`erK1_7=Fg}b1wR=HrV`z4Vx5pnq_r=20fy@SB7#~L80L{%I*$-<E!}is}_RoUS
zKeB#UJU)c_A7(#nU)>GR%3$c;JCHsYhS>|FpP}i8wXa`5^~3TXF8%M(^uyY*5>SmW
zccSZu@xOxh@FDph)}GUV>W8@#rXDRi8Gb?Shbo6DV}R)g)emq%s9F#oW)6skr9F^1
z3<p3B<bWnPP&q6Nbt^~>to-Ceayv*Ih9gWMEDJQlLH0ppAfzA;{S!bH6G#qC0~(hB
E01o<V7ytkO

diff --git a/julia_set/julia.txt b/julia_set/julia.txt
deleted file mode 100644
index f25c145..0000000
--- a/julia_set/julia.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################# ##############################################################################################################################################
-############################################################################################################################################################# ##############################################################################################################################################
-###########################################################################################################################################################    #############################################################################################################################################
-############################################################################################################################################################  # ############################################################################################################################################
-############################################################################################################################################################  ## ###########################################################################################################################################
-############################################################################################################################################################  # ############################################################################################################################################
-######################################################################################################################################################## #       ###########################################################################################################################################
-#########################################################################################################################################################       ############################################################################################################################################
-#################################################################################################################################################### #  ###    # ###########################################################################################################################################
-#####################################################################################################################################################  # #      ############################################################################################################################################
-#####################################################################################################################################################     #  # ####   ######################################################################################################################################
-#####################################################################################################################################################   ##      ####   # ###################################################################################################################################
-########################################################################################################################################################  ###    ### #    ##################################################################################################################################
-###################################################################################################################################################### ###      #  ###    ##################################################################################################################################
-#########################################################################################################################################################      #    ##   ###################################################################################################################################
-######################################################################################################################################################### #  ## #   #  #####################################################################################################################################
-######################################################################################################################################################## #  ##    #    #####################################################################################################################################
-###################################################################################################################################################### #  # #   # ###### ###################################################################################################################################
-######################################################################################################################################################   # #        ## ## ##################################################################################################################################
-################################################################################################################################################### ## # #             #  ##################################################################################################################################
-############################################################################################################################################# ####   # #            #  #   #################################################################################################################################
-############################################################################################################################################### #### # #             ## #  #################################################################################################################################
-##############################################################################################################################################   ##  #                ######################################################################################################################################
-##############################################################################################################################################   ##  #              #   ####################################################################################################################################
-############################################################################################################################################    #  #                 #  #  #################################################################################################################################
-############################################################################################################################################ ##   ##                  ##    ############# ######### ########################################################################################################
-################################################################################################################################  ########## ###  ##                  #   ############### ######### #   ####################################################################################################
-################################################################################################################################# ## ## ####### #  ##               #  ##################  ### #####  ######################################################################################################
-################################################################################################################################   # #    ##### #   #                   ############   #    #  #  #   ######################################################################################################
-################################################################################################################################   ##    # ## ## #  ###              #  #  ########  ## #   #   ### ## #####################################################################################################
-################################################################################################################################ ###       ##  ##                   ##  #  ########## ## #  #            ###################################################################################################
-##################################################################################################################################          #   ## #              #  #      ##########  ##  ###        #####################################################################################################
-##################################################################################################################################       #       ## #             #  ##   ################  #        # #####################################################################################################
-#################################################################################################################################         # #   ####             ##  # ################  #              #####################################################  #############################################
-###################################################################################################################################        ##      ####  # ##     #     ################    ###      #################################################### # # ##############################################
-################################################################################################################################   #    #  #   ##  #########    ###     # ############# ###            ##################################################  # ###############################################
-#################################################################################################################################       # ###         ## #        ##   ##     ############       # # ######################################################  ###############################################
-###################################################################################################################################   ##   #          #       #  ##    ## #   ######  #######  #   #  ###################################### ############### ###############################################
-##################################################################################################################################       #####                  ###     #    # #####   ### #####   ######################################### ######  # ###   # #############################################
-############################################################################################################################### # #        ##                   ### #  # ###   ### #    #  # # ##  # #### #   ##############################  ####   #    #      ###########################################
-###############################################################################################################################   # #   ####                ######       #  # ####         # #    #   ### #  #####  #######################     ###   #         ############################################
-#############################################################################################################################       ## # ###### ###   # ##   ####           #######    #      #    #  ###### # #  ########################      #           ################################################
-###############################################################################################################################   #  ##  #####     ###     ######          #########  #           #  ######  #      ###################  ##    #  ##         ## ############################################
-################################################################################################################################# # # #  ####      ##    ########             ########       #  #  ##### ### #     #####################    #  #     #       ## ############################################
-################################################################################################################################  #  ########    # ##### ### ####  #        #####  # #        ##   ###    ##        ####################      ## # #           #############################################
-################################################################################################################################# #   #########     #########   ####      ## ###                 ###### # ###   ## #####################   # ###   #           #############################################
-#################################################################################################################################   ######### ###   ########             # ####  # #      ##  ######            # ##################### ####  #     ###      ###############################################
-###############################################################################################################################     ###############  ###   ## #    ##       ####   #       #####   #        #  #########################  ##### #             ##############################################
-##################################################################################################################################   ###################            # #  #  ######        ######           #     ###  ################## #####   #     # # #######   #######################################
-##################################################################################################################################   # ##################           ##### #####           #####                ######## # ######################   ## ###     #####  # # ###################################
-################################################################################################################################## ###################### #         #    ####           #####  #      #  # ####### #      ##############################      ######      ##################################
-#################################################################################################################################################### #  #                ### #  #       ##   #        ###### ## #  #      ###########################       #######      ###################################
-##################################################################################################################################################     ##                 ##### #       ###         ######      ##   #   ##########################    ##   ##### ##      ##################################
-###############################################################  ################################################################################ ##                     ######      # ###        ###                   ######################    ##    #    ##   ####  ####################################
-###############################################################   ################################################################################      ## #          #  ####        ###         ##  #                  ## ###################          #   #####   #  #####################################
-#################################################################  ############################################################################# #       ##             ### #         ###        ##            # #  #   ### #   ##############             ###         ## ##################################
-###############################################################   ###### #################### ####################################################       ##        #######           ###                   ############# ####   ##############  # #       ####    # # #### # ###############################
-##############################################################     #    #####################  ################################################### #   #  ### #   ##   ##### ##     ##                     #       # # #  #     ####### #####     #      ###      #### # ##  ###############################
-#############################################################  #   ## # #################### # ###################################################    #   ##      #     ######      ###                             # #    # # ######### #### #  #      ##       #    #   # ########### ### ################
-##############################################################  #  # # ######################  # ################################################### #    ##            ####         #                                     #  ####  #    #### ####      ####   ##          ############ #   ################
-############################################################# ### ##   ## #################  #  ################################################## #    # ## #          ####        #                                          #####      ###### #      ##    ###   #### ############ #       ##############
-################################################################# #  #     ########## ##          ###############################################   #  #####           ###                                        ##### #   #  ##### #     #####  #   ###     #            ##  ########       ##############
-#################################################################      #  ###########   # #     # ############ ################################### # #  ###             #### #                                        ########### ##     ######## #    ###              #     #########      ###############
-################################################################         ## ####### #             ################################################ # # # ## #        # ######                                         # # #####   ###  #  #   #####     #                  ############ # # ################
-############################################################### #         # #######    ##      ######### # ### #################################### ###### #        #  #####                                              # #  #  ## ###  #  ######    ###                       #####       #  ############
-##############################################################           #  ###### ####          ##### #       #########################   ########  ####                ###                                                         #       ####  #    #                  ###  ### ##     ## # ############
-##############################################################          #  # ###### ## #         #### #         #########  ############ #  # ############    ####        ##                                                                 # #####     ##                   ####    ##  ##  #  ############
-###########################################################   #            #  ########  ##  #  ########   #   #  #### #### # ###########   # #############              ######                                          #                   #  ### #    ##                        # #### ## #  #############
-########################################################### # #              ############ ####  #  ######    ######## #    ############       ############ #  ##       # ####                                            ## #       #         # ####     #                   #      ###  #      ############
-############################################################   #           #################    # #######     #####           ######## #      # ##########    ##       # ####                                            # ### ##   #         ###### #                        ## #    #  #      ####   #####
-#################################################### ##  ####               #  ###### ## #       ###   # ###    #####  #     ###### ##       # ########### # ## #          ##                                              ######   #         # #### #                          ##    #           ## #######
-#####################################################    ## ###         #   #   #####           # # ##        # #####        ####            ## ####  ##########           ###                                             # #### # #   #    #    ###  #                           ##  #          ## # #####
-#######################################################      ####  ##   #       ###         #   ####  #    #    ### ##     #  ### #   #     #  ####  #########   #         ####                                               # #### #   #####     #####                         ##     ##              ####
-######################################################    ##    ##     ##    # # #### #     #   ##  #          ## #  ##  #  ########   ##   #   # #   ########    ##      #####                                                 #####    # #  #    # ### #                   #  #                 #     ####
-######################################################     #            ##      #### ##       ####  #         ###        # # ####### #      #         ########    #          ##                                                 ###### ###            # ###                  #    # # ######        #  #   #
-####################################################### ## #        ####         ###          ##           ####  ###       #  #####        #     ###   ########   #           #                                                 # #######         #     # ##                  #    ##  ##   #   #  ###   ###
-########################################################   # # #  ##  ##        ###         #### #      ####### #           # ########## ###      #   # ######    ##          #                                                 #  #####                                     ##  # ###### #     #  #########
-#####################################################  # # ##   #   ###   #   # ##   #     ##         # ## ##   #      #    ###    #######                 ###  ####                                                               #####  #      #                           #    # ####### # ###   ########
-######################################################  ## ##    #####    #     #####    # ####       ##### #       #   # ######      #  #                  ### ###   #                                                    #       #  ##   #          #  # ## ###        #  # ## #  #########  ## ##########
-#####################################################    #### #  #####    #   # ##  #    ####       ####            #  ## #####     #    #                 #######    ##                                                  ###     #  ######     # ##    ##  #       ##   #  ##      ############## #########
-###################################################### ######### ##        ## ###         ##        ##  #      # ## ########  #####      ##           ##     ######    #                                                   ##      #  ####   #      ## ###        ###   #   ##    #### #####################
-##################################################### #  ##########  #        #### #     ## #     ####         #######  ## #     #         #              # #######    #                                                    #      #  ####      #    ###       # ##  # #   ##  # ##  #######################
-####################################################### #########  #           ####     ##        ##         ### ##     #                                 ##############   #                                               ###       # # ###  #    ## ### ##  #     ###    ###  # #  #  ####################
-################################################################  #           ###       ###                 ##    #   #                                   #   # #### ##    #                                               ####     #   ######      # ###   ###     ## #   ##   #    # #####################
-#################################################################   ##      # ##        ##                                              ##               ## #    ########  #   #                                             #          #######    #####     ## ### ##   # ##       #   ####################
-###############################################################     ##     ########    #                                          #      #               ##      ######## ##   #                                            ###      #  ########  ######  ####   # ##  # ##### #     #######################
-#########################  ########### ##########################  #         #####     ##                                          #     ##              #         ########### ##  #                                         ###        ######################   #  #   # #####     ########################
-########################  ############# #########################   ##        ###      #                               #  #  ##    #      #     #  #  #  ##       ####  ######### ##                                       #### #      ##  ##########################     # ###    #########################
-##########################    #### #    ########################   ###       ###  #                                   ########### ##    ###     #############     ###    ## ###########                                   #  ###       ###   ########################    # ####    #########################
-##########################    ### #     ##########################  ##      # ####                                       ## #########  ####       ##  #  #  #     #      #    ##  #  #                               #      ###        ##   ######################### #############  #######################
-#########################     ##### #   #  #   ######################        ###                                         #  ## ###########         #              ##     #                                          ##     #####         #  ########################## ###########  ########################
-########################     # ##### #  ## #   ####  ######  ########  #      ###                                            #   ## ########      ##               #      #                                          #    ########     ##     ##############################################################
-#####################   #       ## #   ## ### ##     #####    #######          #                                             #   #  ########    # ##               ##                                              ##        ## #      ##   ################################################################
-###################### #    #   ##   # ##     ###   ### #      ######   #     ####                                               #    ## #### #   #                                   #   #    ##                 ###       ###           #  ###############################################################
-#####################  #  # #  ###    ###     #  ## ### ##    #  ### # #       ###                                               #   ##############                                 #     ## ###         ##        ##     ####           #  ######### ######################################################
-########################  ## #  ##   # #  ## #       ###    #      ####  #      #                                                    #    ####### #              #         #     # ##  #######         ####     # ##     # ####        #  ##########  # ####################################################
-###################### ####    ##   #   ###        ### ##      #   ####  #      ##                                                   #    ######     ##           ##      #####  ######## ## #      #  ##        ##         ### ##        ## ######### #####################################################
-########## ##############      ##  #   ##       #  ##    ## #     ######  #     ###                                                  ##    #######                 #    #     ##### ##  #            ####       ####    #  ## #   #    #####  # ####    ####################################################
-########### ##  #########  # ## #  #        ### ## #  #          #   ##  #       #                                                    #   ### ###                  #  #      ###### #   #       # #####       #### #    #####     #    #####    ## ##  #####################################################
-#########   ### # ####### #    #                           #      #  #####                                                               ####  ###                 #######    ###    #      #   ## ## #         ##     #   ## #   #   ###   #   ## # #  ####################################################
-##########  #     # ###### #  ##                                     #####  #                                                 #          ##    ###### #   #      ### ########## #           # #######      # ####         ###        ##  ##  # # #   #######################################################
-####   ###  #   #   ##  ##    #                  ## #     #         ####### #                                                 #           #   ########   ###     #        #####  #       ###  ####           ##          ###         ####        # ## ######################################################
-##   #  #        ###### # #    #                  ### #            ### ######                                                 ##          #    ########         #      # ####### # #        ###         #  ####       ## ####      ##            #     #####################################################
-#####     #                 #  #                   # ### #    #  # #    #####                                                 #####      ##    ########   # #   #   ##   ########  #  ##  # ##          #  ##   #     # #### # #    ##     ##    ##    #####################################################
-#####              ##     ##                         #####     #####   # #### #                                               ####         #   #########  ####  #     #   # ###  #     ## ###    #    #  ####   #         ###       #   ##  ####      ######################################################
-###### # ##          #  ##                           #  ###    #    #   # # #### #                                             ###           ##########  #### ##            ####        ##### #        ## # #           #####   #   #         ### ##    ####################################################
-######## ##           #    ##                          # #### #         #   ######                                              ##          # ## # ########### #       ## ######     #  #####    ### #   ###       # ## ######  #               ####  ## ###################################################
-######   ####      #  #    # ##                        # ######         #   ## ### #                                            #### #       ##    ########## #      # ########           #####     ####### #    #################           #   ###########################################################
-#############      #  ###      #                   #     #### #         #       # ##                                            #### #       ##  # ############       ############    # ########    ######  #  #### ############              # # ##########################################################
-##############  # ## #### #                        ##    # ###  #                   #                                          ######              ############# #   ########### # #### ####  #   #   ########  #  ##  ########  #            #   ##########################################################
-#############  #  ##  ##    ####                   ##     ##### #                                                                 ##        ####    ############ #  # ############  #########         # ####         # ## ###### #  #          #############################################################
-############# # ##     ## ###  ###                  #    #  ####       #                                                         ###                ####  ########   #########################       # #####          #### ######  #           #############################################################
-#############  #       #####                       ###    ######  #  ### ##  #  # #                                              #####  #        # ###### #################################### ### # #########      ##    ####### #         # ##############################################################
-################# # # ############                  #     #####   #  #  ###   ##### # #                                         ###### #        # ## # # # ################################################             # ####### ##         ###############################################################
-################      #########     #              ###    # ########     ## ###########                                        # ####             ###  # # ################################### ############ #     # #   ###########  #      ################################################################
-###############       ########  ##            #     ###   #  #####     # #####  #   # #####                                        ###           #####  #   ###############################################          ## ##########     #  # ################################################################
-###############       # ############ ####   ###    ##      # ######      #####                                          #        ####          # ## #    # ##################################################  #  ################# ##   ## ### ############################################################
-#################   # ############          ##   ####      #### ####    #  ####  #                                     #         ####            ##    # ################################################### #  ###################### # #  #  #############################################################
-################# ### ########### #   #    #       ##      #  # #### ######### # #    # #                             ###      ######     #      ##   #    ################################################### # #################### # ##   #  ############################################################
-################################  ## # ####      ###      #     ##### #######     #  # # #       #                     ##     ## #####   ##   # ###  #   # ###################################################  #####################    #     #############################################################
-################################ # #### # #    ####       # #  ##############   #### #############                   ###           #######        ##       #################################################### #################### ######   ##############################################################
-################################### ##         ###             ##############   # ###   #  # #            ##        ###         # ###             ##       # #############################################################################  ################################################################
-######################################  #   #####   #          ################### ##                  #  ##         ###        ####  #          # ##      ################################################################################   ##############################################################
-#####################################  ####   ##    #    ##    ######################                   ###        ### #      ######                     ## ################################################################################  ##############################################################
-###################################      ## #####   ##    ##########################   #   ##      ######         ###       # #####                 ##     #################################################################################################################################################
-####################################      #######       ###########################      #  # ## ######        #   ##       #  # ###                #  # ###################################################################################################################################################
-###################################      ######      ##############################      # ####### #  #      #  #####           ####    #         # ###################### #################################################################################################################################
-#################################### # #  #####     ### ##   ###################### # ########                #####           ##### #####           ################## #   #################################################################################################################################
-########################################   ####### # #     #   ##### ##################  ###     #           ######        ######  #  # #            ###################   #################################################################################################################################
-###############################################             # #####  #########################  #        #   #####       #   ####       ##    # ##   ###  ###############     ##############################################################################################################################
-################################################      ###     #  #### ##################### #            ######  ##      # #  #### #             ########   ### #########   ################################################################################################################################
-##############################################           #   ### #   ##################### ##   ### # ######                 ### ##      ####   #########     #########   # ################################################################################################################################
-##############################################           # # ##      ####################        ##    ###   ##        # #  #####        #  #### ### ##### #    ########  #  ###############################################################################################################################
-############################################# ##       #     #  #    #####################     # ### #####  #  #       ########             ########    ##      ####  # # # ################################################################################################################################
-############################################# ##         ##  #    ##  ###################      #  ######  #           #  #########          ######     ###     #####  ##  #   ##############################################################################################################################
-#################################################           #      ########################  # # ######  #    #      #    #######           ####   ## #   ### ###### # ##       ############################################################################################################################
-#############################################         #   ###     #######################  #####  # ###   #    # #         #### #  #       ######                ####   # #   ##############################################################################################################################
-############################################      #    #   ####  ##############################   # #### #  ## # #  #    # ###   ### #  # ###                   ##        # # ##############################################################################################################################
-############################################## #   ### #  ###### #########################################   ##### ###   ##### #    #     ###                  #####       #################################################################################################################################
-################################################ ############### ######################################  #   #  #######  ######   # ##    ##  #       #          #   ##   ##################################################################################################################################
-################################################  ###################################################### # #       ############     ##   ##        # ##         ### #       ################################################################################################################################
-################################################ #  ##################################################            ### ############# #     ###    #########  ##   #  #    #   ###############################################################################################################################
-############################################### # # ####################################################      ###    ################     #     ## #  ####      ##        ##################################################################################################################################
-##############################################  #####################################################              #  ################ #  ##             ####   # #         ################################################################################################################################
-###################################################################################################### #        #  ################   ##  #             # ##       #       #################################################################################################################################
-######################################################################################################        ###  ##  ##########      #  #              # ##   #          #################################################################################################################################
-####################################################################################################            #  # ## ##########  #  ##                   ##  ##       ### ###############################################################################################################################
-###################################################################################################### ## ###   #   # ##  ########  #  #              ###  # ## ## #    ##   ###############################################################################################################################
-#######################################################################################################   #  #  #    #   ############                   #   # #####    # #   ###############################################################################################################################
-#######################################################################################################  ##### ###  ##################  #               ##  # ####### ## ## ################################################################################################################################
-#####################################################################################################   # ######### ###############   #                  ##  ### ##########  ###############################################################################################################################
-######################################################################################################### ######### #############    ##                  ##   ## ###########################################################################################################################################
-##################################################################################################################################  #  #                 #  #    ###########################################################################################################################################
-#####################################################################################################################################   #              #  ##   #############################################################################################################################################
-#######################################################################################################################################                #  ##   #############################################################################################################################################
-##################################################################################################################################  # ##             # # #### ##############################################################################################################################################
-##################################################################################################################################   #  #            # #   #### ############################################################################################################################################
-###################################################################################################################################  #             # # ## ##################################################################################################################################################
-################################################################################################################################### ## ##        # #   #####################################################################################################################################################
-#################################################################################################################################### ###### #   # #  # #####################################################################################################################################################
-######################################################################################################################################    #    ##  # #######################################################################################################################################################
-######################################################################################################################################  #   # ##  # ########################################################################################################################################################
-####################################################################################################################################   ##    #      ########################################################################################################################################################
-###################################################################################################################################    ###  #      ### #####################################################################################################################################################
-###################################################################################################################################    # ###    ###  #######################################################################################################################################################
-#################################################################################################################################### #   ####      ##   ####################################################################################################################################################
-#######################################################################################################################################   #### #  #     ####################################################################################################################################################
-#############################################################################################################################################      # #  ####################################################################################################################################################
-############################################################################################################################################ #    ###  # ###################################################################################################################################################
-#############################################################################################################################################       ########################################################################################################################################################
-############################################################################################################################################       # #######################################################################################################################################################
-############################################################################################################################################# #  ###########################################################################################################################################################
-############################################################################################################################################ ##  ###########################################################################################################################################################
-############################################################################################################################################# #  ###########################################################################################################################################################
-##############################################################################################################################################    ##########################################################################################################################################################
-############################################################################################################################################### ############################################################################################################################################################
-############################################################################################################################################### ############################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
-############################################################################################################################################################################################################################################################################################################
diff --git a/julia_set/main.c b/julia_set/main.c
deleted file mode 100644
index 8e3c5a2..0000000
--- a/julia_set/main.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <assert.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#define MAX_ITER 100
-#define R 2
-
-struct Complex {
-  double x;
-  double y;
-};
-
-struct Complex *new_complex(double x, double y) {
-  struct Complex *c = malloc(sizeof(struct Complex));
-  c->x = x;
-  c->y = y;
-  return c;
-}
-
-struct Complex add_complex(struct Complex c1, struct Complex c2) {
-  struct Complex z;
-  z.x = c1.x + c2.x;
-  z.y = c1.y + c2.y;
-  return z;
-}
-
-struct Complex mult_complex(struct Complex c1, struct Complex c2) {
-  struct Complex z;
-  z.x = c1.x * c2.x - c1.y * c2.y;
-  z.y = c1.x * c2.y + c2.x * c1.y;
-  return z;
-}
-
-double norm(struct Complex c) { return c.x * c.x + c.y * c.y; }
-
-bool is_in_julia_set(struct Complex z, struct Complex c,
-                     uint64_t max_iterations) {
-  struct Complex local_z;
-  local_z.x = z.x;
-  local_z.y = z.y;
-  uint64_t iterations = 0;
-  double max_norm = R * R;
-
-  while (norm(local_z) < max_norm && iterations < max_iterations) {
-    local_z = add_complex(mult_complex(local_z, local_z), c);
-    iterations++;
-  }
-  return (iterations != max_iterations);
-}
-
-void draw_julia_set() {
-  double y_min = -1.0;
-  double y_max = 1.0;
-  double x_min = -1.5;
-  double x_max = 1.5;
-
-  double x_inc = 0.0001;
-  double y_inc = 0.0001;
-  // struct Complex c = {-0.7, 0.27015};
-  struct Complex c = {-0.4, 0.6};
-
-
-  double norm_c = norm(c);
-  double upper = (double)(R * R * (R - 1.0) * (R - 1.0));
-  assert(upper > norm_c);
-
-  for (double y = y_min; y < y_max; y += y_inc) {
-    for (double x = x_min; x < x_max; x += x_inc) {
-      struct Complex z = {x, y};
-      if (is_in_julia_set(z, c, MAX_ITER)) {
-        printf("#");
-      } else {
-        printf(" ");
-      }
-    }
-    printf("\n");
-  }
-}
-
-int main(int argc, char **argv) {
-  draw_julia_set();
-  return 0;
-}
diff --git a/jupyter_notebooks/00_Main.ipynb b/jupyter_notebooks/00_Main.ipynb
deleted file mode 100644
index 3dad1cd..0000000
--- a/jupyter_notebooks/00_Main.ipynb
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "b15c0557",
-   "metadata": {},
-   "source": [
-    "# Tutorial Control for Computing"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "d74f1154",
-   "metadata": {},
-   "source": [
-    "In this tutorial, we introduce the basic concepts of applying control theory methods to computing systems, or applications."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "187c1410-4256-4621-b812-c4de2b41fedf",
-   "metadata": {},
-   "source": [
-    "## Contents\n",
-    "\n",
-    "- [Introduction of the System](./01_System.ipynb)\n",
-    "- [The \"Bang-Bang\" Approach](./02_BangBang.ipynb)\n",
-    "- [Proportional Controller](./03_PController.ipynb)\n",
-    "- [Proportional-Integral Controller](./04_PIController.ipynb)\n",
-    "- [Identification](./05_Identification.ipynb)\n",
-    "- [Exercice: Design of a PI Controller on a Real System](./06_RealSystem.ipynb)"
-   ]
-  }
- ],
- "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.9.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/jupyter_notebooks/01_System.ipynb b/jupyter_notebooks/01_System.ipynb
deleted file mode 100644
index bc05047..0000000
--- a/jupyter_notebooks/01_System.ipynb
+++ /dev/null
@@ -1,191 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "e2114ca5-c4bc-44f4-9eed-ef4ab5447994",
-   "metadata": {},
-   "source": [
-    "# The System "
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "2ee6b0b7-8581-44fd-be6d-b747c209b9f4",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from tuto_control_lib.systems import IntroSystem\n",
-    "from tuto_control_lib.plot import *\n",
-    "\n",
-    "import matplotlib.pyplot as plt\n",
-    "import numpy as np"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "54a717f8-7076-4947-b92c-f245f91b72ec",
-   "metadata": {},
-   "source": [
-    "To get familiar with the concepts of Control Theory, we will first use a simulated system to allow for quick iteration.\n",
-    "We will use a real system in the [last section](./06_RealSystem.ipynb)."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "695e8ac6-da3f-41c5-a5ad-9f560d1b9b7f",
-   "metadata": {},
-   "source": [
-    "The system has the following API:\n",
-    "\n",
-    "- a system can be created with `IntroSystem()`\n",
-    "\n",
-    "- we can sense the system by running `system.sense()`\n",
-    "\n",
-    "- we can apply an input by running `system.apply(INPUT)`\n",
-    "\n",
-    "Here is an small example:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "0fe7a0c2-4f8c-492f-90d6-ab6ace7a6941",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "system = IntroSystem()\n",
-    "print(f\"Sensor: {system.sense()}\")\n",
-    "system.apply(2)\n",
-    "print(f\"Sensor: {system.sense()}\")\n",
-    "system.apply(1)\n",
-    "print(f\"Sensor: {system.sense()}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "afc1f6cf-ff70-434f-a364-a5801b8067b2",
-   "metadata": {},
-   "source": [
-    "Let us perform what is called an open loop experiment.\n",
-    "For this, we apply a constant input and obeserve the output.\n",
-    "\n",
-    "In the following code-block we explain how the following code-blocks of this tutorial will be designed."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7112c698-b6b5-4d99-bbe5-946e692bf4d8",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# We define the number of iteration to simulate\n",
-    "max_iter = 100\n",
-    "# We initialize the system\n",
-    "system = IntroSystem()\n",
-    "# This list will gather the values of the sensor to plot them after\n",
-    "y_values = []\n",
-    "# This is the constant value that we will apply to our system.\n",
-    "constant_input = 2\n",
-    "\n",
-    "for _ in range(max_iter):\n",
-    "    # For every iteration....\n",
-    "    \n",
-    "    # ... we read the sensor,\n",
-    "    y = system.sense()\n",
-    "    \n",
-    "    # and save its value.\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    # We then apply the constant input\n",
-    "    system.apply(constant_input)\n",
-    "    \n",
-    "# We finally plot the simulation    \n",
-    "plot_y(y_values)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "00025b4b-0452-4294-a87c-7016f63cf472",
-   "metadata": {},
-   "source": [
-    "Let us now try to apply stairs input.\n",
-    "This just means that we will have different values of constant input."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "9e4b819a-071f-4e8f-a761-e212833b2a7f",
-   "metadata": {},
-   "source": [
-    "Let us say that we want to increase the input by 2 every 25 iterations."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "1ab13ec7-891f-4483-81a0-adbf2434ba51",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "max_iter = 100\n",
-    "system = IntroSystem()\n",
-    "\n",
-    "y_values = []\n",
-    "# This list will contain the value for the input to plot them\n",
-    "u_values = []\n",
-    "u = 0\n",
-    "\n",
-    "for i in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    u = 2 * (i // 25)\n",
-    "    u_values.append(u)\n",
-    "    system.apply(u)\n",
-    "    \n",
-    "plot_u_y(u_values, y_values)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "51979864-268e-432a-891c-e63083b59672",
-   "metadata": {},
-   "source": [
-    "The goal of control theory is to regulate systems around desired behaviors.\n",
-    "\n",
-    "In our case, we would want the system's sensor to be around a specific value."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "5ee594a4-012d-4f86-8397-29ed904508f8",
-   "metadata": {},
-   "source": [
-    "[Back to menu](./00_Main.ipynb) or [Next chapter](./02_BangBang.ipynb)"
-   ]
-  }
- ],
- "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.9.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/jupyter_notebooks/02_BangBang.ipynb b/jupyter_notebooks/02_BangBang.ipynb
deleted file mode 100644
index 05189e1..0000000
--- a/jupyter_notebooks/02_BangBang.ipynb
+++ /dev/null
@@ -1,158 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "98f24f94-e1df-4dff-8266-57b3de5f3431",
-   "metadata": {},
-   "source": [
-    "# The Bang-Bang Approach"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "8ffb58c1-62d2-4c90-9b02-db84c416df84",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from tuto_control_lib.systems import IntroSystem\n",
-    "from tuto_control_lib.plot import plot_u_y\n",
-    "\n",
-    "import matplotlib.pyplot as plt\n",
-    "import numpy as np\n",
-    "from statistics import mean"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "fb8193e6-bec3-4cc2-848a-30535df4d159",
-   "metadata": {
-    "tags": []
-   },
-   "source": [
-    "One way to do regulate the output of a system would be to have two bounds for the system sensor:\n",
-    "\n",
-    "- one upper bound\n",
-    "- one lower bound\n",
-    "\n",
-    "When the system output is greater than the upper bound, we decrease the input.\n",
-    "And when the system output is lower than the lower bound, we increase the input.\n",
-    "Else, we keep the previous input."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "60d2e25c-4264-45f7-89b0-63fbc9e13ff8",
-   "metadata": {
-    "tags": []
-   },
-   "source": [
-    "Say that we want to regulate our system around the value 1.\n",
-    "\n",
-    "We now have to chose the values of the bounds.\n",
-    "\n",
-    "The issue is that there is no protocol to find the values of the bounds and the incremental part.\n",
-    "\n",
-    "So, we have to proceed by try-and-error.\n",
-    "\n",
-    "\n",
-    "We can say take as lower bound 5 and as upper bound 7."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "62db6d61-c852-43f7-8dff-8b4af2fa93b9",
-   "metadata": {
-    "tags": []
-   },
-   "outputs": [],
-   "source": [
-    "system, u, y_values, u_values, max_iter = IntroSystem(), 0, [], [], 100\n",
-    "\n",
-    "reference_value = 1\n",
-    "upper_bound = 0.5\n",
-    "lower_bound = 1.5\n",
-    "increment = 0.5\n",
-    "\n",
-    "for i in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    if y < lower_bound:\n",
-    "        u += increment\n",
-    "    elif y > upper_bound:\n",
-    "        u -= increment\n",
-    "    else:\n",
-    "        pass\n",
-    "    system.apply(u)\n",
-    "    u_values.append(u)\n",
-    "    \n",
-    "plot_u_y(u_values, y_values, reference_value)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "6267274e-7d36-42c2-9a4d-f7efcaaf0634",
-   "metadata": {
-    "tags": []
-   },
-   "source": [
-    "As we can see, the system is somewhat under control, but oscillate a lot."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "ecdc7121-d253-477d-92dc-4485abd97d29",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "mean_error = mean(map(lambda x: abs(reference_value - x), y_values))\n",
-    "max_overshoot = (max(y_values) - reference_value) /  reference_value\n",
-    "\n",
-    "print(f\"Mean Error: {mean_error}\")\n",
-    "print(f\"Max. Overshoot: {max_overshoot}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "2b58c216-0ef8-4d17-8b35-514974b47570",
-   "metadata": {},
-   "source": [
-    "<div class=\"alert alert-info\">\n",
-    "Try changing the values of the bounds and the increment to see the behaviour of the system.\n",
-    "</div>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "73e94170-8855-4a03-a77b-e5261cc27391",
-   "metadata": {},
-   "source": [
-    "[Back to menu](./00_Main.ipynb) or [Next chapter](./03_PController.ipynb)"
-   ]
-  }
- ],
- "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.9.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/jupyter_notebooks/03_PController.ipynb b/jupyter_notebooks/03_PController.ipynb
deleted file mode 100644
index 485503f..0000000
--- a/jupyter_notebooks/03_PController.ipynb
+++ /dev/null
@@ -1,472 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "86607676-56c2-4bec-b675-309f8f1a5e85",
-   "metadata": {},
-   "source": [
-    "# Proportional Controller"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "6830d828-6569-409d-aeb6-6fbfac190b3f",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from tuto_control_lib.systems import IntroSystem\n",
-    "from tuto_control_lib.plot import *\n",
-    "\n",
-    "import matplotlib.pyplot as plt\n",
-    "import numpy as np\n",
-    "from math import exp"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "028756f1-641f-4c33-9879-cbb53ee0f256",
-   "metadata": {},
-   "source": [
-    "We have seen that a Bang-Bang solution manages to roughly get the system in the desired state.\n",
-    "\n",
-    "However, the lack of protocol and guarentees of this solution limits its adoption on production systems.\n",
-    "\n",
-    "In this section, we introduce the most basic controller from Control Theory: the *Proportional Controller*.\n",
-    "\n",
-    "The idea of the proportional controller is to have a response proportional to the control error.\n",
-    "\n",
-    "The control error is the distance between the desired behaviour and the current state of the system.\n",
-    "\n",
-    "The equation of a P Controller is the following:\n",
-    "\n",
-    "$$\n",
-    "u(k) = K_p \\times e(k) = K_p \\times \\left(y_{ref} - y(k)\\right)\n",
-    "$$\n",
-    "\n",
-    "where:\n",
-    "\n",
-    "- $K_p$ is the propotional gain of the controller\n",
-    "- $y_{ref}$ is the reference value for our system (i.e. the desired value of the system output)\n",
-    "- $y(k)$ is the system output at iteration $k$\n",
-    "- $e(k)$ is the control error at iteration $k$\n",
-    "- $u(k)$ is the input at iteration $k$"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3db2d938-fe75-40e0-b66a-a8b6b0ce4eaa",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "system, u_values, y_values, u, max_iter = IntroSystem(), [], [], 0, 100\n",
-    "\n",
-    "reference_value = 1\n",
-    "kp = 3.3\n",
-    "\n",
-    "for i in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    error = reference_value - y\n",
-    "    u = kp * error\n",
-    "    \n",
-    "    system.apply(u)\n",
-    "    u_values.append(u)\n",
-    "\n",
-    "plot_u_y(u_values, y_values, reference_value)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "63203ee3-be90-4e9a-92d4-57a08d042631",
-   "metadata": {},
-   "source": [
-    "As we can see, the system converges, but to a values different than the reference value.\n",
-    "The controller introduces oscillations before converging."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7a031480-3308-4389-82c2-3b104d9d1f6a",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "print(f\"Steady state value: {y_values[-1]}\\nReference value: {reference_value}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "f664e07a-5ea6-4d0f-b826-beb0caeb6c90",
-   "metadata": {},
-   "source": [
-    "<div class=\"alert alert-info\">\n",
-    "Try changing the values of the proportional gain $K_p$ and the reference value.\n",
-    "</div>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "5e4ee85a-2551-4b7d-a30f-528befbfc380",
-   "metadata": {},
-   "source": [
-    "# Design of a Proportional Controller"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "49936477-c739-476b-a351-c59ec23f9d68",
-   "metadata": {},
-   "source": [
-    "To design a Proportional Controller with guarentees, we must have a model of our system.\n",
-    "\n",
-    "A model, in the sense of Control Theory, is a relation between the inputs and the outputs.\n",
-    "\n",
-    "The general form of a model is the following:\n",
-    "\n",
-    "$$\n",
-    "y(k + 1) = \\sum_{i = 0}^k a_i y(k - i) + \\sum_{i = 0}^k b_i u(k - i)\n",
-    "$$\n",
-    "\n",
-    "where:\n",
-    "\n",
-    "- $y(k + 1)$ is the next value of the output\n",
-    "- $y(k-i)$ and $u(k-i)$ are previous values of the output and the input\n",
-    "- $a_i$ and $b_i$ are the coefficients of the model ($\\forall i, (a_i, b_i) \\in (\\mathbb{R}, \\mathbb{R})$)\n",
-    "\n",
-    "Usually, and to simplify this introduction, we consider *first order models*.\n",
-    "\n",
-    "This means that the model only considers the last values of $y$ and $u$ to get the next value of $y$.\n",
-    "\n",
-    "$$\n",
-    "y(k + 1) = a y(k) + b u(k)\n",
-    "$$\n",
-    "\n",
-    "In this section, we will suppose that we have a first order model which we know the coefficients.\n",
-    "In a [future section](./05_Identification.ipynb), we will look at how to find these coefficients."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "378caaac-80da-423d-be96-fdc0812e7380",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Our system\n",
-    "system = IntroSystem()\n",
-    "# The coefficients\n",
-    "a = 0.8\n",
-    "b = 0.5"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "7fc2aba3-50a3-4a7d-bdcf-baa02a3d5a45",
-   "metadata": {},
-   "source": [
-    "## Stability"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "869237a3-bcc0-43f0-905a-0ef25ed61955",
-   "metadata": {},
-   "source": [
-    "The pole of the closed-loop transfer function is: $a - b K_p$.\n",
-    "\n",
-    "For the closed-loop system to be stable, this pole needs to be in the unit circle: $|a - b K_p| < 1$.\n",
-    "\n",
-    "Thus:\n",
-    "\n",
-    "$$\n",
-    "\\frac{a - 1}{b} < K_p < \\frac{a + 1}{b}\n",
-    "$$\n",
-    "\n",
-    "In our case:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "ce848920-a4a6-416a-9245-94a1ce6c4bdb",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "stability_lower_bound = (a - 1) / b\n",
-    "stability_upper_bound = (a + 1) / b\n",
-    "print(f\"{stability_lower_bound} < K_p < {stability_upper_bound}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "17658df0-4284-4b46-99fb-ad401f75c2ca",
-   "metadata": {},
-   "source": [
-    "## Precision"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "35f5b723-9eb7-4314-8fe1-7989b612e1fe",
-   "metadata": {},
-   "source": [
-    "Proportional Controllers are inheritly imprecise.\n",
-    "But we can tune their precision ($e_{ss}$) based on the reference value ($r_{ss}$).\n",
-    "\n",
-    "$$\n",
-    "\\begin{aligned}\n",
-    "e_{ss} &= r_{ss} ( 1 - F_R(1)) \\\\\n",
-    "       &= r_{ss} \\left(1 - \\frac{b K_p}{1 - (a - b K_p)}\\right) < e_{ss}^*\n",
-    "\\end{aligned}\n",
-    "$$\n",
-    "\n",
-    "Say we want the steady state error to be less that $e_{ss}^*$.\n",
-    "\n",
-    "Then,\n",
-    "\n",
-    "$$\n",
-    "K_p > \\frac{\\left(1 - \\frac{e_{ss}^*}{r_{ss}}\\right)\\left(1 - a\\right)}{b\\frac{e_{ss}^*}{r_{ss}}}\n",
-    "$$\n",
-    "\n",
-    "In our case:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "373b93c9-b92a-4f32-bb26-3640a9c05d5f",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "r_ss = 1\n",
-    "e_star = 0.15\n",
-    "\n",
-    "precision_lower_bound = (1 - e_star/r_ss) * (1 - a)/(b * (e_star/r_ss))\n",
-    "\n",
-    "print(f\"K_p > {precision_lower_bound}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "657451c9-80c4-4a85-9277-965c76969469",
-   "metadata": {},
-   "source": [
-    "## Settling Time"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "320e2695-9a0b-4a8d-909b-4385dbebf6af",
-   "metadata": {},
-   "source": [
-    "The settling time, or the time to reach the steady state value is defined as follows:\n",
-    "\n",
-    "$$\n",
-    "k_s \\simeq \\frac{-4}{\\log | a - b K_p| }\n",
-    "$$\n",
-    "\n",
-    "Let $k_s^*$ be the desired settling time.\n",
-    "\n",
-    "Then:\n",
-    "\n",
-    "$$\n",
-    "\\frac{a - \\exp\\left(\\frac{-4}{k_s^*}\\right)}{b} < K_p < \\frac{a + \\exp\\left(\\frac{-4}{k_s^*}\\right)}{b}\n",
-    "$$\n",
-    "\n",
-    "In our case:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "e1737984-27a8-4a7c-8556-ff99ae1bc519",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "ks_star = 10\n",
-    "settling_time_lower_bound = (a - exp(-4/ks_star)) / b\n",
-    "settling_time_upper_bound = (a + exp(-4/ks_star)) / b\n",
-    "\n",
-    "print(f\"{settling_time_lower_bound} < K_p < {settling_time_upper_bound}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "90158219-f1b9-4ec0-9667-e335d1a02854",
-   "metadata": {},
-   "source": [
-    "## Maximum Overshoot"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "a04de440-6087-4f45-a302-02c0f3bfdd20",
-   "metadata": {},
-   "source": [
-    "The maximum overshoot is the maximum error above the reference value.\n",
-    "It is defined as:\n",
-    "\n",
-    "$$\n",
-    "M_p = | a - b K_p|\n",
-    "$$\n",
-    "\n",
-    "If $M_p^*$ is the desired maximum overshoot, then:\n",
-    "\n",
-    "$$\n",
-    "\\frac{a - M_p^*}{b} < K_p < \\frac{a + M_p^*}{b}\n",
-    "$$\n",
-    "\n",
-    "But we really are only interested in the upper bound.\n",
-    "\n",
-    "In our case:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "cd8c0735-9f8d-4cf7-9f1c-536741d98e37",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "mp_star = 0.1\n",
-    "max_overshoot_upper_bound = (a + mp_star) / b\n",
-    "print(f\"K_p < {max_overshoot_upper_bound}\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "cf1f604a-0dd3-4ba2-9fd3-b22613bc0e86",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "max_y = 15\n",
-    "min_y = -5\n",
-    "fig, ax = plt.subplots()\n",
-    "ax.broken_barh([(stability_lower_bound, stability_upper_bound - stability_lower_bound)], (2.5, 5), facecolors='tab:blue')\n",
-    "ax.broken_barh([(precision_lower_bound, max_y)], (7.5, 5), facecolors='tab:red')\n",
-    "ax.broken_barh([(settling_time_lower_bound, settling_time_upper_bound - settling_time_lower_bound)], (12.5, 5), facecolors='tab:green')\n",
-    "ax.broken_barh([(min_y, max_overshoot_upper_bound - min_y)], (17.5, 5), facecolors='tab:orange')\n",
-    "\n",
-    "ax.set_ylim(0, 25)\n",
-    "ax.set_xlim(min_y, max_y)\n",
-    "ax.set_xlabel('Kp')\n",
-    "ax.set_yticks([5, 10, 15, 20], labels=['Stability', 'Precision', 'Settling Time', 'Max. Overshoot'])\n",
-    "ax.grid(True)\n",
-    "plt.show()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "a837089e-3e92-44d9-b348-25fb882dc553",
-   "metadata": {},
-   "source": [
-    "As we can see, there is no value of $K_p$ that satisfies all the properties.\n",
-    "\n",
-    "<div class=\"alert alert-danger\" role=\"alert\">\n",
-    "    The key point is that implementing a Proportional controller requires some <b>trade-off</b>!\n",
-    "</div>\n",
-    "\n",
-    "In the example above, the value $K_p = 2.5$ seems to statisfy most of the properties."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "9a161f2f-57a4-49f2-b7db-fcca7eddcb99",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "reference_value = 1\n",
-    "kp = 2.5\n",
-    "y_values, u_values, u, system, max_iter = [], [], 0, IntroSystem(), 20\n",
-    "\n",
-    "for i in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    error = reference_value - y\n",
-    "    u = kp * error\n",
-    "    \n",
-    "    system.apply(u)\n",
-    "    u_values.append(u)\n",
-    "\n",
-    "plot_u_y(u_values, y_values, reference_value)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "bdecddd8-813c-4321-9366-0e9bb9c93f6e",
-   "metadata": {},
-   "source": [
-    "We can observe the actual behaviour of the closed loop system and compare them to the desired behavior."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "137ccf61-242f-45ed-be2c-f300d21b5f92",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "e_ss = reference_value - y_values[-1]\n",
-    "max_overshoot = (max(y_values) - y_values[-1]) / y_values[-1]\n",
-    "settling_time = len([x for x in y_values if abs(x - y_values[-1]) > 0.05])\n",
-    "\n",
-    "print(f\"Precision: {e_ss} -> desired: < {e_star}\")\n",
-    "print(f\"Settling Time: {settling_time} -> desired: < {ks_star}\")\n",
-    "print(f\"Max. Overshoot: {max_overshoot} -> desired: < {mp_star}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "dd67e21e-0d8c-45c4-ab53-d67ce40771e6",
-   "metadata": {},
-   "source": [
-    "As expected, the closed loop system overshoots too much, but the other properties are respected."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "01c36250-4482-47d9-a1ab-6451f7470ca7",
-   "metadata": {},
-   "source": [
-    "<div class=\"alert alert-info\" role=\"alert\">\n",
-    "  Try to change the requirements on the closed-loop properties to find different values of $K_p$ and plot the system.\n",
-    "</div>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "09a14ea2-b496-4d8a-b5d7-155a5b4d60c9",
-   "metadata": {},
-   "source": [
-    "[Back to menu](./00_Main.ipynb) or [Next chapter](./04_PIController.ipynb)"
-   ]
-  }
- ],
- "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.9.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/jupyter_notebooks/04_PIController.ipynb b/jupyter_notebooks/04_PIController.ipynb
deleted file mode 100644
index 89184a5..0000000
--- a/jupyter_notebooks/04_PIController.ipynb
+++ /dev/null
@@ -1,238 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "121c4163-0c06-4c32-a7ba-11cc51acfdff",
-   "metadata": {},
-   "source": [
-    "# Proportional-Integral Controller"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "4e8c50d8-d7b2-4d85-aab7-f418755d42da",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from tuto_control_lib.systems import IntroSystem\n",
-    "from tuto_control_lib.plot import *\n",
-    "\n",
-    "import matplotlib.pyplot as plt\n",
-    "import numpy as np\n",
-    "from math import exp, log, pi, cos\n",
-    "from statistics import mean"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "2c222167-167e-456d-bddf-4f7bde57d923",
-   "metadata": {},
-   "source": [
-    "As we have seen before, a Proportional controller is inheritly imprecise.\n",
-    "\n",
-    "One way to improve the precision of the closed loop system is to add an integral term to the controller.\n",
-    "\n",
-    "The integral term aims at canceling the steady state error.\n",
-    "\n",
-    "The form of the controller (in discrete time) is the following:\n",
-    "\n",
-    "$$\n",
-    "u(k) = K_p e(k) + K_i \\sum_{i=0}^k e(i)\n",
-    "$$\n",
-    "\n",
-    "We can try to add the $K_i$ term to the previously defined P Controller:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "df65cb57-486d-414d-aae7-e747167d3a91",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "max_iter = 50\n",
-    "reference_value = 1\n",
-    "kp = 2.5\n",
-    "ki = 1.5\n",
-    "y_values, u_values, u, system, integral = [], [], 0, IntroSystem(), 0\n",
-    "\n",
-    "for _ in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    error = reference_value - y\n",
-    "    integral += error\n",
-    "    u = kp * error + ki * integral\n",
-    "    \n",
-    "    system.apply(u)\n",
-    "    u_values.append(u)\n",
-    "\n",
-    "plot_u_y(u_values, y_values, reference_value)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "fb99ce6a-f051-4074-b049-5f5ed3273628",
-   "metadata": {},
-   "source": [
-    "We can see that the system converges to the reference value!\n",
-    "However, there are some oscillations and overshooting..."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "cb414899-941e-4652-93c1-df6ab939c6f8",
-   "metadata": {},
-   "source": [
-    "<div class=\"alert alert-info\" role=\"alert\">\n",
-    "  Try to change the values of $K_p$ and $K_i$ to observe the change of behavior.\n",
-    "</div>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "dc185bc1-7b31-41df-8dd3-b260aca6097b",
-   "metadata": {},
-   "source": [
-    "# Design of a PI Controller"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "d8df0233-6f1c-487d-8861-9de5d432aa9a",
-   "metadata": {},
-   "source": [
-    "As for the P Controller, we have to chose the desired closed loop behavior.\n",
-    "\n",
-    "In the case of a PI Controller, we have the precision by the integral term, and the precision as for the P Controller.\n",
-    "\n",
-    "There are several methods to find gains for a PI Controller.\n",
-    "In the following we use the *pole placement method*.\n",
-    "The idea is to chose the poles of the closed-loop system to fit the desired behavior.\n",
-    "\n",
-    "Without too much details to avoid being too \"mathy\", we give the equations leading to the gains.\n",
-    "\n",
-    "Given the desired values for $k_s$ (settling time) and $M_p$ (max. overshoot), we get:\n",
-    "\n",
-    "$$\n",
-    "\\begin{cases}\n",
-    "K_p = \\frac{a - r^2}{b}\\\\\n",
-    "K_i = \\frac{1 - 2 r \\cos \\theta + r^2}{b}\n",
-    "\\end{cases}\n",
-    "$$\n",
-    "\n",
-    "with:\n",
-    "\n",
-    "- $r = \\exp\\left(-\\frac{4}{k_s}\\right)$\n",
-    "- $\\theta = \\pi \\frac{\\log r}{\\log M_p}$\n",
-    "\n",
-    "In our case:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "ca126771-c51e-4b6e-9203-295c275f0d94",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# The coefficients of our system\n",
-    "a = 0.8\n",
-    "b = 0.5\n",
-    "\n",
-    "# Our desired properties\n",
-    "ks = 10\n",
-    "mp = 0.01\n",
-    "\n",
-    "r = exp(-4/ks)\n",
-    "theta = pi * log(r) / log(mp)\n",
-    "\n",
-    "kp = (a - r * r) / b\n",
-    "ki = (1 - 2 * r * cos(theta) + r * r) / b\n",
-    "\n",
-    "print(f\"Kp = {kp}\\nKi = {ki}\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "1ef86c1f-c0cf-4d73-844b-3e6571061f4b",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "max_iter = 50\n",
-    "reference_value = 1\n",
-    "y_values, u_values, u, system, integral_error = [], [], 0, IntroSystem(), 0\n",
-    "\n",
-    "for i in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    error = reference_value - y\n",
-    "    integral_error += error\n",
-    "    u = kp * error + ki * integral_error\n",
-    "    \n",
-    "    system.apply(u)\n",
-    "    u_values.append(u)\n",
-    "\n",
-    "plot_u_y(u_values, y_values, reference_value)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a4ca0de4-079f-4e46-9b8c-704c27e15102",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "e_ss = reference_value - y_values[-1]\n",
-    "max_overshoot = (max(y_values) - y_values[-1]) / y_values[-1]\n",
-    "settling_time = len([x for x in y_values if abs(x - y_values[-1]) > 0.05])\n",
-    "\n",
-    "print(f\"Precision: {e_ss}\")\n",
-    "print(f\"Settling Time: {settling_time} -> desired: < {ks}\")\n",
-    "print(f\"Max. Overshoot: {max_overshoot} -> desired: < {mp}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "41159696-e75e-4ae5-8b69-44799bf482d9",
-   "metadata": {},
-   "source": [
-    "<div class=\"alert alert-info\" role=\"alert\">\n",
-    "  Try to change the requirements on the closed-loop properties to find different values of $K_p$ and $K_i$ and plot the system.\n",
-    "</div>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "e8e31f05-7d99-4793-801e-51c292c7c8ec",
-   "metadata": {},
-   "source": [
-    "[Back to menu](./00_Main.ipynb) or [Next chapter](./05_Identification.ipynb)"
-   ]
-  }
- ],
- "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.9.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/jupyter_notebooks/05_Identification.ipynb b/jupyter_notebooks/05_Identification.ipynb
deleted file mode 100644
index 92e3fde..0000000
--- a/jupyter_notebooks/05_Identification.ipynb
+++ /dev/null
@@ -1,268 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "34059152-8e0d-4d75-a1ec-edfab3c25c05",
-   "metadata": {},
-   "source": [
-    "# Identification"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "1655fd96-9ee8-4258-a9fa-34f2b6de8e32",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from tuto_control_lib.systems import UnknownSystem\n",
-    "from tuto_control_lib.plot import *\n",
-    "\n",
-    "import matplotlib.pyplot as plt\n",
-    "import numpy as np\n",
-    "from math import exp, log, pi, cos\n",
-    "from statistics import mean"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "6b3d3141-1e2e-42c0-b822-27c7a0b84471",
-   "metadata": {},
-   "source": [
-    "For moment, we supposed the model of the system known (i.e. the coeficients $a$ and $b$).\n",
-    "But in practice, we do not know them.\n",
-    "\n",
-    "In this Section, we will perform what is called the *Identification* to get the coefficient of the system model.\n",
-    "\n",
-    "The idea of the identification phase is simple: \"Get the relation between the input and output\".\n",
-    "\n",
-    "To do this, the most basic way is to perform a serie of step inputs and observe the output.\n",
-    "\n",
-    "In this Section, we will use the `UnknownSystem` and try to find its coefficients."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7e92fbb0-697a-452f-9829-ab0f67a14a89",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "system = UnknownSystem()\n",
-    "y_values_ident, u_values_ident, u, system, max_iter = [], [], 0, UnknownSystem(), 200\n",
-    "for i in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values_ident.append(y)\n",
-    "    \n",
-    "    u = (i + 20) // 20\n",
-    "    \n",
-    "    system.apply(u)\n",
-    "    u_values_ident.append(u)\n",
-    "\n",
-    "plot_u_y(u_values_ident, y_values_ident)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "161a6257-f786-4437-b264-678feadd1863",
-   "metadata": {},
-   "source": [
-    "We are looking for an expression for a first order system of the following form:\n",
-    "\n",
-    "$$\n",
-    "y(k+1) = a y(k) + b u(k)\n",
-    "$$\n",
-    "\n",
-    "In steady state, the input is constant: $u_{ss}$.\n",
-    "\n",
-    "Thus:\n",
-    "\n",
-    "$$\n",
-    "y_{ss} = a y_{ss} + b u_{ss} \\implies \\frac{y_{ss}}{u_{ss}} = \\frac{b}{1 - a}\n",
-    "$$\n",
-    "\n",
-    "In our case:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7224da8b-7802-40d9-bfec-680bb5225a8d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "previous_u = 1\n",
-    "gain_ss = None\n",
-    "for (u, y) in zip(u_values_ident, y_values_ident):\n",
-    "    if u != previous_u:\n",
-    "        print(f\"u: {previous_u} -> {gain_ss}\")\n",
-    "        previous_u = u\n",
-    "    else:\n",
-    "        gain_ss = y / u\n",
-    "print(f\"u: {previous_u} -> {gain_ss}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "b39169cb-e6c8-4f17-ac6b-003b6be751dd",
-   "metadata": {},
-   "source": [
-    "So the static gain is around `0.85`."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "3e9f8daf-b9c4-476b-b6f1-c5ea97b74574",
-   "metadata": {},
-   "source": [
-    "We will perform a Least Mean Square to get an estimation of the model:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d7c447ff-390a-4950-80c7-9c53769f651f",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "u_values_identification = u_values_ident\n",
-    "y_values_identification = y_values_ident\n",
-    "\n",
-    "s1 = sum(y * y for y in y_values_identification)\n",
-    "s2 = sum(u * y for (u, y) in zip(u_values_identification, y_values_identification))\n",
-    "s3 = sum(u * u for u in u_values_identification)\n",
-    "s4 = sum(y * z for (y, z) in zip(y_values_identification[:-2], y_values_identification[1:]))\n",
-    "s5 = sum(u * z for (u, z) in zip(u_values_identification[:-2], y_values_identification[1:]))\n",
-    "\n",
-    "a_est = (s3 * s4 - s2 * s5) / (s1 * s3 - s2 * s2)\n",
-    "b_est = (s1 * s5 - s2 * s4) / (s1 * s3 - s2 * s2)\n",
-    "\n",
-    "print(f\"a: {a_est}, b: {b_est} -> gain: {b_est / (1 - a_est)}\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "2a1dda22-375b-42aa-bd49-6d0400d7390e",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "max_iter = 200\n",
-    "system = UnknownSystem()\n",
-    "y_values, u_values, u, system, integral = [], [], 0, UnknownSystem(), 0\n",
-    "model = []\n",
-    "y_model = 0\n",
-    "\n",
-    "for i in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    u = (i + 20) // 20\n",
-    "    \n",
-    "    system.apply(u)\n",
-    "    u_values.append(u)\n",
-    "    \n",
-    "    y_model = a_est * y_model + b_est * u\n",
-    "    model.append(y_model)\n",
-    "\n",
-    "plot_model_compa(y_values, model)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "5fd48bfc-8960-46e3-b04e-fbb31ecaac6c",
-   "metadata": {},
-   "source": [
-    "# Designing a PI Controller"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "21f1a25d-7366-446c-83f8-946fa4257f87",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "ks = 10\n",
-    "mp = 0.05\n",
-    "\n",
-    "r = exp(-4/ks)\n",
-    "theta = pi * log(r) / log(mp)\n",
-    "\n",
-    "kp = (a_est - r * r) / b_est\n",
-    "ki = (1 - 2 * r * cos(theta) + r * r) / b_est\n",
-    "\n",
-    "print(f\"Kp = {kp}\\nKi = {ki}\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "160523c3-f950-4722-8672-a38ac6f17e97",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "reference_value = 1\n",
-    "y_values, u_values, u, system, integral_error, max_iter = [], [], 0, UnknownSystem(), 0, 50\n",
-    "\n",
-    "for i in range(max_iter):\n",
-    "    y = system.sense()\n",
-    "    y_values.append(y)\n",
-    "    \n",
-    "    error = reference_value - y\n",
-    "    integral_error += error\n",
-    "    u = kp * error + ki * integral_error\n",
-    "    \n",
-    "    system.apply(u)\n",
-    "    u_values.append(u)\n",
-    "\n",
-    "plot_u_y(u_values, y_values, reference_value)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "2759322c-239d-4376-a70a-e9fc6346f0e8",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "e_ss = reference_value - y_values[-1]\n",
-    "max_overshoot = (max(y_values) - y_values[-1]) / y_values[-1]\n",
-    "settling_time = len([x for x in y_values if abs(x - y_values[-1]) > 0.05])\n",
-    "\n",
-    "print(f\"Precision: {e_ss}\")\n",
-    "print(f\"Settling Time: {settling_time} -> desired: < {ks}\")\n",
-    "print(f\"Max. Overshoot: {max_overshoot} -> desired: < {mp}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "d916d270-f6c7-4f0c-9f19-869a9c1aac84",
-   "metadata": {},
-   "source": [
-    "[Back to menu](./00_Main.ipynb) or [Next chapter](./06_RealSystem.ipynb)"
-   ]
-  }
- ],
- "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.9.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/jupyter_notebooks/06_RealSystem.ipynb b/jupyter_notebooks/06_RealSystem.ipynb
deleted file mode 100644
index 4400929..0000000
--- a/jupyter_notebooks/06_RealSystem.ipynb
+++ /dev/null
@@ -1,150 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "8c5592b6-7270-437d-9f89-96dc4a60528d",
-   "metadata": {},
-   "source": [
-    "# 'Real' System"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "e38ada7d-aae2-4ff0-bd34-20d4c1bed366",
-   "metadata": {},
-   "source": [
-    "We provide a semi-real system.\n",
-    "\n",
-    "The system is as follow:\n",
-    "\n",
-    "We want to compute an estimation of $\\pi$.\n",
-    "One way to do this is to use Monte-Carlo simulations.\n",
-    "\n",
-    "The idea of Monte-Carlo simulations is to execute **a lot of small and independant simulations** and compute the final result based on the results of the simulations.\n",
-    "\n",
-    "In our case, each simulation we draw a random number $x$ in $[-1, 1]$, and then compute (in a very inefficient way) $\\sqrt{1 - x^2}$.\n",
-    "\n",
-    "The final result is the sum of each simulation, which is an approximation of $\\int_{-1}^1 \\sqrt{1-x^2}dx = \\frac{\\pi}{2}$\n",
-    "\n",
-    "Our sensor is the `loadavg` of the machine. The `loadavg` is a metric representing the CPU utilization.\n",
-    "\n",
-    "Our actuator is the number of threads excuting simulations in parallel (between 0 and 8).\n",
-    "\n",
-    "> **Our control objective is to control the `loadavg` metric around a given value by adapting the number of threads executing simulations.**\n",
-    "\n",
-    "You can run the system with the following `docker` command:\n",
-    "\n",
-    "```sh\n",
-    "docker run --privileged -it -v $(pwd):/data registry.gitlab.inria.fr/control-for-computing/tutorial/system:v0.0 tuto-ctrl main.lua 1000000\n",
-    "```\n",
-    "\n",
-    "The `main.lua` file is the file containing the controller code, and the last parameter is the total number of iterations to do."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "8a1ea320-905c-4784-94ca-71c622046559",
-   "metadata": {},
-   "source": [
-    "<div class=\"alert alert-info\" role=\"alert\">\n",
-    "   Your tasks:\n",
-    "   <ol>\n",
-    "      <li>Play with the system: Try different constant inputs and see the output</li>\n",
-    "      <li>Assuming the underlying model is a first order model: Perform the identification</li>\n",
-    "      <li>Design a PI Controller for this systems</li>\n",
-    "      <li>Introduce pertubations: At some point in your experiment, run `yes` in another terminal to act as a disturbance, and see how your controller reacts.\n",
-    "    </ol> \n",
-    "</div>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "629824b3-eeb5-40c2-a55b-922def8fdfbd",
-   "metadata": {},
-   "source": [
-    "## Why `lua`?\n",
-    "\n",
-    "Because it is a simple, small language that integrate with `C` easily!\n",
-    "Instead of giving you the source code and asking you to write `C` code to implement the controller, we can just write the controller in `lua` and pass the `lua` file as an argument of the `C` binary to be loaded.\n",
-    "\n",
-    "You can find a `lua` cheat sheet [here](https://devhints.io/lua)."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "e62617e9-e542-4398-867c-57c0984c2e99",
-   "metadata": {},
-   "source": [
-    "We define here a Proportional Controller:\n",
-    "\n",
-    "```lua\n",
-    "-- main.lua file\n",
-    "\n",
-    "-- Do not worry about this part\n",
-    "Controller = {}\n",
-    "Controller.__index = Controller\n",
-    "\n",
-    "function Controller:new()\n",
-    "    -- Here we write the fields of the object.\n",
-    "    -- For a P controller we need a proportional gain (kp)\n",
-    "    -- and the reference value (ref)\n",
-    "    local ret = {kp = 0.5, ref = 2.0}\n",
-    "    setmetatable(ret, Controller)\n",
-    "    return ret\n",
-    "end\n",
-    "\n",
-    "function Controller:ctrl(sensor)\n",
-    "    -- This is the main function of the controller.\n",
-    "    -- It gets the sensor value from the system,\n",
-    "    -- and must return the next input\n",
-    "    \n",
-    "    -- First we compute the control error\n",
-    "    err = self.ref - sensor\n",
-    "    -- Then we compute the next u\n",
-    "    u = self.kp * err\n",
-    "    -- We make sure the value of u makes sense for our system\n",
-    "    if u < 0 then\n",
-    "        u = 0\n",
-    "    end\n",
-    "    -- We print a line with the different metrics\n",
-    "    print(\"sensor: \" .. sensor .. \", ref: \" .. self.ref .. \", actuator: \" .. u .. \", nb threads: \" .. math.floor(u))\n",
-    "    \n",
-    "    -- We finally return the value for the next input\n",
-    "    return math.floor(u)\n",
-    "end\n",
-    "\n",
-    "return Controller\n",
-    "```"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "99064358-2958-4ec7-aed1-cf0fc9215fce",
-   "metadata": {},
-   "source": [
-    "[Back to menu](./00_Main.ipynb)"
-   ]
-  }
- ],
- "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.9.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/pages/src/intro.md b/pages/src/intro.md
index 9b66877..608ba1d 100644
--- a/pages/src/intro.md
+++ b/pages/src/intro.md
@@ -4,35 +4,21 @@ Link to this page: [https://tinyurl.com/CtrlComputing](https://tinyurl.com/CtrlC
 
 ## Introduction
 
-This tutorial aims at introducing the notions and tool of the Control-Theory field to computer scientists.
-
-The tutorial is composed of two parts:
+This tutorial aims at introducing the tools and notions of the [Control-Theory field](https://en.wikipedia.org/wiki/Control_theory) to computer scientists, and relies on [Jupyter notebooks](https://jupyter.org/), and is composed of two parts:
 
 - In the first part, attendees get familiar with the concepts, tools, and methodology of Control-Theory.
-  This part is done by experimenting on a simulated system with Jupyter notebooks.
   
 - In the second part, attendees are given a pseudo-realistic system and have to design a controller to regulate its behavior.
 
 
 ## Requirements
 
-- a machine with `docker` installed.
-
-- basic `python` knowledge.
-
-- basic math knowledge is a plus.
-
-- basic `lua` knowledge is a plus.
+- a recent web browser (Firefox 90+, Chromium 89+)
 
-## Installation
+- basic `python` knowledge
 
-The tutorial is contained in a single docker image.
+- basic math knowledge is a plus
 
-Start the tutorial by running:
 
-```bash
-docker run -it -p 8888:8888 -v $(pwd):/tuto/data registry.gitlab.inria.fr/control-for-computing/tutorial/tuto:v0.0
-```
 
-This should start a `JupyterLab` instance (you may have to click the link in the terminal).
-Once in `JupyterLab`, begin with the file named `00_Main.ipynb`.
+<h1 align="center"><b>Start the tutorial <a href="https://control-for-computing.gitlabpages.inria.fr/jupyter/">here</a></b></h1>
diff --git a/pages/src/motivation.md b/pages/src/motivation.md
index fb93537..8acc760 100644
--- a/pages/src/motivation.md
+++ b/pages/src/motivation.md
@@ -1,36 +1,59 @@
 # Motivation
 
-Computing systems are getting more and more complex.
+## Motivation of Control for Computing
 
+Computing systems are getting more and more complex.
 
 The software stacks are growing, and are executed on top of complex hardware.
-The behavior of such systems is thus becoming extremely difficult to model correctly.
+The behavior of applications is thus becoming extremely difficult to predict, or model, correctly.
+
+We need regulation to provide *Quality-of-Service* guarantees.
 
-The usual approach is to have a theoretical model of the system and design complex algorithm based on this model.
-This approach is limited by the quality of the model.
+One approach is to have a theoretical model of the system and design complex algorithm based on this model.
+Such an approach is limited by the quality of the model.
 Modelling all the possible cases, and behaviors is tedious and error-prone.
 
-TODO: TAKE AN EXAMPLE OF SYSTEM
 
-A different approach to regulate the behavior of a computing system is to take measurements of the system metrics, and adapt the input based on these measurements.
+A different approach to regulate the behavior of a computing system is to *periodically* take measurements of the system metrics, and adapt the input based on these measurements.
+This approach is called *closed-loop*, and this is the interest of the *Autonomic Computing* community.
+
+There are several ways to adapt the input of the system.
+One can use ad-hoc solutions based on arbitrary rules or IA for example.
+
+These solutions do not provide any proven guarantees on the closed-loop system.
+On the other hand, the *Control Theory* field has been applying math-proven methods to closed-loop physical systems for decades.
+But the application of Control Theory to computing systems is only quite recent. 
+
+
+One example is the one described by Cerf et al. in [Sustaining performance while reducing energy consumption: a control theory approach](https://hal.inria.fr/hal-03259316).
+The motivation is the following:
+HPC applications are a succession of iterations that are composed of phases.
+These phases can be CPU-intensive, IO-intensive, memory-intensive, etc.
+During memory-intensive phases, for example, it is useless for the CPU to be at maximum frequency as it will be idle.
+Thus, one could decrease the CPU frequency of the compute node with RAPL technology to reduce its energy consumption. 
+This decrease might introduce some overhead in the execution time of the application.
+The aforementioned paper performs an online regulation of compute node CPU frequency based on an accepted degradation given by the user.
+
+The intuition is the following:
+If the application is running slower than desired (too much degradation), the CPU frequency is increased to meet user requirements.
+If the application is running faster than desired (too small degradation), the CPU frequency is decreased to reduce energy consumption.
+
+This regulation was done using Control Theory tools and was showed to lead to significant energy saving with 10% degradation levels.
+
 
+## Motivation of this tutorial
 
-One classical example is a *heating device*.
-The user defines the temperature they want their room to be at.
-The heating device will take a measurement of the temperature of the room.
-If the temperature is lower than the desired temperature, the heating device will increase the power of its resistance.
-If the temperature is greater than the desired temperature, the heating device must stop heating, and will thus decrease the power of its resistance. 
+We believe that numerous computing systems or applications could benefit from feedback loops architecture,
+and that tools from Control Theory provide interesting guarantees compared to other strategies (ad-hoc, AI, etc.).  
 
-This approach is called **closed-loop**.
-Indeed, the system takes a decision based on a sensor, which will impact the next measure of the sensor and thus the next decision.
+This tutorial aims at introducing the attendees with Control Theory, and present the methodology through a practical example.  
 
-There are several ways to "close the loop" in a computing system.
+At the end of the tutorial, attendees will have:
 
-- AI
-- ad-hoc solutions
-- control theory
+- Learned about Control Theory motivations and tools
 
+- Identified a model of a system
 
+- Designed a Proportional Controller, and understood its limitations 
 
- 
- 
+- Designed a more complex controller: a Proportional-Integral Controller
diff --git a/src_real_system/Makefile b/src_real_system/Makefile
deleted file mode 100644
index 1c7ca8a..0000000
--- a/src_real_system/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-CC=gcc
-LUA_PATH=/nix/store/dqlpbnddi44921ffq6q7xhzswhyvha0y-lua-5.4.3/
-FLAGS=-fPIC -I${LUA_PATH}/include -llua -lpthread 
-
-OBJ=monte_carlo.o
-
-
-all: tuto-ctrl tuto-ctrl-iter
-
-install:
-	mkdir -p ./bin
-	cp tuto-ctrl ./bin
-	cp tuto-ctrl-iter ./bin
-
-%.o: %.c %.h
-	$(CC) -c $<
-
-tuto-ctrl: main.c ${OBJ}
-	$(CC) $(FLAGS) -D THREADS -o $@ main.c ${OBJ}
-
-tuto-ctrl-iter: main.c ${OBJ}
-	$(CC) $(FLAGS) -o $@ main.c ${OBJ}
diff --git a/src_real_system/constants.h b/src_real_system/constants.h
deleted file mode 100644
index 0ad1296..0000000
--- a/src_real_system/constants.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _CONSTANTS_H_
-#define _CONSTANTS_H_
-
-#define N 500000
-#define ITERS 100
-#define MAX_THREADS 8
-#define SLEEP_TIME 5
-#define A -1
-#define B 1
-#define MAX_ITERS 100000
-
-#endif
-
diff --git a/src_real_system/log_thread.c b/src_real_system/log_thread.c
deleted file mode 100644
index ab1749d..0000000
--- a/src_real_system/log_thread.c
+++ /dev/null
@@ -1,53 +0,0 @@
-#include "log_thread.h"
-
-#include <lauxlib.h>
-#include <lua.h>
-#include <lualib.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "constants.h"
-
-double get_loadavg() {
-    double loadavg[3];
-    int result = getloadavg(loadavg, 3);
-    double load = loadavg[0];
-    return load;
-}
-
-void _loop_function(lua_State* L, mutex_nb* mnb) {
-    lua_getfield(L, -1, "ctrl");
-    lua_pushvalue(L, -2);
-
-    lua_pushnumber(L, get_loadavg());
-    lua_pcall(L, 2, 1, 0);
-
-    int isnum;
-    int n = lua_tointegerx(L, -1, &isnum);
-    lua_remove(L, -1);
-
-    pthread_mutex_lock(&mnb->mutex);
-    mnb->data = n;
-    pthread_mutex_unlock(&mnb->mutex);
-}
-
-void create_lua_ctrlr(lua_State* L) {
-    lua_getfield(L, -1, "new");
-    assert(lua_isfunction(L, -1));
-    lua_insert(L, -2);
-    int res = lua_pcall(L, 1, 2, 0);
-    assert(!res);
-    lua_pop(L, 1);
-}
-
-void* load_logger(void* args) {
-    struct logger_args* myargs = (struct logger_args*)args;
-    lua_State* L = (lua_State*)(myargs->L);
-    mutex_nb* mnb = (mutex_nb*)(myargs->mnb);
-    create_lua_ctrlr(L);
-    while (1) {
-        _loop_function(L, mnb);
-        sleep(SLEEP_TIME);
-    }
-}
diff --git a/src_real_system/log_thread.h b/src_real_system/log_thread.h
deleted file mode 100644
index bc59c17..0000000
--- a/src_real_system/log_thread.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef _LOG_THREAD_H_
-#define _LOG_THREAD_H_
-#include <assert.h>
-#include <lauxlib.h>
-#include <lua.h>
-#include <lualib.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "constants.h"
-double get_loadavg();
-
-void _loop_function(lua_State* L, mutex_nb* mnb);
-
-struct logger_args {
-    lua_State* L;
-    mutex_nb* mnb;
-};
-
-void create_lua_ctrlr(lua_State* L);
-
-void* load_logger(void* args);
-
-#endif
-
diff --git a/src_real_system/main.c b/src_real_system/main.c
deleted file mode 100644
index eb6575b..0000000
--- a/src_real_system/main.c
+++ /dev/null
@@ -1,163 +0,0 @@
-#include <assert.h>
-#include <lauxlib.h>
-#include <lua.h>
-#include <lualib.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/resource.h>
-#include <time.h>
-
-#include "constants.h"
-#include "monte_carlo.h"
-
-pthread_mutex_t mutex_results;
-pthread_mutex_t mutex_actuator;
-int iterations_done = 0;
-double sum_simulations = 0.0;
-int actuator = 1;
-
-#ifdef THREADS
-#define ACTUATOR_IS_THREADS 1
-#else
-#define ACTUATOR_IS_THREADS 0
-#endif
-
-void* pget_pi(void* arg) {
-    int iterations = ITERS;
-#if !ACTUATOR_IS_THREADS
-    pthread_mutex_lock(&mutex_actuator);
-    iterations = actuator;
-    pthread_mutex_unlock(&mutex_actuator);
-#endif
-
-    double pi = get_pi(iterations);
-
-    pthread_mutex_lock(&mutex_results);
-    sum_simulations += pi;
-    iterations_done += iterations;
-    pthread_mutex_unlock(&mutex_results);
-
-    pthread_exit(NULL);
-}
-
-void start_threads(pthread_t* threads) {
-    int nb_threads = 4;
-#if ACTUATOR_IS_THREADS
-    pthread_mutex_lock(&mutex_actuator);
-    nb_threads = actuator;
-    pthread_mutex_unlock(&mutex_actuator);
-#endif
-    // printf("Starting %d threads\n", nb_threads);
-    int rc;
-    for (int i = 0; i < nb_threads; i++) {
-        rc = pthread_create(&threads[i], NULL, pget_pi, NULL);
-        assert(!rc);
-    }
-}
-
-void stop_threads(pthread_t* threads) {
-    int nb_threads = 4;
-#if ACTUATOR_IS_THREADS
-    pthread_mutex_lock(&mutex_actuator);
-    nb_threads = actuator;
-    pthread_mutex_unlock(&mutex_actuator);
-#endif
-    for (int i = 0; i < nb_threads; i++) {
-        pthread_join(threads[i], NULL);
-    }
-}
-
-double get_loadavg() {
-    double loadavg[3];
-    int result = getloadavg(loadavg, 3);
-    double load = loadavg[0];
-    return load;
-}
-
-void _loop_function(lua_State* L) {
-    lua_getfield(L, -1, "ctrl");
-    lua_pushvalue(L, -2);
-
-    lua_pushnumber(L, get_loadavg());
-    lua_pcall(L, 2, 1, 0);
-
-    int isnum;
-    int n = lua_tointegerx(L, -1, &isnum);
-    lua_remove(L, -1);
-
-    pthread_mutex_lock(&mutex_actuator);
-    actuator = n;
-    pthread_mutex_unlock(&mutex_actuator);
-}
-
-void create_lua_ctrlr(lua_State* L) {
-    lua_getfield(L, -1, "new");
-    // assert(lua_isfunction(L, -1));
-    int res = lua_isfunction(L, -1);
-    assert(res == 1);
-    lua_insert(L, -2);
-    res = lua_pcall(L, 1, 2, 0);
-    assert(!res);
-    lua_pop(L, 1);
-}
-
-void* load_logger(void* args) {
-    lua_State* L = (lua_State*)(args);
-    create_lua_ctrlr(L);
-    while (1) {
-        _loop_function(L);
-        sleep(SLEEP_TIME);
-    }
-}
-
-int main(int argc, char** argv) {
-    int res = pthread_mutex_init(&(mutex_results), NULL);
-    assert(!res);
-    res = pthread_mutex_init(&(mutex_actuator), NULL);
-    assert(!res);
-
-    struct rlimit plop;
-    plop.rlim_cur = 62678;
-    plop.rlim_max = 62678;
-
-    struct rlimit plap;
-    setrlimit(RLIMIT_NPROC, &plop);
-    getrlimit(RLIMIT_NPROC, &plap);
-
-    char* myfile = argv[1];
-    lua_State* L = luaL_newstate();
-    luaL_openlibs(L);
-    luaL_dofile(L, myfile);
-
-    pthread_t log_thread;
-    int rc = pthread_create(&log_thread, NULL, load_logger, (void*)L);
-    assert(!rc);
-
-    int total_nb_iterations = atoi(argv[2]);
-    int current_nb_iterations = 0;
-    pthread_t* threads = malloc(sizeof(pthread_t) * MAX_THREADS);
-
-    do {
-        start_threads(threads);
-        stop_threads(threads);
-
-        pthread_mutex_lock(&mutex_results);
-        current_nb_iterations = iterations_done;
-        pthread_mutex_unlock(&mutex_results);
-    } while (current_nb_iterations < total_nb_iterations);
-    // for (int j = 0; j < MAX_ITERS; j++) {
-    //     start_threads(threads);
-    //     stop_threads(threads);
-    // }
-
-    pthread_mutex_lock(&mutex_results);
-    double half_pi = sum_simulations * (B - A) / iterations_done;
-    printf("pi = %g\n", half_pi * 2);
-    pthread_mutex_unlock(&mutex_results);
-
-    lua_close(L);
-
-    pthread_mutex_destroy(&mutex_results);
-    pthread_mutex_destroy(&mutex_actuator);
-}
diff --git a/src_real_system/monte_carlo.c b/src_real_system/monte_carlo.c
deleted file mode 100644
index 00ccb14..0000000
--- a/src_real_system/monte_carlo.c
+++ /dev/null
@@ -1,78 +0,0 @@
-#include "monte_carlo.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-long double my_exp(long double x, int iterations) {
-    long double sum = 0.0;
-    long double cum_x = 1.0;
-    long double fact = 1.0;
-    for (int i = 0; i < iterations; i++) {
-        sum += cum_x / fact;
-        cum_x *= x;
-        fact *= (long double)(i + 1);
-    }
-    return sum;
-}
-
-long double newton_sqrt(long double x, int iterations) {
-    long double guess = 1.0;
-    for (int i = 0; i < iterations; i++) {
-        guess = 0.5 * (guess + x / guess);
-    }
-    return guess;
-}
-
-long double dico_sqrt(long double x, int iterations) {
-    long double min_guess = 0.0;
-    long double max_guess = 1.0;
-    long double guess = 0.5;
-    for (int i = 0; i < iterations; i++) {
-        guess = (min_guess + max_guess) / 2.0;
-        long double squared_guess = guess * guess;
-        if (x < squared_guess) {
-            max_guess = guess;
-        } else {
-            min_guess = guess;
-        }
-    }
-    return guess;
-}
-
-long double fuck_sqrt(long double x, int iterations) {
-    long double eps = 1.0 / ((long double)iterations);
-    long double y = 0.0;
-    long double min_distance = 4.0;
-    long double best_y = 0.0;
-    for (int i = 0; i < iterations; i++) {
-        long double squared_y = y * y;
-        long double distance = (squared_y - x) * (squared_y - x);
-        if (distance < min_distance) {
-            min_distance = distance;
-            best_y = y;
-        }
-        y = y + eps;
-    }
-    return best_y;
-}
-
-long double get_x() {
-    // srand(time(NULL));
-    long double x = (long double)(rand()) / (long double)(RAND_MAX);
-    return A + (B - (A)) * x;
-}
-
-long double get_pi(int iterations) {
-    long double sum = 0.0;
-    for (int i = 0; i < iterations; i++) {
-        long double x = get_x();
-        // long double res = my_exp(-(x * x), N);
-        // long double res = newton_sqrt(1.0 - x * x, N);
-        // long double res = dico_sqrt(1.0 - x * x, N);
-        long double res = fuck_sqrt(1.0 - x * x, N);
-        // printf("x = %LG, res = %Lg\n", x, res);
-        sum += res;  // my_exp(-(x * x), N);
-    }
-    return sum;
-}
diff --git a/src_real_system/monte_carlo.h b/src_real_system/monte_carlo.h
deleted file mode 100644
index b5f959f..0000000
--- a/src_real_system/monte_carlo.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _MONTE_CARLO_H_
-#define _MONTE_CARLO_H_
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "constants.h"
-#include "monte_carlo.h"
-long double my_exp(long double x, int iterations);
-
-long double get_x();
-
-long double get_pi(int iterations);
-
-#endif
-
diff --git a/tuto_control_lib/setup.py b/tuto_control_lib/setup.py
deleted file mode 100644
index 80f9139..0000000
--- a/tuto_control_lib/setup.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from setuptools import setup
-
-setup(
-    name="tuto_control_lib",
-
-    # Version number (initial):
-    version="1.0",
-
-    # Application author details:
-    author="Quentin Guilloteau",
-    author_email="Quentin.Guilloteau@inria.fr",
-
-
-    #
-    # license="LICENSE.txt",
-    description="Helper lib for tuto control for computing",
-
-    # long_description=open("README.txt").read(),
-
-    # Dependent packages (distributions)
-    install_requires=[
-    ]
-)
diff --git a/tuto_control_lib/tuto_control_lib/__init__.py b/tuto_control_lib/tuto_control_lib/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/tuto_control_lib/tuto_control_lib/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/tuto_control_lib/tuto_control_lib/plot.py b/tuto_control_lib/tuto_control_lib/plot.py
deleted file mode 100644
index 53691cb..0000000
--- a/tuto_control_lib/tuto_control_lib/plot.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import matplotlib.pyplot as plt
-import numpy as np
-
-
-def plot_y(y_values):
-    max_iter = len(y_values)
-    xpoints = np.array(range(max_iter))
-    ypoints = np.array(y_values)
-
-    plt.plot(xpoints, ypoints)
-    plt.xlabel("Iterations")
-    plt.ylabel("Sensor Output")
-    plt.show()
-
-def plot_u_y(u_values, y_values, reference_value=None):
-    max_iter = len(y_values)
-    xpoints = np.array(range(max_iter))
-    ypoints = np.array(y_values)
-    upoints = np.array(u_values)
-
-    plt.subplot(2, 1, 1)
-    plt.plot(xpoints, ypoints)
-    if reference_value:
-        plt.plot(xpoints, [reference_value for _ in range(max_iter)])
-    plt.xlabel("Iterations")
-    plt.ylabel("Sensor Output")
-    plt.subplot(2, 1, 2)
-    plt.plot(xpoints, upoints)
-    plt.xlabel("Iterations")
-    plt.ylabel("Input")
-
-    plt.show()
-
-def plot_model_compa(y_values, model):
-    max_iter = len(y_values)
-    xpoints = np.array(range(max_iter))
-    ypoints = np.array(y_values)
-    modelpoints = np.array(model)
-
-    plt.plot(xpoints, ypoints)
-    plt.plot(xpoints, modelpoints)
-    plt.xlabel("Iterations")
-    plt.ylabel("Sensor Output")
-    plt.show()
-
diff --git a/tuto_control_lib/tuto_control_lib/systems.py b/tuto_control_lib/tuto_control_lib/systems.py
deleted file mode 100644
index a5dd72f..0000000
--- a/tuto_control_lib/tuto_control_lib/systems.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import random
-
-class System:
-    def __init__(self, a, b, y0=0, noise=False):
-        self.y = y0
-        self.noise = noise
-        self.f = lambda y, u: a * y + b * u
-        
-    def sense(self):
-        if self.noise:
-            y = self.y + random.random() / 10
-            self.y = y if y > 0 else 0 
-        return self.y
-    
-    def apply(self, u):
-        self.y = self.f(self.y, u)
-        return self
-        
-class IntroSystem(System):
-    def __init__(self):
-        System.__init__(self, 0.8, 0.5, y0=0, noise=False)
-
-class NoisySystem(System):
-    def __init__(self):
-        System.__init__(self, 0.8, 0.5, y0=0, noise=True)
-        
-class UnknownSystem(System):
-    def __init__(self):
-        System.__init__(self, 0.628, 0.314, y0=0, noise=True)
-- 
GitLab