|
@@ -106,6 +106,7 @@ public class SimulationManager {
|
|
|
float energy = hl.getCurrentEnergyAtTimeStep(timeStep);
|
|
|
if(energy > 0){
|
|
|
tagTable.put(hl.getID(), energy);
|
|
|
+ hl.addTag(hl.getID());
|
|
|
for(CpsEdge edge: hl.getConnections()){
|
|
|
if(edge.getState()){
|
|
|
if(edge.getA().getID() == hl.getID()){
|
|
@@ -126,11 +127,12 @@ public class SimulationManager {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- setFlowSimRec(producers);
|
|
|
+ setFlowSimRec(producers, 0);
|
|
|
}
|
|
|
|
|
|
- public void setFlowSimRec(ArrayList<CpsObject> nodes){
|
|
|
+ public void setFlowSimRec(ArrayList<CpsObject> nodes, int iter){
|
|
|
ArrayList<CpsObject> newNodes = new ArrayList<CpsObject>();
|
|
|
+ ArrayList<Integer> pseudoTags = new ArrayList<Integer>();
|
|
|
CpsObject tmp = null;
|
|
|
if(nodes.size() != 0){
|
|
|
for(CpsObject cps: nodes){
|
|
@@ -138,15 +140,29 @@ public class SimulationManager {
|
|
|
for(Integer tag: cps.getTag()){
|
|
|
if(edge.getState() && !(edge.getTags().contains(tag))){
|
|
|
edge.setFlow(edge.getFlow() + tagTable.get(tag));
|
|
|
- System.out.println(cps.getID() + " has tags:" + getString(cps));
|
|
|
+ edge.calculateState(true);
|
|
|
edge.addTag(tag);
|
|
|
if(edge.getA().getID() == cps.getID()){
|
|
|
tmp = edge.getB();
|
|
|
- tmp.setTags(mergeLists(tmp.getTag(), cps.getTag()));
|
|
|
}
|
|
|
if(edge.getB().getID() == cps.getID()){
|
|
|
tmp = edge.getA();
|
|
|
- tmp.setTags(mergeLists(tmp.getTag(), cps.getTag()));
|
|
|
+ }
|
|
|
+ if(tmp.getPseudoTags() != null){
|
|
|
+ pseudoTags.addAll(tmp.getPseudoTags());
|
|
|
+ }
|
|
|
+ pseudoTags.addAll(cps.getTag());
|
|
|
+ tmp.setPseudoTags(mergeLists(tmp.getTag(), pseudoTags));
|
|
|
+ if(!edge.getState()){
|
|
|
+ newNodes.remove(edge.getA());
|
|
|
+ newNodes.remove(edge.getB());
|
|
|
+ if(edge.getA().getID() == cps.getID()){
|
|
|
+ edge.getB().getPseudoTags().removeAll(edge.getTags());
|
|
|
+
|
|
|
+ }
|
|
|
+ if(edge.getB().getID() == cps.getID()){
|
|
|
+ edge.getA().getPseudoTags().removeAll(edge.getTags());
|
|
|
+ }
|
|
|
}
|
|
|
if(edge.getState() && !(newNodes.contains(tmp))){
|
|
|
newNodes.add(tmp);
|
|
@@ -156,13 +172,26 @@ public class SimulationManager {
|
|
|
edge.calculateState(true);
|
|
|
}
|
|
|
}
|
|
|
- setFlowSimRec(newNodes);
|
|
|
+
|
|
|
+ setPseudoTags(newNodes);
|
|
|
+ setFlowSimRec(newNodes, iter + 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public String getString(CpsObject cps){
|
|
|
+ public void setPseudoTags(ArrayList<CpsObject> nodes){
|
|
|
+ for(CpsObject node: nodes){
|
|
|
+ node.setTags(node.getPseudoTags());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void printNodes(ArrayList<CpsObject> nodes){
|
|
|
+ System.out.println("new Nodes:");
|
|
|
+ for(CpsObject node: nodes){
|
|
|
+ System.out.println(node.getID());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public String getString(ArrayList<Integer> tags){
|
|
|
String result = "";
|
|
|
- for(Integer i:cps.getTag()){
|
|
|
+ for(Integer i: tags){
|
|
|
result = result + ", " + i;
|
|
|
}
|
|
|
return result;
|
|
@@ -171,11 +200,15 @@ public class SimulationManager {
|
|
|
public ArrayList<Integer> mergeLists(ArrayList<Integer> A, ArrayList<Integer> B){
|
|
|
ArrayList<Integer> result = new ArrayList<Integer>();
|
|
|
for(Integer i: A){
|
|
|
- if(!(B.contains(i))){
|
|
|
+ if(!(result.contains(i))){
|
|
|
result.add(i);
|
|
|
}
|
|
|
}
|
|
|
- result.addAll(B);
|
|
|
+ for(Integer j: B){
|
|
|
+ if(!(result.contains(j))){
|
|
|
+ result.add(j);
|
|
|
+ }
|
|
|
+ }
|
|
|
return result;
|
|
|
}
|
|
|
|