Git Product home page Git Product logo

pypepa's Introduction

pypepa

image

pypepa is a PEPA library and a toolset for Performance Evaluation Process Algebra (PEPA) by Jane Hillston. pyPEPA is not a fully PEPA compatible tool, it supports a limited (for now) PEPA syntax (we only allow <> operator in system equation), i.e. it does not suport hiding operator (e.g. P\{a,b,}), does not calculate passage time. pyPEPA also does not use Kronecker state space representation and Hillston's aggregation algorithms, so it can have worse performance than the PEPA Eclipse Plugin. All these features, plus more, are planned to be added in next versions. If you are willing to help, just email me or put a pull request.

Warning: pyPEPA is under development, this is a beta software

pyPEPA consist of three parts:

  1. libpepa - a library written in Python,
  2. pyPEPA - a command line tool for solving and graphing,
  3. distr/ - map reduce tools for solving large PEPA experiments.

More docs can be found on readthedocs.

image

News

(19.05.2014) Switched completely to python > 3.3

(22.07.2013) Docs added, pypepa has now docs on rtd.org

(18.07.2013) pypepa can now calculate utilisations of components' states, output argument works again

(07.06.2013) Added support for defining rates as mathematical expressions, e.g. r=2*3+7*n;

Installation

Package

Using pip:

$ pip install pypepa

Manually:

  1. Clone the project
$ git clone [email protected]:tdi/pyPEPA.git pypepa
$ cd pypepa
  1. Run install
$ python setup.py install

From the source

For the current version I recommend installing in a virtualenv.

  1. Clone the project
$ git clone [email protected]:tdi/pyPEPA.git pypepa
$ cd pypepa
  1. Make a virtualenv
$ mkvirtualenv -p /usr/bin/python3 pypepa
$ workon pypepa
  1. Install all requirements
$ pip install pyparsing numpy scipy matplotlib

Using pypepa

Basic arguments

Show help command:

$ pypepa -h

Set logging level (the default is NONE):

$ pypepa --log {DEBUG, INFO, ERROR, NONE}

Calculations

Calculate steady state for bank scenario. The putput is by default directed to your terminal.

$ pypepa -st models/bankscenario.pepa

Statespace of models/bankscenario.pepa.1 has 7 states 

Steady state vector
Using ; delimiter
1;Idle,WaitingForCustomer,WaitingForEmployee;0.08333333333333337
2;Informed,WaitingForCustomer,WaitingForEmployee;0.25
3;WaitingBankResponse,RequestReceived,WaitingForEmployee;0.16666666666666666
4;WaitingBankResponse,CustomerNotReliable,WaitingForEmployee;0.16666666666666666
5;WaitingBankResponse,CustomerReliable,WaitingForEmployee;0.16666666666666666
6;WaitingBankResponse,WaitingManagerResponse,EvaluatingOffer;0.08333333333333333
7;OfferReceived,WaitingForCustomer,WaitingForEmployee;0.08333333333333333

Calculate actions' throughput:

$ pypepa -th models/bankscenario.pepa

Statespace of models/bankscenario.pepa.1 has 7 states 

Throuhput (successful action completion in one time unit)

readInformation                          0.08333333333333337
createLoanRequest                              0.25
getNotReliableMessage                    0.16666666666666666
badOffer                                 0.08333333333333333
askManager                               0.16666666666666666
reset                                    0.08333333333333333
goodOffer                                0.08333333333333333
checkReliability                         0.3333333333333333

You can calculate transient time proability for some number of time steps:

$ pypepa --transient 5 models/bankscenario.pepa

Transient analysis from time 0 to 10

Using ; delimiter
1;Idle,WaitingForCustomer,WaitingForEmployee;0.08351202761947342
2;Informed,WaitingForCustomer,WaitingForEmployee;0.2500169897974121
3;WaitingBankResponse,RequestReceived,WaitingForEmployee;0.16662129023697114
4;WaitingBankResponse,CustomerNotReliable,WaitingForEmployee;0.16657721277634494
5;WaitingBankResponse,CustomerReliable,WaitingForEmployee;0.16657721277634485
6;WaitingBankResponse,WaitingManagerResponse,EvaluatingOffer;0.08328947039778702
7;OfferReceived,WaitingForCustomer,WaitingForEmployee;0.08340579639566591

You can choose a solver by specifying --solver|-s {direct, sparse}. By defalt we use sparse solver with LIL matrix becuase it is faster and in overall matrices generated from PEPA models are sparse. There is also an insignificant difference in results.

pypepa allows you to visualise all PEPA components and the whole state space of a model by specifying -gd switch. The generated graphiz dot files are by deault saved in dots folder in the current directory. You can browse dot files with xdot, which you need to install first.

$ pypepa -gd bankdots models/bankscenario.pepa

Finally pypepa can provide us with a tool for experimentation with rates and actions. Let's check how throughtput of askManager action changes when rateReset changes from 1 to 50 with step 1. The default result of this command will be a matplotlib graph. The format of -var is "vartype:varname:value range specifier:value range value". The one valid vartype for now is rate, for value range specifiers you can choose: range or list. For range you need to provide START, STOP, STEP, whereas for list a comma separated list of values. You can specify other output options with -f argument: graph, console, csv.

$ pypepa -var "rate:rateReset:range:1,50,1" -val askManager  models/bankscenario.pepa

image

Formatting

You can specify formats of -st, -th and --varrate with a --format option. Currently we support CSV (although ; not comma delimited), console (the default) and graph (only for varrate experiments). Additionally you can specify -o|--output option with a file argument to specify where to save the CSV.

$ pypepa -st models/bankscenario.pepa -f csv -o bank_steady.csv

TODO

Functional

  1. Implement rate mathematical expressions with functional rates (DONE)
  2. Implement passage time analysis
  3. Implement hiding operator
  4. Implement 3d graphs and experiments (DONE)
  5. Implement Kronecker state space and aggregation
  6. Implement generalised communication PEPA genPEPA by Mirco Tribastone
  7. Add model manipulation language for reducers
  8. Add stochastic probes
  9. Add distributed version of BU algorithm
  10. Add importing of models and components from external files (and namespaces)

Non functional

  1. Optimise optimise optimise

Licence and credits

Copyright (c) Dariusz Dwornikowski and Poznan University of Technology. Distributed under the Apache Commons 2.0.

pypepa's People

Contributors

allanderek avatar tdi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

allanderek

pypepa's Issues

distr/models directory

Hello,

If one clones the repository then does a

$ ls -l distr

then we get

lrwxr-xr-x 1 user group   11 May 29 13:37 libpepa -> ../libpepa/
lrwxr-xr-x 1 user group   10 May 29 13:37 models -> ../models/

but the 'models' directory isn't actually in the repository.

adc

Single component

If you have a model which has only a single component in the system equation then there is no statespace derived for it. So in particular you get an error with the following pepa model:

r = 1.0;
P = (a, r).Q;
Q = (b, r).P;

P

In StateSpace.derive_bu we have:

for op in self.operators:

but unfortunately self.operators will be [] at that point.

Nested cooperation

I haven't looked into the issue to find a cause yet, however the following pepa model:

r = 1.0;

P = (a, r).Q;
Q = (b, r).P;

P <a> (P <b> P)

Event when simply attempting to generate a dots file. The error is:

Traceback (most recent call last):
  File "pypepa/cli/cli.py", line 161, in <module>
    main()
  File "pypepa/cli/cli.py", line 91, in main
    pm.generate_dots(args.gendots)
  File "pyPEPA/pypepa/pepa_model.py", line 161, in generate_dots
    res, act = self.ss.derive(dotdir=out_dir)
  File "pyPEPA/pypepa/derivation/state_space.py", line 38, in derive
    return self.derive_bu(dotdir=dotdir)
  File "pyPEPA/pypepa/derivation/state_space.py", line 76, in derive_bu
    new_states = op.compose(self.comp_ss, state, True)
  File "pyPEPA/pypepa/derivation/state_space.py", line 248, in compose
    tran_r.apparent_rates[tran_l.action] = new_arate
TypeError: 'NoneType' object does not support item assignment

Fix a bug with generating dots

There is some bug, where some components are not well generated. It seems like one transition is missing from graphs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.