|
@@ -135,9 +135,11 @@ public class SimulationManager {
|
|
|
ArrayList<AbstractCpsObject> producers = new ArrayList<AbstractCpsObject>();
|
|
|
AbstractCpsObject tmp = null;
|
|
|
tagTable = new HashMap<Integer, Float>();
|
|
|
+ System.out.println("producers:");
|
|
|
for (HolonObject hl : sN.getObjects()) {
|
|
|
float energy = hl.getCurrentEnergyAtTimeStep(timeStep);
|
|
|
if (energy > 0) {
|
|
|
+ System.out.println(hl.getID());
|
|
|
tagTable.put(hl.getID(), energy);
|
|
|
hl.addTag(hl.getID());
|
|
|
for (CpsEdge edge : hl.getConnections()) {
|
|
@@ -166,6 +168,7 @@ public class SimulationManager {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ printNodes(producers);
|
|
|
setFlowSimRec(producers, 0);
|
|
|
}
|
|
|
|
|
@@ -180,27 +183,32 @@ public class SimulationManager {
|
|
|
public void setFlowSimRec(ArrayList<AbstractCpsObject> nodes, int iter) {
|
|
|
System.out.println("iteration: " + iter);
|
|
|
ArrayList<AbstractCpsObject> newNodes = new ArrayList<AbstractCpsObject>();
|
|
|
+ ArrayList<CpsEdge> changedEdges = new ArrayList<CpsEdge>();
|
|
|
AbstractCpsObject tmp;
|
|
|
if(nodes.size() != 0){
|
|
|
for(AbstractCpsObject cps: nodes){
|
|
|
if(legitState(cps)){
|
|
|
for(CpsEdge edge: cps.getConnections()){
|
|
|
- if(edge.getState() && !(edge.containsTags(cps.getTag()))){
|
|
|
+ if(edge.getPseudoTags() == null){
|
|
|
+ System.out.println("edge null");
|
|
|
+ }
|
|
|
+ if(edge.getState() && (!(edge.containsTags(edge.getTags(), cps.getTag())))){
|
|
|
if(edge.getA().getID() == cps.getID()){
|
|
|
tmp = edge.getB();
|
|
|
}else{
|
|
|
tmp = edge.getA();
|
|
|
}
|
|
|
for(Integer tag: cps.getTag()){
|
|
|
- if(!(edge.getTags().contains(tag))){
|
|
|
+ if(!(edge.getTags().contains(tag)) && !(edge.getPseudoTags().contains(tag))){
|
|
|
edge.setFlow(edge.getFlow() + tagTable.get(tag));
|
|
|
edge.addTag(tag);
|
|
|
}
|
|
|
}
|
|
|
for(Integer tag: tmp.getTag()){
|
|
|
- if(!(edge.getTags().contains(tag)) && tagTable.get(tag) != null){
|
|
|
+ if(!(edge.getTags().contains(tag)) && tagTable.get(tag) != null && !(edge.getPseudoTags().contains(tag))){
|
|
|
edge.setFlow(edge.getFlow() + tagTable.get(tag));
|
|
|
- edge.addTag(tag);
|
|
|
+ edge.addPseudoTag(tag);
|
|
|
+ changedEdges.add(edge);
|
|
|
}
|
|
|
}
|
|
|
edge.calculateState(true);
|
|
@@ -214,7 +222,7 @@ public class SimulationManager {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- setPseudoTags(newNodes);
|
|
|
+ setPseudoTags(newNodes, changedEdges);
|
|
|
printNodes(newNodes);
|
|
|
setFlowSimRec(newNodes, iter+1);
|
|
|
}
|
|
@@ -226,11 +234,15 @@ public class SimulationManager {
|
|
|
* @param nodes
|
|
|
* Array of AbstractCpsObjects
|
|
|
*/
|
|
|
- public void setPseudoTags(ArrayList<AbstractCpsObject> nodes) {
|
|
|
+ public void setPseudoTags(ArrayList<AbstractCpsObject> nodes, ArrayList<CpsEdge> edges) {
|
|
|
for (AbstractCpsObject node : nodes) {
|
|
|
node.recalculateTags();
|
|
|
node.setPseudoTags(new ArrayList<Integer>());
|
|
|
}
|
|
|
+ for(CpsEdge edge : edges){
|
|
|
+ edge.recalculateTags();
|
|
|
+ edge.setPseudoTag(new ArrayList<Integer>());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -425,23 +437,25 @@ public class SimulationManager {
|
|
|
AbstractCpsObject a;
|
|
|
AbstractCpsObject b;
|
|
|
for (CpsEdge edge : cps.getConnections()) {
|
|
|
- a = edge.getA();
|
|
|
- b = edge.getB();
|
|
|
- if (!(cps instanceof HolonSwitch)) {
|
|
|
- if (!(sN.getEdges().contains(edge))) {
|
|
|
- sN.getEdges().add(edge);
|
|
|
+ if(!(simMode && !edge.getState())){
|
|
|
+ a = edge.getA();
|
|
|
+ b = edge.getB();
|
|
|
+ if (!(cps instanceof HolonSwitch)) {
|
|
|
+ if (!(sN.getEdges().contains(edge))) {
|
|
|
+ sN.getEdges().add(edge);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- if(cps instanceof HolonSwitch && ((HolonSwitch)cps).getState(timeStep)){
|
|
|
- if (!(sN.getEdges().contains(edge))) {
|
|
|
- sN.getEdges().add(edge);
|
|
|
+ if(cps instanceof HolonSwitch && ((HolonSwitch)cps).getState(timeStep)){
|
|
|
+ if (!(sN.getEdges().contains(edge))) {
|
|
|
+ sN.getEdges().add(edge);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!visited.contains(a.getID()) && legitState(cps)) {
|
|
|
+ sN = buildSubNet(a, visited, sN);
|
|
|
+ }
|
|
|
+ if (!visited.contains(b.getID()) && legitState(cps)) {
|
|
|
+ sN = buildSubNet(b, visited, sN);
|
|
|
}
|
|
|
- }
|
|
|
- if (!visited.contains(a.getID()) && legitState(cps)) {
|
|
|
- sN = buildSubNet(a, visited, sN);
|
|
|
- }
|
|
|
- if (!visited.contains(b.getID()) && legitState(cps)) {
|
|
|
- sN = buildSubNet(b, visited, sN);
|
|
|
}
|
|
|
}
|
|
|
return sN;
|