Browse Source

Fixed bug with Flexibilities, quality of life changes with gui

-Opens the right folder when open a file.
-No more clicking in the canvas after open.
Tom Troppmann 4 years ago
parent
commit
4d8be988ce

+ 0 - 0
exampleNetworks/RandomizerExample/elements.json → randomizerConfigFiles/elements.json


+ 164 - 0
randomizerConfigFiles/elementsNoFlex.json

@@ -0,0 +1,164 @@
+[
+    {
+        "name" : "Lights",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : -100.0
+    }
+    ,{
+        "name" : "LED-TV",
+        "minAmount" : 1,
+        "maxAmount" : 2,
+        "priority" : "Low",
+        "energy" : -85.0
+    }
+    ,{
+        "name" : "Ceiling-Fan",
+        "minAmount" : 1,
+        "maxAmount" : 2,
+        "priority" : "Low",
+        "energy" : -70.0
+    }
+    ,{
+        "name" : "Coffee-Maker",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : -800.0
+    }
+    ,{
+        "name" : "PC",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Essential",
+        "energy" : -450.0,
+        "flexChance" : 0.0,
+	    "minCost" : 300,
+	    "maxCost" : 400,
+	    "minDuration" : 1,
+	    "maxDuration" : 10,
+	    "minCooldown" : 0,
+	    "maxCooldown" : 3
+    }
+	,{
+        "name" : "Fridge",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : -300.0,
+        "flexChance" : 0.0,
+	    "minCost" : 100,
+	    "maxCost" : 200,
+	    "minDuration" : 1,
+	    "maxDuration" : 10,
+	    "minCooldown" : 0,
+	    "maxCooldown" : 3
+    }
+	,{
+        "name" : "Water-Heater",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Medium",
+        "energy" : -1300.0,
+        "flexChance" : 0.0,
+	    "minCost" : 200,
+	    "maxCost" : 250,
+	    "minDuration" : 1,
+	    "maxDuration" : 1,
+	    "minCooldown" : 0,
+	    "maxCooldown" : 3
+    }
+	,{
+        "name" : "Microwave",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : -700.0
+    }
+	,{
+        "name" : "Toaster",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : -800.0
+    }
+	,{
+        "name" : "Washing-Machine",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "energy" : -500.0,
+        "priority" : "Low",
+        "flexChance" : 0.0,
+	    "minCost" : 50,
+	    "maxCost" : 100,
+	    "minDuration" : 1,
+	    "maxDuration" : 10,
+	    "minCooldown" : 0,
+	    "maxCooldown" : 3
+    }
+	,{
+        "name" : "Solar-Panel",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : 2000.0,
+        "flexChance" : 0.0,
+	    "minCost" : 120,
+	    "maxCost" : 300,
+	    "minDuration" : 1,
+	    "maxDuration" : 10,
+	    "minCooldown" : 0,
+	    "maxCooldown" : 3
+    }
+	,{
+        "name" : "Radio",
+        "minAmount" : 1,
+        "maxAmount" : 10,
+        "priority" : "Low",
+        "energy" : -50.0
+    }
+	,{
+        "name" : "Oven",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "energy" : -2000.0,
+        "priority" : "Medium",
+        "flexChance" : 0.0,
+	    "minCost" : 200,
+	    "maxCost" : 350,
+	    "minDuration" : 1,
+	    "maxDuration" : 10,
+	    "minCooldown" : 0,
+	    "maxCooldown" : 3
+    }
+	,{
+        "name" : "Air-Conditioner",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : -2500.0,
+        "flexChance" : 0.0,
+	    "minCost" : 100,
+	    "maxCost" : 250,
+	    "minDuration" : 1,
+	    "maxDuration" : 10,
+	    "minCooldown" : 0,
+	    "maxCooldown" : 3
+    }
+	,{
+        "name" : "Paper-Shredder",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : -220.0
+    }
+	,{
+        "name" : "Vacuum-Cleaner",
+        "minAmount" : 1,
+        "maxAmount" : 1,
+        "priority" : "Low",
+        "energy" : -220.0
+    }
+	
+]

+ 41 - 8
src/api/AlgorithmFrameworkFlex.java

@@ -414,7 +414,7 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 		if(runThread.isAlive()) {
 			console.println("Cancel run.");
 			cancel = true;
-			runProgressbar.stop();
+			runProgressbar.cancel();
 		} else {
 			console.println("Nothing to cancel.");
 		}
@@ -444,11 +444,31 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 	
 	protected double evaluatePosition(List<Boolean> positionToEvaluate) {
 		runProgressbar.step();
-		control.getSimManager().resetFlexManagerForTimeStep(control.getModel().getCurIteration());
-		setState(positionToEvaluate);
+//		long startTime = System.currentTimeMillis(), endTime;
+		control.getSimManager().resetFlexManagerForTimeStep(control.getModel().getCurIteration()); // execution time critical
+//		endTime = System.currentTimeMillis();
+//		console.print(" a:" + (endTime - startTime)); 
+//		startTime = endTime;
+		setState(positionToEvaluate); // execution time critical
+//		endTime = System.currentTimeMillis();
+//		console.print(" b:" + (endTime - startTime)); 
+//		startTime = endTime;
 		control.calculateStateOnlyForCurrentTimeStep();
+//		endTime = System.currentTimeMillis();
+//		console.print(" c:" + (endTime - startTime)); 
+//		startTime = endTime;
 		DecoratedState actualstate = control.getSimManager().getActualDecorState();
-		return evaluateState(actualstate);
+//		endTime = System.currentTimeMillis();
+//		console.print(" d:" + (endTime - startTime)); 
+//		startTime = endTime;
+		double result = evaluateState(actualstate);
+//		endTime = System.currentTimeMillis();
+//		console.print(" e:" + (endTime - startTime)); 
+//		startTime = endTime;
+//		long inUse = actualstate.getFlexManager().getAllFlexWrapperWithState(FlexState.IN_USE).size();
+//		long all = actualstate.getFlexManager().getAllFlexWrapper().size();
+//		console.println(" [" + inUse + "/" + all + "]");
+		return result;
 	}
 
 	protected abstract double evaluateState(DecoratedState actualstate);
@@ -471,6 +491,7 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 			
 		}
 		updateVisual();
+		runProgressbar.finishedCancel();
 		control.guiDisable(false);
 		runPrinter.closeStream();
 	}
@@ -518,6 +539,8 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 
 
 	private void executeAlgoWithParameter(){
+		double startFitness = evaluatePosition(extractPositionAndAccess());
+		resetChain.removeLast();
 		runPrinter.println(algoInformationToPrint());
 		runProgressbar.start();
 		Individual runBest = new Individual();
@@ -540,9 +563,9 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 		this.extractPositionAndAccess();
 		setState(runBest.position);
 		updateVisual();
-		console.println("AlgoResult:" + runBest.fitness);
+		console.println("Start: " + startFitness);
+		console.println("AlgoResult: " + runBest.fitness);
 		if(this.algoUseFlexes)calculateAndPrintFlexInfos(control.getSimManager().getActualDecorState());
-		runProgressbar.stop();
 	}
 	
 	
@@ -662,6 +685,10 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 				access.add(new AccessWrapper(flex.getFlex()));
 				initialState.add(false);
 			}
+			for(FlexWrapper flex :control.getSimManager().getActualFlexManager().getAllFlexWrapperWithState(FlexState.IN_USE)){
+				access.add(new AccessWrapper(flex.getFlex()));
+				initialState.add(true);
+			}
 		}
 		//console.println(access.stream().map(Object::toString).collect(Collectors.joining(", ")));
 		return initialState;
@@ -751,14 +778,20 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 		
 		public void step() {
 			if(isActive) progressBar.setValue(count++);
-			progressBar.setMaximum(getProgressBarMaxCount());
 		}
 		public void start() {
+			progressBar.setIndeterminate(false);
+			count = 0;
 			isActive = true;
 			progressBar.setValue(0);
+			progressBar.setMaximum(getProgressBarMaxCount());
 		}
-		public void stop() {
+		public void cancel() {
 			isActive = false;
+			progressBar.setIndeterminate(true);
+		}
+		public void finishedCancel() {
+			progressBar.setIndeterminate(false);
 			progressBar.setValue(0);
 		}
 		public JProgressBar getJProgressBar(){

+ 1 - 1
src/exampleAlgorithms/Randomizer.java

@@ -347,7 +347,7 @@ public class Randomizer implements AddOn {
 	
 	public File openCatalogFile() {		
 		JFileChooser fileChooser = new JFileChooser();
-		fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")+"/src/"));
+		fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")+"/randomizerConfigFiles/"));
 		fileChooser.setFileFilter(new FileNameExtensionFilter("JSON Files", "json"));
 		fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
 		fileChooser.setAcceptAllFileFilterUsed(false);

+ 14 - 25
src/ui/controller/SimulationManager.java

@@ -5,6 +5,7 @@ import classes.comparator.EnergyMinToMaxComparator;
 import classes.comparator.MinEnergyComparator;
 import classes.comparator.WeakestBattery;
 import ui.model.IntermediateCableWithState;
+import ui.controller.FlexManager.FlexState;
 import ui.model.DecoratedCable;
 import ui.model.DecoratedCable.CableState;
 import ui.model.DecoratedSwitch.SwitchState;
@@ -71,14 +72,18 @@ public class SimulationManager {
 	 * @param updateVisual TODO
 	 */
 	public void calculateStateForTimeStep(int timestep, boolean updateVisual) {
-		
-//		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;
+		boolean createNew = updateVisual || !doesFlexManagerExist;
+		FlexManager newFlexManager;
+		if(createNew) {
+			newFlexManager = new FlexManager(model, timestep, savesFlexManger.get(timestep-1));
+			if(doesFlexManagerExist) newFlexManager.orderFlexFromList(savesFlexManger.get(timestep).getAllFlexesOrderedThisTimeStep());
+			savesFlexManger.put(timestep, newFlexManager);
+		}else {
+			newFlexManager = savesFlexManger.get(timestep);
+		}
+		
+
 		
 		
 		
@@ -95,10 +100,6 @@ public class SimulationManager {
 		}
 		timeStep = timestep;
 		
-//		endTime = System.currentTimeMillis();
-//		System.out.print(" b:" + (endTime - startTime)); 
-//		startTime = endTime;
-		
 		
 		
 		ArrayList<MinimumNetwork> list =  new ArrayList<MinimumNetwork>();
@@ -115,11 +116,6 @@ public class SimulationManager {
 		ArrayList<IntermediateCableWithState> leftOver = new ArrayList<IntermediateCableWithState>();
 		
 		
-//		endTime = System.currentTimeMillis();
-//		System.out.print(" c:" + (endTime - startTime)); 
-//		startTime = endTime;
-		
-		
 		
 		boolean doAnotherLoop = true;
 		while(doAnotherLoop) {
@@ -140,11 +136,7 @@ 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;
+
 		
 		
 		
@@ -157,10 +149,7 @@ public class SimulationManager {
 		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;
+
 		
 	}
 	/** 

+ 1 - 1
src/ui/view/AddOnWindow.java

@@ -91,7 +91,7 @@ public class AddOnWindow extends JFrame{
 	 */
 	private void openJavaFile() {
 		JFileChooser fileChooser = new JFileChooser();
-		fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")+"/src/"));
+		fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")+"/src/exampleAlgorithms/"));
 		fileChooser.setFileFilter(new FileNameExtensionFilter("JAVA Source Files", "java"));
 		fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
 		fileChooser.setAcceptAllFileFilterUsed(false);

+ 2 - 0
src/ui/view/GUI.java

@@ -2246,6 +2246,7 @@ public class GUI implements CategoryListener {
 
 			private void menuFileExitActionPerformed() {
 				JFileChooser fileChooser = new JFileChooser();
+				fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")+"/exampleNetworks/"));
 				FileNameExtensionFilter holonFilter = new FileNameExtensionFilter(
 						"Holon Save File(*.holon)", "holon");
 				fileChooser.setFileFilter(holonFilter);
@@ -2258,6 +2259,7 @@ public class GUI implements CategoryListener {
 						canvas.repaint();
 						unitGraph.update(model.getObjectsOnCanvas());
 						tree.repaint();
+						controller.calculateStateAndVisualForCurrentTimeStep();
 						for (JsonObject json : model.getStatisticData()) {
 							readStatistics(json);
 						}