Skip to content

Commit 1f4c257

Browse files
committed
Retry restarting (thx again Bernard)
1 parent 3a79d6a commit 1f4c257

File tree

4 files changed

+18
-11
lines changed

4 files changed

+18
-11
lines changed

smpt/checkers/bulk.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Bulk(AbstractChecker):
4343
Bulk meta method.
4444
"""
4545

46-
def __init__(self, ptnet: PetriNet, formula: Formula, properties: Properties, formula_compound: Formula, pdr: bool = False, slice : bool = False, debug: bool = False, solver_pids: Optional[Queue[int]] = None, bulk_techniques: Optional[Queue[str]] = None):
46+
def __init__(self, ptnet: PetriNet, formula: Formula, properties: Properties, formula_compound: Formula, pdr: bool = False, slice : bool = False, high_restart: bool = False, debug: bool = False, solver_pids: Optional[Queue[int]] = None, bulk_techniques: Optional[Queue[str]] = None):
4747
""" Initializer.
4848
"""
4949
# Local queue of solver pids (for PDR)
@@ -55,7 +55,7 @@ def __init__(self, ptnet: PetriNet, formula: Formula, properties: Properties, fo
5555
# Methods
5656
self.pdr = PDR(ptnet, formula, debug=debug, method='REACH', saturation=True, solver_pids=solver_pids, solver_pids_bis=self.solver_pids_bis) if pdr else None
5757
self.compound = Compound(formula_compound, properties, debug=debug, solver_pids=solver_pids)
58-
self.walk = RandomWalk(ptnet, formula, slice=slice, debug=debug, solver_pids=solver_pids)
58+
self.walk = RandomWalk(ptnet, formula, slice=slice, high_restart=high_restart, debug=debug, solver_pids=solver_pids)
5959

6060
def prove(self, result, concurrent_pids):
6161
""" Prover.

smpt/checkers/randomwalk.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class RandomWalk(AbstractChecker):
4343
""" Random walk method.
4444
"""
4545

46-
def __init__(self, ptnet: PetriNet, formula: Formula, parikh: bool = False, slice: bool = False, debug: bool = False, solver_pids: Optional[Queue[int]] = None, additional_techniques: Optional[Queue[str]] = None):
46+
def __init__(self, ptnet: PetriNet, formula: Formula, parikh: bool = False, slice: bool = False, high_restart: bool = False, debug: bool = False, solver_pids: Optional[Queue[int]] = None, additional_techniques: Optional[Queue[str]] = None):
4747
""" Initializer.
4848
"""
4949
# Initial Petri net and formula
@@ -56,11 +56,13 @@ def __init__(self, ptnet: PetriNet, formula: Formula, parikh: bool = False, slic
5656
# Slicing
5757
self.slice = not self.parikh and slice
5858

59+
max_markings = 100000 if high_restart else 1000000
60+
5961
# Walkers
6062
if self.parikh:
61-
self.solver = Walk(ptnet.filename, parikh_filename=formula.parikh_filename, debug=debug, solver_pids=solver_pids)
63+
self.solver = Walk(ptnet.filename, parikh_filename=formula.parikh_filename, max_markings=max_markings, debug=debug, solver_pids=solver_pids)
6264
else:
63-
self.solver = Walk(ptnet.filename, slice=self.slice, debug=debug, solver_pids=solver_pids)
65+
self.solver = Walk(ptnet.filename, slice=self.slice, max_markings=max_markings, debug=debug, solver_pids=solver_pids)
6466

6567
# Additional techniques queue
6668
self.additional_techniques = additional_techniques

smpt/exec/parallelizer.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,10 @@ def prove(self, method: str, result, concurrent_pids: Queue[list[int]]) -> None:
314314
prover : Optional[AbstractChecker] = None
315315

316316
if method == 'WALK':
317-
prover = RandomWalk(self.ptnet_walk_pdr, self.formula_walk_pdr, parikh=True, slice=self.slice, debug=self.debug, solver_pids=self.solver_pids, additional_techniques=self.additional_techniques)
317+
prover = RandomWalk(self.ptnet_walk_pdr, self.formula_walk_pdr, parikh=True, slice=self.slice, high_restart=self.pre_run, debug=self.debug, solver_pids=self.solver_pids, additional_techniques=self.additional_techniques)
318318

319319
if method == 'WALK-NO-PARIKH':
320-
prover = RandomWalk(self.ptnet_walk_pdr, self.formula_walk_pdr, parikh=False, slice=self.slice, debug=self.debug, solver_pids=self.solver_pids, additional_techniques=self.additional_techniques)
320+
prover = RandomWalk(self.ptnet_walk_pdr, self.formula_walk_pdr, parikh=False, slice=self.slice, high_restart=self.pre_run, debug=self.debug, solver_pids=self.solver_pids, additional_techniques=self.additional_techniques)
321321

322322
elif method == 'STATE-EQUATION':
323323
prover = StateEquation(self.ptnet_state_equation, self.formula_state_equation, ptnet_reduced=self.ptnet_reduced_state_equation, system=self.system_state_equation, ptnet_skeleton=self.ptnet_skeleton, formula_skeleton=self.formula_skeleton, pre_run=self.pre_run, debug=self.debug, solver_pids=self.solver_pids, additional_techniques=self.additional_techniques)
@@ -353,10 +353,10 @@ def prove(self, method: str, result, concurrent_pids: Queue[list[int]]) -> None:
353353
prover = InitialMarking(self.ptnet_skeleton, self.formula)
354354

355355
elif method == 'BULK-PDR-COMPOUND-WALK':
356-
prover = Bulk(self.ptnet_walk_pdr, self.formula_walk_pdr, self.properties, self.formula, pdr=True, slice=self.slice, debug=self.debug, solver_pids=self.solver_pids, bulk_techniques=self.bulk_techniques)
356+
prover = Bulk(self.ptnet_walk_pdr, self.formula_walk_pdr, self.properties, self.formula, pdr=True, slice=self.slice, high_restart=self.pre_run, debug=self.debug, solver_pids=self.solver_pids, bulk_techniques=self.bulk_techniques)
357357

358358
elif method == 'BULK-COMPOUND-WALK':
359-
prover = Bulk(self.ptnet_walk_pdr, self.formula_walk_pdr, self.properties, self.formula, pdr=False, slice=self.slice, debug=self.debug, solver_pids=self.solver_pids, bulk_techniques=self.bulk_techniques)
359+
prover = Bulk(self.ptnet_walk_pdr, self.formula_walk_pdr, self.properties, self.formula, pdr=False, slice=self.slice, high_restart=self.pre_run, debug=self.debug, solver_pids=self.solver_pids, bulk_techniques=self.bulk_techniques)
360360

361361
if prover:
362362
prover.prove(result, concurrent_pids)

smpt/interfaces/walk.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ class Walk(Solver):
5353
Path to an eventual Parikh file.
5454
solver : Popen, optional
5555
A walk process.
56+
max_markings : int
57+
Max markings to explore before restarting.
5658
timeout : int
5759
Timeout of walk.
5860
solver_pids : Queue of int
@@ -63,7 +65,7 @@ class Walk(Solver):
6365
Debugging flag.
6466
"""
6567

66-
def __init__(self, ptnet_filename: str, slice: bool = False, parikh_filename: Optional[str] = None, debug: bool = False, timeout: int = 0, solver_pids: Optional[Queue[int]] = None) -> None:
68+
def __init__(self, ptnet_filename: str, slice: bool = False, parikh_filename: Optional[str] = None, max_markings: int = 1000000, debug: bool = False, timeout: int = 0, solver_pids: Optional[Queue[int]] = None) -> None:
6769
""" Initializer.
6870
6971
Parameters
@@ -74,6 +76,8 @@ def __init__(self, ptnet_filename: str, slice: bool = False, parikh_filename: Op
7476
Slicing mode.
7577
parikh_filename : str, optional
7678
Path to an eventual Parikh file.
79+
max_markings : int, optional
80+
Max markings to explore before restarting.
7781
debug: bool, optional
7882
Debugging flag.
7983
timeout: int, optional
@@ -92,6 +96,7 @@ def __init__(self, ptnet_filename: str, slice: bool = False, parikh_filename: Op
9296

9397
# Solver
9498
self.solver: Optional[Popen] = None
99+
self.max_markings: int = max_markings
95100
self.timeout: int = timeout
96101
self.solver_pids: Queue[int] = solver_pids
97102

@@ -159,7 +164,7 @@ def check_sat(self, walk_filename: str = None) -> bool:
159164
if walk_filename is None:
160165
raise ValueError("Walk: no filename")
161166

162-
process = ['walk', '-R', '-loop', '-seed', self.ptnet_filename, '-ff', walk_filename]
167+
process = ['walk', '-R', '-c', str(self.max_markings), '-loop', '-seed', self.ptnet_filename, '-ff', walk_filename]
163168

164169
if self.parikh_filename:
165170
process += ['-favor', self.parikh_filename]

0 commit comments

Comments
 (0)