Browse Source

Merge remote-tracking branch 'refs/remotes/origin/CalculationFeature' into CalculationFeature

Rolf Egert 5 years ago
parent
commit
527f8ae5d0

+ 1 - 1
src/exampleAlgorithms/ExampleFitnessFunction.java

@@ -75,7 +75,7 @@ public class ExampleFitnessFunction implements Algorithm {
 		float overallFitness = 0f;
 		//Calculate all timesteps
 		for(int timestep = 0; timestep <100; timestep++) {
-			control.calculateStateForTimeStep(timestep);
+			control.calculateStateAndVisualForTimeStep(timestep);
 		}
 		//Calculate all timesteps
 		for(int timestep = 0; timestep <100; timestep++) {

+ 45 - 14
src/exampleAlgorithms/PSOAlgotihm.java

@@ -86,6 +86,9 @@ public class PSOAlgotihm implements Algorithm {
 	private JProgressBar progressBar = new JProgressBar();
 	private int progressBarCount = 0;
 	private long startTime;
+	private Thread runThread;
+	private boolean cancel = false;
+	
 	
 	public static void main(String[] args)
 	{
@@ -267,6 +270,10 @@ public class PSOAlgotihm implements Algorithm {
 	}
 	public JPanel createButtonPanel() {
 		JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+		
+		JButton cancelButton =  new JButton("Cancel Run");
+		cancelButton.addActionListener(actionEvent -> cancel());
+		buttonPanel.add(cancelButton);
 		JButton clearButton =  new JButton("Clear Console");
 		clearButton.addActionListener(actionEvent -> clear());
 		buttonPanel.add(clearButton);
@@ -285,21 +292,43 @@ public class PSOAlgotihm implements Algorithm {
 		buttonPanel.add(resetButton);
 		JButton runButton =  new JButton("Run");
 		runButton.addActionListener(actionEvent -> {
-			Runnable task = () -> {
-				startTimer();
-				executePsoAlgoWithCurrentParameters();
-				printElapsedTime();
-			};
-			Thread thread = new Thread(task);
-			thread.start();
+			Runnable task = () -> run();
+			runThread = new Thread(task);
+			runThread.start();
 		});
 		buttonPanel.add(runButton);
 		return buttonPanel;
 	}
+	private void run() {
+		cancel = false;
+		disableGuiInput(true);
+		startTimer();
+		executePsoAlgoWithCurrentParameters();
+		if(cancel) {
+			reset();
+			disableGuiInput(false);
+			return;
+		}
+		printElapsedTime();
+		disableGuiInput(false);
+	}
+	private void disableGuiInput(boolean bool) {
+		control.guiDiable(bool);
+	}
 	
+	private void cancel() {
+		if(runThread.isAlive()) {
+			println("");
+			println("Cancel run.");
+			cancel = true;
+			progressBar.setValue(0);
+		} else {
+			println("Nothing to cancel.");
+		}
+	}
 	private void fitness() {
 		initDependentParameter();
-		double currentFitness = evaluatePosition(extractPositionAndAccess(control.getModel()));
+		double currentFitness = evaluatePosition(extractPositionAndAccess(control.getModel()), false);
 		println("Actual Fitnessvalue: " + currentFitness);
 	}
 	private void setSaveFile() {
@@ -395,6 +424,7 @@ public class PSOAlgotihm implements Algorithm {
           
 		  List<Double> runList = db.insertNewRun();
 		  Best lastRunBest = executePSOoneTime(runList);
+		  if(cancel)return;
 		  resetState();
 		  if(lastRunBest.value < runBest.value) runBest = lastRunBest;
 		}
@@ -447,7 +477,7 @@ public class PSOAlgotihm implements Algorithm {
 	private Best executePSOoneTime(List<Double> runList) {
 		Best globalBest = new Best();
 		globalBest.position = extractPositionAndAccess(control.getModel());
-		globalBest.value = evaluatePosition(globalBest.position);
+		globalBest.value = evaluatePosition(globalBest.position, true);
 		print("Start Value:" + globalBest.value);
 		int dimensions = globalBest.position.size();
 		List<Particle> swarm= initializeParticles(dimensions);
@@ -464,6 +494,7 @@ public class PSOAlgotihm implements Algorithm {
 					decode(particle, index);
 				}
 			}
+			if(cancel)return null;
 			evaluation(globalBest, swarm);
 			runList.add(globalBest.value);
 		}
@@ -548,7 +579,7 @@ public class PSOAlgotihm implements Algorithm {
 	 */
 	private void evaluation(Best globalBest, List<Particle> swarm) {
 		for(Particle p: swarm) {
-			double localEvaluationValue = evaluatePosition(p.xPhenotype);
+			double localEvaluationValue = evaluatePosition(p.xPhenotype, true);
 			p.checkNewEvaluationValue(localEvaluationValue);
 			if(localEvaluationValue < globalBest.value) {
 				globalBest.value = localEvaluationValue;
@@ -561,10 +592,10 @@ public class PSOAlgotihm implements Algorithm {
 	 * @param position
 	 * @return
 	 */
-	private double evaluatePosition(List<Boolean> position) {
+	private double evaluatePosition(List<Boolean> position, boolean doIncreaseCounter) {
 		setState(position);
-		progressBarStep();
-		control.calculateStateForCurrentTimeStep();
+		if(doIncreaseCounter)progressBarStep();
+		control.calculateStateOnlyForCurrentTimeStep();
 		DecoratedState actualstate = control.getSimManager().getActualDecorState();		
 		return getFitnessValueForState(actualstate);
 	}
@@ -714,7 +745,7 @@ public class PSOAlgotihm implements Algorithm {
 	 * To let the User See the current state without touching the Canvas.
 	 */
 	private void updateVisual() {
-		control.calculateStateForCurrentTimeStep();
+		control.calculateStateAndVisualForCurrentTimeStep();
 		control.updateCanvas();
 	}
 	/**

+ 1 - 1
src/exampleAlgorithms/RandomSwitch.java

@@ -71,7 +71,7 @@ public class RandomSwitch implements Algorithm {
 				s.setManualState(!s.getActiveManual());
 			} 
 		}
-		control.calculateStateForCurrentTimeStep();
+		control.calculateStateAndVisualForCurrentTimeStep();
 		control.updateCanvas();
 	}
 	@Override

+ 13 - 6
src/ui/controller/Control.java

@@ -301,7 +301,7 @@ public class Control {
      */
     public void addObjectCanvas(AbstractCpsObject object) {
         canvasController.addNewObject(object);
-        calculateStateForTimeStep(model.getCurIteration());
+        calculateStateAndVisualForTimeStep(model.getCurIteration());
         if (!(object instanceof CpsNode)) {
             try {
                 autoSave();
@@ -319,7 +319,7 @@ public class Control {
      */
     public void delCanvasObject(AbstractCpsObject obj, boolean save) {
         canvasController.deleteObjectOnCanvas(obj);
-        calculateStateForCurrentTimeStep();
+        calculateStateAndVisualForCurrentTimeStep();
         if (obj instanceof CpsUpperNode)
             canvasController.bfsNodeCleaner((CpsUpperNode) obj);
         if (save)
@@ -543,17 +543,20 @@ public class Control {
      * calculates the flow of the edges and the supply for objects for the
      * current Timestep.
      */
-    public void calculateStateForCurrentTimeStep() {
-    	calculateStateForTimeStep(model.getCurIteration());
+    public void calculateStateAndVisualForCurrentTimeStep() {
+    	calculateStateAndVisualForTimeStep(model.getCurIteration());
     }
 
+    public void calculateStateOnlyForCurrentTimeStep() {
+    	simulationManager.calculateStateForTimeStep(model.getCurIteration(), false);
+    }
     /**
      * calculates the flow of the edges and the supply for objects.
      *
      * @param x current Iteration
      */
-    public void calculateStateForTimeStep(int x) {
-        simulationManager.calculateStateForTimeStep(x);
+    public void calculateStateAndVisualForTimeStep(int x) {
+        simulationManager.calculateStateForTimeStep(x, true);
         updateOutliner();
     }
 
@@ -1008,6 +1011,10 @@ public class Control {
 		return gui;
 	}
 
+	public void guiDiable(boolean state) {
+		gui.guiDisable(state);
+	}
+	
 	public void setGui(GUI gui) {
 		this.gui = gui;
 	}

+ 3 - 4
src/ui/controller/SimulationManager.java

@@ -57,10 +57,9 @@ public class SimulationManager {
 	 *
 	 * @param timestep
 	 *            current Iteration
+	 * @param updateVisual TODO
 	 */
-	public void calculateStateForTimeStep(int timestep) {
-		
-		
+	public void calculateStateForTimeStep(int timestep, boolean updateVisual) {
 		HashMap<CpsEdge, CableState> map = new HashMap<CpsEdge, CableState>();
 		if(timestep > 0 && saves.containsKey(timestep-1)) //if the state before exist
 		{
@@ -112,7 +111,7 @@ public class SimulationManager {
 		ArrayList<DecoratedSwitch> listOfDecoratedSwitches = decorateSwitches(minimumModel, timestep);
 		DecoratedState stateFromThisTimestep = new DecoratedState(decorNetworks, leftOverDecoratedCables, listOfDecoratedSwitches, timestep);
 		saves.put(timestep, stateFromThisTimestep);
-		savesVisual.put(timestep, new VisualRepresentationalState(stateFromThisTimestep, minimumModel));
+		if(updateVisual)savesVisual.put(timestep, new VisualRepresentationalState(stateFromThisTimestep, minimumModel));
 	}
 	/** 
 	 * Decorate a switch

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

@@ -170,7 +170,7 @@ public class EditEdgesPopUp extends JDialog {
 			}
 		}
 		controller.resetSimulation();
-		controller.calculateStateForCurrentTimeStep();
+		controller.calculateStateAndVisualForCurrentTimeStep();
 		canvas.repaint();
 	}
 

+ 34 - 17
src/ui/view/GUI.java

@@ -402,7 +402,7 @@ public class GUI implements CategoryListener {
 					controller.loadAutoSave(controller.getUndoSave());
 					closeInvalidUpperNodeTabs();
 					
-					controller.calculateStateForCurrentTimeStep();
+					controller.calculateStateAndVisualForCurrentTimeStep();
 					canvas.repaint();
 					unitGraph.update(model.getObjectsOnCanvas());
 					updateUpperNodes();
@@ -425,7 +425,7 @@ public class GUI implements CategoryListener {
 
 					closeInvalidUpperNodeTabs();
 					
-					controller.calculateStateForCurrentTimeStep();
+					controller.calculateStateAndVisualForCurrentTimeStep();
 					canvas.repaint();
 					unitGraph.update(model.getObjectsOnCanvas());
 					updateUpperNodes();
@@ -555,7 +555,7 @@ public class GUI implements CategoryListener {
 				// recalculate net if a producer was deleted
 				if (wasProducerDeleted) {
 					controller.resetSimulation();
-					controller.calculateStateForCurrentTimeStep();
+					controller.calculateStateAndVisualForCurrentTimeStep();
 				}
 
 				model.getSelectedCpsObjects().clear();
@@ -632,12 +632,12 @@ public class GUI implements CategoryListener {
 										canvasOrUpperNodeCanvas
 												.getMousePosition());
 						unitGraph.update(model.getSelectedCpsObjects());
-						controller.calculateStateForCurrentTimeStep();
+						controller.calculateStateAndVisualForCurrentTimeStep();
 						scrollPane.getViewport().getComponent(0).repaint();
 					} else {
 						controller.paste(null, canvas.getMousePosition());
 						unitGraph.update(model.getSelectedCpsObjects());
-						controller.calculateStateForCurrentTimeStep();
+						controller.calculateStateAndVisualForCurrentTimeStep();
 						canvas.repaint();
 					}
 				} catch (HeadlessException | JsonParseException
@@ -666,11 +666,11 @@ public class GUI implements CategoryListener {
 					if (scrollPane.getViewport().getComponent(0) instanceof UpperNodeCanvas) {
 						controller.cut(((UpperNodeCanvas) scrollPane
 								.getViewport().getComponent(0)).upperNode);
-						controller.calculateStateForCurrentTimeStep();
+						controller.calculateStateAndVisualForCurrentTimeStep();
 						scrollPane.getViewport().getComponent(0).repaint();
 					} else {
 						controller.cut(null);
-						controller.calculateStateForCurrentTimeStep();
+						controller.calculateStateAndVisualForCurrentTimeStep();
 						canvas.repaint();
 					}
 					if (!model.getClipboradObjects().isEmpty()) {
@@ -813,7 +813,7 @@ public class GUI implements CategoryListener {
 					mntmFairMinFirst.setForeground(Color.BLUE);
 					mntmFairAlleEqual.setForeground(mnFairnessModel
 							.getForeground());
-					controller.calculateStateForCurrentTimeStep();
+					controller.calculateStateAndVisualForCurrentTimeStep();
 					// Update UpperNodes
 					Component canvasOrUpperNodeCanvas = getScrollPaneFromTabbedPane()
 							.getViewport().getComponent(0);
@@ -831,7 +831,7 @@ public class GUI implements CategoryListener {
 			controller.setFairnessModel(FairnessModel.AllEqual);
 			mntmFairAlleEqual.setForeground(Color.BLUE);
 			mntmFairMinFirst.setForeground(mnFairnessModel.getForeground());
-			controller.calculateStateForCurrentTimeStep();
+			controller.calculateStateAndVisualForCurrentTimeStep();
 			// Update UpperNodes
 				Component canvasOrUpperNodeCanvas = getScrollPaneFromTabbedPane()
 						.getViewport().getComponent(0);
@@ -1202,7 +1202,7 @@ public class GUI implements CategoryListener {
 								ele.getAmount(), ele.getEnergyPerElement(),
 								ele.getId());
 					}
-					controller.calculateStateForTimeStep(model
+					controller.calculateStateAndVisualForTimeStep(model
 							.getCurIteration());
 					triggerUpdateController(null);
 					contentPane.updateUI();
@@ -1228,7 +1228,7 @@ public class GUI implements CategoryListener {
 						for (HolonElement e : selectedElements) {
 							controller.deleteElementCanvas(obj.getId(),
 									e.getId());
-							controller.calculateStateForTimeStep(model
+							controller.calculateStateAndVisualForTimeStep(model
 									.getCurIteration());
 							triggerUpdateController(null);
 							contentPane.updateUI();
@@ -1519,7 +1519,7 @@ public class GUI implements CategoryListener {
 										selectedValueBY);
 							}
 						}
-						controller.calculateStateForTimeStep(model
+						controller.calculateStateAndVisualForTimeStep(model
 								.getCurIteration());
 						model.getSingleTable().fireTableDataChanged();
 						triggerUpdateController(null);
@@ -1855,7 +1855,7 @@ public class GUI implements CategoryListener {
 								 */
 								unc.mayBeReplaced = null; 
 								unc.invalidate();
-								controller.calculateStateForCurrentTimeStep();
+								controller.calculateStateAndVisualForCurrentTimeStep();
 								unc.repaint();
 								unc.setXY((int) canvas.getMousePosition()
 										.getX(), (int) canvas
@@ -1898,7 +1898,7 @@ public class GUI implements CategoryListener {
 									(int) canvas.getMousePosition().getY());
 							canvas.repaint();
 						}
-						controller.calculateStateForCurrentTimeStep();
+						controller.calculateStateAndVisualForCurrentTimeStep();
 						contentPane.updateUI();
 						dragging = false;
 					}
@@ -2346,7 +2346,7 @@ public class GUI implements CategoryListener {
 					
 					closeInvalidUpperNodeTabs();
 					
-					controller.calculateStateForCurrentTimeStep();
+					controller.calculateStateAndVisualForCurrentTimeStep();
 					canvas.repaint();
 
 					repaintGraphAfterUndoRedo();
@@ -2369,7 +2369,7 @@ public class GUI implements CategoryListener {
 					
 					closeInvalidUpperNodeTabs();
 					
-					controller.calculateStateForCurrentTimeStep();
+					controller.calculateStateAndVisualForCurrentTimeStep();
 					canvas.repaint();
 
 					repaintGraphAfterUndoRedo();
@@ -2385,7 +2385,7 @@ public class GUI implements CategoryListener {
 		timePanel.getTimeSlider()
 				.addChangeListener(changeEvent -> {
 					//TimeSliderChanged event
-					controller.calculateStateForTimeStep(timePanel.getTimeSlider().getValue());
+					controller.calculateStateAndVisualForTimeStep(timePanel.getTimeSlider().getValue());
 					unitGraph.repaint();
 					if (model.getIsSimRunning()) {
 						controller.runAlgorithm(model, controller);
@@ -3150,4 +3150,21 @@ public class GUI implements CategoryListener {
 	public void repaintCanvas() {
 		tabbedPaneInnerOriginal.repaint();
 	}
+	
+	/**
+	 * Class should be reworked as soon as possible!
+	 * @param state
+	 */
+	public void guiDisable(boolean state) {
+		canvas.diabled = state;
+		for (int i = 1; i < tabbedPaneInnerOriginal.getTabCount(); i++) {
+			JScrollPane scrollPaneOriginal = (JScrollPane) tabbedPaneInnerOriginal
+					.getComponentAt(i);
+			if (((UpperNodeCanvas) scrollPaneOriginal.getViewport()
+					.getComponent(0)).upperNode != null) {
+				((UpperNodeCanvas) scrollPaneOriginal.getViewport()
+						.getComponent(0)).disable = state;
+			}
+		}
+	}
 }

+ 17 - 8
src/ui/view/MyCanvas.java

@@ -50,6 +50,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 		MouseMotionListener {
 
 	private static final long serialVersionUID = 1L;
+	public boolean diabled = false;
 	/**
 	 * Constructor.
 	 *
@@ -63,6 +64,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 		toolTip = false;
 		this.controller = control;
 		this.model = mod;
+		
 		scalediv20 = model.getScale() / 20;
 		
 		showedInformation[0] = true;
@@ -136,7 +138,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 							animCps.get(i).getPosition().y = savePos.get(i).y;
 						}
 						controller.addUpperNode("GroupNode", null, animCps);
-						controller.calculateStateForCurrentTimeStep();
+						controller.calculateStateAndVisualForCurrentTimeStep();
 						triggerUpdateController();
 						model.getSelectedCpsObjects().clear();
 						repaint();
@@ -193,7 +195,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 										animCps.get(i).getPosition().y = savePos
 												.get(i).y;
 									}
-									controller.calculateStateForCurrentTimeStep();
+									controller.calculateStateAndVisualForCurrentTimeStep();
 									triggerUpdateController();
 									repaint();
 								}
@@ -651,7 +653,8 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 
 	@Override
 	public void mouseClicked(MouseEvent e) {
-		if (e.getButton() == MouseEvent.BUTTON1) {
+		if(!diabled){
+			if (e.getButton() == MouseEvent.BUTTON1) {
 			DefaulTable propertyTable = model.getPropertyTable();
 			if (propertyTable.getRowCount() > 0) {
 				for (int i = propertyTable.getRowCount() - 1; i > -1; i--) {
@@ -660,9 +663,9 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 			}
 
 			triggerUpdateController();
+			}
+			stopEditing();
 		}
-		
-		stopEditing();
 	}
 
 	@Override
@@ -675,6 +678,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 
 	@Override
 	public void mousePressed(MouseEvent e) {
+		if(!diabled){
 		stopEditing();
 		tempCps = null;
 		edgeHighlight = null;
@@ -731,10 +735,12 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 		}
 
 		repaint();
+		}
 	}
 
 	@Override
 	public void mouseReleased(MouseEvent e) {
+		if(!diabled){
 		x = e.getX();
 		y = e.getY();
 
@@ -796,16 +802,17 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 			((HolonSwitch) tempCps).switchState();
 
 		}
-		controller.calculateStateForTimeStep(model.getCurIteration());
+		controller.calculateStateAndVisualForTimeStep(model.getCurIteration());
 
 		triggerUpdateController();
 
 		repaint();
-
+		}
 	}
 
 	@Override
 	public void mouseDragged(MouseEvent e) {
+		if(!diabled){
 		// If Edge is drawn
 		x = e.getX();
 		y = e.getY();
@@ -907,11 +914,12 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 		}
 
 		repaint();
-
+		}
 	}
 
 	@Override
 	public void mouseMoved(MouseEvent e) {	
+		if(!diabled){
 		x = e.getX();
 		y = e.getY();
 
@@ -926,6 +934,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 		if(on||(!on && toolTip))
 		repaint();
 		toolTip = on;
+		}
 	}
 
 

+ 15 - 5
src/ui/view/UpperNodeCanvas.java

@@ -49,6 +49,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
     private int upperNodeID;
     private Component parent;
     private BufferedImage parentPreview;
+    public boolean disable = false;
     /**
      * Constructor.
      *
@@ -154,7 +155,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
                         animCps.get(i).getPosition().y = savePos.get(i).y;
                     }
                     controller.addUpperNode("GroupNode", upperNode, model.getSelectedCpsObjects());
-                    controller.calculateStateForCurrentTimeStep();
+                    controller.calculateStateAndVisualForCurrentTimeStep();
                     repaint();
                 }
             });
@@ -201,7 +202,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
                         animCps.get(i).getPosition().y = savePos.get(i).y;
                     }
 
-                    controller.calculateStateForCurrentTimeStep();
+                    controller.calculateStateAndVisualForCurrentTimeStep();
                     repaint();
                 }
             });
@@ -671,8 +672,10 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 
     @Override
     public void mouseClicked(MouseEvent e) {
+    	if(!disable){
         triggerUpdateController();
         stopEditing();
+    	}
     }
 
     @Override
@@ -685,6 +688,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 
     @Override
     public void mousePressed(MouseEvent e) {
+    	if(!disable){
     	stopEditing();
         tempCps = null;
         dataSelected = null;
@@ -786,10 +790,12 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
             // }
             repaint();
         }
+    	}
     }
 
     @Override
     public void mouseReleased(MouseEvent e) {
+    	if(!disable){
         x = e.getX();
         y = e.getY();
         dragging = false;
@@ -849,14 +855,15 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
             ((HolonSwitch) tempCps).switchState();
         }
 
-        controller.calculateStateForTimeStep(model.getCurIteration());
+        controller.calculateStateAndVisualForTimeStep(model.getCurIteration());
         triggerUpdateController();
         repaint();
-
+    	}
     }
 
     @Override
     public void mouseDragged(MouseEvent e) {
+    	if(!disable){
         // If Edge is drawn
         x = e.getX();
         y = e.getY();
@@ -929,6 +936,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
             } catch (Exception eex) {
 
             }
+        	
         }
 
         // Mark Objects
@@ -983,11 +991,12 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
         }
 
         repaint();
-
+    	}
     }
 
     @Override
     public void mouseMoved(MouseEvent e) {
+    	{
         x = e.getX();
         y = e.getY();
         // Everything for the tooltip :)
@@ -1024,6 +1033,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 
         toolTip = on;
         repaint();
+    	}
     }
 
     /**