LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Toggle main menu visibility
Loading...
Searching...
No Matches
spn_properties.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012-2026, QORE Lab, Imperial College London
3
* All rights reserved.
4
*/
5
#ifndef LINE_API_SPN_SPN_PROPERTIES_H
6
#define LINE_API_SPN_SPN_PROPERTIES_H
7
8
/**
9
* @file
10
* @ingroup api_spn
11
* Aggregate Petri-net property analysis: P- and T-invariants, minimal
12
* siphons and traps with Commoner's condition, the LP structural checks and
13
* net classes, and the reachability-graph verdicts, all at one initial
14
* marking. Two structural verdicts are derived when the net is monotone
15
* (`ignored` empty; inhibitor arcs, priorities and mixed timed/immediate
16
* events void the structural theorems):
17
* structdeadlockfree = 1 when the net is ordinary and Commoner holds
18
* (a deadlock empties a siphon; Murata 1989, Thm. 26-27), else -1;
19
* structlive = 1 for an asymmetric-choice net with Commoner, 0 for an
20
* extended free-choice net without it (Commoner/Hack), else -1.
21
* MATLAB twin: matlab/src/api/spn/spn_properties.m.
22
*/
23
24
#include <cstddef>
25
#include <string>
26
#include <vector>
27
28
#include "
line/api/spn/spn_reachprops.h
"
29
#include "
line/api/spn/spn_siphons.h
"
30
#include "
line/api/spn/spn_sinvariants.h
"
31
#include "
line/api/spn/spn_structprops.h
"
32
#include "
line/api/spn/spn_tinvariants.h
"
33
#include "
line/api/spn/spn_traps.h
"
34
35
namespace
line
{
36
namespace
spn
{
37
38
struct
SpnProperties
{
39
std::vector<long long>
m0
;
40
std::vector<std::string>
ignored
;
41
SpnInvariants
sinv
;
42
SpnTInvariants
tinv
;
43
SpnSiphons
siphons
;
44
SpnTraps
traps
;
45
SpnStructProps
structp
;
///< MATLAB/Java/Python field "struct"
46
SpnReachProps
reach
;
47
bool
commoner
=
true
;
48
int
structdeadlockfree
= -1;
49
int
structlive
= -1;
50
};
51
52
template
<
class
T>
53
SpnProperties
spn_properties
(
const
qn::NetworkStruct<T>
&
sn
,
54
const
std::vector<double>& init = std::vector<double>(),
55
std::size_t maxstates = 0) {
56
const
detail::SpnNet net = detail::spn_build_net(
sn
,
"spn_properties"
);
57
SpnProperties
pr;
58
pr.
m0
= detail::spn_initmarking(
sn
, net, init,
"spn_properties"
);
59
const
std::vector<double> m0d(pr.
m0
.begin(), pr.
m0
.end());
60
pr.
ignored
= net.ignored;
61
pr.
sinv
=
spn_sinvariants
(
sn
, m0d);
62
pr.
tinv
=
spn_tinvariants
(
sn
);
63
pr.
siphons
=
spn_siphons
(
sn
, m0d);
64
pr.
traps
=
spn_traps
(
sn
, m0d);
65
pr.
structp
=
spn_structprops
(
sn
);
66
pr.
reach
=
spn_reachprops
(
sn
, m0d, maxstates);
67
pr.
commoner
= pr.
siphons
.
commoner
;
68
if
(net.ignored.empty()) {
69
if
(pr.
structp
.
ordinary
&& pr.
commoner
) pr.
structdeadlockfree
= 1;
70
if
(pr.
structp
.
asymmetric
&& pr.
commoner
) pr.
structlive
= 1;
71
else
if
(pr.
structp
.
efc
&& !pr.
commoner
) pr.
structlive
= 0;
72
}
73
return
pr;
74
}
75
76
}
// namespace spn
77
}
// namespace line
78
79
#endif
// LINE_API_SPN_SPN_PROPERTIES_H
line::qn::NetworkStruct
A network plus its refreshed NetworkStruct.
Definition
network_struct.h:1070
line::sn
Definition
sn_arvr_state_dependent_balance.h:25
line::spn
Definition
spn_conv.h:57
line::spn::spn_reachprops
SpnReachProps spn_reachprops(const qn::NetworkStruct< T > &sn, const std::vector< double > &init=std::vector< double >(), std::size_t maxstates=0)
Definition
spn_reachprops.h:105
line::spn::spn_traps
SpnTraps spn_traps(const qn::NetworkStruct< T > &sn, const std::vector< double > &init=std::vector< double >())
Definition
spn_traps.h:36
line::spn::spn_structprops
SpnStructProps spn_structprops(const qn::NetworkStruct< T > &sn)
Definition
spn_structprops.h:94
line::spn::spn_sinvariants
SpnInvariants spn_sinvariants(const qn::NetworkStruct< T > &sn, const std::vector< double > &init=std::vector< double >())
Minimal-support S-invariants and the load vector of a net.
Definition
spn_sinvariants.h:124
line::spn::spn_siphons
SpnSiphons spn_siphons(const qn::NetworkStruct< T > &sn, const std::vector< double > &init=std::vector< double >())
Definition
spn_siphons.h:46
line::spn::spn_tinvariants
SpnTInvariants spn_tinvariants(const qn::NetworkStruct< T > &sn)
Definition
spn_tinvariants.h:35
line::spn::spn_properties
SpnProperties spn_properties(const qn::NetworkStruct< T > &sn, const std::vector< double > &init=std::vector< double >(), std::size_t maxstates=0)
Definition
spn_properties.h:53
line
Conservation laws of a layered queueing network, enumerated from its structure.
Definition
aoi_dist2ph.h:52
spn_reachprops.h
Behavioural properties of a stochastic Petri net from its reachability graph (Murata 1989,...
spn_sinvariants.h
Minimal-support S-invariants (P-invariants) of a stochastic Petri net, and the load vector V = S m0.
spn_siphons.h
All minimal siphons of a stochastic Petri net and Commoner's condition (Murata 1989,...
spn_structprops.h
Structural properties of a stochastic Petri net, from its incidence matrix C alone (Murata 1989,...
spn_tinvariants.h
Minimal-support T-invariants of a stochastic Petri net (Murata 1989, sec.
spn_traps.h
All minimal traps of a stochastic Petri net (Murata 1989, sec.
line::spn::SpnInvariants
The invariant basis of a net, in PLACE-LEVEL coordinates: one level per (place, class) pair,...
Definition
spn_sinvariants.h:62
line::spn::SpnProperties
Definition
spn_properties.h:38
line::spn::SpnProperties::tinv
SpnTInvariants tinv
Definition
spn_properties.h:42
line::spn::SpnProperties::commoner
bool commoner
Definition
spn_properties.h:47
line::spn::SpnProperties::reach
SpnReachProps reach
Definition
spn_properties.h:46
line::spn::SpnProperties::structdeadlockfree
int structdeadlockfree
Definition
spn_properties.h:48
line::spn::SpnProperties::structlive
int structlive
Definition
spn_properties.h:49
line::spn::SpnProperties::m0
std::vector< long long > m0
Definition
spn_properties.h:39
line::spn::SpnProperties::siphons
SpnSiphons siphons
Definition
spn_properties.h:43
line::spn::SpnProperties::traps
SpnTraps traps
Definition
spn_properties.h:44
line::spn::SpnProperties::ignored
std::vector< std::string > ignored
Definition
spn_properties.h:40
line::spn::SpnProperties::sinv
SpnInvariants sinv
Definition
spn_properties.h:41
line::spn::SpnProperties::structp
SpnStructProps structp
MATLAB/Java/Python field "struct".
Definition
spn_properties.h:45
line::spn::SpnReachProps
Definition
spn_reachprops.h:39
line::spn::SpnSiphons
Definition
spn_siphons.h:37
line::spn::SpnSiphons::commoner
bool commoner
every minimal siphon holds a marked trap
Definition
spn_siphons.h:41
line::spn::SpnStructProps
Definition
spn_structprops.h:40
line::spn::SpnStructProps::asymmetric
bool asymmetric
Definition
spn_structprops.h:47
line::spn::SpnStructProps::efc
bool efc
Definition
spn_structprops.h:47
line::spn::SpnStructProps::ordinary
bool ordinary
Definition
spn_structprops.h:46
line::spn::SpnTInvariants
Definition
spn_tinvariants.h:28
line::spn::SpnTraps
Definition
spn_traps.h:28
include
line
api
spn
spn_properties.h
Generated by
1.18.0