# presentation.org -- Pamhyr # Copyright (C) 2023 INRAE # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -*- coding: utf-8 -*- #+STARTUP: indent hideblocks content beamer #+TITLE: \textbf{Pamhyr2} #+SUBTITLE: Scenarios managements # #+AUTHOR: Pierre-Antoine Rouby #+LATEX_HEADER: \author[Pierre-Antoine Rouby]{\textbf{Pierre-Antoine Rouby}} #+EMAIL: pierre-antoine.rouby@inrae.fr #+INSTITUTE: INRAE Lyon-Villerbanne, teams River Hydraulics #+LATEX_HEADER: \institute{INRAE Lyon-Villerbanne, River Hydraulics team} #+DATE: 9th November #+KEYWORDS: g ui, hydraulics, sedimentary, hydro-sedimentary, 1D modelling, freesoftware, foss #+OPTIONS: H:2 toc:t num:t author:nil #+LATEX_CLASS: beamer #+LATEX_CLASS_OPTIONS: [slideopt,A4,showboxes,svgnames,aspectratio=169] # #+LATEX_CLASS_OPTIONS: [presentation] #+BEAMER_THEME: default #+COLUMNS: %45ITEM %10BEAMER_ENV(Env) %10BEAMER_ACT(Act) %4BEAMER_COL(Col) #+LANGUAGE: fr #+LATEX_HEADER: \usepackage[frenchb]{babel} #+BEGIN_SRC emacs-lisp :results silent :exports none (setq org-latex-pdf-process (list "latexmk -pdflatex='lualatex -shell-escape -interaction nonstopmode' -pdf -f %f")) (add-to-list 'org-latex-packages-alist '("" "minted")) (setq org-latex-listings 'minted) (setq org-src-fontify-natively t) (org-add-link-type "cite" 'ebib (lambda (path desc format) (cond ((eq format 'html) (format "(%s)" path)) ((eq format 'text) (format "[%s]" path)) ((eq format 'latex) (if (or (not desc) (equal 0 (search "cite:" desc))) (format "\\cite{%s}" path) (format "\\cite[%s][%s]{%s}" (cadr (split-string desc ";")) (car (split-string desc ";")) path)))))) #+END_SRC # Wrapper #+NAME: attr_wrap #+HEADER: :var width="\\textwidth" #+HEADER: :var caption="" #+HEADER: :var smallcaption="" #+HEADER: :var name="" #+HEADER: :var data="" #+HEADER: :var float="nil" #+BEGIN_SRC sh :results output :exports none echo "#+CAPTION[$smallcaption]: $caption" echo "#+NAME: $name" echo "#+ATTR_LATEX: :width $width :float $float" echo "$data" #+END_SRC #+LATEX_HEADER: \setbeamertemplate{footline}[frame number] #+LATEX_HEADER: \setbeamertemplate{headline}{} #+LATEX_HEADER: \usepackage{multirow} #+LATEX_HEADER: \usepackage{fontawesome5} #+LATEX_HEADER: \usepackage{tcolorbox} #+LATEX_HEADER: \usepackage{tikz} #+LATEX_HEADER: \logo{\includegraphics[width=.1\textwidth]{../../../src/View/ui/ressources/Logo-INRAE.png}} #+LATEX_HEADER: \newcommand{\R}[1]{\rotatebox[origin=c]{90}{#1}} # Beamer colors #+LATEX_HEADER: \setbeamersize{text margin left=0.5cm,text margin right=0.5cm} #+LATEX_HEADER: \setbeamerfont{alerted text}{series=\bfseries} #+LATEX_HEADER: \setbeamerfont{example text}{series=\bfseries} #+LATEX_HEADER: \definecolor{inrae_1}{RGB}{102,193,191} #+LATEX_HEADER: \definecolor{inrae_2}{RGB}{0,150,152} #+LATEX_HEADER: \definecolor{inrae_3}{RGB}{39,86,98} #+LATEX_HEADER: \setbeamercolor{alerted text}{fg=inrae_1} #+LATEX_HEADER: \setbeamercolor{structure}{fg=inrae_2} #+LATEX_HEADER: \setbeamercolor{normal text}{fg=inrae_3} #+LATEX_HEADER: \setbeamercolor*{author}{fg=inrae_3} #+LATEX_HEADER: \usepackage[absolute,showboxes,overlay]{textpos} #+LATEX_HEADER: \TPshowboxesfalse #+LATEX_HEADER: \textblockorigin{5mm}{0mm} # Biblio #+LATEX_HEADER: \usepackage{natbib} # #+LATEX_HEADER: \bibliographystyle{apalike} #+LATEX_HEADER: \setbeamertemplate{bibliography item}{} #+LATEX_HEADER: \renewcommand\bibfont{\scriptsize} #+LATEX_HEADER: \setbeamertemplate{frametitle continuation}[from second] #+LATEX_HEADER: \setbeamercolor*{bibliography entry title}{fg=inrae_3} #+LATEX_HEADER: \setbeamercolor*{bibliography entry author}{fg=inrae_3} #+LATEX_HEADER: \setbeamercolor*{bibliography entry location}{fg=inrae_3} #+LATEX_HEADER: \usepackage{bbding} #+LATEX_HEADER: \usepackage{pdfpages} # Renew title page #+LATEX_HEADER: \defbeamertemplate*{title page}{customized}[1][] #+LATEX_HEADER: { # #+LATEX_HEADER: { # #+LATEX_HEADER: \usebeamerfont{date}\usebeamercolor[fg]{date} # #+LATEX_HEADER: \tikz[overlay,remember picture] # #+LATEX_HEADER: \node[xshift=-1cm,yshift=-1cm,text width=10cm] at (current page.north east) { # #+LATEX_HEADER: 7$^{th}$ International Conference\\ # #+LATEX_HEADER: 8TH-10TH November\\ # #+LATEX_HEADER: EDF Lab - CHATOU, FRANCE # #+LATEX_HEADER: } # #+LATEX_HEADER: } #+LATEX_HEADER: { #+LATEX_HEADER: \usebeamerfont{title}\inserttitle\par #+LATEX_HEADER: \usebeamerfont{title}\usebeamercolor[fg]{title} #+LATEX_HEADER: } #+LATEX_HEADER: \bigskip #+LATEX_HEADER: \begin{center} #+LATEX_HEADER: \usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle} #+LATEX_HEADER: { #+LATEX_HEADER: \LARGE\insertsubtitle\par #+LATEX_HEADER: } #+LATEX_HEADER: \bigskip #+LATEX_HEADER: \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\par #+LATEX_HEADER: \bigskip #+LATEX_HEADER: \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute\par #+LATEX_HEADER: \bigskip #+LATEX_HEADER: \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate\par #+LATEX_HEADER: \usebeamercolor[fg]{titlegraphic}\inserttitlegraphic #+LATEX_HEADER: \end{center} #+LATEX_HEADER: } # #+LATEX_HEADER: \newcommand{\tred}[1]{\textcolor{rouge_inrae}{#1}} #+TODO: TODO WIP TOREVIEW | DONE #+MACRO: pamhyr \textsc{PAMHyR} #+MACRO: pamhyr2 \textsc{Pamhyr2} #+MACRO: pause \pause #+MACRO: framebreak \framebreak #+MACRO: no # #+MACRO: OK \checkmark #+MACRO: OK \faIcon{check} #+MACRO: bf \textbf{$1} # #+latex: \frame{\tocpage} * Problématique ** Problématique *** Utilisateur - Définire une version modifier de l'étude (changement dans les données) - Comparé des résultats entre une variante et l'étude {{{pause}}} **** COMMENT Développeur :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: - Un unique fichier - Limité la duplication de donnée à sauvegarder - Garder une bonne cohérence entre données et résultats {{{pause}}} *** Scénarios :PROPERTIES: :BEAMER_COL: 1 :BEAMER_ENV: definition :END: Un scénario est une variate d'une étude. ** Problématique -- Avancer *** Utilisateur - Définire une version modifier d'un senarios - Comparé des résultats entre plusieurs senarios {{{pause}}} **** COMMENT Développeur :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: - Un unique fichier - Limité la duplication de donnée à sauvegarder - Garder une bonne cohérence entre données et résultats {{{pause}}} *** Scénarios :PROPERTIES: :BEAMER_COL: 1 :BEAMER_ENV: definition :END: Un scénario peut être l'étude ou une variate d'un autre scénario. ** Problématique -- Encore plus avancer *** Utilisateur - Définire un ensemble fini de variante correspondant a un ensemble de valeur pour un(des) paramètre(s) et executer un solveur sur l'ensemble des variantes - Pouvoir comparé des metrics sur un ensemble de résultats trop grand pour une comparaisont à la mains {{{pause}}} **** COMMENT Développeur :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: - Un unique fichier - Limité la duplication de donnée à sauvegarder - Garder une bonne cohérence entre données et résultats {{{pause}}} *** Scénarios :PROPERTIES: :BEAMER_COL: 1 :BEAMER_ENV: definition :END: Un scénario peut être l'étude, une variate d'un scénarios ou un ensemble fini de variantes d'un scénarios. ** Problématique -- Encore plus plus avancer *** Utilisateur - Définire un ensemble fini de variante correspondant a un ensemble de valeur pour un(des) paramètre(s) et faire un nombre fini de tirage aléatoire dans ces paramètre pour executer un solveur ces paramètres - Pouvoir comparé des metrics sur un ensemble de résultats trop grand pour une comparaisont à la mains {{{pause}}} *** Scénarios :PROPERTIES: :BEAMER_COL: 1 :BEAMER_ENV: definition :END: Un scénario peut être l'étude, une variate d'un scénarios ou un ensemble fini ou un tirage aléatoire dans un ensemble de variantes d'un scénarios. ** Problématique -- Développeur *** Développeur - Permetre a l'utilisateur de *garder une bonne cohérence entre données et résultats* de façon claire - Permetre a l'utilisateur de *géré les scénarios* de façon claire (représentation graphique) - Garder *un unique fichier* (=.pamhyr=) - *Limité la duplication* de donnée à sauvegarder - Permetre à l'utilisateur de garder les *résultats pertinant* sans exploser la mémoire de l'ordinateur * Proposition ** Proposition -- Concept *** {{{no}}} \vspace{-1.2cm} **** Deux type de scénarios :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: - Scénarios simple - Scénarios d'éxecution d'ensemble {{{pause}}} **** Scénarios simple :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: Est composer: - d'un identifiant unique - d'un nom (définie par l'utilisateur) - d'une description (définie par l'utilisateur) - d'un parent (définie par l'utilisateur) {{{pause}}} \vspace{-0.5cm} *** Scénarios d'ensembles **** {{{no}}} :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: \vspace{-1cm} Est composer: - d'un identifiant unique - d'un nom (définie par l'utilisateur) - d'une description (définie par l'utilisateur) - d'un parent (définie par l'utilisateur) - d'un ou plusieurs ensemble de valeur **** {{{no}}} :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: \vspace{-0.5cm} Un ensemble de valeurs est definie par: - une valeurs de départ - une valeurs de fin - un pas de valeur - un élément d'origine (élément définie dans l'étude) - une fonctions (modification de l'élément à l'aide d'une valeur de l'ensemble) ** Proposition -- Limitation *** Scénarios simple :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: Si le scénarios est le *parent d'un autre scénarios*, il ne *peut plus être modifier* sans risquer des comportement difficilement comprehensible pour l'utilisateur. {{{pause}}} *** Scénarios d'ensembles :PROPERTIES: :BEAMER_COL: 0.5 :BEAMER_ENV: block :END: - Un scénarios d'ensemble *ne peut pas être parent* d'un autre scénarios - Le nombre d'exécution peut très rapidement grossir ** Proposition -- Affichage #+name: graph-scenarios #+header: :results drawer #+header: :exports results #+header: :post attr_wrap(width="7cm", data=*this*, name="graph-scenarios", caption="Exemple of scenarios graph", float="t") #+begin_src dot :file "images/graph-scenarios.png" :cache no digraph { bgcolor="transparent"; node[colorscheme=pastel19,shape=ellipse,style="filled",fillcolor=9]; b[fillcolor=2]; aa[shape=box,fillcolor=2]; aa2[label="aa'", shape=box, fillcolor=2]; ad[shape=box, fillcolor=2]; re[shape=box, fillcolor=2]; rf[shape=box, fillcolor=2]; default -> a; default -> b; default -> c; a -> aa; a -> aa2; a -> f -> rf; c -> d -> ad; c -> e -> re; } #+end_src #+RESULTS[80ed2484b9cc71143f800ff23c10846fd04697c3]: graph-scenarios :results: #+CAPTION[]: Exemple of scenarios graph #+NAME: graph-scenarios #+ATTR_LATEX: :width 7cm :float t [[file:images/graph-scenarios.png]] :end: * Solution technique ** Technique -- scénarios #+begin_src sql CREATE TABLE scenario( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, -- Name of the scenario description TEXT NOT NULL, -- Rich text description parent_id INTEGER REFERENCES scenario(id) -- Recursive references -- for parent scenario ) #+end_src ** Technique -- Données -- Enregistrement #+begin_src sql -- Unique ID (Must be unused, to delete) id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, -- New ID (not unique) pamhyr_id INTEGER NOT NULL, -- (Optional) Flag for set there is no data in this scenario and -- ignore parent scenario dummy BOOLEAN NOT NULL, -- Corresponding scenario scenario_id INTEGER NOT NULL, PRIMARY KEY(pamhyr_id, scenario_id), FOREIGN KEY(scenario_id) REFERENCES scenario(id), #+end_src ** Technique -- Données -- Chargement #+begin_src python :python python3 :results output :noweb yes def load(cls, db, current_scenario): # Default case, end of recursion if current_scenario is None: return [] # Default value table = db.execute(f" WHERE scenario_id = {current_scenario}") # If no data for this scenario, recursion if len(table) == 0: parent_id = db.get_parent_id(current_scenario) return cls.load(db, parent_id) # Otherelse, parse data and return... #+end_src ** Technique -- Données -- Modification #+begin_src python :python python3 :results output :noweb yes def set_modified(self, current_scenario): self.scenario = current_scenario #+end_src #+begin_src python :python python3 :results output :noweb yes def delete(self, current_scenario): self.deleted = True self.set_modified(current_scenario) #+end_src ** Technique -- Exécution d'ensemble #+begin_src sql CREATE TABLE range_set( id INTEGER PRIMARY KEY AUTOINCREMENT, start REAL NOT NULL, -- Range start end REAL NOT NULL, -- Range end step REAL NOT NULL, -- Range step generator_name TEXT NOT NULL, -- Generator function name (ex: -- 'minor_strickler') original_data_id INTEGER, -- (optional) Ref to data who apply -- this range (ex: a strickler id) scenario_id INTEGER NOT NULL, FOREIGN KEY(scenario_id) REFERENCES scenario(id) ) #+end_src * Sauvegarde des résultats ** Sauvegarde des résultats *** Scénarios simple Sauvegarde d'un seul résultats complet par scénarios (et par solver). *** Scénarios d'ensemble Sauvegarde de metrics récupéré sur un ensemble de résultats (pas de sauvegarde de tous les résultats) ou certain résultats particuliers. * Question & remarque ** Question & remarque - Solution satisfaisante ? - Cas d'usage intéressent non couvert ? - Contre exemple ? - Meilleur solution ?