|
@@ -154,7 +154,13 @@ public class SimulationManager {
|
|
edge.calculateState(true);
|
|
edge.calculateState(true);
|
|
edge.addTag(hl.getID());
|
|
edge.addTag(hl.getID());
|
|
if (edge.getState() && !producers.contains(tmp)) {
|
|
if (edge.getState() && !producers.contains(tmp)) {
|
|
- producers.add(tmp);
|
|
|
|
|
|
+ if(tmp instanceof HolonSwitch){
|
|
|
|
+ if(((HolonSwitch)tmp).getState(timeStep)){
|
|
|
|
+ producers.add(tmp);
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ producers.add(tmp);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -172,50 +178,45 @@ public class SimulationManager {
|
|
* the Iteration
|
|
* the Iteration
|
|
*/
|
|
*/
|
|
public void setFlowSimRec(ArrayList<AbstractCpsObject> nodes, int iter) {
|
|
public void setFlowSimRec(ArrayList<AbstractCpsObject> nodes, int iter) {
|
|
|
|
+ System.out.println("iteration: " + iter);
|
|
ArrayList<AbstractCpsObject> newNodes = new ArrayList<AbstractCpsObject>();
|
|
ArrayList<AbstractCpsObject> newNodes = new ArrayList<AbstractCpsObject>();
|
|
- ArrayList<Integer> pseudoTags = new ArrayList<Integer>();
|
|
|
|
- AbstractCpsObject tmp = null;
|
|
|
|
- if (nodes.size() != 0) {
|
|
|
|
- for (AbstractCpsObject cps : nodes) {
|
|
|
|
- for (CpsEdge edge : cps.getConnections()) {
|
|
|
|
- for (Integer tag : cps.getTag()) {
|
|
|
|
- if (edge.getState() && !(edge.getTags().contains(tag))) {
|
|
|
|
- edge.setFlow(edge.getFlow() + tagTable.get(tag));
|
|
|
|
- edge.calculateState(true);
|
|
|
|
- edge.addTag(tag);
|
|
|
|
- if (edge.getA().getID() == cps.getID()) {
|
|
|
|
|
|
+ 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.getA().getID() == cps.getID()){
|
|
tmp = edge.getB();
|
|
tmp = edge.getB();
|
|
- }
|
|
|
|
- if (edge.getB().getID() == cps.getID()) {
|
|
|
|
|
|
+ }else{
|
|
tmp = edge.getA();
|
|
tmp = edge.getA();
|
|
- }
|
|
|
|
- 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());
|
|
|
|
-
|
|
|
|
|
|
+ }
|
|
|
|
+ for(Integer tag: cps.getTag()){
|
|
|
|
+ if(!(edge.getTags().contains(tag))){
|
|
|
|
+ edge.setFlow(edge.getFlow() + tagTable.get(tag));
|
|
|
|
+ edge.addTag(tag);
|
|
}
|
|
}
|
|
- if (edge.getB().getID() == cps.getID()) {
|
|
|
|
- edge.getA().getPseudoTags().removeAll(edge.getTags());
|
|
|
|
|
|
+ }
|
|
|
|
+ for(Integer tag: tmp.getTag()){
|
|
|
|
+ if(!(edge.getTags().contains(tag))){
|
|
|
|
+ edge.setFlow(edge.getFlow() + tagTable.get(tag));
|
|
|
|
+ edge.addTag(tag);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if (edge.getState() && !(newNodes.contains(tmp))) {
|
|
|
|
|
|
+ edge.calculateState(true);
|
|
|
|
+ if(edge.getState()){
|
|
|
|
+ tmp.addAllPseudoTags(cps.getTag());
|
|
|
|
+ if(!newNodes.contains(tmp)){
|
|
newNodes.add(tmp);
|
|
newNodes.add(tmp);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- edge.calculateState(true);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- // printNodes(newNodes);
|
|
|
|
setPseudoTags(newNodes);
|
|
setPseudoTags(newNodes);
|
|
- setFlowSimRec(newNodes, iter + 1);
|
|
|
|
|
|
+ printNodes(newNodes);
|
|
|
|
+ setFlowSimRec(newNodes, iter+1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -227,7 +228,8 @@ public class SimulationManager {
|
|
*/
|
|
*/
|
|
public void setPseudoTags(ArrayList<AbstractCpsObject> nodes) {
|
|
public void setPseudoTags(ArrayList<AbstractCpsObject> nodes) {
|
|
for (AbstractCpsObject node : nodes) {
|
|
for (AbstractCpsObject node : nodes) {
|
|
- node.setTags(node.getPseudoTags());
|
|
|
|
|
|
+ node.recalculateTags();
|
|
|
|
+ node.setPseudoTags(new ArrayList<Integer>());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -430,10 +432,15 @@ public class SimulationManager {
|
|
sN.getEdges().add(edge);
|
|
sN.getEdges().add(edge);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if (!visited.contains(a.getID()) && legitState(a, cps)) {
|
|
|
|
|
|
+ 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);
|
|
sN = buildSubNet(a, visited, sN);
|
|
}
|
|
}
|
|
- if (!visited.contains(b.getID()) && legitState(b, cps)) {
|
|
|
|
|
|
+ if (!visited.contains(b.getID()) && legitState(cps)) {
|
|
sN = buildSubNet(b, visited, sN);
|
|
sN = buildSubNet(b, visited, sN);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -447,17 +454,11 @@ public class SimulationManager {
|
|
* @param current AbstractCpsObject
|
|
* @param current AbstractCpsObject
|
|
* @return boolean
|
|
* @return boolean
|
|
*/
|
|
*/
|
|
- public boolean legitState(AbstractCpsObject neighbor, AbstractCpsObject current) {
|
|
|
|
|
|
+ public boolean legitState(AbstractCpsObject current) {
|
|
if (current instanceof HolonSwitch) {
|
|
if (current instanceof HolonSwitch) {
|
|
if (((HolonSwitch) current).getState(timeStep)) {
|
|
if (((HolonSwitch) current).getState(timeStep)) {
|
|
- if (neighbor instanceof HolonSwitch) {
|
|
|
|
- if (((HolonSwitch) neighbor).getState(timeStep)) {
|
|
|
|
- return true;
|
|
|
|
- } else {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
|
|
+ return true;
|
|
|
|
+ }else{
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|