Hierarchical I/O Systems PlugIn
[PlugIns]

Classes

class  faudes::HioEventFlags
 Event attributes for hierarchical discrete event systems with inputs and outputs. More...
class  faudes::HioStateFlags
 State attributes for hierarchical discrete event systems with inputs and outputs. More...
class  faudes::THioConstraint< GlobalAttr, StateAttr, EventAttr, TransAttr >
 Generator with I/O-constraint attributes. More...
class  faudes::THioController< GlobalAttr, StateAttr, EventAttr, TransAttr >
 Generator with I/O-controller attributes. More...
class  faudes::THioEnvironment< GlobalAttr, StateAttr, EventAttr, TransAttr >
 Generator with I/O-environment attributes. More...
class  faudes::HioModule
 Recurring structure in hierarchies designed according to the I/O based DES framework. More...
class  faudes::THioPlant< GlobalAttr, StateAttr, EventAttr, TransAttr >
 Generator with I/O-plant attributes. More...

Functions

bool faudes::CompleteSynth (const Generator &rPlant, const EventSet rCAlph, const Generator &rSpec, Generator &rClosedLoop)
 CompleteSynth: compute supremal complete and controllable (and closed) sublanguage.
bool faudes::NormalCompleteSynth (Generator &rPlant, const EventSet &rCAlph, const EventSet &rOAlph, const Generator &rSpec, Generator &rClosedLoop)
 NormalCompleteSynth: compute normal, complete and controllable (and closed) sublanguage.
bool faudes::NormalCompleteSynthNB (Generator &rPlant, const EventSet &rCAlph, const EventSet &rOAlph, const Generator &rSpec, Generator &rClosedLoop)
 NormalCompleteSynthNB: compute normal, complete, controllable and nonblocking sublanguage.
Generator faudes::HioSortCL (const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe)
 IoSortCL: returns IO-sorting structure required for closed loops.
void faudes::HioFreeInput (const Generator &rGen, const EventSet &rInput, const EventSet &rOutput, Generator &rResGen, const std::string &rErrState1, const std::string &rErrState2, Idx &rErrState1Idx, Idx &rErrState2Idx)
 HioFreeInput: extend generator by obviously missing input transitions.
void faudes::HioFreeInput (const Generator &rGen, const EventSet &rInput, const EventSet &rOutput, Generator &rResGen, const std::string &rErrState1, const std::string &rErrState2)
 HioFreeInput: extend generator by obviously missing input transitions.
void faudes::HioFreeInput (const Generator &rGen, const EventSet &rInput, const EventSet &rOutput, Generator &rResGen)
 HioFreeInput: extend generator by obviously missing input transitions.
void faudes::HioFreeInput (const HioPlant &rPlant, HioPlant &rResPlant)
 HioFreeInput: extend HioPlant by obviously missing input transitions.
void faudes::HioFreeInput (const HioController &rController, HioController &rResController)
 HioFreeInput: extend HioController by obviously missing input transitions.
void faudes::HioFreeInput (const HioEnvironment &rEnvironment, HioEnvironment &rResEnvironment)
 HioFreeInput: extend HioEnvironment by obviously missing input transitions.
void faudes::HioFreeInput (const HioConstraint &rConstraint, HioConstraint &rResConstraint)
 HioFreeInput: extend HioConstraint by obviously missing input transitions.
void faudes::HioFreeInput (HioPlant &rPlant)
 HioFreeInput: convenience interface to faudes::HioFreeInput(const HioPlant&, HioPlant).
void faudes::HioFreeInput (HioController &rController)
 HioFreeInput: convenience interface to faudes::HioFreeInput(const HioController&, HioController).
void faudes::HioFreeInput (HioEnvironment &rEnvironment)
 HioFreeInput: convenience interface to faudes::HioFreeInput(const HioEnvironment&, HioEnvironment).
void faudes::HioFreeInput (HioConstraint &rConstraint)
 HioFreeInput: convenience interface to faudes::HioFreeInput(const HioConstraint&, HioConstraint).
void faudes::MarkHioShuffle (const Generator &rGen1, const Generator &rGen2, const std::map< std::pair< Idx, Idx >, Idx > &rReverseCompositionMap, Generator &rShuffle)
 MarkHioShuffle: marking rule for HioShuffle() in case of marked parameters rGen1 and rGen2 - UNDER CONSTRUCTION.
void faudes::CheapAltAnB (const EventSet rAset, const EventSet rBset, const int Depth, Generator &rAltAnB)
 CheapAltAnB: returns Generator of the following specification: "After a maximum of n (=depth) pairs of A-transitions, a B-transition has to occur!".
void faudes::CheapAltAB (const EventSet rAset, const EventSet rBset, const int Depth, Generator &rAltAB)
 CheapAltAB: returns Generator of the following specification: "After a maximum of n (=depth) pairs of A-transitions, a B-transition has to occur and vice-versa!".
void faudes::MarkAlternationAB (const EventSet rAset, const EventSet rBset, Generator &rAltAB)
 MarkAlternationAB: returns Generator marking the alternation of Aset-transitions with Bset-transitions.
void faudes::HioShuffleUnchecked (const Generator &rPlantA, const Generator &rPlantB, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe, Generator &rIOShuffAB)
 HioShuffleUnchecked: IO-shuffle of rPlantA and rPlantB according to definition, no parameter check.
void faudes::HioShuffle (const Generator &rPlantA, const Generator &rPlantB, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe, Generator &rIOShuffAB)
 HioShuffle: IO-shuffle of rPlantA and rPlantB according to definition.
void faudes::HioShuffle (const HioPlant &rPlantA, const HioPlant &rPlantB, HioPlant &rIOShuffAB)
 HioShuffle: IO-shuffle of rPlantA and rPlantB according to definition.
void faudes::HioShuffleTU (const Generator &rPlantA, const Generator &rPlantB, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe, const int Depth, Generator &rIOShuffAB)
 HioShuffleTU: IO-shuffle of rPlantA and rPlantB according to definition with additional forced alternation of depth Depth (see CheapAltAB()) between A- and B-events.
void faudes::SearchYclessScc (const Idx state, int &rcount,const Generator &rGen, const EventSet &rYc, const bool UnMarkedOnly, StateSet &rNewStates, std::stack< Idx > &rSTACK, StateSet &rStackStates, std::map< const Idx, int > &rDFN, std::map< const Idx, int > &rLOWLINK, std::set< StateSet > &rSccSet, StateSet &rRoots)
 SearchYclessSCC: Search for strongly connected ycless components (YC-less SCC's).
bool faudes::YclessScc (const Generator &rGen, const EventSet &rYc, std::set< StateSet > &rSccSet, StateSet &rRoots)
 YclessSCC: Search for strongly connected ycless components (YC-less SCC's) - convenience api.
bool faudes::YclessUnmarkedScc (const Generator &rGen, const EventSet &rYc, std::set< StateSet > &rSccSet, StateSet &rRoots)
 YclessUnmarkedSCC: Search for strongly connected ycless components (YC-less SCC's) consisting of unmarked states only.
bool faudes::YclessSCC (const Generator &rGen, const EventSet &rYc, std::set< StateSet > &rSccSet)
 YclessSCC: Search for strongly connected ycless components (YC-less SCC's) - convenience api.
bool faudes::IsYcLive (const Generator &rGen, const EventSet &rYc)
 IsYcLive: This function checks if generator is Yc-live.
void faudes::WriteStateSets (const std::set< StateSet > &rStateSets)
 WriteStateSets: Write set of StateSet's to console (indeces).
void faudes::WriteStateSets (const Generator &rGen, const std::set< StateSet > &rStateSets)
 WriteStateSets: Write set of StateSet's to console (symbolic state names taken from rGen).
void faudes::SccEntries (const Generator &rGen, const std::set< StateSet > &rSccSet, StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)
 SCCEntries: figure entry states and entry transitions of strongly connected components rSccSet of rGen.
void faudes::CloneScc (Generator &rGen, const StateSet &rScc, std::set< StateSet > &rSccSet, const Idx EntryState, StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)
 cloneSCC: makes a copy (clone) of strongly connected component (rSCC) of the generator and moves all transitions leading to some entry state EntryState of this SCC to the copy of EntryState.
void faudes::CloneUnMarkedScc (Generator &rGen, const StateSet &rScc, const Idx EntryState, const StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)
 CloneUnMarkedSCC: makes a copy (clone) of strongly connected unmarked component (rSCC) of rGen.
void faudes::YcAcyclic (const Generator &rGen, const EventSet &rYc, Generator &rResGen)
 YcAcyclic: Computes the supremal(?) Yc-acyclic sublanguage of L(Gen).
void faudes::ConstrSynth_Beta (Generator &rPlant, const EventSet &rYp, const EventSet &rUp, const Generator &rLocConstr, Generator &rOpConstraint)
 ConstrSynth_Beta: compute operator constraint Sp for plant under environment constraint Sl such that plant is complete & Yp-live wrt both constraints - Beta Version.
void faudes::HioSynthUnchecked (const Generator &rPlant, const Generator &rSpec, const Generator &rConstr, const Generator &rLocConstr, const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp, const EventSet &rYel, const EventSet &rUel, Generator &rController)
 HioSynthUnchecked: I/O controller synthesis procedure, no parameter check.
void faudes::HioSynth (const Generator &rPlant, const Generator &rSpec, const Generator &rConstr, const Generator &rLocConstr, const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp, const EventSet &rYel, const EventSet &rUel, Generator &rController)
 HioSynthUnchecked: I/O controller synthesis procedure.
void faudes::HioSynthMonolithic (const HioPlant &rPlant, const HioPlant &rSpec, const HioConstraint &rSc, const HioConstraint &rSp, const HioConstraint &rSe, HioController &rController)
 HioSynthMonolithic: I/O controller synthesis procedure for monolithic plant.
void faudes::HioSynthHierarchical (const HioPlant &rHioShuffle, const HioEnvironment &rEnvironment, const HioPlant &rSpec, const Generator &rIntConstr, const HioConstraint &rSc, const HioConstraint &rSl, HioController &rController)
 HioSynthHierarchical: I/O controller synthesis procedure for I/O-shuffle of i plants and their interaction via an I/O environment.

Detailed Description

Overview

This plugin implements data types and functions related to the input-/output (I/O-) based approach to hierarchical control of discrete event systems as introduced in:

S. Perk, Th. Moor and K. Schmidt. Hierarchical discrete event systems with inputs and outputs. WODES 2006 - 8th International Workshop on Discrete Event Systems, Ann Arbor, USA, 2006.

Examples are provided in the user reference, section HioSys.

License

This plug-in is distributed with libFAUDES and under the terms of the LGPL.

Copyright (c) 2009, Thomas Moor, Sebastian Perk, Klaus Schmidt.

Contents


Function Documentation

void faudes::CheapAltAB ( const EventSet  rAset,
const EventSet  rBset,
const int  Depth,
Generator &  rAltAB 
)

CheapAltAB: returns Generator of the following specification: "After a maximum of n (=depth) pairs of A-transitions, a B-transition has to occur and vice-versa!".

Parameters:
rAset alphabet A
rBset alphabet B
Depth depth of alternation
rAltAB generator of AB-specification
Exceptions:
Exception 
  • n less than 1 (id 0)
  • rAset empty (id 0)
  • rBset empty (id 0)
void faudes::CheapAltAnB ( const EventSet  rAset,
const EventSet  rBset,
const int  Depth,
Generator &  rAltAnB 
)

CheapAltAnB: returns Generator of the following specification: "After a maximum of n (=depth) pairs of A-transitions, a B-transition has to occur!".

Parameters:
rAset alphabet A
rBset alphabet B
Depth depth of alternation
rAltAnB generator of AnB-specification
Exceptions:
Exception 
  • n less than 1 (id 0)
  • rAset empty (id 0)
  • rBset empty (id 0)
void faudes::CloneScc ( Generator &  rGen,
const StateSet &  rScc,
std::set< StateSet > &  rSccSet,
const Idx  EntryState,
StateSet &  rEntryStates,
TransSetX2EvX1 &  rEntryTransSet 
)

cloneSCC: makes a copy (clone) of strongly connected component (rSCC) of the generator and moves all transitions leading to some entry state EntryState of this SCC to the copy of EntryState.

If this is carried out for n-1 of all n entry states of the SCC, then, in the generator, this one SCC is transformed into n SCC's with one unique entry state each. The set of SCC's is extended by the clone-SCC. The set of entry states is extended by the (unique) entry state of the clone-SCC. Note: all added states are equivalent to some state in the original generator, the behaviour is not changed. The basic idea of this algorithm id taken from [Jéron,Marchand,Rusu,Tschaen] "Ensuring the conformance of reactive discrete-event systems using supervisory control" (CDC'03) todo: check const parameters

Parameters:
rGen generator holding SCC's of rSccSet
rScc SCC of rGen that is to be cloned // Perk: check if idx of rSccSet is better?
rSccSet set of all SCC's of rGen
EntryState one of the entry states of this SCC
rEntryStates set of entry states of this SCC
rEntryTransSet set of respective transitions to the entry states, sorted by X2
Exceptions:
Exception 
  • todo: exceptions, e.g. for rEntryState not subset of rEntryStates not subset of rScc not element of rSccSet, elements of rSccSet not subset of rGen.States() etc.
void faudes::CloneUnMarkedScc ( Generator &  rGen,
const StateSet &  rScc,
const Idx  EntryState,
const StateSet &  rEntryStates,
TransSetX2EvX1 &  rEntryTransSet 
)

CloneUnMarkedSCC: makes a copy (clone) of strongly connected unmarked component (rSCC) of rGen.

bool faudes::CompleteSynth ( const Generator &  rPlant,
const EventSet  rCAlph,
const Generator &  rSpec,
Generator &  rClosedLoop 
)

CompleteSynth: compute supremal complete and controllable (and closed) sublanguage.

Computes the supremal complete and controllable (and closed) sublanguage of the language generated by rSpec wrt the language generated by rPlant and the controllable events rCalph. Method: iteration of SupCon() and erasing of dead states found by IsComplete until a fix point is reached. Leads to maximal solution as shown in: Kumar, Garg, Marcus. "On Supervisory Control of sequential behaviors" IEEE Transactions On Automatic Control, Vol. 37, 1992, pp. 1978-1985

More concise version SupConComplete() is under construction, see below.

Parameters:
rPlant plant generator
rCAlph controllable events
rSpec specification generator
rClosedLoop reference to result
Returns:
success (true) for nonempty result
Exceptions:
Exception 
  • see exceptions of SupCon()
void faudes::ConstrSynth_Beta ( Generator &  rPlant,
const EventSet &  rYp,
const EventSet &  rUp,
const Generator &  rLocConstr,
Generator &  rOpConstraint 
)

ConstrSynth_Beta: compute operator constraint Sp for plant under environment constraint Sl such that plant is complete & Yp-live wrt both constraints - Beta Version.

Plant can be individual or composed, ie Plant=Lpe || Le, or Plant=Lpe1 ||io Lpe2 || Lel || Ll, ie composition of plant and envconstr, or composition of HioShuffle of two plants with environment and envconstr. Parameter rLocConstr is optional and may contain environment constraints for Lpe1 and Lpe2; rOpConstraint is computed such that rLocConstr is met under rOpConstraint. More and better docu will follow in future version.

Parameters:
rPlant model of plant under environment constraint.
rYp alphabet YP
rUp alphabet UP
rLocConstr reference to optional local constraints
rOpConstraint reference to operator constraint
void faudes::HioFreeInput ( HioConstraint &  rConstraint  ) 

HioFreeInput: convenience interface to faudes::HioFreeInput(const HioConstraint&, HioConstraint).

Parameters:
rConstraint HioConstraint
void faudes::HioFreeInput ( HioEnvironment &  rEnvironment  ) 

HioFreeInput: convenience interface to faudes::HioFreeInput(const HioEnvironment&, HioEnvironment).

Parameters:
rEnvironment HioEnvironment
void faudes::HioFreeInput ( HioController &  rController  ) 

HioFreeInput: convenience interface to faudes::HioFreeInput(const HioController&, HioController).

Parameters:
rController HioController
void faudes::HioFreeInput ( HioPlant &  rPlant  ) 

HioFreeInput: convenience interface to faudes::HioFreeInput(const HioPlant&, HioPlant).

Parameters:
rPlant HioPlant
void faudes::HioFreeInput ( const HioConstraint &  rConstraint,
HioConstraint &  rResConstraint 
)

HioFreeInput: extend HioConstraint by obviously missing input transitions.

States of the HioConstraint in which a strict but nonempty subset of the U-alphabet is active are extended by transitions to an error state such that now the whole U-alphabet is active in that state.To avoid an additional deadlock violating completeness, an error behaviour (U Y)* is concatenated to the error state using a second error state. Note that this method only helps making the input free in an hio system but does not guarantee a free input. Method: the transition relation of all states with at least one active AND at least one inactive U-event is events lead to the U-error state in the result. For each U-event, a transition to a second error state, and for each Y-event, a transition from the second to the first error state is inserted to realise the error behaviour. Note: states with NO active U-event are ignored.

Parameters:
rConstraint HioConstraint
rResConstraint reference to extended HioConstraint (result)
void faudes::HioFreeInput ( const HioEnvironment &  rEnvironment,
HioEnvironment &  rResEnvironment 
)

HioFreeInput: extend HioEnvironment by obviously missing input transitions.

States of the HioEnvironment in which a strict but nonempty subset of the Ul- or Ye-alphabet is active are extended by transitions to an error state such that now the whole Ul- or Ye-alphabet is active in that state.To avoid an additional deadlock violating completeness, an error behaviour (Ue Ye)* is concatenated to the error state using a second error state. Note that this method only helps making the input free in an hio system but does not guarantee a free input. Method: the transition relation of all states with at least one active AND at least one inactive Ul- or Ye-event is events lead to the Ul- or Ye-error state in the result. For each Ue-event, a transition to a second error state, and for each Ye-event, a transition from the second to the first error state is inserted to realise the error behaviour. Note: states with NO active Ul- or Ye-event are ignored.

Parameters:
rEnvironment HioEnvironment
rResEnvironment reference to extended HioEnvironment (result)
void faudes::HioFreeInput ( const HioController &  rController,
HioController &  rResController 
)

HioFreeInput: extend HioController by obviously missing input transitions.

States of the HioController in which a strict but nonempty subset of the Uc- or Yp-alphabet is active are extended by transitions to an error state such that now the whole Uc- or Yp-alphabet is active in that state. To avoid an additional deadlock violating completeness, an error behaviour (Up Yp)* is concatenated to the error state using a second error state. Note that this method only helps making the input free in an hio system but does not guarantee a free input. Method: the transition relation of all states with at least one active AND at least one inactive Uc- or Yp-event is events lead to the Uc- or Yp-error state in the result. For each Up-event, a transition to a second error state, and for each Yp-event, a transition from the second to the first error state is inserted to realise the error behaviour. Note: states with NO active Uc- or Yp-event are ignored.

Parameters:
rController HioController
rResController reference to extended HioController (result)
void faudes::HioFreeInput ( const HioPlant &  rPlant,
HioPlant &  rResPlant 
)

HioFreeInput: extend HioPlant by obviously missing input transitions.

States of the HioPlant in which a strict but nonempty subset of the Up- or Ue-alphabet is active are extended by transitions to an error state such that now the whole Up- or Ue-alphabet is active in that state. Note that this method only helps making the input free in an hio system but does not guarantee a free input. Method: the transition relation of all states with at least one active AND at least one inactive Up- or Ue-event is extended by transitions such that formerly inactive Up- or Ue- events lead to the Up- or Ue-error state in the result. Note: states with NO active Up- or Ue-event are ignored.

Parameters:
rPlant HioPlant
rResPlant reference to extended HioPlant (result)
void faudes::HioFreeInput ( const Generator &  rGen,
const EventSet &  rInput,
const EventSet &  rOutput,
Generator &  rResGen 
)

HioFreeInput: extend generator by obviously missing input transitions.

States of the generator in which a strict but nonempty subset of the alphabet Input is active are extended by transitions to an error state (flag Err) such that now the whole Input alphabet is active in that state. If the alphabet Output is nonempty, an error behaviour (Output Input)* is concatenated to the error state using a second error state (flag Err). Note that this method only helps making the input free in an hio system but does not guarantee a free input. Method: the transition relation of all states with at least one active AND at least one inactive Input-event is extended by transitions such that formerly inactive Input- events lead to the first error state in the result. If the parameter Output is nonempty, transitions with all Output-events from first error state to the second error state, and transitions with all Input-events back to the first error state are inserted. Note: states with NO active Input-event are ignored.

Parameters:
rGen generator
rInput alphabet Input
rOutput alphabet Output
rResGen reference to extended generator (result)
Exceptions:
Exception 
  • empty Input-alphabet or non-disjoint Input and Output (id 0)
void faudes::HioFreeInput ( const Generator &  rGen,
const EventSet &  rInput,
const EventSet &  rOutput,
Generator &  rResGen,
const std::string &  rErrState1,
const std::string &  rErrState2 
)

HioFreeInput: extend generator by obviously missing input transitions.

States of the generator in which a strict but nonempty subset of the alphabet Input is active are extended by transitions to an error state (ErrState1, flag Err) such that now the whole Input alphabet is active in that state. If the alphabet Output is nonempty, an error behaviour (Output Input)* is concatenated to the error state using a second error state (ErrState2, flag Err). Note that this method only helps making the input free in an hio system but does not guarantee a free input. Method: the transition relation of all states with at least one active AND at least one inactive Input-event is extended by transitions such that formerly inactive Input- events lead to the first error state in the result. If the parameter Output is nonempty, transitions with all Output-events from first error state to the second error state, and transitions with all Input-events back to the first error state are inserted. Note: states with NO active Input-event are ignored.

Parameters:
rGen generator
rInput alphabet Input
rOutput alphabet Output
rResGen reference to extended generator (result)
rErrState1 symbolic name of first error state; ignored if not rGen.StateNamesEnabled()
rErrState2 symbolic name of second error state; ignored if not rGen.StateNamesEnabled()
Exceptions:
Exception 
  • empty Input-alphabet or non-disjoint Input and Output (id 0)
void faudes::HioFreeInput ( const Generator &  rGen,
const EventSet &  rInput,
const EventSet &  rOutput,
Generator &  rResGen,
const std::string &  rErrState1,
const std::string &  rErrState2,
Idx &  rErrState1Idx,
Idx &  rErrState2Idx 
)

HioFreeInput: extend generator by obviously missing input transitions.

States of the generator in which a strict but nonempty subset of the alphabet Input is active are extended by transitions to an error state (ErrState1, flag Err) such that now the whole Input alphabet is active in that state. If the alphabet Output is nonempty, an error behaviour (Output Input)* is concatenated to the error state using a second error state (ErrState2, flag Err). Note that this method only helps making the input free in an hio system but does not guarantee a free input. Method: the transition relation of all states with at least one active AND at least one inactive Input-event is extended by transitions such that formerly inactive Input- events lead to the first error state in the result. If the parameter Output is nonempty, transitions with all Output-events from first error state to the second error state, and transitions with all Input-events back to the first error state are inserted. Note: states with NO active Input-event are ignored.

Parameters:
rGen generator
rInput alphabet Input
rOutput alphabet Output
rResGen reference to extended generator (result)
rErrState1 symbolic name of first error state; ignored if not rGen.StateNamesEnabled()
rErrState2 symbolic name of second error state; ignored if not rGen.StateNamesEnabled()
rErrState1Idx index of first error state (result)
rErrState2Idx index of second error state if inserted (result)
Exceptions:
Exception 
  • empty Input-alphabet or non-disjoint Input and Output (id 0)
void faudes::HioShuffle ( const HioPlant &  rPlantA,
const HioPlant &  rPlantB,
HioPlant &  rIOShuffAB 
)

HioShuffle: IO-shuffle of rPlantA and rPlantB according to definition.

Moreover: alternation of depth Depth (see CheapAltAB()) between A- and B-events (no alternation for Depth=1) and marking of alternation according to MarkAlternationAB().

Parameters:
rPlantA HioPlant A
rPlantB HioPlant B
rIOShuffAB reference to composed HioPlant
Exceptions:
Exception 
  • todo...
void faudes::HioShuffle ( const Generator &  rPlantA,
const Generator &  rPlantB,
const EventSet &  rYp,
const EventSet &  rUp,
const EventSet &  rYe,
const EventSet &  rUe,
Generator &  rIOShuffAB 
)

HioShuffle: IO-shuffle of rPlantA and rPlantB according to definition.

Moreover: marking of alternation according to MarkAlternationAB().

Parameters:
rPlantA plant A generator
rPlantB plant B generator
rYp alphabet Yp
rUp alphabet Up
rYe alphabet Ye
rUe alphabet Ue
rIOShuffAB reference to I/O-shuffle generator
Exceptions:
Exception 
  • empty or non-disjoint alphabets rYp, rUp, rYe, rUe (id 0).
  • plant A or plant B not in HioPlantForm (id 0).
void faudes::HioShuffleTU ( const Generator &  rPlantA,
const Generator &  rPlantB,
const EventSet &  rYp,
const EventSet &  rUp,
const EventSet &  rYe,
const EventSet &  rUe,
const int  Depth,
Generator &  rIOShuffAB 
)

HioShuffleTU: IO-shuffle of rPlantA and rPlantB according to definition with additional forced alternation of depth Depth (see CheapAltAB()) between A- and B-events.

-> frozen version for transport unit example

Parameters:
rPlantA plant A generator
rPlantB plant B generator
rYp alphabet Yp
rUp alphabet Up
rYe alphabet Ye
rUe alphabet Ue
Depth depth of alternation
rIOShuffAB reference to I/O-shuffle generator
Exceptions:
Exception 
  • todo...
void faudes::HioShuffleUnchecked ( const Generator &  rPlantA,
const Generator &  rPlantB,
const EventSet &  rYp,
const EventSet &  rUp,
const EventSet &  rYe,
const EventSet &  rUe,
Generator &  rIOShuffAB 
)

HioShuffleUnchecked: IO-shuffle of rPlantA and rPlantB according to definition, no parameter check.

Moreover: marking of alternation according to MarkAlternationAB().

TODO: 'checked' version

Parameters:
rPlantA plant A generator
rPlantB plant B generator
rYp alphabet Yp
rUp alphabet Up
rYe alphabet Ye
rUe alphabet Ue
rIOShuffAB reference to I/O-shuffle generator
Generator faudes::HioSortCL ( const EventSet &  rYc,
const EventSet &  rUc,
const EventSet &  rYp,
const EventSet &  rUp,
const EventSet &  rYe,
const EventSet &  rUe 
)

IoSortCL: returns IO-sorting structure required for closed loops.

This structure is the prefix closure of the language structure [(Yp(Up+YcUcUp))*(YeUe)*]*

Parameters:
rYc alphabet Yc
rUc alphabet Uc
rYp alphabet Yp
rUp alphabet Up
rYe alphabet Ye
rUe alphabet Ue
Returns:
IO-sorting language generator
Exceptions:
Exception 
  • empty parameter(s) (id 0)
  • non-disjoint parameters (id 0)
void faudes::HioSynth ( const Generator &  rPlant,
const Generator &  rSpec,
const Generator &  rConstr,
const Generator &  rLocConstr,
const EventSet &  rYc,
const EventSet &  rUc,
const EventSet &  rYp,
const EventSet &  rUp,
const EventSet &  rYel,
const EventSet &  rUel,
Generator &  rController 
)

HioSynthUnchecked: I/O controller synthesis procedure.

Main hio synthesis algorithm suitable for both the monolithic and the hierarchical case, see also respective api's HioSynthMonolithic and HioSynthHierarchical. The result rController realises a solution to the I/O controller synthesis problem (S_PE,S_C,S_P,S_E,S_SpecCE).

Parameters:
rPlant plant model generator:

  • monolithic case: I/O plant to be controlled;
  • hierarchical case: parallel composition of group (I/O-shuffle) of n I/O plants S_PEi (or their abstractions) with the environment model S_EL for this group.
rSpec generator of desired behaviour of the external closed loop. Must be in I/O plant form.
rConstr external constraint that may be assumed:

  • monolithic case: composition of constraints S_C and S_E
  • hierarchical case: composition of constraints S_C and S_L
rLocConstr internal constraint that has to be achieved by the I/O controller for the closed loop:

  • monolithic case: generator of constraint S_P
  • hierarchical case: parallel composition of constraints S_Pi and S_Ei
rYc alphabet YC
rUc alphabet UC
rYp alphabet YP
rUp alphabet UP
rYel monolithic: alphabet YE, hierarchical: alphabet YL
rUel monolithic: alphabet UE, hierarchical: alphabet UL
rController reference to I/O controller(result)
Exceptions:
Exception 
  • empty or non-disjoint alphabets rYc, rUc, rYp, rUp, rYel, rUel (id 0).
  • rSpec not in HioPlantForm (id 0).
  • alphabet mismatch between plant or constraints and spec (id 0).
void faudes::HioSynthHierarchical ( const HioPlant &  rHioShuffle,
const HioEnvironment &  rEnvironment,
const HioPlant &  rSpec,
const Generator &  rIntConstr,
const HioConstraint &  rSc,
const HioConstraint &  rSl,
HioController &  rController 
)

HioSynthHierarchical: I/O controller synthesis procedure for I/O-shuffle of i plants and their interaction via an I/O environment.

The result rController realises a solution to the I/O controller synthesis problem (S_PE,S_C,S_P,S_E,S_SpecCE) with the external behaviour S_PE of the I/Oshuffle-environment-composition and respects internal constraints Sp_i and Se_i preserving liveness of the individual plants.

Parameters:
rHioShuffle I/O plant or group of I/O plants composed by I/O shuffle
rEnvironment environment model for rHioShuffle
rSpec I/O plant model of desired behaviour of the external closed loop. Must be in I/O plant form (tested if FAUDES_CHECKED); must be complete and Yp-live wrt. Sc and Se (not tested).
rIntConstr parallel composition of constraints Sp_i and Se_i of the individual plants composed to rHioShuffle
rSc external operator constraint that may be assumed; I/O constraint form is recommended.
rSl environment constraint that may be assumed; I/O constraint form is recommended.
rController I/O controller solving the I/O controller synthesis problem (result)
Exceptions:
Exception 
  • HioShuffle or spec not in HioPlantForm (id 0).
  • Environment not in HioEnvironmentForm (id 0).
  • alphabet mismatch between plant, environment, spec and constraints (id 0).
void faudes::HioSynthMonolithic ( const HioPlant &  rPlant,
const HioPlant &  rSpec,
const HioConstraint &  rSc,
const HioConstraint &  rSp,
const HioConstraint &  rSe,
HioController &  rController 
)

HioSynthMonolithic: I/O controller synthesis procedure for monolithic plant.

The result rController realises a solution to the I/O controller synthesis problem (S_PE,S_C,S_P,S_E,S_SpecCE).

Parameters:
rPlant I/O plant to be controlled; must be in I/O plant form (tested if FAUDES_CHECKED); must be complete and Yp-live wrt. Sp and Se (not tested).
rSpec I/O plant model of desired behaviour of the external closed loop. Must be in I/O plant form (tested if FAUDES_CHECKED); must be complete and Yp-live wrt. Sc and Se (not tested).
rSc external operator constraint that may be assumed; I/O constraint form is recommended.
rSp operator constraint for rPlant; is met by admissibility of rController; I/O constraint form is recommended.
rSe environment constraint that may be assumed; I/O constraint form is recommended.
rController I/O controller solving the I/O controller synthesis problem (result)
Exceptions:
Exception 
  • plant or spec not in HioPlantForm (id 0).
  • alphabet mismatch between plant or constraints and spec (id 0).
void faudes::HioSynthUnchecked ( const Generator &  rPlant,
const Generator &  rSpec,
const Generator &  rConstr,
const Generator &  rLocConstr,
const EventSet &  rYc,
const EventSet &  rUc,
const EventSet &  rYp,
const EventSet &  rUp,
const EventSet &  rYel,
const EventSet &  rUel,
Generator &  rController 
)

HioSynthUnchecked: I/O controller synthesis procedure, no parameter check.

Main hio synthesis algorithm suitable for both the monolithic and the hierarchical case, see also respective api's HioSynth(with parameter check), HioSynthMonolithic and HioSynthHierarchical. The result rController realises a solution to the I/O controller synthesis problem (S_PE,S_C,S_P,S_E,S_SpecCE).

Parameters:
rPlant plant model generator:

  • monolithic case: I/O plant to be controlled;
  • hierarchical case: parallel composition of group (I/O-shuffle) of n I/O plants S_PEi (or their abstractions) with the environment model S_EL for this group.
rSpec generator of desired behaviour of the external closed loop over alphabet SigmaCE. Must be in I/O plant form.
rConstr external constraint that may be assumed:

  • monolithic case: composition of constraints S_C and S_E
  • hierarchical case: composition of constraints S_C and S_L
rLocConstr internal constraint that has to be achieved by the I/O controller for the closed loop:

  • monolithic case: generator of constraint S_P
  • hierarchical case: parallel composition of constraints S_Pi and S_Ei
rYc alphabet YC
rUc alphabet UC
rYp alphabet YP
rUp alphabet UP
rYel monolithic: alphabet YE, hierarchical: alphabet YL
rUel monolithic: alphabet UE, hierarchical: alphabet UL
rController reference to I/O controller(result)
bool faudes::IsYcLive ( const Generator &  rGen,
const EventSet &  rYc 
)

IsYcLive: This function checks if generator is Yc-live.

Method: using YclessSCC(), the function checks if no Yc-less SCC is found.

Parameters:
rGen investigated generator
rYc alphabet Yc
Returns:
true if Generator is YcLive.
Exceptions:
Exception 
  • todo...
void faudes::MarkAlternationAB ( const EventSet  rAset,
const EventSet  rBset,
Generator &  rAltAB 
)

MarkAlternationAB: returns Generator marking the alternation of Aset-transitions with Bset-transitions.

More docu will be provided soon.

Parameters:
rAset alphabet A
rBset alphabet B
rAltAB recognizer of AB-alternation
Exceptions:
Exception 
  • rAset empty (id 0)
  • rBset empty (id 0)
void faudes::MarkHioShuffle ( const Generator &  rGen1,
const Generator &  rGen2,
const std::map< std::pair< Idx, Idx >, Idx > &  rReverseCompositionMap,
Generator &  rShuffle 
)

MarkHioShuffle: marking rule for HioShuffle() in case of marked parameters rGen1 and rGen2 - UNDER CONSTRUCTION.

Method: Strings ending with events from rGen1 are marked according to rGen1, strings ending with events from rGen2 are marked according to rGen2.

Parameters:
rGen1 First generator
rGen2 Second generator
rReverseCompositionMap map from rGen1 and rGen2 state indeces to respective state indeces of result
rShuffle Shuffle of rGen1 and rGen2 that shall receive marking
bool faudes::NormalCompleteSynth ( Generator &  rPlant,
const EventSet &  rCAlph,
const EventSet &  rOAlph,
const Generator &  rSpec,
Generator &  rClosedLoop 
)

NormalCompleteSynth: compute normal, complete and controllable (and closed) sublanguage.

Computes the supremal normal, complete and controllable (and closed) sublanguage of the language generated by rSpec wrt the language generated by rPlant, the controllable events rCalph and the observable events rOAlph. Method: iteration of CompleteSynth() and SupNorm() until a fix point is reached. Note: Supremality (if existent at all) has not yet been considered. The proof of existence and construction of both -the supremal normal and complete sublanguage and -the supremal normal and controllable sublanguage can be found in literature, which gives reason for hope.

Parameters:
rPlant plant generator
rCAlph controllable events
rOAlph observable events
rSpec specification generator
rClosedLoop reference to result
Returns:
success (true) for nonempty closed loop language
Exceptions:
Exception 
bool faudes::NormalCompleteSynthNB ( Generator &  rPlant,
const EventSet &  rCAlph,
const EventSet &  rOAlph,
const Generator &  rSpec,
Generator &  rClosedLoop 
)

NormalCompleteSynthNB: compute normal, complete, controllable and nonblocking sublanguage.

Computes a normal, complete, controllable and nonblocking (and closed) sublanguage of of the language marked by rSpec wrt the language marked by rPlant, the controllable events rCalph and the observable events rOAlph. Method: iteration of CompleteSynth(), SupNorm() and Trim() until a fix point is reached. Note: Supremality (if existent at all) has not yet been considered.

Parameters:
rPlant plant generator
rCAlph controllable events
rOAlph observable events
rSpec specification generator
rClosedLoop reference to result
Returns:
success (true) for nonempty closed loop language
Exceptions:
Exception 
void faudes::SccEntries ( const Generator &  rGen,
const std::set< StateSet > &  rSccSet,
StateSet &  rEntryStates,
TransSetX2EvX1 &  rEntryTransSet 
)

SCCEntries: figure entry states and entry transitions of strongly connected components rSccSet of rGen.

Entry states are the set of states of the SCC that are initial state or direct successor of some state not belonging to this SCC (i.e. belonging to a different or no SCC). Entry transitions are the set of respective transitions leading to an entrystate of some SCC from a state not belonging to this SCC.

Parameters:
rGen generator holding SCC's of rSccSet
rSccSet generator holding SCC's of rSccSet
rEntryStates reference to set of entry states of all SCC's (result)
rEntryTransSet reference to set of entry transitions, sorted by X2 (result)
Exceptions:
Exception 
  • todo: if FAUDES_CHECKED: check if elements of rSccSet are all subsets of StateSet of rGen.
void faudes::SearchYclessScc ( const Idx  state,
int &  rcount,
const Generator &  rGen,
const EventSet &  rYc,
const bool  UnMarkedOnly,
StateSet &  rNewStates,
std::stack< Idx > &  rSTACK,
StateSet &  rStackStates,
std::map< const Idx, int > &  rDFN,
std::map< const Idx, int > &  rLOWLINK,
std::set< StateSet > &  rSccSet,
StateSet &  rRoots 
)

SearchYclessSCC: Search for strongly connected ycless components (YC-less SCC's).

This function partitions the stateset of a generator into equivalent classes such that states x1 and x2 are equivalent iff there is a ycless path from x1 to x2 and a ycless path from x2 to x1. "Trivial" SCC's consisting of one state without non-Yc- selfloop are omitted, SCC's consisting exclusively of unmarked states are stored in rUnMarkedSccSet; all OTHER SCC's are collected in rSccSet. Their roots (i.e. that state of each SCC that has been visited first during depth first search of the generator) are collected in rRoots. This function is built on the algorithm based on a depth first search presented in: "Aho, Hopcroft, Ullman: The Design and Analysis of Computer Algorithms" Most of the comments in this function have been literally taken from this book! An api with generator and Yc-events as input parameters and the set of YC-less SCC's as output parameters is provided right below this method.

Parameters:
state State, from which the current recursion is started.
rcount Denotes the current depth of the recursion.
rGen investigated generator
rYc alphabet Yc
UnMarkedOnly if set true, being unmarked is an additional condition for equivalence of states
rNewStates Set of states that up to now were not found by the depth first search.
rSTACK Stack of state indeces.
rStackStates Set of states whose indeces are on STACK.
rDFN Map assigning to each state idx its Depth-First Number.
rLOWLINK Map assigning to each state its LOWLINK Number.
rSccSet Set of YC-less strongly connected components (result).
rRoots Set of states that each are root of some SCC (result).
Exceptions:
Exception 
  • todo...
void faudes::WriteStateSets ( const Generator &  rGen,
const std::set< StateSet > &  rStateSets 
)

WriteStateSets: Write set of StateSet's to console (symbolic state names taken from rGen).

Useful to output partitions over statesets like e.g. the set of strongly connected components. Also serves as template for walkthrough through each state of a set of statesets.

Parameters:
rGen Generator holding symbolic state names.
rStateSets Reference to set of StateSets (result).
Exceptions:
Exception 
  • todo?
void faudes::WriteStateSets ( const std::set< StateSet > &  rStateSets  ) 

WriteStateSets: Write set of StateSet's to console (indeces).

Useful to output partitions over statesets like e.g. the set of strongly connected components. Also serves as template for walkthrough through each state of a set of statesets.

Parameters:
rStateSets Reference to set of StateSets (result).
Exceptions:
Exception 
  • todo?
void faudes::YcAcyclic ( const Generator &  rGen,
const EventSet &  rYc,
Generator &  rResGen 
)

YcAcyclic: Computes the supremal(?) Yc-acyclic sublanguage of L(Gen).

Procedure: 1) Find Yc-less SCC's with YclessScc(...) 2) transform SCC's with n entry states to n SCC's with one unique entry state. 3) erase transitions leading from a state of some SCC to the entry state of this SCC's. 4) repeat 1)-3) until no more Yc-less SCC is found, i.e. rResGen generates the supremal YcAcyclic sublanguage of the language generated by rGen.

Parameters:
rGen input generator
rYc alphabet Yc
rResGen generator of supremal YcAcyclic sublanguage
Exceptions:
Exception 
bool faudes::YclessSCC ( const Generator &  rGen,
const EventSet &  rYc,
std::set< StateSet > &  rSccSet 
)

YclessSCC: Search for strongly connected ycless components (YC-less SCC's) - convenience api.

See SearchYclessSCC() for docu.

Parameters:
rGen investigated generator
rYc alphabet Yc
rSccSet Set of YC-less strongly connected components (result).
Returns:
true if YclessSCC's have been found, false if not.
Exceptions:
Exception 
  • todo...
bool faudes::YclessScc ( const Generator &  rGen,
const EventSet &  rYc,
std::set< StateSet > &  rSccSet,
StateSet &  rRoots 
)

YclessSCC: Search for strongly connected ycless components (YC-less SCC's) - convenience api.

See SearchYclessSCC() for docu.

Parameters:
rGen investigated generator
rYc alphabet Yc
rSccSet Set of YC-less strongly connected components (result).
rRoots Set of states that each are root of some SCC (result).
Returns:
true if YclessSCC's have been found, false if not.
Exceptions:
Exception 
  • todo...
bool faudes::YclessUnmarkedScc ( const Generator &  rGen,
const EventSet &  rYc,
std::set< StateSet > &  rSccSet,
StateSet &  rRoots 
)

YclessUnmarkedSCC: Search for strongly connected ycless components (YC-less SCC's) consisting of unmarked states only.

Uses SearchYclessSCC().

Parameters:
rGen investigated generator
rYc alphabet Yc
rSccSet Set of unmarked YC-less strongly connected components (result).
rRoots Set of states that each are root of some SCC (result).
Returns:
true if unmarked YclessSCC's have been found, false if not.
Exceptions:
Exception 
  • todo...

libFAUDES 2.23h --- 2014.04.03 --- c++ api documentaion by doxygen