cui-unige / outils-formels-modelisation

Cours de Bachelor : Outils Formels de Modélisation
20 stars 44 forks source link

Graphe de marquage #14

Closed CelineRenaud closed 6 years ago

CelineRenaud commented 6 years ago

Bonjour,

J'ai bien compris le fonctionnement théorique du graphe de marquage.

Je n'arrive cependant pas à l'implémenter avec pour seul exemple le fichier contenu dans "outils-formels-modelisation/tp-02/Smokers/Tests/SmokersLibTests"

Mon problème vient principalement du fait qu'il y a qu'une seule transition et une seule place. Je vois bien le résultat, mais n'arrive pas à voir le fonctionnement de ce petit bout de code. ça serait plus facile avec un reseau avec 2 places et une transition (peu-être, je sais pas). En tout cas, là je ne saisi pas les subtilités.

Y a-t-il un autre fichier que je pourrais lire pour comprendre un peu mieux le fonctionnement ?

Meilleurs messages, Céline

kaikoveritch commented 6 years ago

Salut,

En fait, SmokerLibTests n'est pas sensé être un exemple, mais bel un bien une série de tests (ce qui explique probablement le fait que ça n'éclaircisse pas grand chose pour toi). Le bout de code auquel tu fais référence ne fait qu'appeler la fonction de génération de graphe de marquage (que vous devez réaliser) et vérifier qu'elle renvoie un résultat correct.

Pour ce qui est de comment tu devrais définir cette fameuse fonction, tous les éléments dont tu as besoin sont donnés dans le fichier "PTNet+Extensions.swift". Tu as déjà l'entête de la fonction qui t'indique la nature du paramètre d'entrée et de ce que tu dois retourner. Je te recommande de lire attentivement la définition de la classe "MarkingGraph" et d'essayer de bien comprendre comment elle fonctionne. Ensuite, il va te falloir un peu de programmation judicieuse pour obtenir le résultat voulu.

J'espère que j'ai éclairci un peu les choses pour toi, sinon n'hésite pas à demander ici ou en classe vendredi.

CelineRenaud commented 6 years ago

Bien.

Du coup, est-ce que la classe est une abstraction qu'il faut définir ou juste un objet ?

kaikoveritch commented 6 years ago

Ta question est un peu confuse... Concerne-t-elle les classes en général ou la classe MarkingGraphe qui vous est donnée ?

CelineRenaud commented 6 years ago

Pardon je recommence.

La class MarkingGraph crée différents objets de types graphe.

J'ai déjà un problème pour lire le constructeur : successors: [PTTransition: MarkingGraph] = [:] que représente cette partie ?

Peut-etre que je suis bloquée à cause de ça... ou pas

kyouko-taiga commented 6 years ago

La propriété successors est un mapping de transitions (objets de types PTTransition) vers d'autres noeuds de graphe. C'est ce qui permet de représenter un arc du graphe de marquage. Un mapping est souvent représenté par un dictionnaire en Swift. [:] n'est qu'un sucre syntaxique pour initialiser un dictionnaire vide.

Le constructeur init(marking:successors:) défini l'argument par défaut [:] (i.e. dictionnaire vide) pour son second paramètre. Ceci permet de créer un nouvel objet de type MarkingGraph de deux manières:

var node1 = MarkingGraph(marking: [p0: 1, p1: 2])
print(node1.successors)
// "[:]" <- l'argument par défaut
var node2 = MarkingGraph(marking: [p0: 1, p1: 2], successors: [t0: node1])
print(node2.successors)
// "[t0: MarkingGraph]" <- l'argument passé explicitement