Class OSTNU
This class implementation considers instantaneous reactions and checks the agile controllability, assuming that the network can be executed by adopting an early execution strategy.
At 2024-02-14, the agile controllability is checked, propagating a modified version of Morris' rules:
- No case rule
- new upper case rule
- new lower case rule
- cross-case rule
- label removal rule
- oracle rule
Each oracle is associated with a specific contingent node.
So, if there is a contingent node 'C' and an oracle 'OC' for it, node OC has in its observation field the value 'c' ('c' is just a label).
New upper/lower case rules and oracle rule determine new rules labeled by the fact that the oracle is involved or not.
In particular, each value determined by the oracle rule involving an oracle 'OC' having observation field = 'c'
is labeled by 'c'. Each value is determined by a lower / upper rule (without exploiting the associated oracle) that involves the contingent node 'C', which is labeled by '¬c'.
In other words, label 'c' and label '¬c' represent two possible values generated considering the contingent node 'C'
that cannot be combined because they are alternatives. 'c' and '¬c' can be considered literals of a boolean
proposition 'c'.
Other rules consider and propagate only values having a label that are consistent, i.e., labels that have no opposite literals.
Constraint values (represented as edge values) are integers.
A well-defined network must not contain contingent links in sequence: a contingent node cannot be the activation node of another contingent link. Moreover, distinct contingent links cannot share the same activation node. If a network contained one of these configurations, split the contingent links by inserting one or more ordinary support nodes connected by zero-distance constraints, and use those support nodes as distinct activation nodes.
- Version:
- $Rev: 840 $
- Author:
- Roberto Posenato
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classA simple class to represent the status of the checking algorithm during an execution.Nested classes/interfaces inherited from class AbstractCSTN
AbstractCSTN.CheckAlgorithm, AbstractCSTN.CSTNCheckStatus, AbstractCSTN.DCSemantics, AbstractCSTN.EdgesToCheck<E>, AbstractCSTN.NodesToCheckModifier and TypeClassDescriptionstatic enumOnly for stating which kind of DC checking algorithms have been implemented so far.static classRepresents the status of a CSTN-checking algorithm during an execution.static enumValue for dcSemanticsstatic classAbstractCSTN.EdgesToCheck<E extends Edge>A simple class to maintain the set of edges to check in the following phase.static classActs as a queue and a set. -
Field Summary
FieldsModifier and TypeFieldDescription(package private) it.unimi.dsi.fastutil.objects.Object2ObjectMap<LabeledNode, LabeledNode> Utility map that returns the activation time point (node) associated with a contingent link, given the contingent timepoint, i.e., contingent link A ===> C determines the entry (C, A) in this map.(package private) OSTNU.OSTNUCheckStatusAgile status(package private) booleanRepresent contingent links also as ordinary constraints.(package private) it.unimi.dsi.fastutil.objects.Object2ObjectMap<LabeledNode, OSTNUEdgePluggable> Utility map that returns the edge containing the lower-case constraint of a contingent link given the contingent timepoint.(package private) it.unimi.dsi.fastutil.objects.Object2ObjectMap<LabeledNode, LabeledNode> Utility map that returns the oracle node O_C associated with a contingent node C.static final StringVersion of the classFields inherited from class AbstractCSTN
cleanCheckedInstance, FILE_NAME_SUFFIX, fInput, fOutput, g, gCheckedCleaned, horizon, maxWeight, propagationOnlyToZ, reactionTime, timeOut, versionReq, withNodeLabels, ZERO_NODE_NAMEModifier and TypeFieldDescription(package private) booleanIf true, after a check, the resulting graph is cleaned: all empty edges or labeled values containing unknown literals are removed.(package private) static StringSuffix for file name(package private) FileThe input file containing the CSTN graph in GraphML format.(package private) FileOutput file where to write the XML representing the CSTN graph after a check.(package private) TemporalConstraintGraph<OSTNUEdgePluggable> Input graph.(package private) TemporalConstraintGraph<OSTNUEdgePluggable> The graph obtained by a check and the cleaning action.(package private) intHorizon value.(package private) intThe absolute value of the max negative weight was determined during the initialization phase.(package private) booleanCheck using the full set of rules R0, qR0, R3, qR3, LP, qLP or the reduced set qR0, qR3, LP.(package private) intWD2.2 epsilon value, also called `reaction time` in ICAPS 18.(package private) intTimeout in seconds for the check.(package private) booleanSoftware Version.(package private) booleanIf false, node labels are ignored during the check.static final StringThe name for the initial node. -
Constructor Summary
ConstructorsConstructorDescriptionOSTNU()Creates an OSTNU with an empty graph using the sparse backend by default.OSTNU(boolean useDenseGraph) Creates an OSTNU with an empty, newly created graph.Constructor for CSTNU, without copying or converting the given graph.OSTNU(TemporalConstraintGraph<OSTNUEdgePluggable> graph, int giveTimeOut) Constructor for CSTNU, without copying or converting the given graph.Helper constructor for CSTNU. -
Method Summary
Modifier and TypeMethodDescriptionfinal OSTNU.OSTNUCheckStatusChecks the agile controllability (AC) of the given network (seeOSTNU(TemporalConstraintGraph, int)orAbstractCSTN.setG(TemporalConstraintGraph)).(package private) final booleancheckAndManageIfNewLabeledValueIsANegativeLoop(int value, Label label, LabeledNode source, LabeledNode destination, OSTNUEdgePluggable newEdge) Checks if a new labeled value is negative and represents a negative cycle.Checks the dynamic consistency (DC) of a CSTN instance within timeout seconds.final OSTNU.OSTNUCheckStatusGetter for the fieldcheckStatus, the status of a checking algorithm.(package private) final LabelgetLabel4ValueInvolvingContingent(LabeledNode contingent, LabeledNode node, boolean straight) final voidChecks and initializes the CSTN instance represented by graphg.(package private) final booleanDetermines the minimal distance between all pairs of vertices of the given graph if the graph is consistent, i.e., it does not contain any negative cycles.(package private) final voidlabeledCrossCaseRule(LabeledNode nA, LabeledNode nC, LabeledNode nX, OSTNUEdgePluggable eAC, OSTNUEdgePluggable eCX, OSTNUEdgePluggable eAX) Labeled Cross-Case Rule(package private) final booleanlabeledLetterRemovalRule(LabeledNode nX, LabeledNode nA, OSTNUEdgePluggable eXA) Labeled Letter Removal Since this algorithm does not manage if two contingent timepoints have a strict range, and they require oracles, one way to capture such a situation is to not remove the letter to a wait when X is an activation or contingent time point.(package private) final voidlabeledLowerCaseRule(LabeledNode nA, LabeledNode nC, LabeledNode nX, OSTNUEdgePluggable eAC, OSTNUEdgePluggable eCX, OSTNUEdgePluggable eAX) Labeled Lower Case Rule(package private) final voidlabeledOracleRule(LabeledNode nA, LabeledNode nC, LabeledNode nX, OSTNUEdgePluggable eAC, OSTNUEdgePluggable eCX, OSTNUEdgePluggable eAX) Oracle rule.(package private) final voidlabeledPropagationRule(LabeledNode nX, LabeledNode nY, LabeledNode nW, OSTNUEdgePluggable eXY, OSTNUEdgePluggable eYW, OSTNUEdgePluggable eXW) Applies 'labeled no case' or 'labeled upper case propagation' rules.(package private) final voidlabeledUpperCaseRule(LabeledNode nX, LabeledNode nC, LabeledNode nA, OSTNUEdgePluggable eXC, OSTNUEdgePluggable eCA, OSTNUEdgePluggable eXA) Applies 'labeled upper case' rules.static voidReads a CSTNU file and checks it.(package private) final TemporalConstraintGraph<OSTNUEdgePluggable> final OSTNU.OSTNUCheckStatusoneStepAgileControllability(AbstractCSTN.EdgesToCheck<OSTNUEdgePluggable> edgesToCheck, Instant timeoutInstant) Executes one step of the agile controllability check.final voidreset()Resets all internal structuresMethods inherited from class AbstractCSTN
addUpperBounds, checkWellDefinitionProperties, checkWellDefinitionProperty1and3, coreCSTNInitAndCheck, getCheckedGraph, getEdgeFromObserversToNode, getfOutput, getG, getGChecked, getGCheckedAsGraphML, getGraph, getMaxWeight, getReactionTime, getVersionAndCopyright, isOutputCleaned, isWithNodeLabels, labelModificationR0qR0, labelModificationR0qR0Core, mainConditionForSkippingInR0qR0, mainConditionForSkippingInR3qR3, makeAlphaBetaGammaPrime4R3, makeAlphaPrime, makeBetaGammaDagger4qR3, makeNewEdge, manageParameters, newValueInR3qR3, pairAsString, recordCheckOutcome, removeChildrenOfUnknown, saveGraphToFile, setfOutput, setG, setOutputCleaned, setPropagationOnlyToZ, setWithNodeLabelsModifier and TypeMethodDescription(package private) final voidThe upper bounds from Z to each node have to be set after the horizon is determined.(package private) final booleancheckWellDefinitionProperties.(package private) booleancheckWellDefinitionProperty1and3(LabeledNode nS, LabeledNode nD, OSTNUEdgePluggable eSN, boolean hasToBeFixed) Checks whether the constraint represented by an edge 'e' satisfies the well-defined first property (WD1): any labeled value of the edge has a label that subsumes both labels of the two endpoints. In case a label is not WD1 andhasToBeFixed, then it is fixed.(package private) final voidMakes the CSTN well-definedness check and initialization.Getter for the resulting checked graph, without copying or converting it.(package private) final it.unimi.dsi.fastutil.objects.ObjectList<OSTNUEdgePluggable> Determines the set of edges P?Getter for the fieldfOutput.getG()Deprecated.Deprecated.useAbstractCSTN.getCheckedGraph()in algorithms; this adapter is only for JUNG/GraphML boundaries.Helper method for having the graph obtained byAbstractCSTN.getCheckedGraph()in GraphML format.getGraph()Getter for the fieldg, the input graph, without copying or converting it.final intGetter for the fieldmaxWeight.final intGetter for the fieldreactionTime.final Stringbooleanboolean(package private) final booleanlabelModificationR0qR0(LabeledNode nObs, LabeledNode nX, OSTNUEdgePluggable eObsX) Applies rule R0/qR0: label containing a proposition that can be decided only in the future is simplified by removing such a proposition.(package private) final LabellabelModificationR0qR0Core(LabeledNode nP, LabeledNode nX, Label alpha, int w) Execute the core ofAbstractCSTN.labelModificationR0qR0(LabeledNode, LabeledNode, CSTNEdge).(package private) booleanReturns true ifAbstractCSTN.labelModificationR0qR0(LabeledNode, LabeledNode, E)method has to not apply.(package private) booleanmainConditionForSkippingInR3qR3(int w, LabeledNode nD) Returns true ifCSTN.labelModificationR3qR3(LabeledNode, LabeledNode, CSTNEdge)method has to not apply.(package private) final LabelmakeAlphaBetaGammaPrime4R3(LabeledNode nS, LabeledNode nD, LabeledNode nObs, char observed, Label labelFromObs, Label labelToClean) A simple method to determine the label "αβγ" for the ruleCSTN.labelModificationR3qR3(LabeledNode, LabeledNode, CSTNEdge).(package private) final LabelmakeAlphaPrime(LabeledNode nX, LabeledNode nObs, char observed, Label labelFromObs) Simple method to determine theα'to use in rules R0 and in rule qR0.(package private) final LabelmakeBetaGammaDagger4qR3(LabeledNode nS, LabeledNode nObs, char observed, Label labelFromObs, Label labelToClean) Simple method to determine the label (β*γ)† to use in rules qR3*CSTN.labelModificationR3qR3(LabeledNode, LabeledNode, CSTNEdge).(package private) final OSTNUEdgePluggablemakeNewEdge(String name, Edge.ConstraintType type) Create an edge, ensuring that its name is unique in the graph 'g'.(package private) final booleanmanageParameters(String[] args) Simple method to manage command line parameters using the "args4j" library.(package private) intnewValueInR3qR3(int edgeValue, int obsEdgeValue) Determines the new value that rules R3 and qR3 (see Table 1 in the ICAPS 2016 paper) must add.(package private) static StringpairAsString(Label label, int value) protected final voidrecordCheckOutcome(CheckOutcome.Kind kind, boolean successful) Records the verdict of a completed check on bothAbstractCSTN.gand, when it exists and is notgitself, onAbstractCSTN.gCheckedCleaned.(package private) final LabelReturns a new label removing all children of possibly present unknown literals inl.final voidHelper method to make it easier to store the resulting graph during a check.final voidsetfOutput(File fileOutput) final voidConsiders the given graph as the graph to check, without copying or converting it (the graph will be modified).final voidsetOutputCleaned(boolean clean) Set to true for having the result graph cleaned of empty edges and labeled values having unknown literals.final voidsetPropagationOnlyToZ(boolean propagationOnlyToZ1) Setter for the fieldpropagationOnlyToZ.final voidsetWithNodeLabels(boolean withNodeLabels1)
-
Field Details
-
VERSIONandDATE
-
activationNode
it.unimi.dsi.fastutil.objects.Object2ObjectMap<LabeledNode, LabeledNode> activationNodeUtility map that returns the activation time point (node) associated with a contingent link, given the contingent timepoint, i.e., contingent link A ===> C determines the entry (C, A) in this map. -
checkStatus
OSTNU.OSTNUCheckStatus checkStatusAgile status -
contingentAlsoAsOrdinary
boolean contingentAlsoAsOrdinaryRepresent contingent links also as ordinary constraints. -
lowerContingentEdge
it.unimi.dsi.fastutil.objects.Object2ObjectMap<LabeledNode, OSTNUEdgePluggable> lowerContingentEdgeUtility map that returns the edge containing the lower-case constraint of a contingent link given the contingent timepoint. -
oracleNode
it.unimi.dsi.fastutil.objects.Object2ObjectMap<LabeledNode, LabeledNode> oracleNodeUtility map that returns the oracle node O_C associated with a contingent node C. The oracle node contains the contingent node name in its 'proposition' field. The map is '(C, O_C)'.
-
-
Constructor Details
-
OSTNU
Helper constructor for CSTNU.This constructor is useful for making the use of this class easier in an environment like 'Node.js-Java'.
- Parameters:
graphXML- the DenseTCGraph to check in GraphML format- Throws:
IOException- if any error occurs during the graphXML readingParserConfigurationException- if graphXML contains a character that cannot be parsedSAXException- if graphXML is not valid
-
OSTNU
Constructor for CSTNU, without copying or converting the given graph.- Parameters:
graph- graph to checkgiveTimeOut- timeout for the check in seconds
-
OSTNU
Constructor for CSTNU, without copying or converting the given graph.- Parameters:
graph- graph to check
-
OSTNU
public OSTNU()Creates an OSTNU with an empty graph using the sparse backend by default. -
OSTNU
public OSTNU(boolean useDenseGraph) Creates an OSTNU with an empty, newly created graph.- Parameters:
useDenseGraph- true to use the dense backend (DenseTCGraph); false to use the sparse backend (SparseTCGraph).
-
-
Method Details
-
main
public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException Reads a CSTNU file and checks it.- Parameters:
args- an array ofStringobjects.- Throws:
IOException- if any.ParserConfigurationException- if any.SAXException- if any.
-
agileControllabilityCheck
Checks the agile controllability (AC) of the given network (seeOSTNU(TemporalConstraintGraph, int)orAbstractCSTN.setG(TemporalConstraintGraph)).If the network is AC, it determines all the minimal ranges for the constraints.
During the execution of this method, the given network is modified.
If the check is successful, all constraints to node Z in the network are minimized; otherwise, the network contains at least one negative loop.
After a check,
AbstractCSTN.getCheckedGraph()returns the graph resulting from the check, andgetCheckStatus()returns the result of the checking action with some statistics, and the node with the negative loop is the network is NOT DC.
In any case, before returning, this method callAbstractCSTN.saveGraphToFile()for saving the computed graph.- Returns:
- an
OSTNU.OSTNUCheckStatusobject containing the final status and some statistics about the executed checking. - Throws:
WellDefinitionException- if any.
-
dynamicConsistencyCheck
Checks the dynamic consistency (DC) of a CSTN instance within timeout seconds. During the execution of this method, the given network is modified.If the check is successful, all constraints to node Z in the network are minimized; otherwise, the network contains at least one negative loop.
After a check,
AbstractCSTN.getGChecked()returns the network determined by the check andAbstractCSTN.getCheckStatus()the result of the checking action with some statistics, and the node having a negative loop if the network is NOT DC.In any case, before returning, this method call
AbstractCSTN.saveGraphToFile()for saving the computed graph. Wrapper method foragileControllabilityCheck()- Specified by:
dynamicConsistencyCheckin classAbstractCSTN<OSTNUEdgePluggable>- Returns:
- the final status of the checking with some statistics.
- Throws:
WellDefinitionException- if any.
-
getCheckStatus
Getter for the fieldcheckStatus, the status of a checking algorithm.- Overrides:
getCheckStatusin classAbstractCSTN<OSTNUEdgePluggable>- Returns:
- the status of a checking algorithm. At the end of the run, the final status and some statistics are presented.
-
initAndCheck
Checks and initializes the CSTN instance represented by graphg. The check is made byAbstractCSTN.coreCSTNInitAndCheck().Since many DC checking algorithms are complete if and only if the CSTN instance contains an upper bound to the distance from Z (the first node) for each node, this method also calls
AbstractCSTN.addUpperBounds()for adding such bounds as constraints between Z and each node.Calls and then checks all contingent links. This method works only with streamlined instances!
- Overrides:
initAndCheckin classAbstractCSTN<OSTNUEdgePluggable>- Throws:
WellDefinitionException- if the initial graph is not well-defined. We preferred to throw an exception instead of returning a negative status to stress that any further operation cannot be made on this instance.- See Also:
-
oneStepAgileControllability
public final OSTNU.OSTNUCheckStatus oneStepAgileControllability(AbstractCSTN.EdgesToCheck<OSTNUEdgePluggable> edgesToCheck, Instant timeoutInstant) Executes one step of the agile controllability check.Before the first execution of this method, it is necessary to execute
initAndCheck().- Parameters:
edgesToCheck- set of edges that have to be checked.timeoutInstant- the time instant limit allowed for the computation.- Returns:
- the updated status (for convenience, it is not necessary because it returns the same parameter status).
-
reset
public final void reset()Resets all internal structures- Overrides:
resetin classAbstractCSTN<OSTNUEdgePluggable>
-
checkAndManageIfNewLabeledValueIsANegativeLoop
final boolean checkAndManageIfNewLabeledValueIsANegativeLoop(int value, @Nonnull Label label, @Nonnull LabeledNode source, @Nonnull LabeledNode destination, @Nonnull OSTNUEdgePluggable newEdge) Checks if a new labeled value is negative and represents a negative cycle. In such a case, update the status by adding the new scenario to the list of negative scenarios.- Parameters:
value- valuelabel- label of the valuesource- source nodedestination- destination nodenewEdge- new edge- Returns:
- true if a negative loop has been found in the given scenario, and that there is no alternative scenario to it (i.e., there are two scenarios that present negative loop w.r.t. the value generated by a contingent time point, one using oracle, one not using oracle).
-
getLabel4ValueInvolvingContingent
@Nonnull final Label getLabel4ValueInvolvingContingent(@Nonnull LabeledNode contingent, @Nonnull LabeledNode node, boolean straight) - Parameters:
contingent- contingent nodenode- the other node for which it is necessary to determine the label for the constraint involving the contingent node.straight- true if the label is relative to the value determined by the oracle rule; otherwise, it is false.- Returns:
- the label used by lower case/upper case/oracle rules to label values involving the contingent node.
-
isAllMaxMinimalGraphConsistent
final boolean isAllMaxMinimalGraphConsistent(@Nonnull TemporalConstraintGraph<OSTNUEdgePluggable> graph) Determines the minimal distance between all pairs of vertices of the given graph if the graph is consistent, i.e., it does not contain any negative cycles.- Parameters:
graph- the graph. It will be modified- Returns:
- true if the input graph is consistent, i.e., it does not contain any negative cycle; false otherwise.
-
labeledCrossCaseRule
final void labeledCrossCaseRule(@Nonnull LabeledNode nA, @Nonnull LabeledNode nC, @Nonnull LabeledNode nX, @Nonnull OSTNUEdgePluggable eAC, @Nonnull OSTNUEdgePluggable eCX, @Nonnull OSTNUEdgePluggable eAX) Labeled Cross-Case RuleA ---(u,c,α)--→ C ---(v,D,β)--→ X adds A ---(u+v,D,αβ)--→ X if αβ∈P, C != D, and v ≤ 0.
Since it is assumed that L(C)=L(A)=α, there is only ONE lower-case labeled value u,c,α!- Parameters:
nA- nodenC- nodenX- nodeeAC- CANNOT BE NULLeCX- CANNOT BE NULLeAX- CANNOT BE NULL
-
labeledLetterRemovalRule
final boolean labeledLetterRemovalRule(@Nonnull LabeledNode nX, @Nonnull LabeledNode nA, @Nonnull OSTNUEdgePluggable eXA) Labeled Letter Removal Since this algorithm does not manage if two contingent timepoints have a strict range, and they require oracles, one way to capture such a situation is to not remove the letter to a wait when X is an activation or contingent time point.2025-03-17: After some tests, I verified that in case of NOT AC instance, it is better not to execute this method because the check is faster. In the case of the 'AC' instance, without this method, the check is a little longer, and the final instance contains many positive waits that can be simplified by removing the letter. I maintain the use of the method only to avoid a 'dirty' AC instance.
X ---(v,ℵ,β)--→ A ---(x,c,α)--→ C adds X ---(m,ℵ',β)---→ A if C ∈ ℵ, m = max(v, −x), β entails α, and X is not an activation timepoint. ℵ'=ℵ'/C
- Parameters:
nX- node external nodenA- activation nodeeXA- edge- Returns:
- true if a letter was removed
-
labeledLowerCaseRule
final void labeledLowerCaseRule(@Nonnull LabeledNode nA, @Nonnull LabeledNode nC, @Nonnull LabeledNode nX, @Nonnull OSTNUEdgePluggable eAC, @Nonnull OSTNUEdgePluggable eCX, @Nonnull OSTNUEdgePluggable eAX) Labeled Lower Case RuleX ←--(-u,◇,β)--- C ←--(x,c,α)----- A ---(v,◇,β')---→ --(-y,C,α)-----→ adds X ←-----(x-u,◇,¬cαββ')------------ A if ¬cαββ'∈P, -u≤0, and (Oracle O_C does not exist or v-u≥y-x).
Since it is assumed that L(C)=L(A), there is only ONE lower-case labeled value u,c,α!
- Parameters:
nA- nodenC- nodenX- nodeeAC- CANNOT BE NULLeCX- CANNOT BE NULLeAX- CANNOT BE NULL
-
labeledOracleRule
final void labeledOracleRule(@Nonnull LabeledNode nA, @Nonnull LabeledNode nC, @Nonnull LabeledNode nX, @Nonnull OSTNUEdgePluggable eAC, @Nonnull OSTNUEdgePluggable eCX, @Nonnull OSTNUEdgePluggable eAX) Oracle rule.X ---(v,◇,β)-→ C ---(-y,C,α)-→ A ←--(-u,◇,β')--| ←--(x,c,α)--- | (0) | ↓ O_C adds X ---(v-x,◇,αcβ)--------------→ A ←--(y-u,◇,αcβ')-----------------| | C | | | | | (-u,◇,αcββ') | | | | | ↓ | |-(0,◇,αcββ')→ O_C ←(x-u,◇,αcββ') when X is not contingent, αcββ' is consistent, and a negative scenario does not subsume it, and v-u < y-x- Parameters:
nA- nodenC- nodenX- nodeeAC- CANNOT BE NULLeCX- CANNOT BE NULLeAX- CANNOT BE NULL
-
labeledPropagationRule
final void labeledPropagationRule(@Nonnull LabeledNode nX, @Nonnull LabeledNode nY, @Nonnull LabeledNode nW, @Nonnull OSTNUEdgePluggable eXY, @Nonnull OSTNUEdgePluggable eYW, @Nonnull OSTNUEdgePluggable eXW) Applies 'labeled no case' or 'labeled upper case propagation' rules.
1) CASE labeled no case, labeled upper case propagation X ----(u,◇,α)---→ Y ----(v,ℵ,β)-----→ W adds X -----------(u+v,ℵ,αβ)------------→ W ℵ can be empty. αβ must be consistent and not in negative scenarios
- Parameters:
nX- nodenY- nodenW- nodeeXY- CANNOT BE NULLeYW- CANNOT BE NULLeXW- CANNOT BE NULL
-
labeledUpperCaseRule
final void labeledUpperCaseRule(@Nonnull LabeledNode nX, @Nonnull LabeledNode nC, @Nonnull LabeledNode nA, @Nonnull OSTNUEdgePluggable eXC, @Nonnull OSTNUEdgePluggable eCA, @Nonnull OSTNUEdgePluggable eXA) Applies 'labeled upper case' rules.
2) labeled in case A ←--(-y,C,𝛂)---- C ←-(v,◇,β)-------- X ---(x,C,𝛂)----→ --(-u,◇,β')-----→ adds A ←---(y+v,C,¬c𝛂ββ')----------------- X when ¬c𝛂ββ' is consistent and a negative scenario does not subsume it. Oracle for Y does not exist, or v-u ≥ y-x.
- Parameters:
nX- external nodenC- contingent nodenA- activation nodeeXC- CANNOT BE NULLeCA- CANNOT BE NULLeXA- CANNOT BE NULL
-
makeAllMaxProjection
-
AbstractCSTN.getGraph()in algorithms; this adapter is only for JUNG/GraphML boundaries.