Le Coin Wiki
d'Olivier Dalle
$WikiTagline
 

Simulation a evenements discrets

Seance de TP 6

Le sujet du TP, not, vous sera communiqu (et expliqu) durant la seance de Cours.

La page de Eric Brunneton

Pour ce TP, vous aurez besoin de code suivant:

package digital;

import GenCol.entity;
import genDevs.modeling.content;
import genDevs.modeling.message;
import simView.ViewableAtomic;

public class Ptrans extends ViewableAtomic {

        private boolean grid_;
        private boolean source_;
        private boolean sink_;
        public static entity zero = new entity("zero");
        public static entity un = new entity("un");


        public Ptrans(){
                super("Ptrans");
                source_ = true;
                grid_ = false;

                addInport("src");
                addInport("cmd");
                addOutport("sink");
                addTestInput("src",un);
                addTestInput("src",zero);
                addTestInput("cmd",un);
                addTestInput("cmd",zero);
                addTestInput("src",un,1.0);
                addTestInput("src",zero,1.0);
                addTestInput("cmd",un,1.0);
                addTestInput("cmd",zero,1.0);
        }

        public Ptrans(String name,boolean autosrc) {
                super(name);
                source_ = autosrc;
                grid_ = false;

                if (! autosrc)
                        addInport("src");
                addInport("cmd");
                addOutport("sink");
        }

        public void initialize() {
                sink_ = source_ && ! grid_;
                holdIn("active",0.0);
        }

        public void deltint() {
                passivate();
        }

        public void deltext(double e,message x){
                Continue(e);

                for (int i=0; i< x.getLength();i++) {
                        if (messageOnPort(x,"src",i)) {
                                entity val = x.getValOnPort("src", i);
                                if (((val.equals(zero)) && source_) ||
                                                ((val.equals(un)) && ! source_)){
                                        source_ = (val.equals(un));
                                }
                        }

                        if (messageOnPort(x,"cmd",i)) {
                                entity val = x.getValOnPort("cmd", i);
                                if (((val.equals(zero)) && grid_) ||
                                                ((val.equals(un)) && ! grid_)){
                                        grid_ = (val.equals(un));
                                }
                        }


                }

                sink_ = source_ && ! grid_;
                holdIn("active",0);
        }

        public static entity bool_entity(boolean val){
                if (val) return un;
                else return zero;
        }

        public message out( )
        {
                /* Construire la valeur de sortie. */
                entity   e = bool_entity(sink_);
                /* Construire la sortie simple */
                content  c = makeContent("sink",e);
                /* Construire un message vide */
                message  m = new message();
                /* Remplir le message avec une premiere (unique) sortie */
                m.add(c);
                return m;
        }

        /**
         * Cette methode permet d'ajouter des informations dans
         * la bulle qui s'affiche quand on passe la souris au dessus du composant
         * dans la fenetre graphique.
         */

        public String getTooltipText(){
                return super.getTooltipText()
                    +"\n"+"src: " + source_+"\n"+"cmd: " + grid_;
        }
}

Rendez-vous sur cette page pour la correction de l’exercice de la seance de TP 4.

Sance de TP 5

Ex 1 : premier DEVS couple

Finir les exercices de la semaine derniere a propos de l’exemple: la derniere question a justement pour objectif de faire un DEVS couple.

Ex 2 : Boite-noire-isation

Executez le modele efp du package SimpArc. Remarquez que le modele ef apparait comme atomique. Pourtant c’est un modele hiererachique. Regardez le code et triuvez ce qu’il faut changer pour rendre le contenu du DEVS couple ef visible. Faites ensuite la manipulation inverse de facon a rendre le contenu du composant d invisiable.

Ex 3 : Etude d’un modele DEVSJava

Etudiez le modele multiServer du package SimpArc. Commencez par le modifier de facon a ce qu’il contienne 4 processeurs. Essayez ensuite de decrire formellement, en utilisant la notation mathematique, le comportement des composants atomiques de ce modele.

Sance de TP 4

Cette semaine nous allons (enfin) passer a la programation. Comme pour la seance de TP1, commencez par lancer eclipse. Notez que sur les machines fedora, eclipse doit se trouver quelque part en /usr/local/bin. Vous pouvez ajouter ce chemin dans votre variable PATH et relancer un terminal.

Une fois que vous avez dmarr eclipse, ouvrez le projet DEVJava que vous avez cr lors de la premire sance de TP et faites les exercices suivants:

Ex 1 : Crer un nouveau package

Avant de pouvoir crer vos propre DEVS, il faut crer un package pour viter de mlanger votre code avec le code original.

Dans la fenetre de gauche de eclipse, cliquez avec le bouton droit sur le rpertoire src contenant les sources. Puis cliquez sur “New…” et choisissez “Package”.

Appelez ce package comme vous voulez, par exemple votre prnom.

Ex 2 : Crer une nouvelle classe

L’objectif est maintenant de crer une nouvelle classe dans le package que vous venez de crer:

cliquez avec le bouton droit sur le nouveau package, puis sur “New” e choisissez “Class”. Attention lisez-bien: donnez lui le nom “monDEVS”, mais avant de cliquer sur “Finish”, remplacez le contenu de la case “Superclass” par “Viewable” (au lieu de “java.lang.Object”). Avant de valider, cliquez sur le bouton “Browse” afin de complter le nom (qui devrait tre “simView.ViewableAtomic”).

Enfin, vous pouvez cliquer sur finish.

Ex 3 : un exemple avec une classe connue

Avant de se lancer dans le dveloppement d’un composant DEVS, il faut se familiariser plus avec l’environement java.

Consultez ce fichier java. Crez la classe correspondante de nom “odBuffer” dans votre package, et recopiez-y le contenu de ce fichier java.

Ex 4 : tester l’execution d’une classe

Rappelez-vous de la premiere seance de TP: pour tester un classe, il faut cliquer avec le bouton droit sur le fichier “coreDEVS3_1.jar” que se trouve dans les “Referenced Libraries” (enfin normalement, sinon, demandez a l’enseignant de vous aider) puis choisir soit open, soit “Run as” puis “Java application”.

Quand vous avez reussi a lancer DEVSjava, il vous faut le configurer de facon a retrouver votre package. Quand il est configur, vous etes prets a tester…

Ex 5 : mon premier DEVS en solo

Completez le code de la classe monDEVS de facon a implementer le composant generateur vu en cours, puis testez son execution.

Ex 6 : un autre DEVS bien connu

Creez un nouveau DEVS qui implement le modele du processeur vu en cours et testez-le.

Ex 7 : pour les courageux

Essayez d’assembler tout cela pour reproduire l’exemple du cours. Pour cela vous pouvez fouiller dans les exemples fournis pour chercher des exemples. Regardez par exemple le contenu du package SimpArc…

Sance de TP 3

Cette semaine encore nous ferons quelques exercices sur le papier avant, la semaine prochaine de passer a la programmation.

Ex 1 : Etude de comportement

Faites les schemas chronologiques decrivant le compotement du DEVS coupl vu en cours et de ses constituants.

Ex 2 : Composant generateur

Ce composant ne produit aucune reponse quand une valeur est fournie en entree. En sortie, il produit simplement la valeur 1 a intervalle de temps rgulier, fix (paramtre du modle, not periode).

Tracez les courbes reprsentant X, S, t et Y en fonction du temps. Puis donnez la spcification formelle de ce composant: DEVS={X, Y, S, delta_int, delta_ext, lambda, ta)

Ex 3 : Composant compteur binaire

Ce composant produit en sortie une valeur 1, chaque fois qu’il recoit deux valeur 1 en entree. Pour cela, il conserve un compteur (modulo 2) des “un” qu’il a vu passer sur l’entree. Quand il recoit un “un” qui rend le compteur pair, il passe dans une phase “active” de facon a produire la sortie immediatement.

Tracez les courbes reprsentant X, S, t et Y en fonction du temps. Puis donnez la spcification formelle de ce composant: DEVS={X, Y, S, delta_int, delta_ext, lambda, ta)

Seance de TP 2

Pour cette sance nous n’aurons pas besoin des machines, nous allons concevoir des composants DEVS sur le papier.

Composant 1 : Composant passif

C’est le plus simple des composants. Il est appel passif car quelle que soit l’entre il ne fournit pas de sortie.

Tracez les courbes reprsentant X, S, t et Y en fonction du temps. Puis donnez la spcification formelle de ce composant: DEVS={X, Y, S, delat_int, delta_ext, lambda, ta)

Composant 2 : Composant de stockage

Ce composant recoit des valeur reelles en entre. Lorsque la valeur en entre est diffrente de zro, le composant stocke la valeur. Lorsqu’elle vaut zro, le composant passe en mode rponse pour un certain dlai. A l’issue de ce dlai, la valeur stocke est place en sortie. Dans le cas ou une valeur est fournie en entre lors de la phase de rponse, la valeur en entre est ignore et la phase de rponse se poursuit jusqu’ la fin du dlai initialement prvu.

Tracez les courbes reprsentant X, S, t et Y en fonction du temps. Puis donnez la spcification formelle de ce composant: DEVS={X, Y, S, delat_int, delta_ext, lambda, ta)

Seance de TP 1

L’objectif de cette seance est de decouvrir l’outil de simulation DEVSJava developp conjointement par ASU et UoA.

Ce logiciel fonctionne avec Java version 1.5. L’objectif de cette seance sera d’installer le logiciel, puis d’experimenter les differents modeles proposes dans les exemples fournis.

La copie de ce logiciel n’etant pas libre, il n’est oas possible de vous le mettre a disposition sur cette page, mais vous pouvez vous rendre sur celle-ci a l’aide du mot de passe qui vous sera communique par votre enseignant.

Procedure d’installation:

  1. Telechargez les fichiers de la page de telechargement sur votre compte dans un repertoire DEVSjava
  2. lancer l’environnement de programmation Java Eclipse (ou NetBeans)
  3. Creer un nouveau “workspace” pour les TPs de simulation
  4. Creer un nouveau projet
  5. Ouvrez le menu de configuration du projet
  6. ajoutez le fichier jar Core DEVSJAVA dans la liste des Libriairies du projet (selectionner java build path dans la partie gauche, puis l’onglet librairie, puis ajouter une librairie externe)
  7. importez les exemples (menu file: import, puis choisir archive file dans la categorie general)

Configuration

  1. Ouvrez l’element Referenced librairies dans la fenetre package explorer, de facon a faire apparaitre le fichier jar coreDEVSjava.
  2. selectionnez ce fichier jar avec la souris
  3. lancez DEVS java a l’aide du menu bouton droit de la souris, choisissez “Run as”, choisissez java application, puis selectionnez le choix SimView
  4. Eclipse signale des erreurs, mais continuez
  5. la fenetre graphique du DEVSjava doit apparaitre.
  6. cliquez sur le bouton config
  7. entrez le chemin “src/” pour les fichiers sources, et “bin/” our les fichiers class
  8. dans la 3e partie de la fenetre de configuration, entrez en toutes lettres le nom suivant: “Continuity”
  9. Essayez de decouvrir comment faire tourner un exemple (attention tous les choix ne fonctionnent pas…)