From 915e5cc16748d6dc3af82788e2845af89e10d93c Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 7 Dec 2015 21:32:44 -0500 Subject: [PATCH] Adding ForkSplit --- .../src/jopt/csp/example/api/StartHere.java | 2 +- .../src/jopt/js/spi/graph/arc/ForkSplit.java | 62 +++++++++++++++++++ .../js/spi/graph/arc/ForwardCheckArc.java | 21 ++++--- .../spi/graph/arc/ForwardCheckReflexArc.java | 23 ++++--- 4 files changed, 91 insertions(+), 17 deletions(-) create mode 100644 jOptJSRecover/src/jopt/js/spi/graph/arc/ForkSplit.java diff --git a/jOptCSRecover/src/jopt/csp/example/api/StartHere.java b/jOptCSRecover/src/jopt/csp/example/api/StartHere.java index def08ca..188c2e4 100644 --- a/jOptCSRecover/src/jopt/csp/example/api/StartHere.java +++ b/jOptCSRecover/src/jopt/csp/example/api/StartHere.java @@ -46,7 +46,7 @@ public class StartHere { // create the necessary 'variables' CspIntVariable xVar = varFactory.intVar("x", 1, 4); // x = 1..4 CspIntVariable yVar = varFactory.intVar("y", 1, 3); // y = 1..3 - CspIntVariable zVar = varFactory.intVar("z", 1, 12); // z = 1..12 + CspIntVariable zVar = varFactory.intVar("z", 1, 6); // z = 1..12 // create the x * y <= z 'constraint' CspConstraint constraint = xVar.multiply(yVar).leq(zVar); diff --git a/jOptJSRecover/src/jopt/js/spi/graph/arc/ForkSplit.java b/jOptJSRecover/src/jopt/js/spi/graph/arc/ForkSplit.java new file mode 100644 index 0000000..3f2d5a7 --- /dev/null +++ b/jOptJSRecover/src/jopt/js/spi/graph/arc/ForkSplit.java @@ -0,0 +1,62 @@ +package jopt.js.spi.graph.arc; + +import java.util.concurrent.RecursiveAction; + +import jopt.js.spi.graph.node.ResourceNode; + +public class ForkSplit extends RecursiveAction { + /** + * + */ + //private static final long serialVersionUID = 40260316212684492L; + private int[] target_ID; + private ResourceNode[] targets; + private int start; + private int end; + private ResourceNode[] main_targets; + + + // Constructor will just take the inputted values and set them to the + //private member variable + public ForkSplit(int _start, int _end, ResourceNode[] _targets, int[] _target_ID, ResourceNode[] _main_targets){ + this.start = _start; + this.end = _end; + this.target_ID = _target_ID; + this.targets = _targets; + this.main_targets = _main_targets; + } + + @Override + // This function recursively forks the targets until they are separate. + // Then once they are all of them are computed at the same time. + protected void compute() { + if (end - start == 1){ // if each target has been forked then compute. + compute_directly(); + } + else{ // recursively split that task into two until each targets is separate. + invokeAll(new ForkSplit(this.start,(this.end+this.start)/2,this.targets,this.target_ID, this.main_targets), + new ForkSplit((this.end+this.start)/2,this.end,this.targets,this.target_ID, this.main_targets)); + } + + + } + + // This method will run the for loop once each targets is forked + private void compute_directly(){ + for (int i = 0; i < targets.length; i++){ + if (target_ID[start] == targets[i].getID()){ + main_targets[start] = targets[i]; + break; + } + } + + + } + + + // This will return the targets to be saved in ForwardCheckArc.java + public ResourceNode[] get_main_targets(){ + return this.main_targets; + } + +} diff --git a/jOptJSRecover/src/jopt/js/spi/graph/arc/ForwardCheckArc.java b/jOptJSRecover/src/jopt/js/spi/graph/arc/ForwardCheckArc.java index 3add45c..cc5f158 100644 --- a/jOptJSRecover/src/jopt/js/spi/graph/arc/ForwardCheckArc.java +++ b/jOptJSRecover/src/jopt/js/spi/graph/arc/ForwardCheckArc.java @@ -1,6 +1,7 @@ package jopt.js.spi.graph.arc; import java.util.Arrays; +import java.util.concurrent.ForkJoinPool; import jopt.csp.spi.arcalgorithm.graph.arc.Arc; import jopt.csp.spi.arcalgorithm.graph.arc.SchedulerArc; @@ -38,14 +39,20 @@ public class ForwardCheckArc extends SchedulerArc { this.targets = new ResourceNode[targets.length]; //This will ensure that resources are ordered for fast easy access later - for (int i=0; i