Scripts - Règles

Une règle permet de récupérer des données ou de les modifier avant ou après chaque pas de temps d'une simulation.

Cependant attention, toutes les modifications effectuées par une règles sur la base de données sont annulées à la fin de chaque pas de temps.

Scripts

Les règles sont situées dans le dossier rule et doivent obligatoirement hériter de fr.ifremer.isisfish.rule.AbstractRule qui implémente lui même l'interface fr.ifremer.isisfish.rule.Rule.

Chaque règle doit implémenter 4 méthodes obligatoire:

  • init : qui permet d'initialiser la règle
  • condition : qui permet on non d'appliquer la règle sur le pas de temps courant pour le métier
  • preAction : action de la règle avant le pas de temps
  • postAction : action de la règle après le pas de temps

Utilisation des règles par ISIS-Fish

Dans ISIS-Fish, les règles sont utilisées par les simulateurs.

Au début de la simulation, ISIS-Fish instancie l'ensemble des règles que l'utilisateur a sélectionné et appele la méthode init pour chaque règle. La méthode init est donc appelée une seule fois.

Ensuite, dans la boucle générale sur les pas de temps, le simulateur:

  • appelle la méthode condition pour tous les métiers et pour toutes les règles (les méthodes condition de toutes les règles sont appelées avant les autres méthodes de la règles)
  • appelle la méthode preAction pour toutes les règles et tous les métier ssi la méthode condition a renvoyé true pour la règle et le métier
  • effectue la simulation du pas de temps courant
  • appelle la méthode postAction pour toutes les règles et tous les métier ssi la méthode condition a renvoyé true pour la règle et le métier
  • annulation des modifications de la base de données

De façon algorithmique, voilà l’enchaînement des appels:

// debut de simulation
pour toutes les règles
  appel de la méthode init() de la règle
finpour

pour chaque pas de temps
  // condition
  pour toutes les regles
    pour tous les metiers
      appel de la methode condition()

  // preAction
  pour toutes les regles
    pour tous les metiers
      si la regle est active pour ce metier
        appel de la methode preAction()

  // simulation du pas de temps

  // postAction
  pour toutes les regles
    pour tous les metiers
      si la regle est active pour ce metier
        appel de la méthode postAction()

Points de vigilance

preAction / postAction

Les méthodes preAction et postAction sont appelées plusieurs fois à chaque pas de temps (une fois pour chaque métier). Si une règle doit effectuer une preAction ou une postAction une seule fois pas pas de temps, il faudra utiliser une astuce pour ne l'effectuer qu'une seule fois par pas de temps (tel qu'un boolean d'état en attribut de règle).

Instance de règle

Une règles n'est instancié qu'une seule fois par simulation et la méthode init n'est appelée qu'une seule et unique fois. Les attributs de la classe ne sont donc pas réinitialisé entre les pas de temps

Annulation des modifications

Si une règle doit modifier la base de données, et devra le refaire à chaque pas de temps. Toutes les modifications sont annulées à chaque fin de pas de temps.