Re: [xmile] SMILE and XMILE

From
Bob Eberlein <>
Date
2013-08-26T10:19:36+00:00
ID
Thread
Re: [xmile] SMILE and XMILE
Part 2.

    

    
    

      

        

          Re:
              SMILE and XMILE
          
by Magne
                Myrtveit » Thu Aug 08, 2013 4:18 pm 

          
A) To Bob's suggestion about stop using
            SMILE:

            

            A language - such as a modelling language - is an abstract
            phenomenon, which requires a representation to become
            useful. The human-centric equations syntax, and the
            corresponding graphical syntax, are two representation of a
            system dynamics language, while a computer-centric XML-based
            document format is another representation.

            

            This supports Bob's suggestion to work with just one name
            for the language.

            

            My opinion is - for what it is worth - that the core system
            dynamics language (the standard) should be called something
            like SDL or SDCML (System Dynamics Community Model
            Language), while extensions to that language should be named
            by the respective vendors.

            

            Since XMILE de facto is a isee language, given its elaborate
            definition of non-standard extensions to core SD, it should
            either be reserved for isee, or otherwise XMILE must be
            scaled down to the bone, and isee asked to pick a new name
            for their extended version, for example The isee modelling
            language, or the iThink language.

            

            In general, it makes no sense that a vendor's language and
            the standard language for a community are one and the same.
            One way to see why, is to notice that the first extension or
            change this vendor makes to the language, will introduce a
            conflict between the standard language and the vendor's
            language.

            

            (The naming and scope of XMILE belongs to a larger
            discussion of potentially good and bad consequences of
            different ways to set the standard).

            

            B) To Bob's suggestions for layout of our discussion: I
            agree that we need to structure our exchange. But in my
            view, schemas (DTD
            and XSD) belong to the syntax level of the document
            representation of a language, i.e., quite far down in the
            language levels, as I described in http://www.systemdynamics.org/forum/viewtopic.php?f=21&t=350.
            A DTD can, if people learn how to read it, serve as a
            high-level definition of objects, object properties, and
            object relationships at the conceptual level of a model. However,
            it is better to use simple class diagrams or drawings at
            this level. (XSD is quite unreadable, and useful only at the
            final stages of specification, as a help for developers to
            create and test their implementation of the standard).
            Therefore, I think we can postpone schema definitions to
            quite late in the process.

            

            Best regards from sunny Norway,

            Magne

        

        
           Magne
              Myrtveit 
           
          Posts: 51
          Joined: Mon Jan 12, 2009 6:52 am
        
        
Top

        

    

    

      

        

          Re:
              SMILE and XMILE
          
by Magne
                Myrtveit » Fri Aug 09, 2013 3:42 am 

          
Regarding naming of the SD standard core
            language, it is a pity that "J" is already occupied for
            another computer language. It would have been great to
            honour the founder of the field by naming the language after
            him. However, "JF" too, is a nice name for a language -- not
            to mention JFK 

        

        
           Magne
              Myrtveit 
           
          Posts: 51
          Joined: Mon Jan 12, 2009 6:52 am
        
        
Top

        

    

    

      

        

          Re:
              SMILE and XMILE
          
by Robert
                Eberlein » Fri Aug 09, 2013 8:44 am 

          
Magne, 

            

            Thanks for the comments on this and your excellent writeup
            on data flow modeling frameworks. 

            

            I believe that you have ultimately argued in favor of
            distinction between the name by which the computational
            language is called and that for its encoding (not to mention
            the encoding for visual representations and control
            features). It would indeed have been cool to use a moniker
            like J for a common computational language, but perhaps
            something more mundane such a SDCL for System Dynamics
            Computational Language would work. I guess my biggest
            objection to SMILE is that is always getting mixed up with
            XMILE.

            

            Leaving naming aside for a moment, there is a more
            fundamental question of what is the clearest way of
            representing the underlying computational language. Dynamo
            and Vensim use the very traditional ordinary text
            representation with = for assignment as in:

            

            A=B

            

            In Dynamo that representation was exactly what there was,
            and users changed it by editing the text. In the modern SD
            languages, however, people rarely deal with such text. The
            XMILE encoding which would be

            

            <aux name="A">

            <eqn>B</eqn>

            </aux>

            

            This is probably closer to what most users see (replacing
            the markup with a dialog of some sort). So the question I am
            struggling with is whether it is best to specify the entire
            language in a more traditional format, then specify the
            encoding which is necessarily a partially parsed version of
            that language, or specify the language in such a way that
            the encoding adds only tag formality and does not require
            any parsing relative to the specification.

            

            Originally I was leaning toward the former, which is not
            surprising given that this is exactly how Vensim works. Now,
            however, I am leaning somewhat more toward the latter, as it
            simplifies a number of issues. Two exemplars are subscripts
            and non-negative levels.

            

            Using the traditional assignment representation when a
            variable appears with subscripts it is necessary to try to
            determine what those subscripts mean. Encountering
            "Population[1]" in an equation simply tells us that the
            variable "Population" has a single subscript, nothing about
            what the subscript is. If, however, the variable Population
            shows up with something like:

            

            Level: Population

            Subscripts: AgeGroup

            Units: Person

            

            and so on then "Population[1]" is perfectly well defined.

            

            Similarly, for a non negative level we ,might have something
            like

            

            Level: WorkInProcess

            Outflows: Rejects, Completions

            Nonnegative: Completions, Rejects

            

            and so on. (Two important comments. 1. I completely reject
            the use of nonnegative level constructs because the
            explicitly mask the feedback that must be in place to make
            them come true. 2. I do not think we should restrict Level
            formulations to only have explicitly named input and outputs
            as this is too constraining especially for people (like me)
            who never use SMOOTH/SMTH1).

            

            I think the current computational description (the SMILE
            draft) should reflect these structures more clearly. I
            recognize that there is a bit of a chicken and egg problem
            here (that the XML definition depends on the spec which is
            created with the XML definition in mind). And that there are
            some programmatic overtones (what data structures are
            necessary to implement will partly drive the definitions).
            Still, I think we can achieve clarity and have the
            computational specification as readable by a typical modeler
            as it would be with the more traditional assignment
            notation.

            

            I would very much like to hear the thoughts of others on
            this.

        

        
           Robert
              Eberlein 
          Site Admin
           
          Posts: 157
          Joined: Sat Dec 27, 2008 8:09 pm
        
        
Top

        

    

    

      

        

          Re:
              SMILE and XMILE
          
by Magne
                Myrtveit » Sat Aug 10, 2013 4:47 pm 

          
Hi Bob,

            

            It would be great to have more people involved in this
            thread. Hopefully we will get company soon. Below are some
            comments to your recent post. (Page numbers refer to "A
            framework for dataflow models").

            

            Naming

            
              
I guess my biggest objection to SMILE is that is
                always getting mixed up with XMILE.

              

            
            

            Agree. If used for the SD Core Language (SDCL) the X in
            XMILE is also misleading, since XML is a computer-centric
            representation of structured contents.

            

            Equation format

            
              
So the question I am struggling with is whether it is
                best to specify the entire language in a more
                traditional format, then specify the encoding which is
                necessarily a partially parsed version of that language,
                or specify the language in such a way that the encoding
                adds only tag formality and does not require any parsing
                relative to the specification.

            
            

            

            A language should be defined in terms of its abstract
            concepts, and represented in different ways, depending on
            the purpose or situation. Here are some examples:

            

            Example 1:
            When listing model equations as part of a document (an
            article, a book, or similar), the conventional mathematical
            equation is the preferred form:

            

            
              Code: Select all
              name=definition
            
            

            

            Example 2:
            Modern software typically provide access to individual
            object properties via widgets that are part of the GUI. When
            this is the case, name will be edited in one widget, and
            definition in another. (There is no need for the software to
            parse the equation to separate the name part from the
            definition part).

            

            
              Code: Select all
              Name: <Enter name here>

                  Definition: <Enter definition here>

                
            
            

            

            Example 3:
            Internally, the software represents a variable as an object,
            with multiple properties. When saving the object to file, a
            structured representation has many advantages over plain
            text. XML is one possible framework to use. In my definition
            of the dataflowml
            framework, I have specified that the definition property is
            plan text. The reason for that, is that different vendors
            use significantly different syntax for the right-hand-side
            of equations. Vendors can provide extra XML elements for the
            right-hand side in addition to the text. One possibility is
            to store the definition as mathml,
            and as a collection of other XML elements, the way XMILE
            does it. Following dataflowml, the XML representation for an
            equation is like this (page 38):

            

            
              Code: Select all
              <m:Variable Id="..." Definition="...">

                     <m:Names>

                        <m:Name>...</m:Name>

                     </m:Names>

                     <m:Description/>

                  <variable/>

                
            
            

            

            The XML format (like the example above) can obviously not be
            used for publishing equations for humans to read. We do need
            an equations syntax, that is clear.

            

            Example 4: A
            DTD can be used to represent the structure of the XML
            representation of a model (see page 39). It is an "almost
            human-readable" format, that can be used by programmers to define
            language structure. (I used it when writing the XML
            specification of Smia models. Smia documents still contain a
            complete DTD and XSD defining the document format. The DTD
            and XSD is auto-generated by Smia's code, so they are always
            up-to-date when a new Smia release is made).

            

            Structure of expressions

            For the text-based representation of equations, it would be
            nice of we could come up with a framework (a set of
            keywords) that can be recommended to use. As an example,
            here is an example of what I suggest for stock definitions:

            

            
              Code: Select all
              account = stock 1000USD inflow interest inflow
                  deposits outflow withdrawals

                
            
            

            

            Subscripts

            
              
Encountering "Population[1]" in an equation simply
                tells us that the variable "Population" has a single
                subscript, nothing about what the subscript is.

            
            

            

            The equation where population
            is defined, will contain the necessary information about the
            dimensions of Population. When the variable is used on the
            right-hand-side of some equation, subscripts will be checked
            against the definition of the subscribed variable. This will
            be the case no matter how the variables are represented,
            assuming that the equations-based representation contains as
            much information as any structured representation that might
            be used instead. To be specific, let us look at your
            example:

            

            
              Code: Select all
              Level: Population

                  Subscripts: AgeGroup

                  Units: Person
            
            

            

            A single equation can capture exactly the same information,
            like this:

            

            
              Code: Select all
              Population = stock {AgeGroup | ... } as Person

                
            
            

            

            Here I make use of my suggestion to use braces {...} for
            arrays and "as ..."
            for giving the type and/or unit of a variable. Note that "as Person" is needed
            only if the _expression_ defining the variable does not
            implicitly determine the data type and unit of the variable.

            

            A problem with representing the definition of a variable,
            say, as a structured text, is that this would require a very
            elaborate structure definition, if we are going to support
            many vendor's dialects (and extensions) of the grammar
            (syntax as well as semantics) of equations.

            

            Non-negative stocks

            
              
I completely reject the use of nonnegative level
                constructs 

            
            

            Agree 100%

            

            Flow expressions

            
              
I do not think we should restrict Level formulations
                to only have explicitly named input and outputs as this
                is too constraining 

            
            

            Agree 100%. In Smia, any mathematical _expression_ can be used
            in the position of a flow. As mentioned on p 49 in my
            dataflow PDF, it is conceptually wrong to define a separate
            variable type for flows. It is up to each vendor, of course,
            to break concepts, but it should not be permitted in a
            standard for SD.

            

            Best regards,

            Magne

        

        
           Magne
              Myrtveit 
           
          Posts: 51
          Joined: Mon Jan 12, 2009 6:52 am
        
        
Top

        

    

    

      

        

          Re:
              SMILE and XMILE
          
by Robert
                Eberlein » Sun Aug 11, 2013 5:47 am 

          
Hi Magne,

            

            Just one comment on this. A pretty standard equation for
            population in Vensim is:

            

            Population [gender, AG00]= INTEG (

            + births[gender]- deaths[gender,AG00] + net
            migrating[gender,AG00],

            init pop[gender,AG00]) ~~|

            Population[gender,AG01andOver]= INTEG (

            -deaths[gender,AG01andOver] + net
            migrating[gender,AG01andOver],

            init pop[gender,AG01andOver])

            ~ person

            ~ |

            

            or, if you are not using a cohort control function

            

            Population[gender,A0]= INTEG (

            births[gender]-deaths[gender,A0]-aging[gender,A0],

            initial population[gender,A0]) ~~|

            Population[gender,AR1To99]= INTEG (

aging[gender,AR0To98]-deaths[gender,AR1To99]-aging[gender,AR1To99],

            initial population[gender,AR1To99]) ~~|

            Population[gender,A100P]= INTEG (

            aging[gender,A99]-deaths[gender,A100P],

            initial population[gender,A100P])

            ~ Person

            ~ |

            

            In both cases, and others like this, the subscripts on
            population can only be determined by knowing that the
            subscript elements and subranges used are part of the
            subscript Age. In Vensim this works because no numbers are
            allowed and all subscript element names must be unique
            names. Without that (or tagging) the models would become
            indeterminant in some cases.

        

        
           Robert
              Eberlein 
          Site Admin
           
          Posts: 157
          Joined: Sat Dec 27, 2008 8:09 pm
        
        
Top

        

    

    

      

        

          Re:
              SMILE and XMILE
          
by Magne
                Myrtveit » Mon Aug 12, 2013 4:32 am 

          
Hi Bob,

            

            First, allow me to correct something in my previous posting.
            My Example 4 does actually not belong together with the
            other tree examples, as DTD is a representation of a
            language, rather than a model. (DTD is similar to BNF in may
            ways). Example 4 can be replaced by stock-and-flow or
            causal-loop representations of models.

            

            Also, I don't know if the point I meant to make about
            equations language disappeared inside my lengthy text.
            Restating it here: Model equations are needed when writing about models (in
            forums like this, for example). Equations should be complete
            in the sense that it must be possible for humans, and
            computers as well, to reconstruct and evaluate the model
            from its equations. It is up to each vendor to determine if
            the equations syntax will be used by their software also
            when writing models to file (the MDL (Vensim) way), or if
            model files use a structured representation of models (the
            SIP (Powersim), DPA (Dynaplan), Excel, and XMILE way). Smia
            has a File | Save as feature, that allows the user to store
            a model in binary format, XML format, or equations format
            (plain text or HTML).

            

            To your statement in our most recent post:

            
              
The subscripts on population can only be determined
                by knowing that the subscript elements and subranges
                used are part of the subscript Age. In Vensim this works
                because no numbers are allowed and all subscript element
                names must be unique names. Without that (or tagging)
                the models would become indeterminant in some cases.

            
            

            There is another solution to this problem, which is to make
            the full dimensions available at the right-hand side of
            Population's equation, and to merge multiple equations into
            one, using the approach shown in Figure 66, page 48, in "A
            framework for dataflow models". This also opens up for using
            any data type for dimensions; not only lists of named
            elements.

            

            Let me demonstrate with the basis in your first code
            example, which looks like this:

            
              Code: Select all
              Population [gender, AG00]= INTEG (

                   + births[gender]- deaths[gender,AG00] + net
                  migrating[gender,AG00],

                   init pop[gender,AG00]) ~~|

                  Population[gender,AG01andOver]= INTEG (

                   -deaths[gender,AG01andOver] + net
                  migrating[gender,AG01andOver],

                   init pop[gender,AG01andOver])

                   ~ person

                   ~ |
            
            

            

            A single-equation version would look something like this:

            
              Code: Select all
              Population = stock {gender, Age | 'init pop' }

                     inflow { gender, AG00 => births(gender) }

                     outflow deaths

                     inflow 'net migrating'
            
            

            

            Line-by-line explanation:

            
              
Population is defined as a stock with dimensions gender and Age and initial
                value init pop.

              
Births is defined as an inflow, capturing the
                information that Vensim puts into multiple equations for
                Population.

              
Deaths is defined as an outflow. Since all elements of
                Pop can use the same _expression_, no array syntax is
                needed here.

              
Net migration is defined as an inflow.

            
            

            The tricks are located in line 1 and 2, which defines full
            dimensions (line 1) and multiple expressions (line 2).

            

            Smia has many ways to express equations like the one above.
            One alternative syntax for line 2, makes use of index
            variables and dimension operators (==) and (:=):

            
              Code: Select all
              Population = stock {g==gender, a==Age | 'init
                  pop' }

                     inflow { g==*, a:=* | births(gender), 0 }

                     outflow deaths

                     inflow 'net migrating'
            
            

            

            The operator == says that all elements of the dimension
            share the same _expression_, while := says that the first
            element has one _expression_, and the rest another one.

            

            Best regards,

            Magne

        

        
           Magne
              Myrtveit 
           
          Posts: 51
          Joined: Mon Jan 12, 2009 6:52 am
        
        
Top

        

    

    

      

        

          Re:
              SMILE and XMILE
          
by Robert
                Eberlein » Mon Aug 12, 2013 7:31 am 

          
Hi Magne,

            

            I am with you on equations. I am just thinking in the
            specifications we write how we distinguish these from the
            encoding. I will ask Ignacio Martinez to jump in with
            comments as well as I know he has spent some time thinking
            about this.

            

            You picked the easy subscript example, and I unfortunately
            can't see how the more complex one fits this pattern. If you
            could reconstruct the following it would be helpful to me:

            

            WIP[Stage1]= INTEG
            (ProductionStarts-WIP[Stage1]/ProdTime[Stage1], 0) ~~|

            WIP[StageMid]= INTEG
            (WIP[StagePrior]/ProdTime[StagePrior]-WIP[StageMid]/ProdTime[StageMid],0)
            ~~|

            WIP[Stage22]= INTEG
            (WIP[Stage21]/ProdTime[Stage21]-shipments,0) ~ Widget ~|

            

            in this case StageMid is Stage2...Stage21 and StagePriod is
            Stage1...Stage20 with a map to StageMid to make the second
            equation sensible.

            

            Bob Eberlein

        

        
           Robert
              Eberlein 
          Site Admin
           
          Posts: 157
          Joined: Sat Dec 27, 2008 8:09 pm
        
        
Top

        

    

    

      

        

          Re:
              SMILE and XMILE
          
by Travis
                Franck » Tue Aug 13, 2013 8:32 am 

          
Apologies in advance if I missed a subtly
            in the discussion -- it appears you both have thought about
            all this for a long time. But you did ask for company! ;)

            

            In my head, there is the file format and what is printed in
            journals (i.e., the human readable form). The discussion
            appears to be whether the human-readable (say, SMILE) needs
            to be defined separate from the file format (XMILE) as a
            spec/standard.

            

            Isn't the human-readable form pretty much defined already by
            standard mathematics? Right-hand side equals left-hand side?
            I guess I don't know how else you would write human-readable
            equations in a journal. I know there many fields, e.g.,
            economics, that code a model in a programming language, but
            then use standard math formatting when publishing and
            discussing. I did the same in my SD work.

            

            So, this would lead me to think that defining the XML format
            is most important. That is, we might be able to get by
            having XMILE without SMILE. 

            

            And when it comes to model documentation, people would
            archive the XMILE, use XMILE in their dissertation appendix,
            use 'math' formatting in their papers and dissertation
            discussion, and use a XMILE-to-HTML converters for cool
            documentation tools like Ignacio makes.

            

            I write this acknowledging that I didn't fully follow the
            above thread about subscripts, but maybe this is a moment to
            pause and bring more of us up to speed.

            

            ~Travis

        

        
           Travis
              Franck 
           
          Posts: 21
          Joined: Sun Jan 11, 2009 7:48 pm
        
        
Top

        

    

    
    Re:
        SMILE and XMILE
    
by Thomas
          Fiddaman » Tue Aug 13, 2013 2:18 pm 

    
My possibly naive impression was that the
      purpose of SMILE is to define the constructs that constitute the
      equations and ancillary bits of a model, with XMILE as a file
      format for storing SMILE. But on reflection there seems to be
      quite a bit of overlap - both SMILE and XMILE define stocks and
      flows, for example, whereas an alternate approach would be to have
      a SMILE-like spec for what constitutes an equation, and then an
      XMILE spec for storing an equation that's agnostic about what kind
      of equation it is.

      

      As long as XMILE defines an <eqn> field without caring
      what's in it, it seems that SMILE is needed in order to specify
      the operators, functions, naming etc. needed to interpret the RHS
      of the <eqn>.

      

      Regarding naming, I don't mind the current options, but in the
      spirit of Travis' comment, we could use .J or .JK, with a nod to
      the dynamo integration syntax.