|
@@ -15,6 +15,7 @@ import ui.view.MyCanvas;
|
|
public class SimulationManager {
|
|
public class SimulationManager {
|
|
private Model model;
|
|
private Model model;
|
|
private ArrayList<CpsObject> objectsToHandle;
|
|
private ArrayList<CpsObject> objectsToHandle;
|
|
|
|
+ private ArrayList<CpsEdge> allConnections;
|
|
private ArrayList<subNet> subNets;
|
|
private ArrayList<subNet> subNets;
|
|
private MyCanvas canvas;
|
|
private MyCanvas canvas;
|
|
private int timeStep;
|
|
private int timeStep;
|
|
@@ -33,19 +34,19 @@ public class SimulationManager {
|
|
public void calculateStateForTimeStep(int x){
|
|
public void calculateStateForTimeStep(int x){
|
|
timeStep = x;
|
|
timeStep = x;
|
|
searchForSubNets();
|
|
searchForSubNets();
|
|
|
|
+ for(subNet singleSubNet: subNets){
|
|
|
|
+ ResetConnections(singleSubNet.getObjects().get(0), new ArrayList<Integer>(), new ArrayList<CpsEdge>());
|
|
|
|
+ }
|
|
for(subNet singleSubNet: subNets){
|
|
for(subNet singleSubNet: subNets){
|
|
float production = calculateEnergy("prod", singleSubNet, x);
|
|
float production = calculateEnergy("prod", singleSubNet, x);
|
|
float consumption = calculateEnergy("cons", singleSubNet, x);
|
|
float consumption = calculateEnergy("cons", singleSubNet, x);
|
|
float minConsumption = calculateMinimumEnergy( singleSubNet, x);
|
|
float minConsumption = calculateMinimumEnergy( singleSubNet, x);
|
|
- for(CpsEdge e: singleSubNet.getEdges()){
|
|
|
|
- e.setFlow(0);
|
|
|
|
- }
|
|
|
|
setFlow(singleSubNet);
|
|
setFlow(singleSubNet);
|
|
for(HolonObject hl: singleSubNet.getObjects()){
|
|
for(HolonObject hl: singleSubNet.getObjects()){
|
|
if(!(hl.getState() == 0) && !(hl.getState() == 3)){
|
|
if(!(hl.getState() == 0) && !(hl.getState() == 3)){
|
|
for(int i = 0; i < hl.getConnections().size(); i++){
|
|
for(int i = 0; i < hl.getConnections().size(); i++){
|
|
CpsEdge edge = hl.getConnectedTo().get(i);
|
|
CpsEdge edge = hl.getConnectedTo().get(i);
|
|
- if(edge.getState() && edge.getFlow() > 0){
|
|
|
|
|
|
+ if(edge.getState() && edge.getFlow() > 0 || edge.getCapacity() == -1){
|
|
// 0 = no energy, 1 = not supplied, 2 = supplied, 3 = producer, 4 = partially supplied
|
|
// 0 = no energy, 1 = not supplied, 2 = supplied, 3 = producer, 4 = partially supplied
|
|
if((production + consumption) >= 0){
|
|
if((production + consumption) >= 0){
|
|
hl.setState(2);
|
|
hl.setState(2);
|
|
@@ -72,7 +73,6 @@ public class SimulationManager {
|
|
for(HolonObject hl: sN.getObjects()){
|
|
for(HolonObject hl: sN.getObjects()){
|
|
float energy = hl.getCurrentEnergyAtTimeStep(timeStep);
|
|
float energy = hl.getCurrentEnergyAtTimeStep(timeStep);
|
|
if(energy > 0){
|
|
if(energy > 0){
|
|
- //fillConnectionsFor(hl, new ArrayList<Integer>(), new ArrayList<CpsEdge>(), hl.getCurrentEnergyAtTimeStep(timeStep));
|
|
|
|
for(CpsEdge e : sN.getEdges()){
|
|
for(CpsEdge e : sN.getEdges()){
|
|
e.setFlow(e.getFlow() + energy);
|
|
e.setFlow(e.getFlow() + energy);
|
|
}
|
|
}
|
|
@@ -80,26 +80,18 @@ public class SimulationManager {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public void fillConnectionsFor(subNet sN, float energy){
|
|
|
|
- for(CpsEdge e : sN.getEdges()){
|
|
|
|
- e.setFlow(e.getFlow() + energy);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public void fillConnectionsFor(CpsObject cps, ArrayList<Integer> visitedObj, ArrayList<CpsEdge> visitedEdges ,float energy ){
|
|
|
|
|
|
+ public void ResetConnections(CpsObject cps, ArrayList<Integer> visitedObj, ArrayList<CpsEdge> visitedEdges){
|
|
visitedObj.add(cps.getID());
|
|
visitedObj.add(cps.getID());
|
|
for(CpsEdge e: cps.getConnections()){
|
|
for(CpsEdge e: cps.getConnections()){
|
|
if(!(visitedEdges.contains(e))){
|
|
if(!(visitedEdges.contains(e))){
|
|
- e.setFlow(e.getFlow() + energy);
|
|
|
|
- if(e.getState()){
|
|
|
|
- visitedEdges.add(e);
|
|
|
|
- if(!(visitedObj.contains(e.getA().getID()))){
|
|
|
|
- fillConnectionsFor(e.getA(), visitedObj, visitedEdges, energy);
|
|
|
|
- }
|
|
|
|
- if(!(visitedObj.contains(e.getB().getID()))){
|
|
|
|
- fillConnectionsFor(e.getB(), visitedObj, visitedEdges, energy);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ e.setFlow(0);
|
|
|
|
+ visitedEdges.add(e);
|
|
|
|
+ if(!(visitedObj.contains(e.getA().getID()))){
|
|
|
|
+ ResetConnections(e.getA(), visitedObj, visitedEdges);
|
|
|
|
+ }
|
|
|
|
+ if(!(visitedObj.contains(e.getB().getID()))){
|
|
|
|
+ ResetConnections(e.getB(), visitedObj, visitedEdges);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|