#include <sp_plpexecutor.h>

Public Member Functions

Constructors & Destructor
 ProposingExecutor ()
 
 ProposingExecutor (const ProposingExecutor &)
 
Simulation Event Attributes <br>
const SimEventAttributeEventAttribute (Idx index) const
 
void EventAttribute (Idx index, const SimEventAttribute &rAttr)
 
void Alphabet (const sEventSet &rAlphabet)
 
const sEventSetAlphabet (void) const
 
Execution Proposal <br>
TimedEvent ExecuteNextTransition ()
 
const TimedEventProposeNextTransition ()
 
std::string EventStatesToString (void) const
 
Re-implemenented from ParallelExecutor
virtual void Reset (long int seed)
 
virtual void Reset (void)
 
virtual void Clear (void)
 
bool ExecuteTime (Time::Type duration)
 
bool ExecuteEvent (Idx event)
 
bool ExecuteTransition (const TimedEvent &tevent)
 
bool RevertToStep (Idx step)
 
- Public Member Functions inherited from faudes::LoggingExecutor
 LoggingExecutor (void)
 
 LoggingExecutor (const LoggingExecutor &rOther)
 
 LoggingExecutor (const std::string &rFileName)
 
virtual ~LoggingExecutor (void)
 
virtual bool Valid (void) const
 
Time::Type CurrentTime (void) const
 
void CurrentTime (Time::Type time)
 
int CurrentStep (void) const
 
void CurrentStep (int step)
 
bool CurrentParallelTimedState (const ParallelTimedState &ptstate)
 
const ParallelTimedStateCurrentParallelTimedState (void) const
 
void LogOpen (TokenWriter &rTw, int mode)
 
void LogOpen (const std::string &rFileName, int logmode, std::ios::openmode openmode=std::ios::out|std::ios::trunc)
 
void LogClose (void)
 
const SimConditionSetConditions (void) const
 
void Conditions (const SimConditionSet &)
 
const AttributeSimConditionCondition (const std::string &rName) const
 
const AttributeSimConditionCondition (Idx cond) const
 
Idx SetCondition (const std::string &rName, const AttributeSimCondition &rCondition)
 
void SetCondition (Idx cond, const AttributeSimCondition &rCondition)
 
void ClrCondition (const std::string &rName)
 
void ClrCondition (Idx cond)
 
void ConditionsWrite (TokenWriter &rTw, const std::string &rLabel="SimConditions") const
 
void ConditionsRead (TokenReader &rTr, const std::string &rLabel="SimConditions")
 
ConditionIterator ConditionsBegin (void) const
 
ConditionIterator ConditionsEnd (void) const
 
bool BreakCondition (void) const
 
void TraceClear (int length=-2)
 
int TraceLength (void) const
 
TraceIterator TraceBegin (void) const
 
TraceIterator TraceEnd (void) const
 
const TraceSampleTraceAtTime (Time::Type time) const
 
const TraceSampleTraceAtStep (int step) const
 
const TraceSampleTraceFirst (void) const
 
const TraceSampleTraceRecent (void) const
 
const TraceSampleTraceCurrent (void) const
 
void TraceWrite (TokenWriter &rTw, const TraceSample &sample) const
 
void TraceWrite (const TraceSample &sample) const
 
std::string TraceToString (const TraceSample &sample) const
 
void TraceWrite (void) const
 
- Public Member Functions inherited from faudes::ParallelExecutor
 ParallelExecutor (void)
 
 ParallelExecutor (const ParallelExecutor &rOther)
 
 ParallelExecutor (const std::string &rFileName)
 
virtual ~ParallelExecutor (void)
 
Idx Size (void) const
 
void Insert (const std::string &rFileName)
 
void Insert (const TimedGenerator &rGen)
 
const EventSetAlphabet (void) const
 
Iterator Begin (void) const
 
Iterator End (void) const
 
const ExecutorAt (int i) const
 
Idx EventIndex (const std::string &rName) const
 
std::string EventName (Idx index) const
 
Time::Type CurrentTime (void) const
 
int CurrentStep (void) const
 
bool IsDeadlocked () const
 
const ParallelTimedStateCurrentParallelTimedState (void) const
 
const ParallelStateCurrentParallelState (void) const
 
const TimeIntervalEnabledTime () const
 
const EventSetEnabledEvents () const
 
const EventSetDisabledEvents () const
 
const TimeIntervalEnabledInterval () const
 
TimeInterval EnabledEventTime (Idx event) const
 
TimeInterval EnabledGuardTime (Idx event) const
 
EventSet ActiveEventSet (const ParallelState &stateVec) const
 
bool Active (Idx ev, const ParallelState &stateVec) const
 
bool Active (Idx ev) const
 
std::string PTSStr (const ParallelTimedState &ptstate) const
 
std::string PSStr (const ParallelState &pstate) const
 
std::string TEStr (const TimedEvent &tevent) const
 
std::string CStr (Idx clock) const
 
std::string EStr (Idx event) const
 
std::string CurrentParallelTimedStateStr (void) const
 
std::string CurrentParallelStateStr (void) const
 
void ComputeEnabled (void) const
 
void ComputeEnabledNonConst (void)
 
- Public Member Functions inherited from faudes::Type
 Type (void)
 
 Type (const Type &rType)
 
virtual ~Type (void)
 
virtual TypeNew (void) const
 
virtual TypeCopy (void) const
 
virtual const TypeCast (const Type *pOther) const
 
virtual TypeAssign (const Type &rSrc)
 
Typeoperator= (const Type &rSrc)
 
virtual bool Equal (const Type &rOther) const
 
bool operator== (const Type &rOther) const
 
bool operator!= (const Type &rOther) const
 
virtual void Name (const std::string &rName)
 
virtual const std::string & Name (void) const
 
virtual const std::string & TypeName (void) const
 
void Write (const Type *pContext=0) const
 
void Write (const std::string &pFileName, const std::string &rLabel="", const Type *pContext=0, std::ios::openmode openmode=std::ios::out|std::ios::trunc) const
 
void Write (const std::string &pFileName, std::ios::openmode openmode) const
 
void Write (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
virtual void XWrite (const std::string &pFileName, const std::string &rLabel="", const Type *pContext=0) const
 
void XWrite (const Type *pContext=0) const
 
void XWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
std::string ToString (const std::string &rLabel="", const Type *pContext=0) const
 
std::string ToText (const std::string &rLabel="", const Type *pContext=0) const
 
void DWrite (const Type *pContext=0) const
 
void DWrite (const std::string &pFileName, const std::string &rLabel="", const Type *pContext=0, std::ios::openmode openmode=std::ios::out|std::ios::trunc) const
 
void DWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
void SWrite (TokenWriter &rTw) const
 
void SWrite (void) const
 
std::string ToSText (void) const
 
void Read (const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
 
void FromString (const std::string &rString, const std::string &rLabel="", const Type *pContext=0)
 
void Read (TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
 

Protected Member Functions

virtual void DoRead (TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
 
virtual void DoWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
void DoAssign (const ProposingExecutor &rSrc)
 
- Protected Member Functions inherited from faudes::LoggingExecutor
virtual void Compile ()
 
void DoAssign (const LoggingExecutor &rSrc)
 
- Protected Member Functions inherited from faudes::ParallelExecutor
virtual void DoReadGenerators (TokenReader &rTr)
 
virtual void DoWriteGenerators (TokenWriter &rTw) const
 
void DoAssign (const ParallelExecutor &rSrc)
 
- Protected Member Functions inherited from faudes::Type
void DoAssign (const Type &rSrc)
 
bool DoEqual (const Type &rOther) const
 
virtual void DoXWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
virtual void DoDWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
virtual void DoSWrite (TokenWriter &rTw) const
 
virtual const TypeDefinitionTypeDefinitionp (void) const
 
virtual Token XBeginTag (const std::string &rLabel="", const std::string &rFallbackLabel="") const
 

Private Member Functions

void ResetProposer (long int seed=0)
 
Time::Type Schedule (Idx event, SimEventAttribute *pattr)
 

Private Attributes

sEventSet mSimEvents
 
bool mPValid
 
TimedEvent mProposal
 

Additional Inherited Members

- Public Types inherited from faudes::LoggingExecutor
enum  LogMode { LogStatistics =0x01 , LogStates =0x02 , LogEvents =0x04 , LogTime =0x08 }
 
typedef SimConditionSet::Iterator ConditionIterator
 
typedef std::deque< TraceSample >::const_iterator TraceIterator
 
- Public Types inherited from faudes::ParallelExecutor
typedef std::vector< IdxParallelState
 
typedef std::vector< std::map< Idx, Time::Type > > ParallelClock
 
typedef Executor::TimedState TimedState
 
typedef std::vector< Executor >::const_iterator Iterator
 
- Protected Attributes inherited from faudes::ParallelExecutor
Idx mRecentEvent
 

Detailed Description

Executer that proposes which transition to execute.

Priority and Stochastic Semantics

Whilst the LoggingExecutor (and all lower level executors) is aware of which transitions are enabled, the ProposingExecutor actually proposes either one particular transition for execution or a particular amount of time to let pass. The proposal refers to additional semantics parametrised by data from SimEventAttribute. The decision procedure is organized in four stages, were the first stage that yields a proposal wins:

1.) SimPriorityEventAttribute, positive priority

  • if one or more events with positive priority are enabled, those with maximum priority form the candidate set
  • if the candidate set is non-emty propose one event by random (uniformly distributed) to be executed immediately

2.) SimStochasticEventAttribute, stochastic timing

  • if within the interval at which the set of enabled events remains constant (EnabledInterval) an event with stochastic timing is scheduled to occur, the earliest of such events form the candidate set.
  • if the candidate set is non-emty propose one event by random (uniformly distributed) to be executed at the scheduled clock time.

3.) passing by clock time

  • if the EnabledInterval is of positive duration, let this duration pass by.
  • if the EnabledInterval is of infinite duration, let all clock time pass and stop the simulation

4.) SimPriorityEventAttribute, negative priority

  • if one or more events with negative priority are enabled, those with maximum priority form the candidate set
  • if the candidate set is non-emty propose one event by random (uniformly distributed) to be executed immediately

Note that the above procedure will never come up with a proposal that fails to satisfy invariant and guard conditions. In this sense, the above procedure is compliant with Alur semantics of timed automata.

If the above procedure fails to indicate a transition to execute or clock time to let pass, the system is deadlocked. If the procedure sticks with case 3) and infinite duration, it might be either life locked (no enabled events) or just unwilling/unable to execute a negative priority event. The latter case can be used for sensor events in a hardware-in-the-loop simulation.

Scheduling Stochastic Events

The mechnism to schedule events with stochastic timing comes in three flavors.

  • SimStochasticEventAttribute::Extern The random variable models an external stochastic process. A sample is taken when the executor is reset to determine the first scheduled occurence. The schedule expires when it matched the current clock time, regardless whether the event is executed or not. When the schedule expires, a new sample is taken to determine the next scheduled occurence.
  • SimStochasticEventAttribute::Trigger
    The random variable is used to narrow down the effective guard interval to a point. By "effective guard interval" we refer to the interval of time in which the guard is satisfied w.r.t. the current timed state. A sample is taken when the executor enters a timed state with a non-empty the effective guard interval. In order to guarantee that the scheduled occurence lies within the guard, the density function is shaped accordingly. The schedule expires when either the event is actually executed or when the effective guard interval changes due to a transition.
  • SimStochasticEventAttribute::Delay The random variable models a delay relative to the clock time when the event is enabled. A sample is taken when the executor is reset to determine the initial amount of delay. During the execution sequence the executor accumulates the durations for which the event is enabled. The event is scheduled when the accumulated durations matches the delay. When the event is executed the schedule expires and the random variable is sampled to re-initialised the delay.

Note that type Extern or Delay schedules can disable the respective event in a way that potentially leads to blocking behaviour even if the timed automata is non-blocking by Alur semantics. This is a consequence of the fact that both types model additional phenomena that are synchronized with the timed automata, and it is perferctly reasonable that this synchronisation introduces blocking situations. In contrast, events of type Trigger are not affected by the blocking issue provided that guards lie within the respective invariant.

File IO

For token IO, the ProposingExecutor reads and writes a section with default label "Executor". It contains a ParallelExecutor section to define a vector of generators, a SimConditionSet section to define relevant conditions, and a SimEventSet section to define the above event attributes. Example:

<Executor>
<Generators>
"./some_generator.gen"
"./other_generator.gen"
</Generators>
"IdleCond"
<EventCondition>
<StartEvents> "beta" "mue" </StartEvents>
<StopEvents> "alpha" </StopEvents>
</EventCondition>
"DownCond"
<StateCondition>
<StateSet> "down" </StateSet> % refers to first generator
<StateSet> "down" "repair" </StateSet> % refers to second generator
</StateCondition>
<SimEvents>
"alpha"
<Priority> 100 </Priority>
"beta"
<Stochastic> +Trigger+ +Gauss+ <Parameter> 10 5 </Parameter> </Stochastic>
"mue"
<Stochastic> +Delay+ +Gauss+ <Parameter> 20 5 </Parameter> </Stochastic>
"lambda"
<Priority> 100 </Priority>
</SimEvents>
</Executor>
const SimConditionSet & Conditions(void) const
IndexSet StateSet
Definition: cfl_indexset.h:273

Technical detail: since the trace buffer only covers the dynamic state of the parallel executor, the RevertToStep method cannot recover the stochastic event states. Including stochastic states with the trace buffer is considered to expensive.

Definition at line 165 of file sp_plpexecutor.h.

Constructor & Destructor Documentation

◆ ProposingExecutor() [1/2]

faudes::ProposingExecutor::ProposingExecutor ( void  )

doxygen group Creates an emtpy ProposingExecutor

Definition at line 21 of file sp_plpexecutor.cpp.

◆ ProposingExecutor() [2/2]

faudes::ProposingExecutor::ProposingExecutor ( const ProposingExecutor rOther)

Copy constrcutor

Definition at line 26 of file sp_plpexecutor.cpp.

Member Function Documentation

◆ Alphabet() [1/2]

void faudes::ProposingExecutor::Alphabet ( const sEventSet rAlphabet)

Set all simulation event attributes. Any previous attributes are removed. Any events not in rAlphabet become the default attribute attached (which is priority 0) Requires Reset().

Parameters
rAlphabetEventSet with SimEventAttrute data

Definition at line 59 of file sp_plpexecutor.cpp.

◆ Alphabet() [2/2]

const sEventSet& faudes::ProposingExecutor::Alphabet ( void  ) const
inline

Access alphabet (incl simulation event attributes)

Returns
Overall alphabet

Definition at line 245 of file sp_plpexecutor.h.

◆ Clear()

void faudes::ProposingExecutor::Clear ( void  )
virtual

Clear all data (generators, simulation attributes etc)

Reimplemented from faudes::LoggingExecutor.

Reimplemented in faudes::DeviceExecutor.

Definition at line 33 of file sp_plpexecutor.cpp.

◆ DoAssign()

void faudes::ProposingExecutor::DoAssign ( const ProposingExecutor rSrc)
protected

Assignment method

Parameters
rSrcSource to assign from

Definition at line 40 of file sp_plpexecutor.cpp.

◆ DoRead()

void faudes::ProposingExecutor::DoRead ( TokenReader rTr,
const std::string &  rLabel = "",
const Type pContext = 0 
)
protectedvirtual

Reads proposing executor from TokenReader, see also public wrappers Type::Read.

Parameters
rTrTokenReader to read from
rLabelSection to read, defaults to "LoggingExecutor"
pContextRead context to provide contextual information (ignored)
Exceptions
Exception
  • non-deterministic generator(s) (id 501)
  • token mismatch (id 502)
  • IO error (id 1)

Reimplemented from faudes::LoggingExecutor.

Definition at line 620 of file sp_plpexecutor.cpp.

◆ DoWrite()

void faudes::ProposingExecutor::DoWrite ( TokenWriter rTw,
const std::string &  rLabel = "",
const Type pContext = 0 
) const
protectedvirtual

Write to TokenWriter, see also public wrappers Type::Write.

Parameters
rTwReference to TokenWriter
rLabelLabel of section to write, defaults to "LoggingExecutor"
pContextWrite context to provide contextual information (ignored)
Exceptions
Exception
  • IO errors (id 2)

Reimplemented from faudes::LoggingExecutor.

Definition at line 608 of file sp_plpexecutor.cpp.

◆ EventAttribute() [1/2]

const SimEventAttribute & faudes::ProposingExecutor::EventAttribute ( Idx  index) const

doxygen group Simulation event attribute lookup

Parameters
index
Returns
reference to attribute

Definition at line 49 of file sp_plpexecutor.cpp.

◆ EventAttribute() [2/2]

void faudes::ProposingExecutor::EventAttribute ( Idx  index,
const SimEventAttribute rAttr 
)

Set simulation event attribute. Requires Reset().

Parameters
indexEvent index
rAttrNew attribute
Exceptions
ExceptionIndex not found in EventSymbolMap (id 42)

Definition at line 54 of file sp_plpexecutor.cpp.

◆ EventStatesToString()

std::string faudes::ProposingExecutor::EventStatesToString ( void  ) const

Inspect stochastic event states (debugging)

return EventInfoMap string

Definition at line 105 of file sp_plpexecutor.cpp.

◆ ExecuteEvent()

bool faudes::ProposingExecutor::ExecuteEvent ( Idx  event)
virtual

Execute event.

Returns
True on success

Reimplemented from faudes::LoggingExecutor.

Definition at line 168 of file sp_plpexecutor.cpp.

◆ ExecuteNextTransition()

TimedEvent faudes::ProposingExecutor::ExecuteNextTransition ( void  )

doxygen group Execute next transition.

Choose the transition to execute by priorities and
stochastic properties.

Returns
Executed TimedEvent

Definition at line 431 of file sp_plpexecutor.cpp.

◆ ExecuteTime()

bool faudes::ProposingExecutor::ExecuteTime ( Time::Type  duration)
virtual

Execute time duration.

Returns
True on success

Reimplemented from faudes::LoggingExecutor.

Definition at line 123 of file sp_plpexecutor.cpp.

◆ ExecuteTransition()

bool faudes::ProposingExecutor::ExecuteTransition ( const TimedEvent tevent)

Execute event by transition

Returns
True on success

Definition at line 250 of file sp_plpexecutor.cpp.

◆ ProposeNextTransition()

const TimedEvent & faudes::ProposingExecutor::ProposeNextTransition ( void  )

Propose next transition.

Propose a transition to execute by priorities and
stochastic properties.

Returns
Proposed TimedEvent

Definition at line 263 of file sp_plpexecutor.cpp.

◆ Reset() [1/2]

void faudes::ProposingExecutor::Reset ( long int  seed)
virtual

doxygen group Reset the ProposingExecutor. This includes a reset of the ParallelExecutor and the simulation event states.

Parameters
seedSeed for random generator

Reimplemented in faudes::DeviceExecutor.

Definition at line 95 of file sp_plpexecutor.cpp.

◆ Reset() [2/2]

virtual void faudes::ProposingExecutor::Reset ( void  )
inlinevirtual

Reset the ProposingExecutor.

This method uses the systemtime as seed.

Reimplemented from faudes::LoggingExecutor.

Definition at line 307 of file sp_plpexecutor.h.

◆ ResetProposer()

void faudes::ProposingExecutor::ResetProposer ( long int  seed = 0)
private

Reset stochastic state of events.

Definition at line 67 of file sp_plpexecutor.cpp.

◆ RevertToStep()

bool faudes::ProposingExecutor::RevertToStep ( Idx  step)
virtual

Revert executor to past step.

This will revert only the executor dynamic state (incl clock values, current time). The condition and event states, however, will not be reverted.

Returns
True on success

Reimplemented from faudes::LoggingExecutor.

Definition at line 670 of file sp_plpexecutor.cpp.

◆ Schedule()

Time::Type faudes::ProposingExecutor::Schedule ( Idx  event,
SimEventAttribute pattr 
)
private

Evaluate random variable to schedule event. Referring to the specified stochastic attribute, take a random sample to schedule the next occurence of the event. The result is given as return value and is also recorded in the simulation state of the event attribute.

Parameters
eventEvent to schedule, by index
pattrPointer to event attribute
Returns
Time of next event occurrence

Definition at line 475 of file sp_plpexecutor.cpp.

Member Data Documentation

◆ mProposal

TimedEvent faudes::ProposingExecutor::mProposal
private

Available proposal

Definition at line 374 of file sp_plpexecutor.h.

◆ mPValid

bool faudes::ProposingExecutor::mPValid
private

Valid proposal available

Definition at line 369 of file sp_plpexecutor.h.

◆ mSimEvents

sEventSet faudes::ProposingExecutor::mSimEvents
private

Simulation event attributes, incl stochastic and priority data

Definition at line 364 of file sp_plpexecutor.h.


The documentation for this class was generated from the following files:

libFAUDES 2.33b --- 2025.05.07 --- c++ api documentaion by doxygen