VPZ

From VLE

Jump to: navigation, search

Contents

VPZ

Introduction

The VPZ (VLE Project file Zipped), is an XML file format use in VLE to represent:

  • the structure of the models: hierachy of coupled models, atomic models, connections, inputs and outputs port
  • the experimental conditions: how to initialize atomic models,
  • the observation: how to observe atomic models, output file format, observation policy (constant timed observation, by event or at the end of the simulation).
  • the experimental designs: which values to test for such experimental conditions.


The VPZ uses a DTD (Document Type Definition) to define the syntax:

Description of the VPZ

<xml>
<?xml version="1.0"?>
<!-- Soit vous utilisez la dtd localisée sur le site web -->
<!DOCTYPE vle_project PUBLIC "-//VLE TEAM//DTD Strict//EN"
"http://www.vle-project.org/vle-0.8.0.dtd">
<vle_project author="..." date="..." version="...">
 <structures>
  <model name="topmodel" type="coupled">
   <in>
    <port name="..." />
    <port name="..." />
   </in>
   <out>
    <port name="..." />
    <port name="..." />
   </out>
   <submodels>
    <model name="a" type="atomic" dynamics="dynamicA"
           conditions="conditionA" observables="obsA">
       <!--
       Nouveaux attributs qui font les liens vers les balises de
       dynamique et d'expérience pour supprimer la barrière des nom
       unique dans la hiérarchie de modèles.
       À noter la suppression des ports init et state dans la 
       définition de structures des modèles atomiques. Ils sont
       déplacés dans la définition de l'expérience.
       -->
     <in>
      <port name="..." />
      <port name="..." />
     </in>
     <out>
      <port name="..." />
      <port name="..." />
     </out>
    </model>
    <model name="b" type="atomic">
     <in>
      <port name="..." />
      <port name="..." />
     </in>
     <out>
      <port name="..." />
      <port name="..." />
     </out>
    </model>
   </submodels>
   <connections>
     <connection type="input|output|internal">
      <origin model="..." port="..." />
      <destination model="..." port="..." />
     </connection>
   </connections>
  </model>
 </structures>
 <dynamics>
     <!--
     ici, une simple liste de dynamique, à noter le changement de nom 
     de l'attribut, formalism devient library. Les attributs 'library'
     et model permettent de specifier le nom du modèle qui se trouve
     dans la bibliothèque dynamique. Deux possibilités sont
     offertes pour définir un modèles DEVS : utiliser la méthode
     DECLARE_DYNAMICS(example::counter) avec la définition
     XML suivante :
     -->
  <dynamic name="dynamicA" library="libcounter" location="host:port"/>
     <!--
     Où utiliser de multiples modèles dans une même bibliothèque
     dynamique :
     -->
  <dynamic name="dynamicB" library="big" model="toto" />
  <dynamic name="dynamicB" library="big" model="titi" />
  <dynamic name="dynamicB" library="big" model="tutu" />
     <!--
     Dans ce cas, il faut utiliser la macro :
     DECLARE_NAMED_DYNAMICS(toto, example::toto)
     DECLARE_NAMED_DYNAMICS(tutu, example2::tutu)
     DECLARE_NAMED_DYNAMICS(titi, example3::titi)
     -->
 </dynamics>
<experiment name="" duration="" seed="" combination="linear|total">
    <!--
    seed permet ici, d'initialiser la graîne du générateur aléatoire
    mais uniquement pour les simulations. Pour les plans, il faut
    passer par les réplicas.
    -->
  <replicas seed="" number="" />
  <conditions>
   <condition name="conditionA">
    <!--
    la condition qui pose les ports d'initalisation et le plan.
    -->
    <port name="...">
     <double>34.23</double>
     <double>33.23</double>
     <double>32.23</double>
     <double>31.23</double>
    </port>
   </condition>
  </conditions>
  <views>
   <outputs>
    <output name="outputa" format="distant|local" location="host:port"
            plugin="text|rdata|csv|cairo..." />
       <!--
       L'attribut format possède deux valeurs, distant pour une connection 
       avec un démon OOV ou EOV, l'attribut location doit alors fournir
       le 3-uples "machine:port:dossier". Si l'attribut format vaut local
       la balise location peut ne pas exister, si elle existe, elle fournit
       un chemin où les fichiers de sortie seront écris. L'attribut plugin
       indique à VLE où aux démons EOV et OOV, le type d'affiche voulu. Les
       plugin texte courant sont csv, rdata et text.
       -->
    <output name="outputb" format="distant" location="127.0.0.1:8000:/tmp"
            plugin="text|rdata|csv|cairo..." >
       <!--
       Paramétrage du greffons de sortie.
       -->
    </output>
   </outputs>
   <observables>
    <observable name="obsA">
     <port name="x">
      <attachedview name="measureA" />
     </port>
     <port name="y" />
     <port name="z" />
    </observable>
    <observable name="obsB">
     <port name="x" />
     <port name="y">
      <attachedview name="measureA" />
     </port>
     <port name="z" />
    </observable>
   </observables>
   <view name="viewA" type="timed|event|finish" output="outputa" timestep="0.5" />
    <!--
    L'attribut timestep n'est nécessaire que pour le type timestep.
    - timed : résultat de la simulation par par de temps.
    - event : après chaque transition interne ou externe.
    - finish : après l'appel de la fonction finish de tous les modèles.
    -->
  </views>
 </expriment>
</vle_project>
</xml>

Description of values

VLE uses the libvlevalue library to provided datas for DEVS external transition and observation, for experimental conditions and some plug-in. The XML syntax is:

  • Integer (encapsulate a C++ type long integer) :
<integer>10</integer>
  • Real (encapsulate a C++ type double):
<double>20.003</double>
  • Boolean (encapsulate a C++ type bool):
<boolean>true</boolean>
<boolean>1</boolean>
  • String (encapsulate a C++ type std::string):
<string>
 aaa bbbbb cc ddddd eee ddd fff ggg hhhhhhh iiiiii jj kkkkk lll mmmmmm
 nnn oo ppppppppp qqqqqq rrr sss ttt uuu vvv wwww x yyyy zzz.
</string>
  • 2 dimension array of real (encapsulate a C++ type boost::multi_array < 2, double >):
<table width="4" height="2">
 0 1 2 3 4 5 6 7
</table>
  • 1 dimension array of real (encapsulate a C++ type std::vector < double >):
<tuple>
 1 2 3 4 5 6 7 8 9 10 11 12
</tuple>
  • Set of value (encapsulte any value, std::vector < Value* >):
<set>
 <string>totot</string>
 <integer>123</integer>
</set>
  • Dictionary (encapsulate any value, std::map < std::string, Value* >):
<map>
 <key name="tutu">
  <integer>123</integer>
 </key>
 <key name="tata">
  <double>123.654987</double>
 </key>
</map>
  • 2 dimension array of value (encapsulate any value, boost::multi_array < 2, Value* >):
<matrix rows="" columns="" rowmax="" columnmax=""
        rowstep="" columnstep="">
 ... <!-- rows * columns values -->
</matrix>
  • Xml (encapsulate a C++ type std::string):
<xml>
<![CDATA[
 [...] ### free data
]]>
</xml>
This page was last modified on 27 June 2010, at 13:42. This page has been accessed 782 times.