Table of Contents

Module: SimulationStep simpy1_4_2\SimPy\SimulationStep.py

SimulationStep 1.4.2 __version__ = $Revision: 1.2 $ $Date: 2004-05-20 14:08:05+02 $ kgm LICENSE: Copyright (C) 2002 Klaus G. Muller, Tony Vignaux mailto: kgmuller@xs4all.nl and Tony.Vignaux@vuw.ac.nz

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. END OF LICENSE

Implements SimPy Processes, resources, and the backbone simulation scheduling by coroutine calls. Based on generators (Python 2.2 and later)

Change history:

Started out as SiPy 0.9

5/9/2002: SiPy 0.9.1

  • Addition of _cancel method in class Process and supporting _unpost method in class __Evlist.

  • Removal of redundant Action method in class Process.

12/9/2002:

  • Addition of resource class

  • Addition of "_request" and "_release" coroutine calls

15/9/2002: moved into SimPy package

16/9/2002: - Resource attributes fully implemented (resources can now have more than 1 shareable resource units)

17/9/2002:

  • corrected removal from waitQ (Vignaux)

17/9/2002:

  • added test for queue discipline in "test_demo()". Must be FIFO

26/9/02: Version 0.2.0

  • cleaned up code; more consistent naming

  • prefixed all Simulation-private variable names with "_".

  • prefixed all class-private variable names with "__".

  • made normal exit quiet (but return message from scheduler()

28/9/02:

  • included stopSimulation()

15/10/02: Simulation version 0.3

  • Version printout now only if __TESTING

  • "_stop" initialized to True by module load, and set to False in initialize()

  • Introduced simulate(until=0) instead of scheduler(till=0). Left scheduler() in for backward compatibility, but marked as deprecated.

  • Added attribute "name" to class Process; default=="a_process"

  • Changed Resource constructor to def __init__(self,capacity=1,name="a_resource",unitName="units".

13/11/02: Simulation version 0.6

  • Major changes to class Resource:

    • Added two queue types for resources, FIFO (default) and PriorityQ

    • Changed constructor to allow selection of queue type.

    • Introduced preemption of resources (to be used with PriorityQ queue type)

    • Changed constructor of class Resource to allow selection of preemption

    • Changes to class Process to support preemption of service

    • Cleaned up simulate by replacing series of if-statements by dispatch table.

19/11/02: Simulation version 0.6.1 - Changed priority schemes so that higher values of Process attribute "priority" represent higher priority.

20/11/02: Simulation version 0.7 - Major change of priority approach:

  • Priority set by "yield request,self,res,priority"

  • Priority of a Process instance associated with a specific resource

25/11/02: Simulation version 0.7.1

  • Code cleanup and optimization

  • Made process attributes remainService and preempted private (_remainService and _preempted)

11/12/2002: First process interrupt implementation

  • Addition of user methods interrupt and resume

  • Significant code cleanup to maintain process state

20/12/2002: Changes to "interrupt"; addition of boolean methods to show process states

16/3/2003: Changed hold (allowing posting events past _endtime)

18/3/2003: Changed _nextev to prevent _t going past _endtime

23/3/2003: Introduced new interrupt construct; deleted resume method

25/3/2003: Expanded interrupt construct:

  • Made interrupt a method of Process

  • Added interruptCause as an attribute of an interrupted process

  • Changed definition of active to self._nextTime <> None and not self._inInterrupt

  • Cleaned up test_interrupt function

30/3/2003: Modification of 'simulate':

  • error message if initialize not called (fatal)

  • error message if no process scheduled (warning)

  • Ensured that upon exit from simulate, now() == _endtime is always valid

2/04/2003:

  • Modification of 'simulate': leave _endtime alone (undid change of 30 Mar 03)

  • faster _unpost

3/04/2003: Made priority private (_priority)

4/04/2003: Catch activation of non-generator error

5/04/2003: Added interruptReset() function to Process.

7/04/2003: Changed _unpost to ensure that process has _nextTime == None (is passive) afterwards.

8/04/2003: Changed _hold to allow for yield hold,self (equiv to yield hold,self,0)

10/04/2003: Changed cancel syntax to Process().cancel(victim)

12/5/2003: Changed eventlist handling from dictionary to bisect

9/6/2003: - Changed eventlist handling from pure dictionary to bisect- sorted "timestamps" list of keys, resulting in greatly improved performance for models with large numbers of event notices with differing event times. ========================================================= This great change was suggested by Prof. Simon Frost. Thank you, Simon! This version 1.3 is dedicated to you! ========================================================= - Added import of Lister which supports well-structured printing of all attributes of Process and Resource instances.

  1. Nov 2003: Added capability to step through simulation event by event.

November 2003: Brought up to Simulation 1.4alpha

  1. Dec 2003: Merged in Monitor and Histogram

  2. Feb 2004: Repaired bug in activeQ monitor of class Resource. Now actMon correctly records departures from activeQ.

May 19, 2004: Added erroneously omitted Histogram class.

Imported modules   
from SimPy.Lister import *
from __future__ import generators
import bisect
import types
Functions   
activate
askCancel
holdfunc
initialize
now
passivatefunc
reactivate
releasefunc
requestfunc
scheduler
showEvents
simulate
simulateStep
startStepping
stopSimulation
stopStepping
test_demo
test_interrupt
  activate 
activate (
        object,
        process,
        at="undefined",
        delay="undefined",
        prior=False,
        )

Application function to activate passive process.

Exceptions   
Simerror( "Fatal SimPy error: activating function which" + " is not a generator (contains no 'yield')" )
  askCancel 
askCancel ()

  holdfunc 
holdfunc ( a )

  initialize 
initialize ()

  now 
now ()

  passivatefunc 
passivatefunc ( a )

  reactivate 
reactivate (
        object,
        at="undefined",
        delay="undefined",
        prior=False,
        )

Application function to reactivate a process which is active, suspended or passive.

  releasefunc 
releasefunc ( a )

  requestfunc 
requestfunc ( a )

  scheduler 
scheduler ( till=0 )

Schedules Processes/semi-coroutines until time till. Deprecated since version 0.5.

  showEvents 
showEvents ()

Returns string with eventlist as list of tuples (eventtime,action)

  simulate 
simulate ( callback=None,  until=0 )

Schedules Processes/semi-coroutines until time until

Exceptions   
Simerror( "Fatal SimPy error: Simulation not initialized" )
  simulateStep 
simulateStep ( callback=None,  until=0 )

Schedules Processes/semi-coroutines until next event

Exceptions   
Simerror( "Fatal SimPy error: Simulation not initialized" )
  startStepping 
startStepping ()

Application function to start stepping through simulation.

  stopSimulation 
stopSimulation ()

Application function to stop simulation run

  stopStepping 
stopStepping ()

Application function to stop stepping through simulation.

  test_demo 
test_demo ()

  test_interrupt 
test_interrupt ()

Classes   

FIFO

Histogram

A histogram gathering and sampling class

Monitor

Monitored variables

PriorityQ

Queue is always ordered according to priority.

Process

Superclass of classes which may use generator functions

Queue

Resource

Models shared, limited capacity resources with queuing;

Simerror

_Action

Structure (who=process owner, generator=process)

__Evlist

Defines event list and operations on it


Table of Contents

This document was automatically generated on Sat May 22 12:08:33 2004 by HappyDoc version 2.1