From 91c8b7ceca13db28665f593a4858bcd06fb3d4ff Mon Sep 17 00:00:00 2001 From: Martin Potier Date: Thu, 6 Jul 2017 15:54:32 +0200 Subject: [PATCH] Initial commit --- activity.in.mgs.tex | 43 ++++ activity.motivation.tex | 66 +++++ chemical.model.tex | 187 ++++++++++++++ closing.tex | 17 ++ decision.model.tex | 24 ++ ecoli.model.tex | 144 +++++++++++ example.dla.tex | 26 ++ example.forest.fire.tex | 26 ++ experimental.model.tex | 35 +++ formalism.model.system.tex | 87 +++++++ handout.tex | 174 +++++++++++++ introduction.tex | 140 +++++++++++ main.tex | 317 ++++++++++++++++++++++++ mgs.topological.collections.tex | 31 +++ mgs.topological.transformations.tex | 30 +++ model.category.tex | 79 ++++++ multimodel.tex | 66 +++++ otb.architecture.tex | 49 ++++ otb.general.tex | 55 ++++ otb.organisation.tex | 21 ++ otb.ppm.tex | 317 ++++++++++++++++++++++++ otb.sectorisation.tex | 35 +++ otb.stable.pop.tex | 90 +++++++ part1.conclude.tex | 19 ++ part2.conclude.tex | 22 ++ part3.conclude.tex | 23 ++ plan.tex | 9 + predator.prey.tex | 109 ++++++++ representing.space.tex | 37 +++ representing.space.time.interaction.tex | 32 +++ representing.time.tex | 35 +++ sbgp.tex | 26 ++ shell.nix | 77 ++++++ simple.ff.example.tex | 61 +++++ test.tex | 28 +++ title.tex | 29 +++ wave.algorithm.tex | 22 ++ where.is.activity.tex | 110 ++++++++ 38 files changed, 2698 insertions(+) create mode 100644 activity.in.mgs.tex create mode 100644 activity.motivation.tex create mode 100644 chemical.model.tex create mode 100644 closing.tex create mode 100644 decision.model.tex create mode 100644 ecoli.model.tex create mode 100644 example.dla.tex create mode 100644 example.forest.fire.tex create mode 100644 experimental.model.tex create mode 100644 formalism.model.system.tex create mode 100644 handout.tex create mode 100644 introduction.tex create mode 100644 main.tex create mode 100644 mgs.topological.collections.tex create mode 100644 mgs.topological.transformations.tex create mode 100644 model.category.tex create mode 100644 multimodel.tex create mode 100644 otb.architecture.tex create mode 100644 otb.general.tex create mode 100644 otb.organisation.tex create mode 100644 otb.ppm.tex create mode 100644 otb.sectorisation.tex create mode 100644 otb.stable.pop.tex create mode 100644 part1.conclude.tex create mode 100644 part2.conclude.tex create mode 100644 part3.conclude.tex create mode 100644 plan.tex create mode 100644 predator.prey.tex create mode 100644 representing.space.tex create mode 100644 representing.space.time.interaction.tex create mode 100644 representing.time.tex create mode 100644 sbgp.tex create mode 100644 shell.nix create mode 100644 simple.ff.example.tex create mode 100644 test.tex create mode 100644 title.tex create mode 100644 wave.algorithm.tex create mode 100644 where.is.activity.tex diff --git a/activity.in.mgs.tex b/activity.in.mgs.tex new file mode 100644 index 0000000..028fde3 --- /dev/null +++ b/activity.in.mgs.tex @@ -0,0 +1,43 @@ +\newcounter{savedenum} +\newcommand*{\saveenum}{\setcounter{savedenum}{\theenumi}} +\newcommand*{\resume}{\setcounter{enumi}{\thesavedenum}} + +\begin{frame} + \frametitle{L'activité dans \mgs} + \framesubtitle{Quelles sont les dynamiques de mon système ?} + + \begin{itemize} + \small + \item Occurences d'état (quel état de la simulation est actif?) + \item Occurences de temps (quand la simultaion est-elle active?) + \item Occurences d'espace + \begin{itemize} + \item Général: l'\alert{activité} est localisée où les évènements ont lieu + \item Modèle basé sur les interactions: l'\alert{activité} est localisée + où les interactions ont lieu + \end{itemize} + \end{itemize} + \begin{columns}[t] + \column{.5\textwidth} + \begin{enumerate} + \item Comment comprendre l'activité dans le contexte du formalisme \mgs ? + \begin{itemize} + \item L'activité est localisée où \structure{un motif d'une transformation + match} + \end{itemize} + \saveenum + \end{enumerate} + + \column{.5\textwidth} + \begin{enumerate} + \resume + \item Comment suivre l'activité une fois qu'une règle d'une transformation a été + appliquée? + \begin{itemize} + \item L'activité progresse \structure{de proche en proche} (comme une vague) + \item On peut restreindre le filtrage de motif à la \structure{partie active} du + modèle + \end{itemize} + \end{enumerate} +\end{columns} +\end{frame} diff --git a/activity.motivation.tex b/activity.motivation.tex new file mode 100644 index 0000000..9b7aa17 --- /dev/null +++ b/activity.motivation.tex @@ -0,0 +1,66 @@ +\begin{frame}{Activité spatiale d'un feu de forêt} + + \begin{columns} + \column{.9\textwidth} + \begin{block}{Définition} + \begin{quote} + […] activity is considered as a \structure{measure of the number of events} + occuring during in a simulation. + \end{quote} + \centering + \mkCitation{Muzy et al.: “Activity Regions for the Specication of + Discrete Event Systems”, 2010} + \end{block} + \end{columns} + +\begin{columns} + \column{.5\textwidth} + \begin{center} + \begin{tikzpicture} + \node[anchor=south west,inner sep=0pt,gridded] (img) at (0,0) { + \includegraphics[width=\textwidth]{raster/forest-fire} + }; + \uncover<2>{ + \clip (img.south west) rectangle (img.north east); + \fill[forest,opacity=.7] + (25mm,0) .. controls (43mm,22mm) and (35mm,35mm) .. (1cm,4cm |- img.north) + -- (img.north east) + -- (img.south east) + -- cycle; + \fill[ashes,opacity=.7] + (0,0) + -- (25mm,0) .. controls (43mm,22mm) and (35mm,35mm) .. (1cm,4cm |- img.north) + -- (img.north west) + -- cycle; + \draw[fire,line width=2mm,cap=round] + (25mm,0) .. controls (43mm,22mm) and (35mm,35mm) .. (1cm,4cm |- img.north); + } + \end{tikzpicture}\\ + \mkCitation{National Park Service, Alaska Region - Currant Creek Fire, + Lake Clark NP, 6-26, NPS PhotoUploaded by AlbertHerring, Public Domain, + \url{https://commons.wikimedia.org/w/index.php?curid=29598171}} + \end{center} + + \column{.5\textwidth} + \begin{itemize} + \item \structure{Système}: Feu de forêt + \item \structure{Formalisme}: MGS + \item \structure{Modèles}: + \begin{enumerate} + \item un automate à 3 états + \item \structure{[Karafyllidis et Thanailakis, 1997]} + \end{enumerate} + \end{itemize} + + \medskip + \begin{itemize} + \item Observation: + \begin{itemize} + \item \textcolor{ashes}{cendres} (à gauche) + \item \textcolor{fire}{feu} (au milieu) + \item \textcolor{forest}{forêt} (à droite) + \end{itemize} + \end{itemize} +\end{columns} + +\end{frame} diff --git a/chemical.model.tex b/chemical.model.tex new file mode 100644 index 0000000..a5b8065 --- /dev/null +++ b/chemical.model.tex @@ -0,0 +1,187 @@ +\begin{frame}{Moteur chimique} + + \begin{columns} + \column{.7\textwidth}\centering + \begin{itemize} + \item \structure{Modèle} + \begin{itemize} + \item Réaction-Diffusion-Évaporation à la Turing + \medskip + \item EDP couplées + \begin{equation*} + \frac{\partial\orr\varphi}{\partial t} = + \orr{\text{X}}(\orr\varphi) + + \orr{\text{D}} \cdot + \nabla^2\orr\varphi + - \orr{\text{E}} \cdot \orr\varphi + \end{equation*} + \end{itemize} + \item \structure{Simulation} + \begin{itemize} + \item Discrétisation de type différences finies sur un automate + cellulaire 2D + \medskip + \item Algorithme Propagation Parallèle à la Margolus (PPM) + \begin{itemize} + \item Simuler un automate cellulaire sur un support SIMD + \item Faire correspondre la segmentation de l'espace aux processus + \item Éviter les accès concurrents à la même zone mémoire + \end{itemize} + \end{itemize} + \end{itemize} + + \column{.2\textwidth} + \moteurs[structure!30] + \end{columns} + +% Animation du «calque» de démonstration de PPM + \uncover<2->{ + \tikz[overlay,opacity=.95,transform canvas={scale around=.8:(current page.center)}] + \draw[black,fill=white,rounded corners,ultra thick] + (current page.south west) rectangle (current page.north east); + \only<2-7>{ + \tikz[overlay] \node[anchor=center] at (current page.center) { + \begin{tikzpicture}[ + cell/.style={black,size=1.5mm,circle,inner sep=0pt,font=\TINY}, + neighbor cell/.style={black,size=1.5mm,circle,inner sep=0pt,font=\small}, + center cell/.style={cell,white,fill=black}, + spy using outlines={circle,red,size=58mm,magnification=4,connect spies}] + \begin{scope}[scale=.5] + \clip (-27mm,-27mm) rectangle (27mm,27mm); + + % Background + \only<2,4-6>{% + \fill[blue!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); + \fill[red!50,shift={(-5mm,-5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); + } + \only<3,6->{% + \fill[red!50,shift={(-5mm,-5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); + \fill[blue!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); + } + + \only<4-7>{ + \begin{scope} + \clip (-3mm,-3mm) rectangle (3mm,3mm); + \draw[very thin] (-5mm,-5mm) grid (5mm,5mm); + \end{scope} + } + \only<4-6>{ + \begin{scope}[shift={(-1cm,0)}] + \clip (-3mm,-3mm) rectangle (3mm,3mm); + \draw[very thin] (-5mm,-5mm) grid (5mm,5mm); + \end{scope} + \begin{scope}[shift={(-1cm,-1cm)}] + \clip (-3mm,-3mm) rectangle (3mm,3mm); + \draw[very thin] (-5mm,-5mm) grid (5mm,5mm); + \end{scope} + \begin{scope}[shift={(0cm,-1cm)}] + \clip (-3mm,-3mm) rectangle (3mm,3mm); + \draw[very thin] (-5mm,-5mm) grid (5mm,5mm); + \end{scope} + } + \only<2,3>{ + \node[center cell,font=\small] at ( -0mm, -0mm) {$A$}; + \node[cell,font=\small] at (-10mm, -0mm) {$B$}; + \node[cell,font=\small] at (-10mm,-10mm) {$C$}; + \node[cell,font=\small] at ( -0mm,-10mm) {$D$}; + } + \only<2,3,4>{ + % Voisins + \node[neighbor cell] at ( 1cm, 0cm) {$v_{A,1}$}; + \node[neighbor cell] at ( 1cm, 1cm) {$v_{A,2}$}; + \node[neighbor cell] at ( 0cm, 1cm) {$v_{A,3}$}; + \node[neighbor cell] at (-1cm, 1cm) {$v_{B,1}$}; + \node[neighbor cell] at (-2cm, 1cm) {$v_{B,2}$}; + \node[neighbor cell] at (-2cm, 0cm) {$v_{B,3}$}; + \node[neighbor cell] at (-2cm,-1cm) {$v_{C,1}$}; + \node[neighbor cell] at (-2cm,-2cm) {$v_{C,2}$}; + \node[neighbor cell] at (-1cm,-2cm) {$v_{C,3}$}; + \node[neighbor cell] at ( 0cm,-2cm) {$v_{D,1}$}; + \node[neighbor cell] at ( 1cm,-2cm) {$v_{D,2}$}; + \node[neighbor cell] at ( 1cm,-1cm) {$v_{D,3}$}; + } + \only<4>{ + \begin{scope}[scale=0.5,shift={(-5mm,-5mm)}] + \node[center cell] at ( -0mm, -0mm) {$A$}; + \node[cell] at (-10mm, -0mm) {$B$}; + \node[cell] at (-10mm,-10mm) {$C$}; + \node[cell] at ( -0mm,-10mm) {$D$}; + + \node[cell] at ( 1cm, 0cm) {$v_{A,1}$}; + \node[cell] at ( 1cm, 1cm) {$v_{A,2}$}; + \node[cell] at ( 0cm, 1cm) {$v_{A,3}$}; + \node[cell] at (-1cm, 1cm) {$v_{B,1}$}; + \node[cell] at (-2cm, 1cm) {$v_{B,2}$}; + \node[cell] at (-2cm, 0cm) {$v_{B,3}$}; + \node[cell] at (-2cm,-1cm) {$v_{C,1}$}; + \node[cell] at (-2cm,-2cm) {$v_{C,2}$}; + \node[cell] at (-1cm,-2cm) {$v_{C,3}$}; + \node[cell] at ( 0cm,-2cm) {$v_{D,1}$}; + \node[cell] at ( 1cm,-2cm) {$v_{D,2}$}; + \node[cell] at ( 1cm,-1cm) {$v_{D,3}$}; + \end{scope} + } + \only<5>{ + \begin{scope}[scale=0.5,shift={(-5mm,-5mm)}] + \node[center cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + } + \only<6>{ + \begin{scope}[scale=0.5,shift={(5mm,5mm)}] + \node[center cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + \begin{scope}[scale=0.5,shift={(-15mm,5mm)}] + \node[cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + \begin{scope}[scale=0.5,shift={(-15mm,-15mm)}] + \node[cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + \begin{scope}[scale=0.5,shift={(5mm,-15mm)}] + \node[cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + } + \only<7>{ + \begin{scope}[scale=0.5,shift={(5mm,5mm)}] + \node[center cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + } + + % Grilles: + \draw[xshift=5mm,yshift=5mm,thin] ( -5cm, -5cm) grid ( 5cm, 5cm); + \only<2,4-6>{\draw[xshift=5mm,yshift=5mm, step=2cm, thick]% + ( -5cm, -5cm) grid ( 5cm, 5cm);} + \only<3,7>{\draw[xshift=-5mm,yshift=-5mm, step=2cm, thick]% + ( -5cm, -5cm) grid ( 5cm, 5cm);} + + \only<2,4-6>{ + \coordinate (spyhook) at (-5mm,-5mm); + } + \only<3,7>{ + \coordinate (spyhook) at (5mm,5mm); + } + \end{scope} + + \spy on (spyhook) in node (zoom) at (5cm,0); + \end{tikzpicture} + }; + } + } +\end{frame} diff --git a/closing.tex b/closing.tex new file mode 100644 index 0000000..3fb5945 --- /dev/null +++ b/closing.tex @@ -0,0 +1,17 @@ +\begin{frame}[plain,noframenumbering]{} + \Huge\centering + \includegraphics[width=.6\textwidth]{vector/discussion.pdf} + + \bigskip + Questions! +\end{frame} + +\bgroup +\setbeamercolor{background canvas}{bg=black} + +\begin{frame}[plain,noframenumbering]{} + \centering + \Huge\color{base03} + Lumière! +\end{frame} +\egroup diff --git a/decision.model.tex b/decision.model.tex new file mode 100644 index 0000000..884d7e3 --- /dev/null +++ b/decision.model.tex @@ -0,0 +1,24 @@ +\begin{frame} + \frametitle{Moteur comportemental} + + \begin{columns} + \column{.7\textwidth}\centering + \begin{itemize} + \item \structure{Couplage} entre le moteur chimique et le moteur + physique + \begin{itemize} + \item Déclencher des actions individuelles ($R, T, G, D, A$) + \item Consommer ($C$) ou synthétiser ($S$) des morphogènes + \end{itemize} + \medskip + \item \structure{Exemples} + \begin{enumerate} + \item Sectorisation + \item Cercles concentriques + \end{enumerate} + \end{itemize} + + \column{.2\textwidth}\moteurs[transparent][transparent][structure!30] + \end{columns} + +\end{frame} diff --git a/ecoli.model.tex b/ecoli.model.tex new file mode 100644 index 0000000..8679722 --- /dev/null +++ b/ecoli.model.tex @@ -0,0 +1,144 @@ +\tikzset{ + bacillus/.style={draw,fill=white,shape=rounded rectangle,minimum width=2cm, + minimum height=5mm,inner sep=0,anchor=center}, + backshape/.style={densely dotted}, + arrowz/.style={line cap=round,ultra thick,-Stealth,black!50}, + tumbler/.style={transform canvas={rotate around=38:(tumble.center)}, + shorten <=2pt} +} + +\begin{frame} + \frametitle{Moteur physique: spécification} + \begin{columns} + \column{.7\textwidth}\centering + \begin{itemize} + \item \structure{Dynamique individuelle}: + + \begin{center} + \begin{tikzpicture}[node distance=7mm] + \node (outrun) { + \begin{tikzpicture}[rotate=90,baseline] + \node[bacillus,backshape,rotate=90] (run) {}; + \node[bacillus,yshift=4mm,rotate=90] {}; + \draw[arrowz] (run.center) -- +(1cm,0); + \end{tikzpicture} + }; + \node[right=of outrun] (outumble) { + \begin{tikzpicture}[rotate=90,baseline] + \node[bacillus,backshape,rotate=90] (tumble) {}; + \node[bacillus,rotate around=128:(tumble.center)] {}; + \draw[arrowz,tumbler] + (tumble.north east) to ($(tumble.north east) + (0,5mm)$); + \draw[arrowz,tumbler] + (tumble.south west) to ($(tumble.south west) + (0,-5mm)$); + \end{tikzpicture} + }; + \node[right=of outumble] (outgrow) { + \begin{tikzpicture}[rotate=90,baseline] + \node[bacillus,minimum width=2.2cm,minimum height=6mm,rotate=90] (grow) {}; + \node[bacillus,backshape,rotate=90,anchor=center] at (grow.center) {}; + \end{tikzpicture} + }; + \node[right=of outgrow] (outdivide) { + \begin{tikzpicture}[rotate=90,baseline] + \node[bacillus,backshape,rotate=90] (divide) {}; + \node[bacillus,minimum width=1cm,anchor=west,rotate=90] at (divide.west) {}; + \node[bacillus,minimum width=1cm,anchor=east,rotate=90] at (divide.east) {}; + \end{tikzpicture} + }; + \node[right=of outdivide] (outdie) { + \begin{tikzpicture}[rotate=90,baseline] + \node[bacillus,backshape,rotate=90] {}; + \end{tikzpicture} + }; + + \node[below=12mm of outrun.center] {$R$}; + \node[below=12mm of outumble.center] {$T$}; + \node[below=12mm of outgrow.center] {$G$}; + \node[below=12mm of outdivide.center] {$D$}; + \node[below=12mm of outdie.center] {$A$}; + \end{tikzpicture} + \end{center} + + \medskip + \item \structure{Dynamique collective}: + \begin{itemize} + \item \structure{Entrer} en collision avec ses voisines + \item \structure{Inhiber} sa croissance (densité des bactéries) + \end{itemize} + \end{itemize} + + \column{.2\textwidth}\moteurs[transparent][structure!30] + \end{columns} +\end{frame} + +\begin{frame}{Moteur physique: modèle} + \begin{columns} + \column{.75\textwidth}\centering + \begin{columns} + \column{.6\textwidth} + \begin{itemize} + \item \structure{Bactérie virtuelle} + \begin{itemize} + \item Centre de masse, angle, \\longueur ($l$), rayon ($r$) + \item Inertie ($I$), masse ($m$) + \item Vitesse linéaire, vitesse angulaire, vitesse de croissance + \item Âge de la membrane \\ + {\small\structure{[Stewart 2005]}} + \end{itemize} + \end{itemize} + \column{.4\textwidth} + \begin{center} + \includegraphics[page=1,width=\textwidth]{vector/bacteria} + \end{center} + \end{columns} + \begin{columns} + \column{.4\textwidth} + \begin{center} + \includegraphics[page=3,width=\textwidth]{vector/collision-these} + \end{center} + \column{.6\textwidth} + \begin{itemize} + \item \structure{Collision} + \begin{itemize} + \item Conservation des moments + \item Conservation des quantités de mouvement + \item Théorie de l'impulsion + \end{itemize} + \medskip\footnotesize + \begin{equation*} + j = \displaystyle\frac{-(1 + Cr)\ \orr{v}_{ac12} \cdot{} \orr{n}} { 1/m_1 + + 1/m_2 + (\orr{r}_1 \wedge \orr{n})^2 / I_1 + (\orr{r}_2 \wedge \orr{n})^2 + / I_2} + \end{equation*} + \end{itemize} + \end{columns} + \column{.2\textwidth}\moteurs[transparent][structure!30] + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Moteur physique: réalisation} + \begin{columns} + \column{.7\textwidth}\centering + \begin{itemize} + \item \structure{Implémentation} sur automate cellulaire 2D du modèle agent + \bigskip + \item \structure{Utilisation de PPM} + \begin{itemize} + \item $N$ bactéries par cellule + \item Traitement par bloc de $2 \times 2$ + \item Tri des bactéries « voyageuses » + \end{itemize} + \end{itemize} + \begin{center} + \begin{tikzpicture} + \node[anchor=south west,inner sep=0] (img) at (0,0) {\includegraphics[width=5cm]{raster/ecoli-ca}}; + \draw (img.south west) grid (img.north east); + \draw[very thick,step=2cm] (img.south west) grid (img.north east); + \end{tikzpicture} + \end{center} + + \column{.2\textwidth}\moteurs[transparent][structure!30] + \end{columns} +\end{frame} diff --git a/example.dla.tex b/example.dla.tex new file mode 100644 index 0000000..27b5700 --- /dev/null +++ b/example.dla.tex @@ -0,0 +1,26 @@ +\begin{frame}%[label=this one] +\frametitle{Résultats préliminaires (DLA)} +\framesubtitle{Filtrage sur zone active} +\begin{columns} +\column{.55\textwidth} +\begin{block}{Exemple: diffusion limitée par aggrégation} +\begin{itemize} +\item Mise en évidence de la \structure{population des cellules mobiles} +\item Speedup \structure{moins important} (bien que toujours linéaire en la +quantité de cellules actives) +\end{itemize} +\end{block} +\column{.4\textwidth}\centering +\animate<2-10>% Doesn't work with zathura +\animatevalue<1-10>{\currentimg}{0}{773} +\includegraphics[width=.45\textwidth]{animation/dla-normal-frame-\the\currentimg.png} +\hspace{1mm} +\includegraphics[width=.45\textwidth]{animation/dla-active-frame-\the\currentimg.png} +\end{columns} +\bigskip +\hspace{5mm} +\includegraphics[height=3.5cm]{raster/shots-dla.png} +\hfill +\includegraphics[height=3.55cm]{raster/graph-dla.png} +\hspace{5mm} +\end{frame} diff --git a/example.forest.fire.tex b/example.forest.fire.tex new file mode 100644 index 0000000..fc5a7df --- /dev/null +++ b/example.forest.fire.tex @@ -0,0 +1,26 @@ +\begin{frame} +\frametitle{Résultats préliminaires (feu de forêt)} +\framesubtitle{Filtrage sur zone active} +\begin{columns} +\column{.55\textwidth} +\begin{block}{Exemple: application au feu de forêt} +\begin{itemize} +\item Mise en évidence du \structure{front de propagation} +\item Speedup \structure{important} (linéaire en la quantité de cellules actives) +\end{itemize} +\end{block} +\column{.4\textwidth}\centering +\animate<2-10>% Doesn't work with zathura +\animatevalue<1-10>{\currentimg}{0}{138} +\includegraphics[width=.45\textwidth]{animation/ffire-active-frame-\the\currentimg.png} +\hspace{1mm} +\includegraphics[width=.45\textwidth]{animation/ffire-normal-frame-\the\currentimg.png} +\end{columns} +\bigskip +\hspace{5mm} +\includegraphics[height=3.5cm]{raster/shots-ffire.png} +\hfill +\includegraphics[height=3.55cm]{raster/graph-ffire.png} +\hspace{5mm} +\end{frame} + diff --git a/experimental.model.tex b/experimental.model.tex new file mode 100644 index 0000000..0eb49ea --- /dev/null +++ b/experimental.model.tex @@ -0,0 +1,35 @@ +\begin{frame}{Différents types de modèles (formalismes)} + + \begin{itemize} + \item Cadre minimal commun: la \alert{théorie des ensembles} + {\Large \[ \model \leadsto \ensm \]} + + \pause + \item Exemples + \end{itemize} + + \centering + \rowcolors[]{1}{}{black!5} + \begin{tabular}{lll} + \textbf{Type} & \textbf{Modèle \model} & \textbf{Ensemble support \ensm} \\\hline + Expérimental & $\ensm$ & Donné par extension + \\ + À observables & $\langle \sigm,\bhvm \rangle$ + & $\bhvm \subseteq \sigm$ + \\ + %monoïde + fonction de transition + Dynamique & $\langle \bhvm,\timm,\phim \rangle$ + & + $\{ (x,\delta,\Phi_{\model}(x,\delta)) \mid x\in\bhvm, \delta \in \timm \}$ + \\ + %deux espaces topo + une fonction continue + À base de champs & $\langle \chsm,\chvm,\funm \rangle$ + & $\{ (x,f_{\model}(x)) \mid x \in \chsm \}$ + \\ + %un espace mesurable et une probabilité sur cet espace + Probabiliste & $\langle \mesm,\prom \rangle$ + & $\{ (A,\prom(A)) \mid A\in\trim \}$ + \end{tabular} + +\end{frame} + diff --git a/formalism.model.system.tex b/formalism.model.system.tex new file mode 100644 index 0000000..e862514 --- /dev/null +++ b/formalism.model.system.tex @@ -0,0 +1,87 @@ +\begin{frame}{Système, Modèle, Formalisme} + \framesubtitle{Définitions} + + \begin{center} + %\includegraphics[height=3cm]{vector/stub-formlism-model-system} + \begin{tikzpicture}[ + %font=\small + node distance=1cm and 3cm] + \node[draw] (model) {Modèle}; + \node[draw,below right=2cm of model] (system) {Système}; + \node[draw,right=of model] (formalism) {Formalisme}; + + \draw[shorten <=3pt,shorten >=3pt,-Stealth] (formalism) to + node[auto,swap,font=\small] {description} (model); + \draw[shorten <=3pt,shorten >=3pt,very thick,line cap=round,<->, + out=170,in=-70] (system) to node[auto,font=\small] {sémantique} (model); + %node[auto,font=\small] {explique} + + \coordinate (absconc) at ($(barycentric cs:model=1,system=1) + (5cm,0)$); + \draw [dashed] (barycentric cs:model=1,system=1) -- +(6cm,0) -- +(-3cm,0); + \node[label=above:Abstrait,label=below:Concret] at (absconc) {}; + \end{tikzpicture} + \end{center} +% + \begin{itemize} + \item \structure{Système}\\ + \small objet d'étude décomposé en parties + \medskip + \item \structure{Modèle}\\ + \small vue simplifiée du système (abstraction) dont l'existence est + dépendante du système + \medskip + \item \structure{Formalisme}\\ + \small langage, support d'expression du modèle + \end{itemize} + + +\end{frame} + + +\begin{frame}{Système, Modèle, Formalisme} + \framesubtitle{Points de vue sur les systèmes de Lindenmayer, $(\Sigma,w_0,P)$} + + \begin{itemize} + \item \emph{L-System} comme \structure{formalisme} \\ + {\small support de la description de la croissance des plantes} + \item \emph{L-System} comme \structure{modèle} \\ + {\small modèle de calcul comme $\lambda$-calcul, machines de Turing, + grammaires de Chomsky, …} + \item \emph{L-System} comme \structure{système} \\ + {\small objet d'étude formel dont un modèle pourrait être les fonctions de + croissance} + \end{itemize} + + \medskip + \begin{columns} + \column{.33\textwidth} + \includegraphics[height=.4\textheight]{raster/lsystem-formalism} + \column{.33\textwidth} + \includegraphics[height=.4\textheight]{vector/lsystem-model} + \column{.33\textwidth} + %\includegraphics[width=\textwidth]{raster/lsystem-system} + \begin{tikzpicture} + \node[draw, text width=.9\textwidth] {\small + $$f(n) = | w_n |$$ + + $ \left\{\begin{array}{l} + a \rightarrow ab\\ + b \rightarrow b + \end{array}\right. \qquad f(n) = n+1$ + + \medskip + $ \left\{\begin{array}{l} + a \rightarrow b\\ + b \rightarrow ab + \end{array}\right. \qquad f(n) = \text{fib}(n)$ + }; + \end{tikzpicture}\\ + \end{columns} + \begin{columns}[t] + \column{.4\textwidth}\centering + \mkCitation{P. Prusinkiewicz, A. Lindenmayer: “The algorithmic beauty of plants (the virtual laboratory)”, 1990} + \column{.6\textwidth}\centering + \mkCitation{G. Rozenberg, A. Salomaa: “The mathematical theory of L-Systems”, DAIMI Report Series, 3(33), 1974} + \end{columns} + +\end{frame} diff --git a/handout.tex b/handout.tex new file mode 100644 index 0000000..e3efa0d --- /dev/null +++ b/handout.tex @@ -0,0 +1,174 @@ +\documentclass{article} + +\newcommand{\action}[1]{\emph{(#1)}} + +\begin{document} + + +\input{title} +Mesdames, Messieurs, bienvenue à ma soutenance de thèse de doctorat en +informatique. +Je souhaiterai commencer cette présentation en remerciant les membres de mon +jury, ici présents, d'avoir accepté notre invitation à participer à cette +soutenance. + +Entrons, si vous le voulez bien, dans le vif du sujet. + +\input{synbiotic.presentation} +Comme vous le savez peut-être, ma thèse a été en partie financée sur le +projet ANR blanc SYNBIOTIC, et mon sujet de thèse est directement issue des +problématiques abordées par ce projet. SYNBIOTIC s'est étalé sur 3 ans, de +2011 à 2014, et a mobilisé une quinzaine de chercheurs, principalement en +informatique. Comme l'annonce la présentation officielle du projet: +\begin{citation} + La motivation finale est de permettre l'exploitation des propriétés + collectives d'une population bactérienne pour créer des biosystèmes + artificiels répondant à divers besoins dans le domaine de la santé, des + nanotechnologies, de l'énergie et de la chimie. +\end{citation} +Il s'agit ici de suivre le principe même de la biologie synthétique: monter +en abstraction et oublier les détails de fonctionnement, car l'objectif est +de \emph{spécifier} un comportement de la population. Par exemple, omettre +le détail du fonctionnement d'un réseau de régulation génétique au profit de +l'ingénierie directe des formes. + +\action{montrer la flèche vers le haut sur le schéma} + +L'approche empruntée est issue d'un domaine ayant fait ses preuves en ce qui +concerne la gestion de la complexité: l'informatique. L'idée est d'utiliser +le principe de la \emph{compilation}, qui permet de transformer un programme, +décrivant un comportement abstrait, vers une série de chiffres binaires exécutés +par le processeur. + +Nous utilisons ce procédé pour constituer le chemin du retour, de la +spécification d'une forme à l'échelle de la population vers le réseau de +régulation génétique de chaque individu. Le projet décrit ainsi une tour de +langages (informatique) permettant de compiler successivement la spécification +des formes vers un langage de programmation spatiale (L1), de L1 vers un langage +de programmation orienté entitée (L2) et enfin de L2 vers un langage orienté +réseau de régulation génétique (L3). + +Au cours de mon travail de thèse, je suis intervenu à différents étages de cette +tour: dans la deuxième partie de cette présentation nous parlerons de l'activité +dans MGS, le langage L1 et dans la troisième nous parlerons de OTB un simulateur +dont le langage d'entrée est L2. + +\input{problem.statement} +Comme je viens de vous le décrire, il suffit de trouver un compilateur pour +passer d'un étage à l'étage inférieur de cette tour. Malheureusement, ça n'est +pas aussi simple. + +Je souhaiterai attirer votre attention sur deux points essentiels qui me +permettront de poser la problématique. Le premier porte sur la sémantique. + +(en pointant le schéma compilation) +I. En informatique. + +Soit une fonction f, dans un certain langage de programmation bien connu, +disons C. Après compilation, nous obtenons cette suite d'instructions en +assembleur intel x86. Ces instructions peuvent être exécutées par le processeur +de votre ordinateur et le comportement que vous pouvez observer correspond bien, +par construction, à la fonction f. + +Imaginons que vous n'aviez pas connaissance de cette fonction, et que vous +disposiez uniquement des instructions en assembleur. Avec beaucoup de travail, +vous pourriez deviner quel était la fonction f. Cette activité a d'ailleurs un +nom, c'est le reverse-engineering. + +C'est mon premier point: la fonction f \emph{n'existe pas} en tant qu'objet +de première classe dans les instructions en assembleur. Cette fonction +disparaît à la compilation. Le vocabulaire des deux niveaux est distinct, mais +néammoins suffisamment proche pour pouvoir les lier (c'est bien là le rôle du +compilateur). + +II. En biologie. + +La difficulté est d'un cran supérieur: cette fonction f est issue d'un +support partiellement connu, pas des effets d'émergence. Les interactions au +niveau local sont complexes (1+1=3) et dûrement prédictibles. Notre but est +d'ingénierer l'émergence (WP1). + +Problématique : le niveau local et le niveau global décrivent deux mondes, deux +univers différents que nous chercherons à lier. + +Comment parler en même temps du niveau local et du niveau global dans une seule +et même description ? Nous apportons des pistes de réflexion dans la première +partie de cette présentation. + +\input{plan} +C'est le plan + +\mkPart{Multi-niveau} +\input{multimodel} +Nous l'avons vu en introduction, notre problématique est de décrire le lien +qu'il existe entre deux mondes: le niveau global et le niveau local. Ce sont +potentiellement deux modèles décrivant le \emph{même système} de deux points +de vues différents. + +Nous nous sommes d'abord interessés à ce que l'on trouve dans la littérature en +ce qui concerne la modélisation multimodèle. Voici trois exemples emblématiques +de trois manières d'envisager la question: + +(figure) + +1) Couplage de modèles +Nous prenons l'exemple d'un multimodèle d'une cellule entière (image de la +publication). 28 modèles tirés d'études antérieures sont rassemblés et mettent à +jour un ensemble de 16 variables propres à la cellule. Ces modèles sont exécutés +en isolation et en parallèle. Une partie du travail de cette équipe de recherche +a été d'arbitrer la mise à jour des valeurs de chacune des variables de la +cellule. En effet ces variables sont lues et écrites par chacun des modèles. +Elles constituent de plus le lien entre chacun de ces modèles. + +Cette construction est adhoc car elle dépend explicitement des spécificités de +chacun des modèles. Elle nécessite d'ajouter des programmes pour effectuer +la traduction en entrée et en sortie de chaque modèle importé. C'est un +fonctionnement en boîte noire où on ne connaît que les entrées et sorties des +modèles. + +2) Transformation de modèles +Nous prenons l'exemple de l'ingénierie des modèles en informatique, dont le but +est de travailler \emph{directement} sur les modèles, et de les faire évoluer au +moyen de transformations de modèles. Par exemple, il est possible de spécifier +l'ajout d'une fonctionnalité à un programme en conservant certaines propriétés, +directement au niveau du modèle. Un exemple emblématique de l'ingénierie des +modèles est le langage UML (pour Unified Model Language). Dans ce langage de +spécification graphique, un modèle est constitué d'un ensemble diagrammes +décrivant son fonctionnement. Cette description opère à un niveau plus abstrait +que celui de l'implémentation. + +3) Complexification +Nous prenons cette fois sur la méthodologie MENS (Memory Evolutive Neural +Systems) dont une des applications proposée porte sur la modélisation des +interactions neuronales. + + + +\input{formalism.model.system} +\input{experimental.model} +\input{predator.prey} +\input{model.category} +%\input{representing.space} +%\input{representing.time} +%\input{representing.space.time.interaction} +\mkPart{Activité spatiale} +\input{mgs.topological.collections} +\input{mgs.topological.transformations} +\input{simple.ff.example} +\input{activity.in.mgs} +\input{where.is.activity} +\input{wave.algorithm} +\input{example.forest.fire} +\input{example.dla} +\mkPart{OTB} +\input{otb.general} +\input{otb.architecture} +\input{sbgp} +\input{ecoli.model} +\input{chemical.model} +\input{decision.model} +\input{otb.sectorisation} +\input{otb.stable.pop} +\input{otb.ppm} +\input{closing} +\end{document} diff --git a/introduction.tex b/introduction.tex new file mode 100644 index 0000000..c34de91 --- /dev/null +++ b/introduction.tex @@ -0,0 +1,140 @@ +\begin{frame}{Le projet ANR SynBioTIC (2011—2015)} + \framesubtitle{Biologie synthétique} + + \begin{columns} + \column{.6\textwidth} + \begin{itemize} + % Abstraction, Découplage, Composition (ingénierie) + \item \structure{Biologie synthétique} + \begin{itemize} + \item Génie génétique \\ + Production d'insuline par \structure{une} bactérie\\ + \structure{[Riggs et Itakura, 1978]} + \item \structure{Abstraction}, standardisation, découplage + \end{itemize} + \medskip + \item Projet exploratoire: + « permettre l'exploitation des \structure{propriétés collectives} d'une + population bactérienne pour créer des biosystèmes artificiels.»\\ + \medskip + \end{itemize} + + \column{.3\textwidth} + \centering + \tourdelangages[white][white][white] + \tikz[overlay,abs/.style={ultra thick,-Stealth,thick,transform canvas={xshift=2mm}}] + \draw[abs] (genotype.east) to node[anchor=base,rotate=-90,yshift=1mm] {abstraction} (population.east); + \end{columns} +\end{frame} + +%\newsavebox{\haskellfib} +%\begin{lrbox}{\haskellfib} +%\end{lrbox} +%\usebox{\haskellfib} + +\begin{frame}[fragile]{Problématique} + \framesubtitle{compilation et multi-niveau} + + \centering + \begin{tikzpicture}[% + node distance=15mm, + wp/.style={draw},% + compilation/.style={compilcol,line width=5mm,-Triangle Cap}, + emergence/.style={alert,thick,-Stealth,decorate,decoration={snake, + amplitude=.5mm,segment length=2mm,post length=2mm}}] + \uncover<2-> { + \node[wp] (ibn) {% + \begin{tikzpicture} + \clip (0cm,0cm) rectangle (3cm,2cm); + \node[anchor=center,yshift=-9mm] at (15mm,1cm) {% + \includegraphics[width=3cm]{vector/binary}}; + \end{tikzpicture} + }; + } + \begin{onlyenv}<2-> + \node[wp,above=of ibn] (ihn) {% + \begin{tikzpicture} + \clip (0cm,0cm) rectangle (3cm,2cm); + \node[anchor=center,text width=3cm] at (15mm,1cm) {% + \small + \lstset{style=haskell} + \begin{lstlisting} +fib 0 = 0 +fib 1 = 1 +fib n = fib (n-1) + + fib (n-2) + \end{lstlisting} + }; + \node[anchor=center,minimum width=3cm, minimum height=2cm,fill=white, + opacity=0.9] at (15mm,1cm){\fontsize{55pt}{0}$f$}; + \end{tikzpicture}% + }; + \draw[compilation] (ihn) to node[auto] {Compilation} (ibn); + \end{onlyenv} + \node[wp,right=3cm of ibn,label=below:{\small Niveau local}] (bbn) {% + \begin{tikzpicture} + \clip (0cm,0cm) rectangle (3cm,2cm); + \node[anchor=center,yshift=9mm] at (15mm,1cm) {% + \includegraphics[height=37mm]{vector/ecolihelix}}; + \end{tikzpicture} + }; + \node[wp,above=of bbn,label=above:{\small Niveau global}] (bhn) {% + \begin{tikzpicture} + \clip (0cm,0cm) rectangle (3cm,2cm); + \node[anchor=center] at (15mm,1cm) {% + \includegraphics[width=3cm]{vector/petri}}; + \end{tikzpicture} + }; + \draw[emergence,transform canvas={xshift=-1cm}] (bbn) to (bhn);% + \draw[emergence,transform canvas={xshift=1cm}] (bbn) to (bhn);% + \visible<1-2>{ + \draw[emergence] (bbn) to node[black,fill=white,opacity=.8] + {émergence} (bhn); + }% + \visible<3>{ + \draw[compilation] (bhn) to (bbn); + } + \uncover<2->{ + \node[right=4mm of ihn,text width=2cm, align=center] + {\small Haut niveau\\ de description}; + \node[right=4mm of ibn,text width=2cm, align=center] + {\small Bas niveau\\ de description}; + } + \end{tikzpicture} + +\end{frame} + +\begin{frame}%[label=this one] + \frametitle{Le projet ANR \textsc{SynBioTIC} (2011—2015)} + + \begin{columns} + \column{.8\textwidth} + \begin{itemize} + \item Découpe en work-package + \begin{itemize} + \item \textcolor{black!40}{WP1: Études des formes, fourni des exemples} + \item \structure<2>{WP2: Programmation spatiale (L1)} + \item \structure<2>{WP3: Programmation orienté entité (L2)} + \item WP4: Réseau de régulation génétique (L3) + \item \textcolor{black!40}{WP5: Calculabilité} + \item \textcolor{black!40}{WP6: Sûreté, sécurité} + \end{itemize} + \end{itemize} + + \column{.2\textwidth} + \centering + \tourdelangages[white][white][white][compilcol] + \begin{tikzpicture}[overlay, + wp/.style={draw,text width=2cm,font=\footnotesize,align=center, + minimum width=22mm, minimum height=12mm}, + ] + %\path (population) to node[auto,xshift=-2mm,swap] {Compilation} (phenotype); + %\path (phenotype) to node[auto,xshift=-2mm,swap] {Compilation} (genotype); + \uncover<2>{ + \node[structure,left=1mm of population] {L1}; + \node[structure,left=1mm of phenotype] {L2}; + \node[left=1mm of genotype] {L3}; + } + \end{tikzpicture} + \end{columns} +\end{frame} diff --git a/main.tex b/main.tex new file mode 100644 index 0000000..3fcbcd3 --- /dev/null +++ b/main.tex @@ -0,0 +1,317 @@ +\documentclass[10pt,table]{beamer} + +\usepackage{pgfpages} +%\includeonlyframes{this one} +%[,label=this one] + +\usepackage{polyglossia} +\setmainlanguage{french} +\setotherlanguage{english} + +% Do this BEFORE unicode-math +\usepackage{amsfonts} +\usepackage{amsmath} +\usepackage{mathrsfs} +\usepackage{amssymb} +\usepackage{siunitx} + +\usefonttheme{professionalfonts} +\usepackage{unicode-math} +% Do this AFTER any math font package (see fontspec doc) +\usepackage{fontspec} +\defaultfontfeatures{Scale=MatchLowercase,Mapping=tex-text} +\setromanfont{Fontin}[ + Path = fonts/ , + Extension = .ttf , + UprightFont = *-Regular , + BoldFont = *-Bold , + ItalicFont = *-Italic , + SmallCapsFont = *-SmallCaps ] +\setsansfont{Fontin-Sans}[ + Path = fonts/ , + Extension = .otf , + UprightFont = *-Regular , + BoldFont = *-Bold , + ItalicFont = *-Italic , + BoldItalicFont = *-BoldItalic , + SmallCapsFont = *-SmallCaps ] +%\setmonofont[Scale=0.8]{Hack} +\setmonofont{FantasqueSansMono}[ + Path = fonts/ , + Extension = .ttf , + UprightFont = *-Regular , + BoldFont = *-Bold , + ItalicFont = *-Italic , + BoldItalicFont = *-BoldItalic ] + +\setmathfont[mathbf=sym] {Asana-Math}[ + Path = fonts/ , + Extension = .otf ] + +\usepackage{xspace} +\usepackage{xltxtra} +\usepackage{tikz} +\usepackage{tabularx} +\usepackage{pdfpages} +%\usetikzlibrary{shadows} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{backgrounds} +\usetikzlibrary{bending} +\usetikzlibrary{calc} +\usetikzlibrary{decorations.pathmorphing} +\usetikzlibrary{decorations.text} +\usetikzlibrary{fit} +\usetikzlibrary{positioning} +\usetikzlibrary{shapes} +\usetikzlibrary{spy} + + +\usepackage{listings} +\lstdefinestyle{haskell}{% +language=Haskell} + +\usepackage{xparse} % LaTeX3 command declaration + +\usetheme{Pittsburgh} +\usecolortheme{orchid} + +%Titre + sous-titre c'est mieux. +\title{Modélisation multi-niveau} +\subtitle{Un cadre théorique pour l'intégration des niveaux d'organisation dans +les modèles. Applications à l'activité spatiale et à la simulation de grandes +populations de bactéries.} + +\author{Martin \textsc{Potier}} +\institute[UPE]{Université Paris-Est} +\date{6 juillet 2017} + +\tikzstyle{every picture}+=[remember picture] +\tikzset{ + diagonal fill/.style 2 args={fill=#2, path picture={ + \fill[#1, sharp corners] (path picture bounding box.south west) -| + (path picture bounding box.north east) -- cycle;}}, + reversed diagonal fill/.style 2 args={fill=#2, path picture={ + \fill[#1, sharp corners] (path picture bounding box.north west) |- + (path picture bounding box.south east) -- cycle;}} +} +\setbeamersize{text margin left=1mm,text margin right=1mm} +%\setbeamercovered{dynamic} +\beamertemplatenavigationsymbolsempty +\setbeamertemplate{section in toc}[sections numbered] +\setbeamertemplate{itemize items}[default] +\setbeamertemplate{enumerate items}[default] +\setbeamertemplate{section in toc shaded}[default][20] +%\setbeamercovered{transparent=20} +%\setbeamercolor{structure}{fg=blue} +\setbeamertemplate{footline}{ + \begin{tikzpicture}[overlay] + \node [anchor=center,white,fill=structure,circle, + minimum size=7mm,text height=3.5mm,text depth=1.5mm,inner sep=1pt] + at ($(current page) + (64mm,-49mm) + (-5mm,6mm)$) + %{\insertframenumber~/~\inserttotalframenumber} + {\large\insertframenumber}; + \end{tikzpicture} +} +\setbeamertemplate{frametitle}{ + \color{structure} + %\bfseries + \insertframetitle + \par + \vskip-12pt + \pgfmathsetmacro{\progress}{\insertframenumber/\inserttotalframenumber} + \pgfmathsetmacro{\progress}{126*\progress} + \tikz[overlay]{\draw[structure,thick,gridded] + (0,0) -- (\progress mm,0);}\par +} + +% Solarized set +\definecolor{base03}{HTML}{002B36} +\definecolor{base02}{HTML}{073642} +\definecolor{base01}{HTML}{586E75} +\definecolor{base00}{HTML}{657B83} +\definecolor{base0}{HTML}{839496} +\definecolor{base1}{HTML}{93A1A1} +\definecolor{base2}{HTML}{EEE8D5} +\definecolor{base3}{HTML}{FDF6E3} +\definecolor{orange}{HTML}{CB4B16} +\definecolor{red}{HTML}{DC322F} +\definecolor{green}{HTML}{859900} +\definecolor{yellow}{HTML}{B58900} +\definecolor{magenta}{HTML}{D33682} +\definecolor{violet}{HTML}{6C71C4} +\definecolor{blue}{HTML}{268BD2} +\definecolor{cyan}{HTML}{2AA198} + +% Partie multi +\colorlet{compilcol}{black!80} +% Partie activité +\colorlet{active}{red} +\colorlet{ashes}{gray!60!black} +\colorlet{fire}{orange!70!red} +\colorlet{forest}{green} +\colorlet{frontier}{green} +\colorlet{quiescent}{blue} +% Partie OTB +\colorlet{c} {blue!60} +\colorlet{ocaml} {green!60} +\colorlet{opencl} {red!60} +\colorlet{sbgp} {magenta!60} + +\newcount\currentimg % used in animations + +%Commands and aliases +\newcommand{\mgs}{MGS\xspace} +\newcommand{\voisinde}[1]{% + \usebeamercolor{structure}% + \tikz[baseline,every node/.style={circle,anchor=base,inner sep=.5mm}]{% + \draw[draw=none] node (#1) {,};% + \uncover<2->{\node[draw,fg] (c#1) {,};}% +}} +\newcommand{\mkPart}[1]{\section{#1}\input{plan}} +\newcommand{\model}{\ensuremath{\mathfrak{M}}} +\newcommand{\bhvm}{\ensuremath{\mathfrak{B}_{\mathfrak{M}}}} +\newcommand{\ensm}[1][]{\ensuremath{E_{\mathfrak{M}_{#1}}}} +\newcommand{\mref}{\ensuremath{E_{\text{Réf}}}} +\newcommand{\sigm}{\ensuremath{\Sigma_{\mathfrak{M}}}} +\newcommand{\timm}{\ensuremath{\mathbb{T}_{\mathfrak{M}}}} +\newcommand{\phim}{\ensuremath{\Phi_{\mathfrak{M}}}} +\newcommand{\chsm}{\ensuremath{\mathbb{S}_{\mathfrak{M}}}} +\newcommand{\chvm}{\ensuremath{\mathbb{V}_{\mathfrak{M}}}} +\newcommand{\funm}{\ensuremath{f_{\mathfrak{M}}}} +\newcommand{\mesm}{\ensuremath{\mathbb{X}_{\mathfrak{M}}}} +\newcommand{\prom}{\ensuremath{\mathbb{P}_{\mathfrak{M}}}} +\newcommand{\trim}{\ensuremath{\mathcal{A}_{\mathfrak{M}}}} +\newcommand{\orr}[1]{\ensuremath{\vec{#1}}} +\newcommand{\mkCitation}[1]{{\Tiny\textcolor{gray}{{#1}}\par}} +\newcommand{\tocshowonlycurrentsection}{} +%\newcommand{\tourdelangages}[4][white][white][white][white]{ +\DeclareDocumentCommand{\tourdelangages}{ O{transparent} O{transparent} O{transparent} O{transparent} }{ + \begin{tikzpicture}[overlay,% + every node/.style={inner sep=1mm}, + wp/.style={draw,text width=2cm,font=\footnotesize,align=center, + minimum width=22mm, minimum height=12mm}, + compilation/.style={#4,line width=5mm,-Triangle Cap}] + \node[wp,anchor=east,xshift=-8mm] (phenotype) at (current page.east) { + \begin{tikzpicture} + \clip (0cm,0cm) rectangle (2cm,1cm); + \node[anchor=center] at (1cm,0.5cm) {\includegraphics[height=1cm]{vector/badecoli}}; + \end{tikzpicture} + }; + \node[wp,below=of phenotype] (genotype) { + \begin{tikzpicture} + \clip (0cm,0cm) rectangle (2cm,1cm); + \node[anchor=center] at (2mm,0.5cm) {\includegraphics[height=7mm,angle=47]{vector/helix}}; + \end{tikzpicture} + }; + \node[wp,above=of phenotype] (population) { + \begin{tikzpicture} + \clip (0cm,0cm) rectangle (2cm,1cm); + \node[anchor=center] at (1cm,0.5cm) {\includegraphics[height=2cm]{vector/petri}}; + \end{tikzpicture} + }; + \draw[compilation] (population) to (phenotype); + \draw[compilation] (phenotype) to (genotype); + \begin{scope}[on background layer] + \node[fit=(genotype) (phenotype) (population),rounded corners, + fill,#1,inner sep=3mm] {}; + \node[fit=(population) (phenotype),rounded corners, + fill,#2,inner sep=3mm] {}; + \node[fit=(phenotype),rounded corners, + fill,#3,inner sep=3mm] {}; + \end{scope} + \end{tikzpicture} +} +\newcommand{\drawfigure}{\tourdelangages{}} +\DeclareDocumentCommand{\moteurs}{ O{transparent} O{transparent} O{transparent} }{ + \begin{tikzpicture}[overlay, + node distance=8mm, + wp/.style={draw}, + causation/.style={black!80,-{Triangle[width=8mm,length=5mm]},shorten >= 1mm, + shorten <=1mm,line width=5mm}% + ] + \coordinate[xshift=-15mm] (centre) at (current page.east); + \node[wp,above=of centre] (moteur-physique) {% + \begin{tikzpicture}[scale=0.7] + \clip (0cm,0cm) rectangle (3cm,2cm); + \node[anchor=center] at (15mm,1cm) {% + \includegraphics[height=20mm]{vector/collision}}; + \end{tikzpicture} + }; + \node[wp,below=of centre] (moteur-chimique) {% + \begin{tikzpicture}[scale=0.7] + \clip (0cm,0cm) rectangle (3cm,2cm); + \node[anchor=center] at (15mm,1cm) {% + \includegraphics[height=14mm]{vector/chimie}}; + \end{tikzpicture} + }; + \draw[causation,transform canvas={xshift= 6mm}] (moteur-chimique) to (moteur-physique); + \draw[causation,transform canvas={xshift=-6mm}] (moteur-physique) to (moteur-chimique); + \begin{scope}[on background layer] + \node[fit=(moteur-chimique),rounded corners, + fill,#1,inner sep=3mm] {}; + \node[fit=(moteur-physique),rounded corners, + fill,#2,inner sep=3mm] {}; + \node[rounded corners,fill,#3,inner sep=3mm,minimum height=2cm, minimum width=3cm] + at (barycentric cs:moteur-chimique=1,moteur-physique=1) {}; + \end{scope} + \end{tikzpicture} +} + +\makeatletter +\patchcmd{\beamer@sectionintoc} +{\vfill} +{\vskip5\itemsep} +{} +{} +\makeatother + + + +\begin{document} +%\input{test} +% +\input{title} +\input{introduction} +\input{plan} + +\renewcommand{\tocshowonlycurrentsection}{currentsection} +\renewcommand{\drawfigure}{\tourdelangages[structure!30][transparent][transparent]} +\mkPart{Vers la modélisation multi-niveau} +\input{multimodel} +\input{formalism.model.system} +\input{experimental.model} +\input{predator.prey} +\input{model.category} +\input{part1.conclude} + +\renewcommand{\drawfigure}{\tourdelangages[transparent][structure!30][transparent]} +\mkPart{Topologie de l'activité} +\input{activity.motivation} +\input{mgs.topological.collections} +\input{mgs.topological.transformations} +\input{simple.ff.example} +\input{where.is.activity} +\input{example.forest.fire} +\input{example.dla} +\input{part2.conclude} + +\renewcommand{\drawfigure}{\tourdelangages[transparent][transparent][structure!30]} +\mkPart{Simulateur de colonie de bactéries} +\input{otb.general} +\input{otb.organisation} +\input{chemical.model} +\input{ecoli.model} +\input{decision.model} +\input{otb.sectorisation} +\input{otb.stable.pop} +\input{otb.architecture} +\input{part3.conclude} + +\input{closing} + +\end{document} +%\input{bilan} +%\input{sbgp} +%\input{otb.ppm} +%\input{wave.algorithm} +%\input{activity.in.mgs} diff --git a/mgs.topological.collections.tex b/mgs.topological.collections.tex new file mode 100644 index 0000000..4afb585 --- /dev/null +++ b/mgs.topological.collections.tex @@ -0,0 +1,31 @@ +\begin{frame} +\frametitle{Formalisme \mgs} +\framesubtitle{Collections topologiques} + \begin{columns}[c] + \column{.5\textwidth} + \begin{itemize} + \item Une collection de \structure{cellules topologiques} + \begin{itemize} + \item + \alert<1>{0-cellule}, + \alert<2>{1-cellule}, + \alert<3>{2-cellule}, + \alert<4>{3-cellule}, etc. + \end{itemize} + + \medskip + \item Liées par une \structure{relation d'incidence} + \begin{itemize} + \item $\text{face}(\alert<6>{s_1}) = $% + \tikz[baseline=-0.5ex] \node (e) {$\{e_0,e_1,e_2,e_3,e_4,e_5\}$}; + \end{itemize} + + \medskip + \item Les cellules sont \structure{étiquetées} avec des valeurs + arbitraires + \end{itemize} + + \column{.5\textwidth} + \input{vector/coll-topo-papillon.tikz} + \end{columns} +\end{frame} diff --git a/mgs.topological.transformations.tex b/mgs.topological.transformations.tex new file mode 100644 index 0000000..d7da266 --- /dev/null +++ b/mgs.topological.transformations.tex @@ -0,0 +1,30 @@ +\defverbatim[colored]\transformation{% +\small +\begin{semiverbatim} +trans evol = \{ + \structure{pattern_1} => \alert{expression_1} + ... + pattern_n => expression_n +\} +\end{semiverbatim}} + +\begin{frame}[fragile] +\frametitle{Formalisme \mgs} +\framesubtitle{Transformations topologiques} + +\only<1>{ +\begin{itemize} +\item Fonctions définies \structure{par cas} sur les collections\\ + {\small chaque cas détermine une \structure{sous-collection}} +\item Relation de réécriture: \structure{réécriture topologique} +\end{itemize} +} + +\tikz[overlay] \node[text width=4cm] + at (current page.center) {\transformation}; + + \begin{center} + \input{vector/transformation-papillon.tikz} + \end{center} +\end{frame} + diff --git a/model.category.tex b/model.category.tex new file mode 100644 index 0000000..45fcf89 --- /dev/null +++ b/model.category.tex @@ -0,0 +1,79 @@ +\pgfdeclarelayer{background} +\pgfdeclarelayer{foreground} +\pgfsetlayers{background,main,foreground} + +\begin{frame}[label=this one] + \frametitle{Catégorie des modèles} + \tikz[overlay] \node[yshift=-2cm] at (current page.north){ + $ \mathbf{Abs}_S = (\alert{\mref} \downarrow \mathbf{Set})^{\mathbf{op}} $ + }; + + \centering + \begin{tikzpicture}[overlay,% + node distance=13mm and 20mm, + model/.style={draw,rectangle,on grid=true,fill=white}, + function/.style={-Stealth,thick}, + abstraction/.style={function,very thick} + ] + \alt<1-4>{ + \node[model,left=of current page.center] (m1) {$\ensm[1]$}; + \node[model,above=of current page.center] (m2) {$\ensm[2]$}; + \node[model,below=of current page.center] (m3) {$\ensm[3]$}; + \node[model,right=of current page.center] (m4) {$\ensm[4]$}; + }{ + \node[model,circle,left=of current page.center] (m1) {$\model_1$}; + \node[model,circle,above=of current page.center] (m2) {$\model_2$}; + \node[model,circle,below=of current page.center] (m3) {$\model_3$}; + \node[model,circle,right=of current page.center] (m4) {$\model_4$}; + \draw[abstraction] (m1) to (m2); + \draw[abstraction] (m1) to (m3); + \draw[abstraction] (m2) to (m4); + \draw[abstraction] (m3) to (m4); + } + \uncover<3-4>{ + \draw[function] (m2) to (m1); + } + \uncover<4>{ + \draw[function] (m3) to (m1); + \draw[function] (m4) to (m2); + \draw[function] (m4) to (m3); + } + + \visible<1-4>{ + \node[draw, very thick, rounded corners=2pt,inner sep=0pt,% + minimum width=.7\textwidth,minimum height=.65\textheight,yshift=-5mm] + (set) at (current page.center) {}; + \node[below right] (setl) at (set.north west) {$\mathbf{Set}$}; + } + \visible<2-4>{ + \node[alert,draw,xshift=-12mm,yshift=6mm] (ms) at (set.south) {$\mref$}; + \draw[function] (ms) to (m1); + \draw[function] (ms) to (m2); + \draw[function] (ms) to (m3); + \draw[function,bend right] (ms) to (m4); + } + \begin{pgfonlayer}{background} + \visible<5>{ + \node[alert,draw,circle,xshift=-12mm,yshift=6mm] (ms) at (set.south) {$\model_{\texttt{Réf}}$}; + \draw[black!50,abstraction] (m1) to (ms); + \draw[black!50,abstraction] (m2) to (ms); + \draw[black!50,abstraction] (m3) to (ms); + \draw[black!50,abstraction,bend left] (m4) to (ms); + } + \end{pgfonlayer} + + \visible<4>{ + \node[draw, dashed, very thick, rounded corners=2pt,inner sep=0pt,% + minimum width=.5\textwidth,minimum height=.46\textheight] + (abs) at (current page.center) {}; + \node[below right] (absl) at (abs.north west) {$\mathbf{Abs}_S$}; + } + \visible<5>{ + \node[draw, very thick, rounded corners=2pt,inner sep=0pt,% + minimum width=.7\textwidth,minimum height=.65\textheight,yshift=-5mm] + (abs) at (current page.center) {}; + \node[below right] (absl) at (abs.north west) {$\mathbf{Abs}_S$}; + } + + \end{tikzpicture} +\end{frame} diff --git a/multimodel.tex b/multimodel.tex new file mode 100644 index 0000000..155d4b3 --- /dev/null +++ b/multimodel.tex @@ -0,0 +1,66 @@ +\begin{frame}%[label=this one] + \frametitle{Mettre en relation des «modèles»} + %\framesubtitle{dans la littérature} + + \begin{columns} + \column{.5\textwidth} + \begin{itemize} + \item \structure{Couplage} + \begin{itemize} + \item \alert<1>{\emph{Modèle} de la croissance des villes} + \item \alert<2>{\emph{Modèle} intégratif d'une cellule} + \end{itemize} + \medskip + \item \structure{Transformation} + \begin{itemize} + \item \alert<3>{Transformation de \emph{modèles} UML} + \item \alert<4>{Raffinement de \emph{modèles}} + \end{itemize} + \medskip + \item \structure{Complexification} + \begin{itemize} + \item \alert<5>{Memory Evolutive (Neural) System} + \item \alert<5>{Cellular Non-linear Network} + \end{itemize} + \end{itemize} + \column{.5\textwidth}\centering + \only<1>{\includegraphics[width=\textwidth]{raster/simpop3}\\ + \mkCitation{T. Louail “Comparer les morphogénèses urbaines en + Europe et aux États-Unis par la simulation à base d'agents -- Approches + multi-niveaux et environnements de simulation spatiale”, Thèse, 2010} + } + \only<2>{\includegraphics[height=4cm]{raster/whole-cell-models}\\ + \mkCitation{J. R. Karr et al. “A whole-cell computational + model predicts phenotype from genotype”, Nature, 2012} + } + \only<3>{% + \includegraphics[height=21mm]{raster/transformation-1}\\ + \includegraphics[height=21mm]{raster/transformation-2}\\ + \mkCitation{A. Christoph et M. M. Müller “GREAT: UML + transformation tool for porting middleware applications”, Modeling + Languages and Applications: 6th International Conference, San Francisco, + CA, USA, 2003} + } + \only<4>{ + \includegraphics[height=4cm]{raster/refinement-av} + \includegraphics[height=4cm]{raster/refinement-ap}\\ + \mkCitation{D.-E. Gratie “Refinement of biomodels using Petri + nets”, TUCS dissertation, 2016} + } + \only<5->{% + \includegraphics[width=.9\textwidth,page=5]{vector/mens-neurons}\\[1em] + \includegraphics[width=.45\textwidth,page=1]{vector/cnn-synapses}\hfill + \includegraphics[width=.45\textwidth,page=2]{vector/cnn-synapses}\\ + \mkCitation{K. Mainzer et L. O. Chua: “Local activity principle”, World Scientific, 2013} + } + \end{columns} + + \bigskip\centering + \uncover<6>{ + Cadre \structure{formel unifié},\\ + «\structure{sémantique}» du système,\\ + \structure{abstraction} et \structure{multi-niveau} + } + % Multi-niveau = aller au delà de l'abstraction + +\end{frame} diff --git a/otb.architecture.tex b/otb.architecture.tex new file mode 100644 index 0000000..ed1dfb8 --- /dev/null +++ b/otb.architecture.tex @@ -0,0 +1,49 @@ +\begin{frame}%[label=this one] + \frametitle{Architecture logicielle} + \begin{columns} + \column{.7\textwidth} + \begin{itemize} + \item[{\tikz[c]{\node[fill,rectangle]{};}}] \num{2300} lignes de C + \begin{itemize} + \item Programmation API, bas niveau + \item Interface avec OpenCL/OpenGL + \end{itemize} + \item[{\tikz[ocaml]{\node[fill,rectangle]{};}}] \num{2000} lignes de OCaml + réparties en 10 modules + \begin{itemize} + \item Programmation API, haut niveau + \item Processus maître, orchestration de simulation + \item Gestion des zones dynamiques + \end{itemize} + \item[{\tikz[opencl]{\node[fill,rectangle]{};}}] \num{700} lignes de kernel OpenCL + \smallskip + \item[{\tikz[sbgp]{\node[fill,rectangle]{};}}] SBGP + \end{itemize} + + \begin{center} + \small + \begin{tikzpicture}[node distance=4mm and 1.3333cm, + box/.style={on grid,inner sep=0pt,rectangle,draw, + minimum height=4mm,font=\small}, + full/.style={minimum width=4cm}, + half/.style={minimum width=2cm}, + third/.style={minimum width=1.3333cm}, + ] + \node[fill=black,draw=black,white,half,box] (cpu) {CPU}; + \node[fill=black,draw=black,white,half,box,right=2cm of cpu] (gpu) {GPU}; + \node[fill=c,third,box,above=of cpu.west,right] (os) {OS}; + \node[fill=opencl,third,box,right=of os] (opencl) {OpenCL}; + \node[fill=c,third,box,right=of opencl] (opengl) {OpenGL}; + \node[fill=c,full,box,above=of os.west,right] (api1) {API OpenCL/OpenGL}; + \node[fill=ocaml,full,box,above=of api1] (api2) {API Simulateur}; + \node[diagonal fill={ocaml}{sbgp},full,box,above=of api2] (spec) {Spécification simulation}; + \node[full,box,above=of spec,dashed] (ihm) {IHM}; + + \draw[white] (cpu.north east) -- (cpu.south east); + \end{tikzpicture} + \end{center} + + \column{.2\textwidth} + \moteurs + \end{columns} +\end{frame} diff --git a/otb.general.tex b/otb.general.tex new file mode 100644 index 0000000..29abbbc --- /dev/null +++ b/otb.general.tex @@ -0,0 +1,55 @@ +\begin{frame}%[label=this one] + \frametitle{OTB, un simulateur de bactéries} + \begin{columns} + \column{.7\textwidth} + \begin{itemize} + \item \structure{Motivations} + \begin{itemize} + \item \structure{Assister} le travail du programmeur (L1, L2) + \item \structure{Observer} la morphogenèse à partir de la spécification + d'un comportement local + \end{itemize} + \medskip + \item \structure{Objectifs} + \begin{itemize} + \item Simulation raisonnable de grandes populations\\($10^5$ individus) + \item Simulation réaliste + \end{itemize} + \medskip + \item \structure{Utilisation du parallélisme} + \begin{itemize} + \item Nécessaire pour accélérer les calculs + \item Largement disponible (Multi-cœur, GPU) + \end{itemize} + \end{itemize} + + \column{.2\textwidth} + \tourdelangages + \begin{tikzpicture}[overlay, + big red/.style={line width=1mm,line cap=round,red}] + \draw[big red] (genotype.south west) to (genotype.north east); + \draw[big red] (genotype.north west) to (genotype.south east); + \end{tikzpicture} + \end{columns} +\end{frame} + +% Il nous faut un simulateur pour: +% \begin{itemize} +% \item Observer de l'expression d'un RRG au niveau de la population +% \item Tester des hypothèses et guider le design de L1 et L2 +% \item Palier le manque de composants biologique dans le projet +% \end{itemize} +% +% \medskip Propriétés souhaitables: +% \begin{itemize} +% \item Simulation raisonnable de grandes populations ($10^5$ individus) +% \item Simulation réaliste +% \item Simulateur générique et modulaire pour adaptation facile à d'autres +% problématiques +% \end{itemize} +% +% \medskip Utilisation du parallélisme car +% \begin{itemize} +% \item nécessaire pour accélérer les calculs +% \item largement disponible (Multi-cœur, GPU) +% \end{itemize} diff --git a/otb.organisation.tex b/otb.organisation.tex new file mode 100644 index 0000000..a9a2405 --- /dev/null +++ b/otb.organisation.tex @@ -0,0 +1,21 @@ +\begin{frame}%[label=this one] + \frametitle{Organisation} + + \begin{columns} + \column{.7\textwidth} + \begin{itemize} + \item \structure{Moteur chimique}\\ + {\small comportement du support sur lequel évoluent les bactéries} + \bigskip + \item \structure{Moteur physique}\\ + {\small comportement mécanique des bactéries} + \bigskip + \item \structure{Moteur comportemental}\\ + {\small couplage entre morphogènes et bactéries} + \end{itemize} + + \column{.2\textwidth} + \moteurs + \end{columns} + +\end{frame} diff --git a/otb.ppm.tex b/otb.ppm.tex new file mode 100644 index 0000000..acf8e5c --- /dev/null +++ b/otb.ppm.tex @@ -0,0 +1,317 @@ +\begin{frame}{Propagation Paralèlle \emph{à la} Margolus} + {Le problème de la dépendance aux cellules voisines} + \vfill + + \centering + \begin{tikzpicture} + \clip (-17mm,-17mm) rectangle (17mm,17mm); + \draw[xshift=5mm,yshift=5mm] ( -3cm, -3cm) grid ( 3cm, 3cm); + \node (x) at (0,0) {$x_i$}; + \foreach[count=\n] \p in {(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)} { + \node (v\n) at \p {$v_{\n_i}$}; + } + \begin{scope}[on background layer] + \clip (-17mm,-17mm) rectangle (17mm,17mm); + \only<1>{% + \fill[black!10] (v6.south west) rectangle (v2.north east); + \fill[white] (v6.north east) rectangle (v2.south west); + \fill[red!60] (x) circle (3mm); + } + \only<2>{% + \fill[black!10] (v3.north east) rectangle ($(v7.south east)+(-10cm,0)$); + \fill[white] (v3.south west) rectangle ($(v7.north east)+(-10cm,0)$); + \fill[red!60] (v5) circle (3mm); + } + \end{scope} + \end{tikzpicture} + + \alt<1>{% + $$ x_{i,1} = f(x_i , v_{1_i} , v_{2_i} , \ldots , v_{8_i}) $$ + }{% + $$ v_{5_{i,1}} = f(v_{5_i} , x_i , v_{3_i}, v_{4_i} , + \alert{? , ? , ?} , v_{6_i} , v_{7_i}) $$ + } + \vfill~ + \uncover<2>{Une partie du \structure{contexte} est manquant.} +\end{frame} + +\begin{frame}{Propagation Paralèlle \emph{à la} Margolus} + {Le voisinage de margolus} + \vfill + + \centering + \begin{tikzpicture} + \clip (-27mm,-27mm) rectangle (27mm,27mm); + \draw[xshift=5mm,yshift=5mm] ( -5cm, -5cm) grid ( 5cm, 5cm); + \fill[red] (0,0) circle (3mm); + \only<1>{\draw[xshift=5mm,yshift=5mm, step=2cm, very thick]% + ( -5cm, -5cm) grid ( 5cm, 5cm);} + \only<2>{\draw[xshift=-5mm,yshift=-5mm, step=2cm, very thick]% + ( -5cm, -5cm) grid ( 5cm, 5cm);} + \begin{scope}[on background layer] + \only<1>{% + \fill[red!50,shift={(-5mm,-5mm)}] (-1cm,-1cm) rectangle (1cm,1cm);} + \only<2>{% + \fill[red!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm);} + \end{scope} + \end{tikzpicture} + + \vfill~ +\end{frame} + +\begin{frame}{Propagation Paralèlle \emph{à la} Margolus} + {Mise à jour \emph{indépendante} d'un bloc} + \vfill + + \centering + \begin{tikzpicture}[ + cell/.style={black,size=1.5mm,circle,inner sep=0pt,font=\TINY}, + neighbor cell/.style={black,size=1.5mm,circle,inner sep=0pt,font=\small}, + center cell/.style={cell,white,fill=black}, + spy using outlines={circle,red,size=58mm,magnification=4,connect spies}] + \begin{scope}[scale=.5] + \clip (-27mm,-27mm) rectangle (27mm,27mm); + + % Background + \only<1-3>{% + \fill[blue!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); + \fill[red!50,shift={(-5mm,-5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); + } + \only<4->{% + \fill[red!50,shift={(-5mm,-5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); + \fill[blue!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); + } + + \begin{scope} + \clip (-3mm,-3mm) rectangle (3mm,3mm); + \draw[very thin] (-5mm,-5mm) grid (5mm,5mm); + \end{scope} + \only<1-3>{ + \begin{scope}[shift={(-1cm,0)}] + \clip (-3mm,-3mm) rectangle (3mm,3mm); + \draw[very thin] (-5mm,-5mm) grid (5mm,5mm); + \end{scope} + \begin{scope}[shift={(-1cm,-1cm)}] + \clip (-3mm,-3mm) rectangle (3mm,3mm); + \draw[very thin] (-5mm,-5mm) grid (5mm,5mm); + \end{scope} + \begin{scope}[shift={(0cm,-1cm)}] + \clip (-3mm,-3mm) rectangle (3mm,3mm); + \draw[very thin] (-5mm,-5mm) grid (5mm,5mm); + \end{scope} + } + + \only<1>{ + % Voisins + \node[neighbor cell] at ( 1cm, 0cm) {$v_{A,1}$}; + \node[neighbor cell] at ( 1cm, 1cm) {$v_{A,2}$}; + \node[neighbor cell] at ( 0cm, 1cm) {$v_{A,3}$}; + \node[neighbor cell] at (-1cm, 1cm) {$v_{B,1}$}; + \node[neighbor cell] at (-2cm, 1cm) {$v_{B,2}$}; + \node[neighbor cell] at (-2cm, 0cm) {$v_{B,3}$}; + \node[neighbor cell] at (-2cm,-1cm) {$v_{C,1}$}; + \node[neighbor cell] at (-2cm,-2cm) {$v_{C,2}$}; + \node[neighbor cell] at (-1cm,-2cm) {$v_{C,3}$}; + \node[neighbor cell] at ( 0cm,-2cm) {$v_{D,1}$}; + \node[neighbor cell] at ( 1cm,-2cm) {$v_{D,2}$}; + \node[neighbor cell] at ( 1cm,-1cm) {$v_{D,3}$}; + + \begin{scope}[scale=0.5,shift={(-5mm,-5mm)}] + \node[center cell] at ( -0mm, -0mm) {$A$}; + \node[cell] at (-10mm, -0mm) {$B$}; + \node[cell] at (-10mm,-10mm) {$C$}; + \node[cell] at ( -0mm,-10mm) {$D$}; + + \node[cell] at ( 1cm, 0cm) {$v_{A,1}$}; + \node[cell] at ( 1cm, 1cm) {$v_{A,2}$}; + \node[cell] at ( 0cm, 1cm) {$v_{A,3}$}; + \node[cell] at (-1cm, 1cm) {$v_{B,1}$}; + \node[cell] at (-2cm, 1cm) {$v_{B,2}$}; + \node[cell] at (-2cm, 0cm) {$v_{B,3}$}; + \node[cell] at (-2cm,-1cm) {$v_{C,1}$}; + \node[cell] at (-2cm,-2cm) {$v_{C,2}$}; + \node[cell] at (-1cm,-2cm) {$v_{C,3}$}; + \node[cell] at ( 0cm,-2cm) {$v_{D,1}$}; + \node[cell] at ( 1cm,-2cm) {$v_{D,2}$}; + \node[cell] at ( 1cm,-1cm) {$v_{D,3}$}; + \end{scope} + } + \only<2>{ + \begin{scope}[scale=0.5,shift={(-5mm,-5mm)}] + \node[center cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + } + \only<3>{ + \begin{scope}[scale=0.5,shift={(5mm,5mm)}] + \node[center cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + \begin{scope}[scale=0.5,shift={(-15mm,5mm)}] + \node[cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + \begin{scope}[scale=0.5,shift={(-15mm,-15mm)}] + \node[cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + \begin{scope}[scale=0.5,shift={(5mm,-15mm)}] + \node[cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + } + \only<4>{ + \begin{scope}[scale=0.5,shift={(5mm,5mm)}] + \node[center cell] at ( -0mm, -0mm) {$A'$}; + \node[cell] at (-10mm, -0mm) {$B'$}; + \node[cell] at (-10mm,-10mm) {$C'$}; + \node[cell] at ( -0mm,-10mm) {$D'$}; + \end{scope} + } + + % Grilles: + \draw[xshift=5mm,yshift=5mm,thin] ( -5cm, -5cm) grid ( 5cm, 5cm); + \only<1-3>{\draw[xshift=5mm,yshift=5mm, step=2cm, thick]% + ( -5cm, -5cm) grid ( 5cm, 5cm);} + \only<4>{\draw[xshift=-5mm,yshift=-5mm, step=2cm, thick]% + ( -5cm, -5cm) grid ( 5cm, 5cm);} + + \only<1-3>{ + \coordinate (spyhook) at (-5mm,-5mm); + } + \only<4>{ + \coordinate (spyhook) at (5mm,5mm); + } + \end{scope} + + \spy on (spyhook) in node (zoom) at (5cm,0); + \end{tikzpicture} + + %\only<1-2>{ + %Toute l'information \emph{nécessaire} est disponible pour mettre à jour $A$. + %$$ A' = f( A, v_{A_1}, v_{A_2}, v_{A_3}, v_{B_1}, B, C, D, v_{D_3} ) $$ + %ainsi que $B$, $C$ et $D$, symétriquement. + %} + %\only<3>{ + %Le bloc $(A',B',C',D')$ est répliqué 4 fois.} + %\only<4>{ + %Au décalage de la grille, le nouveau bloc est prêt pour une mise à jour. + %} + + + \vfill~ +\end{frame} + +%\begin{frame}{Propagation Paralèlle \emph{à la} Margolus} +% {Mise à jour \emph{indépendante} d'un bloc} +% \vfill +% +% \begin{columns}[c] +% \column{.4\textwidth}\centering +% \begin{tikzpicture}[scale=.5] +% \clip (-27mm,-27mm) rectangle (27mm,27mm); +% \draw[xshift=5mm,yshift=5mm] ( -5cm, -5cm) grid ( 5cm, 5cm); +% \fill[red] (0,0) circle (3mm); +% \only<1-3>{\draw[xshift=5mm,yshift=5mm, step=2cm, very thick]% +% ( -5cm, -5cm) grid ( 5cm, 5cm);} +% \only<4->{\draw[xshift=-5mm,yshift=-5mm, step=2cm, very thick]% +% ( -5cm, -5cm) grid ( 5cm, 5cm);} +% \begin{scope}[on background layer] +% \only<1-3>{% +% \fill[blue!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm); +% \fill[red!50,shift={(-5mm,-5mm)}] (-1cm,-1cm) rectangle (1cm,1cm);} +% \only<4->{% +% \fill[red!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm);} +% \end{scope} +% \end{tikzpicture} +% \column{.6\textwidth}\centering +% \begin{tikzpicture} +% \only<1-2,4>{% +% \fill[red!50] (-1cm,-1cm) rectangle (1cm,1cm);} +% \only<3>{% +% \fill[red!50, shift={(1cm,1cm)}] (0cm,0cm) rectangle (1cm,1cm); +% \fill[red!50, shift={(1cm,-2cm)}] (0cm,0cm) rectangle (1cm,1cm); +% \fill[red!50, shift={(-2cm,1cm)}] (0cm,0cm) rectangle (1cm,1cm); +% \fill[red!50, shift={(-2cm,-2cm)}] (0cm,0cm) rectangle (1cm,1cm);} +% \only<1>{% +% \fill[blue!50] (0cm,1cm) -- (0cm,2cm) -- (2cm,2cm) -- (2cm,0cm) -- (1cm,0cm) -- (1cm,1cm) -- cycle;} +% \draw[very thin,dashed] (-2,-2) grid (2,2); +% \draw[step=2cm] (-2,-2) grid (2,2); +% \draw[step=4cm, very thick, shift={(-2cm,-2cm)}] (-4mm,-4mm) grid (44mm,44mm); +% \only<1>{% +% \node [fill=red, minimum size=6mm, inner sep=0, circle] (A) at (5mm,5mm) {A};% +% \node [draw=red, thick, dashed, minimum size=6mm, inner sep=0, circle] (B) at (-5mm,5mm) {B};% +% \node [draw=red, thick, dashed, minimum size=6mm, inner sep=0, circle] (C) at (-5mm,-5mm) {C};% +% \node [draw=red, thick, dashed, minimum size=6mm, inner sep=0, circle] (D) at (5mm,-5mm) {D};% +% \node (va1) at (15mm,5mm) {$v_{A_1}$};% +% \node (va2) at (15mm,15mm) {$v_{A_2}$};% +% \node (va3) at (5mm,15mm) {$v_{A_3}$};% +% \node (vb1) at (-5mm,15mm) {$v_{B_1}$};% +% \node (vd3) at (15mm,-5mm) {$v_{D_3}$};% +% } +% \only<2>{% +% \node [fill=red, minimum size=6mm, inner sep=0, circle] (A') at (5mm,5mm) {A'};% +% \node (B') at (-5mm,5mm) {B'};% +% \node (C') at (-5mm,-5mm) {C'};% +% \node (D') at (5mm,-5mm) {D'};% +% } +% \only<3>{% +% \node [fill=red, minimum size=6mm, inner sep=0, circle] (A') at (15mm,15mm) {A'};% +% \node (B') at ( 5mm,15mm) {B'};% +% \node (C') at ( 5mm, 5mm) {C'};% +% \node (D') at (15mm, 5mm) {D'};% +% \begin{scope}[shift={(-15mm,5mm)}] +% \node (A') at (10mm,10mm) {A'};% +% \node (B') at ( 0mm,10mm) {B'};% +% \node (C') at ( 0mm, 0mm) {C'};% +% \node (D') at (10mm, 0mm) {D'};% +% \end{scope} +% \begin{scope}[shift={(5mm,-15mm)}] +% \node (A') at (10mm,10mm) {A'};% +% \node (B') at ( 0mm,10mm) {B'};% +% \node (C') at ( 0mm, 0mm) {C'};% +% \node (D') at (10mm, 0mm) {D'};% +% \end{scope} +% \begin{scope}[shift={(-15mm,-15mm)}] +% \node (A') at (10mm,10mm) {A'};% +% \node (B') at ( 0mm,10mm) {B'};% +% \node (C') at ( 0mm, 0mm) {C'};% +% \node (D') at (10mm, 0mm) {D'};% +% \end{scope} +% } +% \only<4>{ +% \begin{scope}[shift={(-15mm,-15mm)}] +% \node [fill=red, minimum size=6mm, inner sep=0, circle] (A') at (10mm,10mm) {A};% +% \node (B') at ( 0mm,10mm) {B};% +% \node (C') at ( 0mm, 0mm) {C};% +% \node (D') at (10mm, 0mm) {D};% +% \end{scope} +% } +% \end{tikzpicture} +% \end{columns} +% +% \centering +% \only<1-2>{ +% Toute l'information \emph{nécessaire} est disponible pour mettre à jour $A$. +% $$ A' = f( A, v_{A_1}, v_{A_2}, v_{A_3}, v_{B_1}, B, C, D, v_{D_3} ) $$ +% ainsi que $B$, $C$ et $D$, symétriquement. +% } +% \only<3>{ +% Le bloc $(A',B',C',D')$ est répliqué 4 fois.} +% \only<4>{ +% Au décalage de la grille, le nouveau bloc est prêt pour une mise à jour. +% } +% +% +% \vfill~ +%\end{frame} diff --git a/otb.sectorisation.tex b/otb.sectorisation.tex new file mode 100644 index 0000000..5f57656 --- /dev/null +++ b/otb.sectorisation.tex @@ -0,0 +1,35 @@ +\begin{frame}{Exemple 1: Sectorisation} + + \begin{columns} + \column{.5\textwidth}\centering + \includegraphics[width=.6\textwidth]{raster/sectors-original}\\ + \textcolor{gray}{\Tiny O. Hallatschek et al : “Genetic drift at expanding + frontiers promotes gene segregation”, 2007}\\[1em] + \column{.5\textwidth}\centering + \includegraphics[width=.6\textwidth]{raster/sectors} + \end{columns} + + \bigskip + \begin{columns} + \column{.5\textwidth} + \begin{itemize} + \item Démarche expérimentale + \begin{enumerate} + \item Croissance $1 \rightarrow 1000$ + \item Marquage 50\% \textcolor{red}{rouge}, 50\% \textcolor{green}{vert} + \item Croissance $1000 \rightarrow 200000$ + \end{enumerate} + \end{itemize} + + \column{.5\textwidth} + \begin{itemize} + \item Deux résultats + \begin{enumerate} + \item Moteur physique réaliste + \item Nouvelle hypothèse pour la sectorisation + \end{enumerate} + \end{itemize} + \end{columns} + +\end{frame} + diff --git a/otb.stable.pop.tex b/otb.stable.pop.tex new file mode 100644 index 0000000..540c55b --- /dev/null +++ b/otb.stable.pop.tex @@ -0,0 +1,90 @@ +\begin{frame}[fragile]{Exemple 2: Cercles concentriques} + + \begin{columns} + \column{.6\textwidth} + \begin{itemize} + \item \structure{Morphogènes} : Vert, Rouge, Bleu + \item \structure{États} + \begin{itemize} + \item $A$: Croissance(0.005), Dépôt(Vert,50), Tumble() + \item $B$: Croissance(0.005), Dépôt(Bleu,50), Tumble() + \item $C$: Croissance(0.005), Dépôt(Rouge,50), Tumble() + \item $D$: Destruction() + \end{itemize} + \item \structure{Transition} + \begin{itemize} + \item $c_1$: IsDaughter() + \item $c_2$: LessThreshold(Vert,0.1) + \item $c_3$: LessThreshold(Vert,0.1) $\wedge$ LessThreshold(Rouge,10.0) + \end{itemize} + \end{itemize} + + \column{.4\textwidth}\center + \includegraphics[width=\textwidth]{raster/cercles} + \end{columns} + \begin{center} + \begin{tikzpicture}[ + node distance=20mm, + state/.style={draw,circle,anchor=mid}, + transition/.style={-Stealth,semithick,bend left}] + \node[state] (mere) {$A$}; + \node[state,right=of mere] (fp) {$B$}; + \node[state,right=of fp] (fl) {$C$}; + \node[state,right=of fl] (ded) {$D$}; + \draw[transition] (mere) to node [auto,]{$c_1$} (fp); + \draw[transition] (fp) to node [auto,]{$c_2$} (fl); + \draw[transition] (fl) to node [auto,]{$c_3$} (ded); + \end{tikzpicture} + \end{center} +\end{frame} + +% \begin{lstlisting} +%{ +% "signal" : [ +% {"Vert" : [0.01, 2.5]}, +% {"Rouge": [0.001, 1.5]}, +% {"Bleu" : [0.001, 1.5]} +% ], +% "reaction" : [ +% [["bleu","vert"], ["vert","vert"], 0.05], +% [["bleu"], ["bleu","bleu"], 0.05], +% [["vert"], [], 0.05] +% ], +% "type" : [ +% "AALEADER", +% "CDAUGHTER", +% "FDAUGHTER", +% "ZOMBIE" +% ], +% "behaviour" : { +% "AALEADER" : [ +% { "Divide" : 0.005 }, +% { "Tumble" : [] }, +% { "EmitSignal" : [ "Vert", 50 ] } +% ], +% "FDAUGHTER" : [ +% { "Divide" : 0.005 }, +% { "Tumble" : [] }, +% { "EmitSignal" : [ "Bleu", 50 ] } +% ], +% "CDAUGHTER" : [ +% { "Divide" : 0.005 }, +% { "Tumble" : [] }, +% { "EmitSignal" : [ "Rouge", 50 ] } +% ], +% "ZOMBIE" : [ { "Die" : [] } ] +% }, +% "transition" : [ +% ["NA","NA","NA","NA"], +% ["CD","NA","NA","NA"], +% ["NA","CF","NA","NA"], +% ["NA","NA","CA","ND"] +% ], +% "condition" : [ +% {"CD" : "ISDAUGHTER()"}, +% {"CF" : "LESSTHRESHOLD(VERT,1.e-1f)"}, +% {"CA" : "AND(LESSTHRESHOLD(VERT,1.e-1f),LESSTHRESHOLD(ROUGE,10.f))"}, +% {"ND" : "TRUE"} +% ] +%} +% \end{lstlisting} diff --git a/part1.conclude.tex b/part1.conclude.tex new file mode 100644 index 0000000..cbe4ef2 --- /dev/null +++ b/part1.conclude.tex @@ -0,0 +1,19 @@ +\begin{frame}%[label=this one] + \frametitle{Conclusion et perspectives} + +\begin{itemize} + \item Contributions + \begin{enumerate} + \item \structure{Cadre unifié} pour approcher la modélisation multi-niveau + \item \structure{Identification} de formalisme, modèle, système + \item \structure{Introduction} de $\mathbf{Abs}_S$ + \end{enumerate} + \bigskip + \item Perspectives + \begin{enumerate} + \item \structure{Étude} de la catégorie $\mathbf{Abs}_S$ + \item \structure{Intégrer} les niveaux de description + \end{enumerate} +\end{itemize} + +\end{frame} diff --git a/part2.conclude.tex b/part2.conclude.tex new file mode 100644 index 0000000..3e2a894 --- /dev/null +++ b/part2.conclude.tex @@ -0,0 +1,22 @@ +\begin{frame}[label=this one] + \frametitle{Conclusion et perspectives} + + \begin{itemize} + \item \structure{Conclusion} + \begin{enumerate} + \item \structure{Spatialisation de l'activité} à partir des \structure{interactions} + \item \structure{Caractérisation topologique} de la progression de l'activité + \item \structure{Algorithme} générique de suivi du front d'activité + \item \structure{Optimisation} fondée sur l'activité + \end{enumerate} + \bigskip + \item \structure{Perspectives} + \begin{enumerate} + \item \structure{Ajouter} le support de l'activité à MGS + \item \structure{Raffiner} la zone active en sous-régions + \item \structure{Réifier} le bord de la zone active + \item \structure{Décrire} un modèle multi-niveau de la propagation du feu de forêt + \end{enumerate} + \end{itemize} + +\end{frame} diff --git a/part3.conclude.tex b/part3.conclude.tex new file mode 100644 index 0000000..f7605a9 --- /dev/null +++ b/part3.conclude.tex @@ -0,0 +1,23 @@ +\begin{frame}{Conclusion et perspectives} + + \begin{itemize} + \item \structure{Conclusion}: + \begin{enumerate} + \item Développement d'un simulateur d'une colonie de bactéries + \item Programmation spécifique SIMD, non triviale + \item Proposition d'un algorithme (PPM) pour la simulation parallèle + d'un automate cellulaire 2D + \end{enumerate} + \bigskip + \item \structure{Perspectives}: + \begin{enumerate} + \item Calibrer les paramètres des moteurs physique et chimique + \item Tester d'autres méthodes de discrétisation pour l'équation de + réaction-diffusion + \item Construire une IHM (GUI, CLI, etc.) + \item Effectuer des tests de performance + \item Diffuser l'outil auprès de la communauté + \end{enumerate} + \end{itemize} + +\end{frame} diff --git a/plan.tex b/plan.tex new file mode 100644 index 0000000..375b9a8 --- /dev/null +++ b/plan.tex @@ -0,0 +1,9 @@ +\begin{frame}[noframenumbering]{ } + \begin{columns} + \column{.7\textwidth} + {\LARGE\tableofcontents[\tocshowonlycurrentsection]} + + \column{.2\textwidth} + \centering\drawfigure + \end{columns} +\end{frame} diff --git a/predator.prey.tex b/predator.prey.tex new file mode 100644 index 0000000..40b413d --- /dev/null +++ b/predator.prey.tex @@ -0,0 +1,109 @@ +\begin{frame}%[label=this one] + \frametitle{Système proies/prédateurs (système)} + \framesubtitle{Description du système} + + \begin{columns} + \column{.7\textwidth}\centering + \includegraphics[width=.7\textwidth]{raster/system-predator-prey}\\ + \mkCitation{S. S. Mader, Biology 6th edition, 1998} + + \bigskip + \begin{itemize} + \item Les proies se reproduisent spontanément + \item Les prédateurs meurent spontanément + \item Les prédateurs chassent les proies + \begin{itemize} + \item Les proies meurent (chassées) + \item Les prédateurs peuvent se reproduire (efficacité de la chasse) + \end{itemize} + \end{itemize} + \end{columns} + +\end{frame} + +\begin{frame}%[label=this one] + \frametitle{Système proies/prédateurs (modèles)} + \framesubtitle{Modèles et formalismes} + \centering + \begin{tikzpicture}[overlay,% + node distance=13mm and 20mm, + model/.style={draw,circle,on grid=true,fill=white,minimum size=24pt}, + abstraction/.style={-Stealth,thick} + ] + \node[model, left=of current page.center] (m1) {$\model_1$}; + \node[model,above=of current page.center] (m2) {$\model_2$}; + \uncover<2->{ + \node[model,below=of current page.center] (m3) {$\model_3$}; + } + \uncover<3>{ + \node[model,right=of current page.center] (m4) {?}; + } + \uncover<4->{ + \node[model,right=of current page.center] (m4) {$\model_4$}; + } + \draw[abstraction] (m1) to node[anchor=south,midway,sloped] + {\tiny trajectoire moyenne} (m2); + \uncover<2->{ + \draw[abstraction] (m1) to node[anchor=north,midway,sloped,swap] + {\tiny aggrégation de l'espace} (m3); + } + \uncover<3>{ + \draw[abstraction,dashed] (m2) to (m4); + \draw[abstraction,dashed] (m1) to (m4); + \draw[abstraction,dashed] (m3) to (m4); + } + \uncover<4->{ + \draw[abstraction] (m2) to node[anchor=south,midway,sloped,swap] + {\tiny aggrégation de l'espace} (m4); + \draw[abstraction] (m3) to node[anchor=north,midway,sloped] + {\tiny trajectoire moyenne} (m4); + } + \end{tikzpicture} + + \begin{tikzpicture}[overlay] + \uncover<1-2>{ + \node[anchor=south east] (m1eq) at (m1.north west) {\tiny$ + \left\{ + \arraycolsep=1.4pt%\def\arraystretch{2.2} + \begin{array}{rcl} + \displaystyle\frac{dU_V}{dt} &=& r U_V (1 - \displaystyle\frac{U_V}{K}) + - g U_P U_V\\[1.5ex] + \displaystyle\frac{dU_P}{dt} &=& n U_V U_P - \mu U_P + \end{array} + \right.%} + $}; + \node[anchor=north] at (m1eq.south) {\includegraphics[height=2cm]{vector/lv-graph}}; + \node[anchor=south east] (m2eq) at ($(m2.north west)+(0,7pt)$) {\tiny$ + \arraycolsep=1.4pt%\def\arraystretch{0} + \begin{array}{rl} + V + E &\overset{b}{\longrightarrow} 2\,V \\ + P + V &\overset{p_1}{\longrightarrow} 2\,P \\ + P + V &\overset{p_2}{\longrightarrow} P + E + \end{array} + \quad + \begin{array}{rl} + V &\overset{d_V}{\longrightarrow} E \\ + P &\overset{d_P}{\longrightarrow} E + \end{array} + $}; + \node[anchor=west] at (m2eq.east) {\includegraphics[width=2cm]{vector/lv-gil-graph}}; + } + \uncover<2>{ + \node[anchor=north] (m3eq) at (m3.south) {\tiny$ + \left\{ + \arraycolsep=1.4pt%\def\arraystretch{2.0} + \begin{array}{rcll} + \displaystyle\frac{du_V}{dt} &=& r u_V (1 - \displaystyle\frac{u_V}{K}) - g u_P u_V \\ + &+& D_V (\nabla^2 u_V + u_V \nabla^2 u_P - u_P \nabla^2 u_V) + \\[1.5ex] + \displaystyle\frac{du_P}{dt} &=& n u_V u_P - \mu u_P \\ + &+& D_P (\nabla^2 u_P + u_P \nabla^2 u_V - u_V \nabla^2 u_P) + \end{array} + \right.%} + $}; + } + \uncover<4>{ + \node[anchor=west] at (m4.east) {\structure{[Lugo et McKane 2008]}}; + } + \end{tikzpicture} +\end{frame} diff --git a/representing.space.tex b/representing.space.tex new file mode 100644 index 0000000..6833a73 --- /dev/null +++ b/representing.space.tex @@ -0,0 +1,37 @@ +\begin{frame}{Representing Space} + \begin{columns} + \column{.6\textwidth} + \only<1>{\includegraphics[width=\textwidth]{raster/space-nospace-shade}} + \only<2>{\includegraphics[width=\textwidth]{raster/space-nospace}} + \column{.4\textwidth} + \begin{itemize} + \item<1> Without space + \item<2> With space + \end{itemize} + \end{columns} + + \begin{columns} + \column{.6\textwidth} + \only<1>{\includegraphics[width=\textwidth]{raster/space-discrete-shade}} + \only<2>{\includegraphics[width=\textwidth]{raster/space-discrete}} + \column{.4\textwidth} + \begin{itemize} + \item<2> Discrete + \item<2> Continuous + \end{itemize} + \end{columns} + + \begin{columns} + \column{.6\textwidth} + \only<1>{\includegraphics[width=\textwidth]{raster/space-newton-shade}} + \only<2>{\includegraphics[width=\textwidth]{raster/space-newton}} + \column{.4\textwidth} + \begin{itemize} + % Embedded in preexisting space + \item<2> Absolute (Newtonian) + % induced by relationship between entities + \item<2> Relative (Leibnizian) + \end{itemize} + \end{columns} + +\end{frame} diff --git a/representing.space.time.interaction.tex b/representing.space.time.interaction.tex new file mode 100644 index 0000000..95402c2 --- /dev/null +++ b/representing.space.time.interaction.tex @@ -0,0 +1,32 @@ +\begin{frame}{Representing the Evolution Function} + \begin{center} + \includegraphics[height=1cm]{raster/evolution-function} + \end{center} + \begin{columns} + \column{.6\textwidth} + \includegraphics[width=\textwidth]{raster/sync-sync} + \column{.4\textwidth} + \begin{itemize} + \item Synchronous\\all the events + \end{itemize} + \end{columns} + \vspace{-2ex} + \begin{columns} + \column{.6\textwidth} + \includegraphics[width=\textwidth]{raster/sync-seq} + \column{.4\textwidth} + \begin{itemize} + \item Sequential\\exactly one event + \end{itemize} + \end{columns} + \vspace{-2ex} + \begin{columns} + \column{.6\textwidth} + \includegraphics[width=\textwidth]{raster/sync-async} + \column{.4\textwidth} + \begin{itemize} + \item Asynchronous\\at least one event + \end{itemize} + \end{columns} + +\end{frame} diff --git a/representing.time.tex b/representing.time.tex new file mode 100644 index 0000000..d60799c --- /dev/null +++ b/representing.time.tex @@ -0,0 +1,35 @@ +\begin{frame}{Representing Time} + \begin{columns} + \column{.4\textwidth} + \begin{itemize} + \item<1> Without time + \item<2> With time + \end{itemize} + \column{.6\textwidth} + \only<1>{\includegraphics[width=\textwidth]{raster/time-notime-shadetime}} + \only<2>{\includegraphics[width=\textwidth]{raster/time-notime-shadenotime}} + \end{columns} + + \begin{columns} + \column{.4\textwidth} + \begin{itemize} + \item<2> Discrete + \item<2> Continuous + \end{itemize} + \column{.6\textwidth} + \only<1>{\includegraphics[width=\textwidth]{raster/time-discrete-shade}} + \only<2>{\includegraphics[width=\textwidth]{raster/time-discrete}} + \end{columns} + + \begin{columns} + \column{.4\textwidth} + \begin{itemize} + \item<2> Absolute (Newtonian) + \item<2> Relative (Leibnizian) + \end{itemize} + \column{.6\textwidth} + \only<1>{\includegraphics[width=\textwidth]{raster/time-newton-shade}} + \only<2>{\includegraphics[width=\textwidth]{raster/time-newton}} + \end{columns} + +\end{frame} diff --git a/sbgp.tex b/sbgp.tex new file mode 100644 index 0000000..2061a2b --- /dev/null +++ b/sbgp.tex @@ -0,0 +1,26 @@ +\begin{frame}[fragile]{Décrire une simulation avec SBGP} + + \begin{columns} + \column{.4\textwidth} + \begin{lstlisting} + { + "signals" = [], + "reactions" = [], + "type" = [], + "behavior" = {}, + "transition" = [], + "cond_transition" = [] + } + \end{lstlisting} + + \column{.5\textwidth} + \begin{itemize}[<+->] + \item signals: liste des morphogènes + \item reactions: liste des réactions + \item type: liste des états possibles pour les bactéries + \item behavior: liste des actions effectuées par les bactéries par type + \item transition: table de transition pour un changement de type + \item cond\_transition: liste des conditions de transition + \end{itemize} + \end{columns} +\end{frame} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..507c813 --- /dev/null +++ b/shell.nix @@ -0,0 +1,77 @@ +#To run this, you need nix (https://ariya.io/2016/05/nix-as-os-x-package-manager) +#and the package nix-shell (just run `nix-env -iA nixos.nix-shell`) +#Then, in the directory of this file, just call `nix-shell` + +#This will create a custom shell (with only the needed dependencies) for +#building the presentation +with import {}; +stdenv.mkDerivation { + name = "thesis-presentation"; + shellHook = '' + latexmk \ + -pvc \ + -view=none \ + -silent \ + -time \ + -interaction=nonstopmode \ + -xelatex main.tex + latexmk -c + rm *.{snm,nav,vrb} + ''; + buildInputs = [ + ( texlive.combine { + inherit (texlive) + scheme-basic + collection-langfrench + #algorithm2e + #biblatex + #caption + #enumitem + #logreq + #minitoc + #multirow + #pgf + #pgfplots + #placeins + #relsize + #setspace + #standalone + #xcolor + #xkeyval + #xstring + beamer + colortbl + euenc + extsizes + filehook + jknapltx + latexmk + listings + metafont + ms + pdfpages + polyglossia + realscripts + rsfs + siunitx + tools + ucharcat + unicode-math + xetex + xetex-def + xltxtra + zapfding + ;} ) + #biber + ]; +} +#thesis = buildEnv { +# name = "memoire-these"; +# buildInputs = [ +# ]; +# shellHook = '' +# alias make=$(which buildthesis) +# ln -s $(which buildthesis) buildme +# echo "Juste type 'make' or './buildme' to build the thesis" +# ''; +#}; diff --git a/simple.ff.example.tex b/simple.ff.example.tex new file mode 100644 index 0000000..7678ed7 --- /dev/null +++ b/simple.ff.example.tex @@ -0,0 +1,61 @@ +\begin{frame}[fragile]%,label=this one] +\frametitle{Modèle 1: un automate à 3 états} +%\framesubtitle{a 3-state fire propagation} +% Nécessaire plus loin pour l'activité +\hspace{5mm} +\input{vector/simpleexamplelegend.tikz} +\hfill +% PROPAGATION RULE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{vector/simpleexample-propagation.tikz} +\hfill +% EXTINCTION RULE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{vector/simpleexample-extinction.tikz} +\hspace{5mm} + +\pause +\bigskip +\begin{columns}[t] +\column{.72\textwidth} +\begin{overlayarea}{\textwidth}{.35\textheight} +\begin{itemize} +\item<1-> Topologie des interactions + +\medskip +\only<2>{\input{vector/simpleexample-moore.tikz}} + +\item<3-> Lois d'évolution + +\medskip +\only<3->{ +\defverbatim[colored]\transevol{% +\begin{semiverbatim} +trans $T$ = \{ + +  {\color{forest}`Forest} / neighboursMember({\color{fire}`Fire}) => {\color{fire}`Fire};\par +  {\color{fire}`Fire} => {\color{ashes}`Ash}; + +\} +\end{semiverbatim}} +\transevol +} + +\end{itemize} +\end{overlayarea} +\column{.24\textwidth} +\uncover<4->{ +\begin{overlayarea}{.9\textwidth}{.2\textheight} + \begin{center} + \animatevalue<4-10>{\currentimg}{5}{16} + \includegraphics[width=\textwidth]{animation/ffire-frame-\the\currentimg.png} + \end{center} +\end{overlayarea} +\end{columns} +} +\only<2>{\begin{center} +{\small Deux cellules \structure{sont voisines} si le feu peut se propager de +l'une à l'autre} +\end{center}} +\only<3>{{\large + $$ C^{i+1} = T(C^i)$$ +}} +\end{frame} diff --git a/test.tex b/test.tex new file mode 100644 index 0000000..0baeaff --- /dev/null +++ b/test.tex @@ -0,0 +1,28 @@ +\begin{frame}[plain,noframenumbering]{TEST} +\tikz[overlay] \node[very thick,minimum width=\textwidth, + minimum height=\textheight,draw] at (current page.center) {x}; + + + \begin{tikzpicture} + \node { + \foreach \posx/\posy/\kolor in {% + 0cm/7cm/orange, + 0cm/6cm/red, + 0cm/5cm/green, + 0cm/4cm/yellow, + 0cm/3cm/magenta, + 0cm/2cm/violet, + 0cm/1cm/blue, + 0cm/0cm/cyan, + 1cm/5cm/active, + 1cm/4cm/ashes, + 1cm/3cm/fire, + 1cm/2cm/forest, + 1cm/1cm/frontier, + 1cm/0cm/quiescent} + \tikz \node[fill=\kolor,minimum size=5mm,inner sep=0pt,label=right:\kolor] + at (\posy,\posx) {}; + }; + \end{tikzpicture} + +\end{frame} diff --git a/title.tex b/title.tex new file mode 100644 index 0000000..1ae32f3 --- /dev/null +++ b/title.tex @@ -0,0 +1,29 @@ +\begin{frame}[plain,noframenumbering]{} + + \begin{center} + {\Huge\structure\inserttitle} + \medskip + \par\insertsubtitle + \end{center} +\vfill + + \begin{center} + Soutenance de thèse de\\[.5em] + {\huge\insertauthor} + + \bigskip + le 6 juillet 2017\\ + \small LACL (Créteil, France)\\ + \end{center} + +\vfill +\hspace{5mm} +\includegraphics[height=.6cm]{raster/logo-lacl} +\hfill +\includegraphics[height=.6cm]{raster/logo-upe} +\hfill +\includegraphics[height=.6cm]{raster/logo-anr} +\hfill +\includegraphics[height=.6cm]{raster/logo-synbiotic} +\hspace{5mm} +\end{frame} diff --git a/wave.algorithm.tex b/wave.algorithm.tex new file mode 100644 index 0000000..d182703 --- /dev/null +++ b/wave.algorithm.tex @@ -0,0 +1,22 @@ +\begin{frame} +\newcommand{\myA}{{\color{active}A}} +\newcommand{\myF}{{\color{frontier}F}} +\frametitle{Algorithme du suivi de l'activité} +\begin{columns} +\column{.5\textwidth} +\input{vector/algo-frontier.tikz} +\column{.5\textwidth} +\begin{tabular}{rl} + $A, F$:& set of cells\\ + $C$:& collection +\end{tabular} +\[ +\huge +\begin{array}{rl} +\uncover<1->{C &\leftarrow T(\myA|\myF)}\\ +\uncover<2->{\myA &\leftarrow P_C(\myA) \cup P_C(\myF)}\\ +\uncover<3->{\myF &\leftarrow \text{Lk}(\myA)} +\end{array} +\] +\end{columns} +\end{frame} diff --git a/where.is.activity.tex b/where.is.activity.tex new file mode 100644 index 0000000..3592537 --- /dev/null +++ b/where.is.activity.tex @@ -0,0 +1,110 @@ +\begin{frame} +\frametitle{Localiser l'activité} + +\centering +\input{vector/active-equation.tikz} +\begin{columns} + \column{.65\textwidth}\centering + \input{vector/active-quiescent-reprensentation.tikz} + \column{.35\textwidth} +\end{columns} +\end{frame} + +\begin{frame}[label=this one] + \frametitle{Simulations \mgs et sous-collection active} + \begin{itemize} + \item Trajectoires dans \mgs + \begin{center} + \begin{tikzpicture} [scale=0.4,baseline, + cell/.style={minimum size=0.35cm}] + \fill (0.65,0.65) rectangle (8.35,8.35); + \foreach \p/\c in% + { { (1,8)/forest},{(2,8)/forest},{(3,8)/forest},{(4,8)/forest},{(5,8)/forest},{(6,8)/forest},{(7,8)/forest},{(8,8)/forest}% + ,{(1,7)/forest},{(2,7)/forest},{(3,7)/forest},{(4,7)/forest},{(5,7)/forest},{(6,7)/forest},{(7,7)/forest},{(8,7)/forest}% + ,{(1,6)/forest},{(2,6)/forest},{(3,6)/fire}, {(4,6)/fire}, {(5,6)/forest},{(6,6)/forest},{(7,6)/forest},{(8,6)/forest}% + ,{(1,5)/forest},{(2,5)/forest},{(3,5)/forest},{(4,5)/fire}, {(5,5)/forest},{(6,5)/forest},{(7,5)/forest},{(8,5)/forest}% + ,{(1,4)/forest},{(2,4)/forest},{(3,4)/forest},{(4,4)/forest},{(5,4)/forest},{(6,4)/forest},{(7,4)/forest},{(8,4)/forest}% + ,{(1,3)/forest},{(2,3)/forest},{(3,3)/forest},{(4,3)/forest},{(5,3)/forest},{(6,3)/forest},{(7,3)/forest},{(8,3)/forest}% + ,{(1,2)/forest},{(2,2)/forest},{(3,2)/forest},{(4,2)/forest},{(5,2)/forest},{(6,2)/forest},{(7,2)/forest},{(8,2)/fire}% + ,{(1,1)/forest},{(2,1)/forest},{(3,1)/forest},{(4,1)/forest},{(5,1)/forest},{(6,1)/forest},{(7,1)/forest},{(8,1)/fire}} + \node[cell,fill=\c,draw=white,line width=1pt] at \p {}; + \node at (4.5,0) {$C^0$}; + \end{tikzpicture} + \hfill + \begin{tikzpicture} [scale=0.4,baseline, + cell/.style={minimum size=0.35cm}] + \fill (0.65,0.65) rectangle (8.35,8.35); + \foreach \p/\c in% + { { (1,8)/forest},{(2,8)/forest},{(3,8)/forest},{(4,8)/forest},{(5,8)/forest},{(6,8)/forest},{(7,8)/forest},{(8,8)/forest}% + ,{(1,7)/forest},{(2,7)/fire}, {(3,7)/fire}, {(4,7)/fire}, {(5,7)/fire}, {(6,7)/forest},{(7,7)/forest},{(8,7)/forest}% + ,{(1,6)/forest},{(2,6)/fire}, {(3,6)/ashes}, {(4,6)/ashes}, {(5,6)/fire}, {(6,6)/forest},{(7,6)/forest},{(8,6)/forest}% + ,{(1,5)/forest},{(2,5)/fire}, {(3,5)/fire}, {(4,5)/ashes}, {(5,5)/fire}, {(6,5)/forest},{(7,5)/forest},{(8,5)/forest}% + ,{(1,4)/forest},{(2,4)/forest},{(3,4)/fire}, {(4,4)/fire}, {(5,4)/fire}, {(6,4)/forest},{(7,4)/forest},{(8,4)/forest}% + ,{(1,3)/forest},{(2,3)/forest},{(3,3)/forest},{(4,3)/forest},{(5,3)/forest},{(6,3)/forest},{(7,3)/fire}, {(8,3)/fire}% + ,{(1,2)/forest},{(2,2)/forest},{(3,2)/forest},{(4,2)/forest},{(5,2)/forest},{(6,2)/forest},{(7,2)/fire}, {(8,2)/ashes}% + ,{(1,1)/forest},{(2,1)/forest},{(3,1)/forest},{(4,1)/forest},{(5,1)/forest},{(6,1)/forest},{(7,1)/fire}, {(8,1)/ashes}} + \node[cell,fill=\c,draw=white,line width=1pt] at \p {}; + \node at (4.5,0) {$C^1 = T(C^0)$}; + \end{tikzpicture} + \hfill + \begin{tikzpicture} [scale=0.4,baseline, + cell/.style={minimum size=0.35cm}] + \fill (0.65,0.65) rectangle (8.35,8.35); + \foreach \p/\c in% + { { (1,8)/fire}, {(2,8)/fire}, {(3,8)/fire}, {(4,8)/fire}, {(5,8)/fire}, {(6,8)/fire}, {(7,8)/forest},{(8,8)/forest}% + ,{(1,7)/fire}, {(2,7)/ashes}, {(3,7)/ashes}, {(4,7)/ashes}, {(5,7)/ashes}, {(6,7)/fire}, {(7,7)/forest},{(8,7)/forest}% + ,{(1,6)/fire}, {(2,6)/ashes}, {(3,6)/ashes}, {(4,6)/ashes}, {(5,6)/ashes}, {(6,6)/fire}, {(7,6)/forest},{(8,6)/forest}% + ,{(1,5)/fire}, {(2,5)/ashes}, {(3,5)/ashes}, {(4,5)/ashes}, {(5,5)/ashes}, {(6,5)/fire}, {(7,5)/forest},{(8,5)/forest}% + ,{(1,4)/fire}, {(2,4)/fire}, {(3,4)/ashes}, {(4,4)/ashes}, {(5,4)/ashes}, {(6,4)/fire}, {(7,4)/fire}, {(8,4)/fire}% + ,{(1,3)/forest},{(2,3)/fire}, {(3,3)/fire}, {(4,3)/fire}, {(5,3)/fire}, {(6,3)/fire}, {(7,3)/ashes}, {(8,3)/ashes}% + ,{(1,2)/forest},{(2,2)/forest},{(3,2)/forest},{(4,2)/forest},{(5,2)/forest},{(6,2)/fire}, {(7,2)/ashes}, {(8,2)/ashes}% + ,{(1,1)/forest},{(2,1)/forest},{(3,1)/forest},{(4,1)/forest},{(5,1)/forest},{(6,1)/fire}, {(7,1)/ashes}, {(8,1)/ashes}} + \node[cell,fill=\c,draw=white,line width=1pt] at \p {}; + \node at (4.5,0) {$C^2 = T(C^1) = T^2(C^0)$}; + \end{tikzpicture} + + \end{center} + \item Décomposition de l'activité et trajectoires + \begin{itemize} + \item \textcolor{active}{Sous-collection active $A_i$} et + \textcolor{quiescent}{sous-collection quiescente $Q_i$} + \item Décomposition de la relation d'évolution + \[ A^{i+1} + Q^{i+1} = T(A^i + Q^i) \] + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}{Relation entre $A^{i+1},Q^{i+1}$ et $A^i,Q^i$} + $$ A^{i+1} + Q^{i+1} = T(A^i + Q^i) $$ + \begin{itemize} + \item Sous-collection \textcolor{frontier}{frontière $F^i$} + \end{itemize} + \begin{columns} + \column{.5\textwidth} + \begin{enumerate} + \item \structure{Propriété} $T(A^i + Q^i) = T(A^i \mid Q^i) + Q^i$ + \item \structure{Propriété} $| A^{i+1} | \subseteq | A^i + F^i |$ + \item \structure{Propriété} $| Q^i - F^i | \subseteq | Q^{i+1} |$ + \item \structure{Définition} $F^i = \text{Lk}(A^i)$ + \item \structure{Remarque} $T(A^i \mid Q^i) = T(A^i \mid F^i)$ + \item \structure{Résultat} $C^{i+1} = T(A^i \mid F^i) + F^i + (Q^i - F^i)$ + \end{enumerate} + \column{.5\textwidth} + $$ \text{Lk} \left( + \tikz[baseline] \node {\includegraphics[width=2cm]{vector/operateursS}}; + \right) = + \tikz[baseline] \node {\includegraphics[width=2cm]{vector/operateursLkS}}; + $$ + \end{columns} + + \bigskip + \[ + \left\{ + \arraycolsep=1.4pt%\def\arraystretch{2.2} + \begin{array}{rl} + A^0 &= \text{PatMatch}_T(C^0)\\ + A^{i+1} &= \text{PatMatch}_T\left[ T(A^i \mid \text{Lk}(A^i)) + \text{Lk}(A^i) \right] + \end{array} + \right. + \] +\end{frame}