|
@@ -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{
|
|
|
|
|
|
|
|
|
|
|
|
- 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)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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) {
|
|
|
-
|
|
|
-
|
|
|
control.getSimManager().getActualFlexManager().orderFlex(flex);
|
|
|
}
|
|
|
break;
|