Browse Source

PerformanceFix for Flexibilities.

Tom Troppmann 4 years ago
parent
commit
6182f7ff26
3 changed files with 54 additions and 11 deletions
  1. 12 0
      plottAcoAlgo.txt
  2. 4 0
      src/ui/controller/FlexManager.java
  3. 38 11
      src/ui/controller/SimulationManager.java

File diff suppressed because it is too large
+ 12 - 0
plottAcoAlgo.txt


+ 4 - 0
src/ui/controller/FlexManager.java

@@ -24,6 +24,7 @@ public class FlexManager {
 	private List<Flexibility> allFlexesOrderedThisTimeStep = new ArrayList<Flexibility>();
 	private HashMap<Flexibility, FlexWrapper> accessFlexMap = new HashMap<Flexibility, FlexWrapper>();
 	public FlexManager(Model model, int timeStep, FlexManager timestepBefore){
+		//Thread.dumpStack();
 		this.timeStep = timeStep;
 		allFlexModels = getAllFlexFromModel(model);
 		//fill accessFlexMap
@@ -164,4 +165,7 @@ public class FlexManager {
 		}
 		
 	}
+	public void reset() {
+		getAllFlexWrapper().forEach(flexWrapper -> flexWrapper.cancel());
+	}
 }

+ 38 - 11
src/ui/controller/SimulationManager.java

@@ -71,14 +71,14 @@ public class SimulationManager {
 	 * @param updateVisual TODO
 	 */
 	public void calculateStateForTimeStep(int timestep, boolean updateVisual) {
-		FlexManager newFlexManager = new FlexManager(model, timestep, savesFlexManger.getOrDefault(timestep-1, null));
-		//Actual ordered not delete:
-		FlexManager flexManagerFromActual = savesFlexManger.getOrDefault(timestep, null);
-		if(flexManagerFromActual != null) {
-			newFlexManager.orderFlexFromList(flexManagerFromActual.getAllFlexesOrderedThisTimeStep());
-		}
-		savesFlexManger.put(timestep, newFlexManager);
 		
+//		long startTime = System.currentTimeMillis(), endTime;
+		boolean doesFlexManagerExist = savesFlexManger.containsKey(timestep);
+		FlexManager newFlexManager = doesFlexManagerExist? savesFlexManger.get(timestep): new FlexManager(model, timestep, savesFlexManger.get(timestep-1));
+		if(!doesFlexManagerExist) savesFlexManger.put(timestep, newFlexManager);
+//		endTime = System.currentTimeMillis();
+//		System.out.print(" a:" + (endTime - startTime)); 
+//		startTime = endTime;
 		
 		
 		
@@ -94,6 +94,13 @@ public class SimulationManager {
 			}
 		}
 		timeStep = timestep;
+		
+//		endTime = System.currentTimeMillis();
+//		System.out.print(" b:" + (endTime - startTime)); 
+//		startTime = endTime;
+		
+		
+		
 		ArrayList<MinimumNetwork> list =  new ArrayList<MinimumNetwork>();
 		MinimumModel minimumModel = new MinimumModel(model.getObjectsOnCanvas(), model.getEdgesOnCanvas());
 		//set all BreakedManuel Cable Burned:
@@ -106,6 +113,14 @@ public class SimulationManager {
 			if(map.containsKey(cable.getModel())) cable.setState(map.get(cable.getModel()));
 		}
 		ArrayList<IntermediateCableWithState> leftOver = new ArrayList<IntermediateCableWithState>();
+		
+		
+//		endTime = System.currentTimeMillis();
+//		System.out.print(" c:" + (endTime - startTime)); 
+//		startTime = endTime;
+		
+		
+		
 		boolean doAnotherLoop = true;
 		while(doAnotherLoop) {
 			doAnotherLoop = false;
@@ -125,15 +140,28 @@ public class SimulationManager {
 		for (MinimumNetwork net : list) {
 			decorNetworks.add(new DecoratedNetwork(net, timestep, actualFairnessModel, newFlexManager));
 		}
+		
+		
+//		endTime = System.currentTimeMillis();
+//		System.out.print(" d:" + (endTime - startTime)); 
+//		startTime = endTime;
+		
+		
+		
 		ArrayList<DecoratedCable> leftOverDecoratedCables = new ArrayList<DecoratedCable>();
 		
 		for(IntermediateCableWithState cable: leftOver) {
 			leftOverDecoratedCables.add(new DecoratedCable(cable.getModel(), cable.getState(), 0.0f));
 		}
 		ArrayList<DecoratedSwitch> listOfDecoratedSwitches = decorateSwitches(minimumModel, timestep);
-		DecoratedState stateFromThisTimestep = new DecoratedState(decorNetworks, leftOverDecoratedCables, listOfDecoratedSwitches, flexManagerFromActual, timestep);
+		DecoratedState stateFromThisTimestep = new DecoratedState(decorNetworks, leftOverDecoratedCables, listOfDecoratedSwitches, newFlexManager, timestep);
 		saves.put(timestep, stateFromThisTimestep);
 		if(updateVisual)savesVisual.put(timestep, new VisualRepresentationalState(stateFromThisTimestep, minimumModel));
+		
+//		endTime = System.currentTimeMillis();
+//		System.out.println(" e:" + (endTime - startTime)); 
+//		startTime = endTime;
+		
 	}
 	/** 
 	 * Decorate a switch
@@ -268,12 +296,11 @@ public class SimulationManager {
 		savesFlexManger.clear();
 	}
 	public void resetFlexManagerForTimeStep(int timestep) {
-		FlexManager newFlexManager = new FlexManager(model, timestep, savesFlexManger.getOrDefault(timestep-1, null));
-		savesFlexManger.put(timestep, newFlexManager);
+		savesFlexManger.get(timestep).reset();
 	}
 	
 	public DecoratedState getDecorState(int timestep) {
-		return saves.getOrDefault(timestep, null);
+		return saves.get(timestep);
 	}
 	public VisualRepresentationalState getVisualRepresentationalState(int timestep) {
 		return savesVisual.getOrDefault(timestep, null);

Some files were not shown because too many files changed in this diff