omg_rabinctrl.h
Go to the documentation of this file.
1 /** @file omg_rabinctrl.h Controller synthesis for Rabin automata */
2 
3 /* FAU Discrete Event Systems Library (libfaudes)
4 
5  Copyright (C) 2010, 2025 Thomas Moor
6 
7  This library is free software; you can redistribute it and/or
8  modify it under the terms of the GNU Lesser General Public
9  License as published by the Free Software Foundation; either
10  version 2.1 of the License, or (at your option) any later version.
11 
12  This library is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  Lesser General Public License for more details.
16 
17  You should have received a copy of the GNU Lesser General Public
18  License along with this library; if not, write to the Free Software
19  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
20 
21 
22 #ifndef FAUDES_OMG_RABINCTRL_H
23 #define FAUDES_OMG_RABINCTRL_H
24 
25 #include "corefaudes.h"
26 #include "omg_rabinaut.h"
27 
28 namespace faudes {
29 
30 
31 
32 /**
33  * Controllability prefix for Rabin automata.
34  *
35  * Computation of the controllability prefix as proposed by
36  * Thistle/Wonham in "Supervision of infinite behavior of Discrete Event Systems, 1994,
37  * using the fixpoint iteration from "Control of w-Automata, Church's Problem, and the
38  * Emptiness Problem for Tree w-Automata", 1992.
39  *
40  * @param rRAut
41  * Automaton to control
42  * @param rSigmaCtrl
43  * Set of controllable events
44  * @param rCtrlPfx
45  * State set that marks the controllability prefix.
46  *
47  * @ingroup OmgPlugin
48  */
49 extern FAUDES_API void RabinCtrlPfx(
50  const RabinAutomaton& rRAut, const EventSet& rSigmaCtrl,
51  StateSet& rCtrlPfx);
52 
53 /**
54  * Controllability prefix for Rabin automata.
55  *
56  * API wrapper to return the controllability prefix as generator.
57  *
58  * @param rRAut
59  * Automaton to control
60  * @param rSigmaCtrl
61  * Set of controllable events
62  * @param rCtrlPfx
63  * Generator that marks the controllability prefix.
64  *
65  * @ingroup OmgPlugin
66  */
67 extern FAUDES_API void RabinCtrlPfx(
68  const RabinAutomaton& rRAut, const EventSet& rSigmaCtrl,
69  Generator& rCtrlPfx);
70 
71 
72 /**
73  * Controllability prefix for Rabin automata.
74  *
75  * API wrapper to return a controller
76  *
77  * @param rRAut
78  * Automaton to control
79  * @param rSigmaCtrl
80  * Set of controllable events
81  * @param rController
82  * Map from states to enabled events.
83  *
84  * @ingroup OmgPlugin
85  */
86 extern FAUDES_API void RabinCtrlPfx(
87  const RabinAutomaton& rRAut, const EventSet& rSigmaCtrl,
88  TaIndexSet<EventSet>& rController);
89 
90 
91 /**
92  * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
93  *
94  * Computation of the supremal oemga-controllable sublanguage as proposed by
95  * Thistle/Wonham in "Control of w-Automata, Church's Problem, and the Emptiness
96  * Problem for Tree w-Automata", 1992, and, here, applied to the specific case
97  * of deterministic Buechi plangt and a Rabin specification.
98  *
99  * Parameter restrictions: both generators must be deterministic and
100  * refer to the same alphabet.
101  *
102  *
103  * @param rBPlant
104  * Plant to accept L w.r.t. Buechi acceptance
105  * @param rCAlph
106  * Controllable events
107  * @param rRSpec
108  * Specification to accept E w.r.t. Rabin acceptance
109  * @param rRes
110  * Resulting RabinAutomaton to accept the
111  * supremal controllable sunlanguage
112  *
113  * @exception Exception
114  * - alphabets of generators don't match (id 100)
115  * - plant nondeterministic (id 201)
116  * - spec nondeterministic (id 203)
117  * - plant and spec nondeterministic (id 204)
118  *
119  * @ingroup OmgPlugin
120  *
121  */
122 extern FAUDES_API void SupRabinCon(
123  const Generator& rBPlant,
124  const EventSet& rCAlph,
125  const RabinAutomaton& rRSpec,
126  RabinAutomaton& rRes);
127 
128 
129 
130 /**
131  * Omega-synthesis w.r.t. Buechi acceptance
132  *
133  * This is the RTI wrapper for
134  * SupRabinCon(const Generator&, const EventSet&, const Generator&, Generator&).
135  * Controllability attributes are taken from the plant argument.
136  * Attributes will be copied from the plant argument.
137  *
138  *
139  * @param rBPlant
140  * System to accept L w.r.t. Buechi acceptance
141  * @param rRSpec
142  * Specification to accept E w.r.t. Rabin acceptance
143  * @param rResGen
144  * Reference to resulting RabinAutomaton to accept the
145  * supremal controllable sunlanguage
146  *
147  * @exception Exception
148  * Alphabets of generators don't match (id 100)
149  * plant nondeterministic (id 201)
150  * spec nondeterministic (id 203)
151  * plant and spec nondeterministic (id 204)
152  *
153  * @ingroup OmgPlugin
154  */
155 extern FAUDES_API void SupRabinCon(
156  const System& rBPlant,
157  const RabinAutomaton& rRSpec,
158  RabinAutomaton& rRes);
159 
160 
161 /**
162  * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
163  *
164  * Computation of the "greedy" controller that runs for early acceptance.
165  * The result is a Buechi automaton of the closed-loop behaviour under
166  * greedy control. The closure is readily utilised as a controller.
167  *
168  * Parameter restrictions: both generators must be deterministic and
169  * refer to the same alphabet.
170  *
171  * @param rBPlant
172  * Plant to accept L w.r.t. Buechi acceptance
173  * @param rCAlph
174  * Controllable events
175  * @param rRSpec
176  * Specification to accept E w.r.t. Rabin acceptance
177  * @param rRes
178  * Closed-loop behaviour under greedy control.
179  *
180  * @exception Exception
181  * - alphabets of generators don't match (id 100)
182  * - plant nondeterministic (id 201)
183  * - spec nondeterministic (id 203)
184  * - plant and spec nondeterministic (id 204)
185  *
186  * @ingroup OmgPlugin
187  *
188  */
189 extern FAUDES_API void RabinCtrl(
190  const Generator& rBPlant,
191  const EventSet& rCAlph,
192  const RabinAutomaton& rRSpec,
193  Generator& rRes);
194 
195 
196 /**
197  * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
198  *
199  * Computation of the "greedy" supervisor that runs for early acceptance; this
200  * variant retrieves controllabillity arguments from the specified plant.
201  * The result is a Buechi automaton of the closed-loop behaviour under
202  * greedy control. The closure is readily utilised as a controller.
203  *
204  * Parameter restrictions: both generators must be deterministic and
205  * refer to the same alphabet.
206  *
207  * @param rBPlant
208  * Plant to accept L w.r.t. Buechi acceptance
209  * @param rRSpec
210  * Specification to accept E w.r.t. Rabin acceptance
211  * @param rRes
212  * Closed-loop behaviour udner greedy control.
213  *
214  * @exception Exception
215  * - alphabets of generators don't match (id 100)
216  * - plant nondeterministic (id 201)
217  * - spec nondeterministic (id 203)
218  * - plant and spec nondeterministic (id 204)
219  *
220  *
221  * @ingroup OmgPlugin
222  *
223  */
224 extern FAUDES_API void RabinCtrl(
225  const System& rBPlant,
226  const RabinAutomaton& rRSpec,
227  Generator& rRes);
228 
229 
230 /**
231  * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
232  *
233  * Computation of a controller that respects next to the common upper bound
234  * specification also a lower bound. Only on exit of the lower-bound, the greedy
235  * controlle is activated.
236  * The result returned is a Buechi automaton of the closed-loop behaviour. The
237  * closure is readily utilised as a controller.
238  *
239  * Parameter restrictions: both generators must be deterministic and
240  * refer to the same alphabet. The lower bound argument is interpreted as the generated
241  * omega-language intersected with the plant behaviour. The effective lower bound
242  * must not exceed the supremal omega-controllable sublanguage of the upper bound
243  * specification. This is currently not checked.
244  *
245  * @param rBPlant
246  * Plant to accept L w.r.t. Buechi acceptance
247  * @param rGLSpec
248  * Specification to be generate the lower bound A
249  * @param rRUSpec
250  * Specification to accept the upper bound E w.r.t. Rabin acceptance
251  * @param rRes
252  * Closed-loop behaviour.
253  *
254  * @exception Exception
255  * - alphabets of generators don't match (id 100)
256  * - plant nondeterministic (id 201)
257  * - spec nondeterministic (id 203)
258  * - plant and spec nondeterministic (id 204)
259  *
260  *
261  * @ingroup OmgPlugin
262  *
263  */
264 extern FAUDES_API void RabinCtrl(
265  const Generator& rBPlant,
266  const EventSet& rCAlph,
267  const Generator& rGLSpec,
268  const RabinAutomaton& rRUSpec,
269  Generator& rRes);
270 
271 /**
272  * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
273  *
274  * Computation of a controller that respects next to the common upper bound
275  * specification also a lower bound. Only on exit of the lower-bound, the greedy
276  * controlle is activated. This is an API wrapper to obtain controllability attributes
277  * from the plant parameter.
278  * The result returned is a Buechi automaton of the closed-loop behaviour. The
279  * closure is readily utilised as a controller.
280  *
281  * Parameter restrictions: both generators must be deterministic and
282  * refer to the same alphabet. The lower bound argument is interpreted as the generated
283  * omega-language intersected with the plant behaviour. The effective lower bound
284  * must not exceed the supremal omega-controllable sublanguage of the upper bound
285  * specification. This is currently not checked.
286  *
287  * @param rBPlant
288  * System to accept L w.r.t. Buechi acceptance
289  * @param rGLSpec
290  * Specification to be generate the lower bound A
291  * @param rRUSpec
292  * Specification to accept the upper bound E w.r.t. Rabin acceptance
293  * @param rRes
294  * Closed-loop behaviour.
295  *
296  * @exception Exception
297  * - alphabets of generators don't match (id 100)
298  * - plant nondeterministic (id 201)
299  * - spec nondeterministic (id 203)
300  * - plant and spec nondeterministic (id 204)
301  *
302  *
303  * @ingroup OmgPlugin
304  *
305  */
306 extern FAUDES_API void RabinCtrl(
307  const System& rBPlant,
308  const Generator& rGLSpec,
309  const RabinAutomaton& rRUSpec,
310  Generator& rRes);
311 
312 
313 } // namespace faudes
314 
315 #endif
316 
#define FAUDES_API
Definition: cfl_platform.h:85
IndexSet StateSet
Definition: cfl_indexset.h:296
NameSet EventSet
Definition: cfl_nameset.h:546
vGenerator Generator
TcGenerator< AttributeVoid, AttributeVoid, AttributeCFlags, AttributeVoid > System
void SupRabinCon(const Generator &rBPlant, const EventSet &rCAlph, const RabinAutomaton &rRSpec, RabinAutomaton &rRes)
void RabinCtrlPfx(const RabinAutomaton &rRAut, const EventSet &rSigmaCtrl, StateSet &rCtrlPfx)
void RabinCtrl(const Generator &rBPlant, const EventSet &rCAlph, const RabinAutomaton &rRSpec, Generator &rRes)
TrGenerator< RabinAcceptance, AttributeVoid, AttributeCFlags, AttributeVoid > RabinAutomaton
Definition: omg_rabinaut.h:226

libFAUDES 2.33l --- 2025.09.16 --- c++ api documentaion by doxygen