requires that the propagation structure prints a trace of what it is doing. all prints are preceded by PropagationStruture
specifies that once propagation is finished, it must call the checkInternals method on all propagation elements.
is to be set to true only if the static dependency graph between propagation elements has no cycles. If unsure, set to false, the engine will discover it by itself. See also method isAcyclic to query a propagation structure.
specifies that once propagation is finished, it must call the checkInternals method on all propagation elements.
specifies that once propagation is finished, it must call the checkInternals method on all propagation elements.
is to be set to true only if the static dependency graph between propagation elements has no cycles.
is to be set to true only if the static dependency graph between propagation elements has no cycles. If unsure, set to false, the engine will discover it by itself. See also method isAcyclic to query a propagation structure.
this variable is set by the propagation element to notify that they are propagating.
this variable is set by the propagation element to notify that they are propagating. it is used to ensure that no propagation element perform illegal operation such as writing a variable they do not control, etc)
requires that the propagation structure prints a trace of what it is doing.
requires that the propagation structure prints a trace of what it is doing. all prints are preceded by PropagationStruture
calls this when you have declared all your invariants and variables.
calls this when you have declared all your invariants and variables. This must be called before any query and update can be made on the model, and after all the invariants and variables have been declared.
This dumps the propagation graphs in a dot format, for documentation purposes Static graph should only be set if the static graph has not been dropped
This dumps the propagation graphs in a dot format, for documentation purposes Static graph should only be set if the static graph has not been dropped
adds the static graph as red arrows
adds the dynamic graph as blue arrows
a string that contains the dot format
returns the propagation element that is currently propagating.
returns the propagation element that is currently propagating. it allows one to ensure that the propagating element behaves as declared in its dependencies
This method is to be overriden and is expected to return the propagation elements on which the propagation structure will reason.
This method is to be overriden and is expected to return the propagation elements on which the propagation structure will reason. The method is expected to return consistent result once the setupPropagationStructure method is called
To save the current value of the variables registered in the model
To save the current value of the variables registered in the model
if set to true (as by default) the solution will only contain the variables that are not derived through an invariant
return the summed stalls of all SCC.
return the summed stalls of all SCC. A stall is when the SCC is unable to maintain the topological sort incrementally, and must recompute it from scratch this happens when dependencies are modified with transient cycles
the summed number of stalls for all the SCC
true if the propagation structure consider that his graph is acyclic, false otherwise. call this after the call to setupPropagationStructure If the propagation structure has been created with NoCycle set to true, this will return true
triggers the propagation in the graph.
triggers the propagation in the graph. this method will do nothing if called before setupPropagationStructure if UpTo set to a PropagationElement, and provided it has been registered through the registerForPartialPropagation method, the propagation will be partial, targeting this element.
to call before setupPropagationStructure to specify PropagationElements on which one will invoque partial propagation
to call before setupPropagationStructure to specify PropagationElements on which one will invoque partial propagation
Called by each invariants to register themselves to the model
Called by each invariants to register themselves to the model
the invariant
a unique identifier that will be used to distinguish invariants. basically, invariants use this value to set up an arbitrary ordering for use in dictionnaries.
Called by each variable to register themselves to the model
Called by each variable to register themselves to the model
the variable
a unique identifier that will be used to distinguish variables. basically, variables use this value to set up an arbitrary ordering for use in dictionnaries.
To restore a saved solution notice that only the variables that are not derived will be restored; others will be derived lazily at the next propagation wave.
To restore a saved solution notice that only the variables that are not derived will be restored; others will be derived lazily at the next propagation wave. This enables invariants to rebuild their internal data structure if needed. Only solutions saved from the same model can be restored in the model.
this method is used by propagationComponents to schedule themself for propagation.
this method is used by propagationComponents to schedule themself for propagation.
To call when one has defined all the propagation elements on which propagation will ever be triggered.
To call when one has defined all the propagation elements on which propagation will ever be triggered. It must be called before any propagation is triggered, as it allows the propagation structure to build the necessary internal structures
if true, the propagation structure drops the static graph after setup.
This class contains the model, namely, the invariants and variables They are all modeled as propagation Elements, which are handled by the inherited propagationstructure class.