Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
9.2.2023: Due to updates GitLab will be unavailable for some minutes between 9:00 and 11:00.
Open sidebar
i7
peregrine
Commits
bd11abb2
Commit
bd11abb2
authored
Feb 11, 2017
by
Philipp J. Meyer
Browse files
added subnet u-traps and u-siphons
parent
488121e4
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/Solver/TerminalMarkingsUniqueConsensus.hs
View file @
bd11abb2
...
...
@@ -75,11 +75,14 @@ checkTrapConstraints net m0 m1 m2 traps =
checkUTrap
::
PetriNet
->
SIMap
Place
->
SIMap
Place
->
SIMap
Place
->
SIMap
Transition
->
SIMap
Transition
->
Trap
->
SBool
checkUTrap
net
m0
m1
m2
x1
x2
utrap
=
((
unmarkedByMarking
utrap
m0
)
|||
(
((
sequenceIn
u
x1
)
|||
(
markedByMarking
utrap
m1
))
&&&
((
sequenceIn
u
x2
)
|||
(
markedByMarking
utrap
m2
))
))
where
u
=
(
mpost
net
utrap
\\
mpre
net
utrap
)
(
((
sequenceNotIn
upre
x1
)
|||
(
sequenceIn
uunmark
x1
)
|||
(
markedByMarking
utrap
m1
))
&&&
((
sequenceNotIn
upre
x2
)
|||
(
sequenceIn
uunmark
x2
)
|||
(
markedByMarking
utrap
m2
))
)
where
upost
=
mpost
net
utrap
upre
=
mpre
net
utrap
uunmark
=
upost
\\
upre
checkUTrapConstraints
::
PetriNet
->
SIMap
Place
->
SIMap
Place
->
SIMap
Place
->
SIMap
Transition
->
SIMap
Transition
->
[
Trap
]
->
SBool
checkUTrapConstraints
net
m0
m1
m2
x1
x2
traps
=
...
...
@@ -87,11 +90,18 @@ checkUTrapConstraints net m0 m1 m2 x1 x2 traps =
checkUSiphon
::
PetriNet
->
SIMap
Place
->
SIMap
Place
->
SIMap
Place
->
SIMap
Transition
->
SIMap
Transition
->
Siphon
->
SBool
checkUSiphon
net
m0
m1
m2
x1
x2
usiphon
=
((
markedByMarking
usiphon
m0
)
|||
(
((
sequenceIn
u
x1
)
|||
(
unmarkedByMarking
usiphon
m1
))
&&&
((
sequenceIn
u
x2
)
|||
(
unmarkedByMarking
usiphon
m2
))
))
where
u
=
(
mpre
net
usiphon
\\
mpost
net
usiphon
)
(
markedByMarking
usiphon
m0
|||
(
((
sequenceNotIn
upost
x1
)
|||
(
sequenceIn
umark
x1
))
&&&
((
sequenceNotIn
upost
x2
)
|||
(
sequenceIn
umark
x2
))
)
)
where
upost
=
mpost
net
usiphon
upre
=
mpre
net
usiphon
umark
=
upre
\\
upost
checkUSiphonConstraints
::
PetriNet
->
SIMap
Place
->
SIMap
Place
->
SIMap
Place
->
SIMap
Transition
->
SIMap
Transition
->
[
Siphon
]
->
SBool
checkUSiphonConstraints
net
m0
m1
m2
x1
x2
siphons
=
...
...
@@ -219,38 +229,37 @@ findTrapConstraintsSat net m0 m1 m2 =
findUTrapConstraints
::
PetriNet
->
Marking
->
Marking
->
Marking
->
FiringVector
->
FiringVector
->
SIMap
Place
->
Maybe
(
Int
,
Integer
)
->
SBool
findUTrapConstraints
net
m0
m1
m2
x1
x2
b
sizeLimit
=
placesMarkedByMarking
net
m0
b
&&&
checkSizeLimit
b
sizeLimit
&&&
checkBinary
b
&&&
(
(
uTrapConstraints
net
x1
b
&&&
placesUnmarkedByMarking
net
m1
b
)
|||
(
uTrapConstraints
net
x2
b
&&&
placesUnmarkedByMarking
net
m2
b
)
(
placesPostsetOfSequence
net
x1
b
&&&
uTrapConstraints
net
x1
b
&&&
placesUnmarkedByMarking
net
m1
b
)
|||
(
placesPostsetOfSequence
net
x2
b
&&&
uTrapConstraints
net
x2
b
&&&
placesUnmarkedByMarking
net
m2
b
)
)
findUTrapConstraintsSat
::
PetriNet
->
Marking
->
Marking
->
Marking
->
FiringVector
->
FiringVector
->
MinConstraintProblem
Integer
Trap
Integer
findUTrapConstraintsSat
net
m0
m1
m2
x1
x2
=
let
b
=
makeVarMap
$
places
net
in
(
minimizeMethod
,
\
sizeLimit
->
(
"u-trap (w.r.t. x1 or x2) marked
in m0
and not marked in m1 or m2"
,
"u-trap"
,
(
"u-trap (w.r.t. x1 or x2) marked
by x1 or x2
and not marked in m1 or m2"
,
"u-trap"
,
getNames
b
,
\
fm
->
findUTrapConstraints
net
m0
m1
m2
x1
x2
(
fmap
fm
b
)
sizeLimit
,
\
fm
->
placesFromAssignment
(
fmap
fm
b
)))
findUSiphonConstraints
::
PetriNet
->
Marking
->
Marking
->
Marking
->
FiringVector
->
FiringVector
->
SIMap
Place
->
Maybe
(
Int
,
Integer
)
->
SBool
findUSiphonConstraints
net
m0
m1
m2
x1
x2
b
sizeLimit
=
placesUnmarkedByMarking
net
m0
b
&&&
checkSizeLimit
b
sizeLimit
&&&
checkBinary
b
&&&
placesUnmarkedByMarking
net
m0
b
&&&
(
(
uSiphonConstraints
net
x1
b
&&&
placesMarkedByMarking
net
m
1
b
)
|||
(
uSiphonConstraints
net
x2
b
&&&
placesMarkedByMarking
net
m
2
b
)
(
placesPresetOfSequence
net
x1
b
&&&
uSiphonConstraints
net
x
1
b
)
|||
(
placesPresetOfSequence
net
x2
b
&&&
uSiphonConstraints
net
x
2
b
)
)
findUSiphonConstraintsSat
::
PetriNet
->
Marking
->
Marking
->
Marking
->
FiringVector
->
FiringVector
->
MinConstraintProblem
Integer
Siphon
Integer
findUSiphonConstraintsSat
net
m0
m1
m2
x1
x2
=
let
b
=
makeVarMap
$
places
net
in
(
minimizeMethod
,
\
sizeLimit
->
(
"u-siphon (w.r.t. x1 or x2)
not marked in m0
and marked in m
1 or m2
"
,
"u-siphon"
,
(
"u-siphon (w.r.t. x1 or x2)
used by x1 or x2
and
un
marked in m
0
"
,
"u-siphon"
,
getNames
b
,
\
fm
->
findUSiphonConstraints
net
m0
m1
m2
x1
x2
(
fmap
fm
b
)
sizeLimit
,
\
fm
->
placesFromAssignment
(
fmap
fm
b
)))
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment