mirror of https://gitlab.com/pamhyr/pamhyr2
526 lines
14 KiB
Org Mode
526 lines
14 KiB
Org Mode
# 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 <https://www.gnu.org/licenses/>.
|
|
|
|
# -*- 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 "(<cite>%s</cite>)" 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"<MY SELECT> 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 ?
|