# 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 ?