Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
M MTSA
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 41
    • Issues 41
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Metrics
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • lafhis
  • MTSA
  • Wiki
    • Enduser
  • supervisoryControl

supervisoryControl · Changes

Page history
Create enduser/supervisoryControl authored Jun 17, 2025 by Pablo Laciana's avatar Pablo Laciana
Hide whitespace changes
Inline Side-by-side
Showing with 66 additions and 0 deletions
+66 -0
  • enduser/supervisoryControl.md enduser/supervisoryControl.md +66 -0
  • No files found.
enduser/supervisoryControl.md 0 → 100644
View page @ b7d10ff6
# Supervisory Control
In supervisory control, Discrete Event Systems (DES) are expressed compactly by relying on a modular approach based on the parallel composition of multiple interacting components, referred to as the plant.
Supervisory control aims at controlling DES to achieve certain `guarantees`, this is done by deploying a so-called “supervisor” that dynamically disables `controllable` events while monitoring `uncontrollable` events.
A supervisor is a solution to compositional control problem if, by disabling only controllable events, restricts the plant to states from where marked states are always reachable, but not necessary reached (i.e., uncontrollable events may prevent actually reaching marked states, but may neverlead to a deadlock). This is why we will always be using the tag `nonblocking` in `controllerSpec`.
As opposed to traditional supervisory control techniques we don't look for maximally permissive supervisors.
## Marking states:
There's two ways to specify winning (i.e. marked) states in `controllerSpec`:
* Using the keyword `marking` followed by a set of transition labels.
>Note that we use marked transitions in the controllerGoal, but actually these are internally translated into marked states. If all transitions leading to a state `a` are marked, it all works as expected and `a` is a marked state. If `a` can be reached through marked and non marked transitions, then there will be two states internally, one marked and one not marked, and both will have the same outgoing transitions.
* Using the keyword `liveness` followed by a set of assertions, they will be used as guarantees.
>Currently, when having more than one, it will try to satisfy all at once.
## Algorithms:
As of the moment there's only one algorithmic option to use in this type of problems, *Directed Controller Synthesis*. Go to [DCS](https://bitbucket.org/lnahabedian/mtsa/wiki/enduser/DCS) for instructions in how to use it.
## Example marking states:
```
Example = A1,
A1 = (u12 -> A2 |
u14 ->A4),
A2 = (u21 -> A1),
A4 = (c45 ->A5),
A5 = (u55 -> A5).
||Plant = Example.
controllerSpec Goal = {
controllable = {c45}
marking = {c45, u55}
nonblocking
}
heuristic ||DirectedController = Plant~{Goal}.
```
## Example using guarantees (liveness keyword):
```
Example = A0,
A0 = (a -> A1),
A1 = (c_1 -> Up | u_1 -> Down),
Up = (u_2 -> Up),
Down = (u_3 -> Down).
fluent GoingUp = <u_2, a>
fluent GoingDown = <u_3, a>
assert NeverGonnaGiveYouUp = (!GoingUp && GoingDown)
||Plant = Example.
controllerSpec Goal = {
liveness = {NeverGonnaGiveYouUp}
controllable = {c_1}
}
heuristic ||DirectedController = Plant~{Goal}.
```
\ No newline at end of file
Clone repository
  • Developer
  • End User
  • devs
    • outputmessages
  • enduser
    • DCS
    • fltl
    • fsp_keywords
    • helloworld
    • reactiveSynthesis
    • supervisoryControl
  • Home