Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implémenter le système de liste dans publicodes #435

Open
Tracked by #1088
laem opened this issue Jan 17, 2022 · 3 comments
Open
Tracked by #1088

Implémenter le système de liste dans publicodes #435

laem opened this issue Jan 17, 2022 · 3 comments

Comments

@laem
Copy link
Contributor

laem commented Jan 17, 2022

Ici une grande partie de l'intelligence de calcul (somme toute relative ^) qui devrait être dans publicodes : https://github.com/datagir/nosgestesclimat-site/pull/409/files#diff-73eeca0ee84c6866e5b3fe30b00adbaa9326ab7ea2f02ea3487c68acb7a213c9R6 via une nouvelle capacité à sommer sur une liste d'instances d'une classe, le trajet.

CF la nouvelle saisie introduite dans #409

En termes de gains pour l'interface

Permettrait de proposer des questions où l'utilisateur peut saisir un quantité non fixe d'objets, avec chacun des propriétés personnalisées à partir d'un schéma.

Plusieurs voitures, plusieurs maisons, appartements, 4 vélos, etc.

@Clemog
Copy link
Contributor

Clemog commented Jan 18, 2022

J'ai un peu de mal à comprendre et visualiser le fonctionnement de cette nouvelle implé publicodes, est ce que tu peux préciser par rapport à ces "trajets" (@laem) ?

@laem
Copy link
Contributor Author

laem commented Jan 31, 2022

L'idée est de permettre de remplir une liste dynamique (il peut y avoir 1 ou 10 éléments) d’objets, qui sont spécifiés par des variables publicodes.

Dans notre cas de la liste de trajets, on pourrait alors spécifier dans les personas une liste pour la variable transport . voiture . trajets, et transport . voiture . km serait la somme des km de ces trajets. Tout reste à écrire en termes de syntaxe, de code et tout.

@laem
Copy link
Contributor Author

laem commented Mar 9, 2022

voiture:
type: liste

# [{}, {}...] plutôt que {}

voiture . consommation:
question: Quelle conso ?
unité: l/100km

voiture . km:
question: Combien de km faits avec cette voiture ?
unité: km

voiture . km nets:
formule: km / voyageurs

voiture . voyageurs:
unité: personnes
question: Combien de voyageurs en moyenne pour ce trajet ?

type liste:
description: |
Le type liste pourrait simplement être décidé par le client de publicodes dans sa façon de
renseigner les données dans la situation.

    voiture:
      - consommation: 8 l/100km
        km: 400 km
        voyageurs: 4
      - consommation: 6 l/100km
        km: 600 km
        voyageurs: 2

    En voyant cette situation, publicodes comprendrait tout seul qu'on a décidé d'en faire une liste.

    En conséquence, toutes les variables d'un modèle pourraient être transformées à volonté en liste.

    La question finalement se résume non pas à la définition d'une liste, mais à son utilisation.

    transport = voiture + train

    Et c'est à ce moment là qu'on doit savoir de quelle voiture on parle.

    Si voiture est une liste, par défaut on pourrait simplement utiliser liste-de-voitures[0].

    transport = km voiture total + train

    transport . km voiture total = Somme(voiture . km nets)

    Donc somme serait un nouveau mécanisme.

    Deux problèmes :
      - si la variable qui somme un attribut des voitures est rattachée à voiture, problème de poule et d'oeuf.

      Mais on peut l'attacher à `transport`, ou même à `voitures`.


    Il faut décider ce que donne engine.evaluate(voiture . km nets) par défaut : on prend voitures[0].km nets ?
    On définit ça par paramètres de publicodes "par défaut, prend le premier élément d'une liste". On pourrait aussi
    par défaut utiliser la moyenne des valeurs. Ou encore la somme des valeurs. Donc ça fonctionnerait
    en fonction du type de la variable : si c'est une liste de possibilités, la seule solution serait
    soit une erreur, soit la première.

    Si on se dit que le mieux est de sortir une erreur quand on appelle `voiture . km nets`, alors autant
    spécifier dans le code que voiture est un type liste, comme ça c'est clair.

    Une autre solution serait de laisser voiture tel quel, mais de définir dans le modèle une
    variable :

    voitures:
      liste: voiture

    Parlons pratique. On publie un modèle de calcul de km en voiture.

    L'utilisateur 1 de ce modèle décide qu'il n'y a qu'une voiture possible.
    L'utilisateur 2 lui veut dans son questionnaire permettre de renseigner plusieurs voitures.

    Est-ce qu'on rend la syntaxe liste assez flexible pour permettre les deux usages, ou est-ce qu'on
    force l'un des deux usages ?

@Clemog Clemog changed the title Implémenter le système de liste de trajets dans publicodes Implémenter le système de liste dans publicodes Aug 30, 2022
@laem laem mentioned this issue Jun 1, 2023
21 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants