Bläddra i källkod

Better Stats for Plotting

Tom 4 år sedan
förälder
incheckning
25b0256717
2 ändrade filer med 48 tillägg och 8 borttagningar
  1. 48 7
      src/api/AlgorithmFrameworkFlex.java
  2. 0 1
      src/exampleAlgorithms/AcoAlgorithm2.java

+ 48 - 7
src/api/AlgorithmFrameworkFlex.java

@@ -49,6 +49,7 @@ import ui.controller.FlexManager.FlexWrapper;
 import ui.model.DecoratedGroupNode;
 import ui.model.DecoratedState;
 import ui.model.Model;
+import ui.model.DecoratedHolonObject.HolonObjectState;
 import ui.view.Console;
 
 public abstract class AlgorithmFrameworkFlex implements AddOn{
@@ -64,7 +65,6 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 	
 	
 	//Settings groupNode
-	private boolean useGroupNode = false;
 	private DecoratedGroupNode dGroupNode = null;
 	
 	
@@ -291,6 +291,7 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 	}
 	private void printElapsedTime(){
 		long elapsedMilliSeconds = System.currentTimeMillis() - startTime;
+		db.executionTime = elapsedMilliSeconds;
 		console.println("Execution Time of Algo in Milliseconds:" + elapsedMilliSeconds);
 	}
 	
@@ -359,11 +360,12 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 	private void executeAlgoWithParameter(){
 		runProgressbar.start();
 		int actualIteration = control.getModel().getCurIteration();
+		db = new RunDataBase();
+		db.startInfo = stringStatFromActualState();
 		console.println("TimeStep:" + actualIteration);
 		startTimer();
 		Individual runBest = new Individual();
 		runBest.fitness = Double.MAX_VALUE;
-		db = new RunDataBase();
 		for(int r = 0; r < rounds; r++)
 		{		
 			Individual  roundBest = executeAlgo();
@@ -376,6 +378,7 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 		this.extractPositionAndAccess();
 		setState(runBest.position);
 		updateVisual();
+		db.endInfo = stringStatFromActualState();
 		console.println("AlgoResult:" + runBest.fitness);
 		if(this.algoUseFlexes)calculateAndPrintFlexInfos(control.getSimManager().getActualDecorState());
 		runProgressbar.stop();
@@ -490,7 +493,7 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 		Model model = control.getModel();
 		access= new ArrayList<AccessWrapper>();
 		List<Boolean> initialState = new ArrayList<Boolean>();
-		rollOutNodes((useGroupNode && (dGroupNode != null))? dGroupNode.getModel().getNodes() :model.getObjectsOnCanvas(), initialState, model.getCurIteration());			
+		rollOutNodes((dGroupNode != null)? dGroupNode.getModel().getNodes() :model.getObjectsOnCanvas(), initialState, model.getCurIteration());			
 		resetChain.add(initialState);
 		if(algoUseFlexes) {			
 			for(FlexWrapper flex :control.getSimManager().getActualFlexManager().getAllFlexWrapperWithState(FlexState.OFFERED)){
@@ -530,6 +533,39 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 	
 	
 	
+	private String stringStatFromActualState() {
+		console.println("    (dGroupNode != null):" + (dGroupNode != null));
+		if(dGroupNode != null)
+		{
+			//GetActualDecoratedGroupNode
+			dGroupNode = control.getSimManager().getActualVisualRepresentationalState().getCreatedGroupNodes().get(dGroupNode.getModel());
+			int amountOfSupplier = dGroupNode.getAmountOfSupplier();
+			int amountOfConsumer = dGroupNode.getAmountOfConsumer();
+			int amountOfPassiv = dGroupNode.getAmountOfPassiv();
+			int amountOfObjects = amountOfSupplier + amountOfConsumer + amountOfPassiv;
+			int unSuppliedConsumer = dGroupNode.getAmountOfConsumerWithState(HolonObjectState.NOT_SUPPLIED);
+			int partiallySuppliedConsumer = dGroupNode.getAmountOfConsumerWithState(HolonObjectState.PARTIALLY_SUPPLIED);
+			int suppliedConsumer = dGroupNode.getAmountOfConsumerWithState(HolonObjectState.SUPPLIED);
+			int overSuppliedConsumer = dGroupNode.getAmountOfConsumerWithState(HolonObjectState.OVER_SUPPLIED);
+			
+			
+			int activeElements = dGroupNode.getAmountOfAktiveElemntsFromHolonObjects();
+			int elements = dGroupNode.getAmountOfElemntsFromHolonObjects();
+			return	"HolonObjects["
+				+	" Producer: " + amountOfSupplier  + "/" + amountOfObjects + "("+ (float)amountOfSupplier/(float)amountOfObjects * 100 + "%)"
+				+	" Unsupplied: " + unSuppliedConsumer  + "/" + amountOfObjects + "("+ (float)unSuppliedConsumer/(float)amountOfObjects * 100 + "%)"
+				+	" PartiallySupplied: " + partiallySuppliedConsumer  + "/" + amountOfObjects + "("+ (float)partiallySuppliedConsumer/(float)amountOfObjects * 100 + "%)"
+				+	" Supplied: " + suppliedConsumer  + "/" + amountOfObjects + "("+ (float)suppliedConsumer/(float)amountOfObjects * 100 + "%)"
+				+	" Passiv: " + overSuppliedConsumer  + "/" + amountOfObjects + "("+ (float)overSuppliedConsumer/(float)amountOfObjects * 100 + "%)"
+				+  "]" + "   HolonElemnts["
+				+	" Active: " + activeElements  + "/" + elements + "("+ (float)activeElements/(float)elements * 100 + "%)"
+				+ "]";
+		}
+		
+		return "[No GroupMode Use == No detailed Info]";
+	}
+	
+	
 	
 	
 
@@ -573,6 +609,8 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 	protected abstract String plottFileName();
 	
 	public class RunDataBase{
+		String startInfo, endInfo;
+		long executionTime = 1;
 		List<List<Double>> allRuns = new ArrayList<List<Double>>();
 		public void insertNewRun(List<Double> newRun){
 			allRuns.add(newRun);
@@ -621,8 +659,13 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 			out.newLine();
 			if(db != null)
 			out.write(db.allRuns.stream().map(list -> list.stream().map(Object::toString).collect(Collectors.joining(","))).collect(Collectors.joining(System.lineSeparator())));
-			else
-				console.println("Something is wrong");
+			
+			out.newLine();
+			out.write("ExecutionTime for all rounds[milliseconds]:" + db.executionTime);
+			out.newLine();
+			out.write("StartStats: " + db.startInfo);
+			out.newLine();
+			out.write("EndStats: " + db.endInfo);
 			out.newLine();
 			out.newLine();
 		}
@@ -665,8 +708,6 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 					break;
 				case FLEXIBILITY:
 					if(state) {
-//						if(control.getSimManager() == null) console.println("control.getSimManager() == null");
-//						if(control.getSimManager().getActualFlexManager() == null) console.println("control.getSimManager().getActualFlexManager() == null");
 						control.getSimManager().getActualFlexManager().orderFlex(flex);
 					}
 					break;

+ 0 - 1
src/exampleAlgorithms/AcoAlgorithm2.java

@@ -5,7 +5,6 @@ import java.util.List;
 import java.util.ListIterator;
 
 import javax.swing.JFrame;
-import javax.swing.JPanel;
 
 import api.AlgorithmFrameworkFlex;
 import ui.model.DecoratedState;