Preliminary demonstrator for DEGAS architecture

Here are some screenshots and some text to illustrate a very simple demonstrator of the DEGAS architecture. I really want to emphasise that we know we've only tackled a really trivial instance, and there are lots of fundamental research questions which we have sidestepped. The way in which we've used UML here may well not be the best way, and we have made lots of simplifying assumptions about what users can represent for now.

However, what you see here is the work of hours, rather than days. I hope this should help demonstrate that it is feasible - indeed, not even very hard - to connect a UML model produced in an unaltered UML tool with a formal tool in an interesting way.

The user creates two classes of agent, A and B, and develops a state diagram for each of them. Below you see some example state diagrams.

They're standard UML, but of course not just any UML is acceptable: we use some conventions about what makes sense in this context and how we interpret the UML. For example the transition labelled a/rate(r) in the first diagram, the state diagram for A, means that an agent of class A which is in its P1 state is prepared to engage in PEPA action a at rate r, after which it enters its P2 state.

Then to specify the initial agent that we're interested in, we use a UML collaboration diagram. Here we have simple connected instances of each of our two classes of agents; by this we mean (by convention) that they synchronise on all their common actions.

(The demo extractor is primitive at present, and in fact it can't deal with anything more complicated than this just now! But that is an implementation matter: it's just a question of writing a little more code to make it deal with more general starting agents.)

The user then saves the project as a UML model. Argo saves the model, getting this XMI file (which you probably don't want to look at!). We process the file with this Perl script (which you probably also don't want to look at!) and the output is this PEPA Workbench input script:


#P4 = (c,r).P5 + (b,t).P3;

#P5 = (b,s).P3;

#P3 = (a,infty).P4;

#P1 = (a,r).P2;

#P2 = (b,s).P1;

P1 < a,b > P3

This can then be analysed in PEPA. For example, we can calculate what proportion of the time the agent of class A will spend in its P1 state and what proportion in its P2 state.

The PEPA analysis is not implemented at present (Stephen says it is not hard, but he has been busy), but it will produce a number for each state of the state diagram of each agent in the initial configuration. These can be added to the diagrams (ideally), or we can just put them on standard output.