pub struct PetriNet {
pub places: Vec<Place>,
pub transitions: Vec<Transition>,
pub arcs_in: Vec<(usize, usize, Weight)>,
pub arcs_out: Vec<(usize, usize, Weight)>,
}Expand description
A classical (Place/Transition) Petri net.
Arcs are stored as (transition_idx, place_idx, weight) triples.
Fields§
§places: Vec<Place>All places in this net.
transitions: Vec<Transition>All transitions in this net.
arcs_in: Vec<(usize, usize, Weight)>Input arcs: (transition, place, weight) – tokens consumed on fire.
arcs_out: Vec<(usize, usize, Weight)>Output arcs: (transition, place, weight) – tokens produced on fire.
Implementations§
Source§impl PetriNet
impl PetriNet
Sourcepub fn add_transition(&mut self, transition: Transition) -> usize
pub fn add_transition(&mut self, transition: Transition) -> usize
Add a transition and return its index.
Sourcepub fn add_arc_in(&mut self, t: usize, p: usize, weight: Weight)
pub fn add_arc_in(&mut self, t: usize, p: usize, weight: Weight)
Add an input arc: transition t consumes weight tokens from place p.
Sourcepub fn add_arc_out(&mut self, t: usize, p: usize, weight: Weight)
pub fn add_arc_out(&mut self, t: usize, p: usize, weight: Weight)
Add an output arc: transition t produces weight tokens into place p.
Sourcepub fn set_marking(&mut self, marking: &[usize])
pub fn set_marking(&mut self, marking: &[usize])
Apply a marking vector to the net (sets token counts).
Sourcepub fn enabled_transitions(&self) -> Vec<usize>
pub fn enabled_transitions(&self) -> Vec<usize>
Return indices of all currently enabled transitions.
A transition is enabled when every input arc can be satisfied and the
guard (if any) returns true.
Sourcepub fn fire(&mut self, t_idx: usize) -> Result<(), String>
pub fn fire(&mut self, t_idx: usize) -> Result<(), String>
Fire transition t_idx, updating token counts.
Returns Ok(()) on success or Err(String) if the transition is not
enabled.
Sourcepub fn is_deadlocked(&self) -> bool
pub fn is_deadlocked(&self) -> bool
Returns true if no transition is currently enabled (deadlock).
Sourcepub fn marking_sum(&self) -> usize
pub fn marking_sum(&self) -> usize
Sum of all tokens in the net (useful for conservation checks).
Sourcepub fn reachability_bfs(&self) -> HashSet<Vec<usize>>
pub fn reachability_bfs(&self) -> HashSet<Vec<usize>>
BFS over reachable markings from the current marking.
Returns the set of all reachable markings (including the initial one).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for PetriNet
impl RefUnwindSafe for PetriNet
impl Send for PetriNet
impl Sync for PetriNet
impl Unpin for PetriNet
impl UnsafeUnpin for PetriNet
impl UnwindSafe for PetriNet
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.