Forráskód Böngészése

sort storages before enabling charge or discharge to distribute energy better

David Heck 4 éve
szülő
commit
1beb0d8631

+ 0 - 1
src/blackstart/controlAlgorithm.java

@@ -346,7 +346,6 @@ public class controlAlgorithm implements AddOn {
 	/**
 	 * TODO: HOLEG UNTERVERSORGUNG CHECKEN
 	 * TODO: prios fuer elemente anschalten
-	 * TODO: storage listen sotieren fuer moeglichst gleichemaessige lade / last verteilung
 	 * TODO: elements und amount nachschauen + getEngergyPerElement anschauen
 	 * TODO: batterie status wechesel fuehrt zu unterversorgung in GUI FIX?: in storage if bei charge auskommentieren
 	 * TODO: wie soll ich unter / ueberversorgung handeln vorm blackstart

+ 12 - 1
src/classes/StorageElement.java

@@ -3,7 +3,7 @@ package classes;
 import com.google.gson.annotations.Expose;
 import ui.model.Model;
 
-public class StorageElement extends HolonElement {
+public class StorageElement extends HolonElement implements Comparable<StorageElement> {
 
 	@Expose
 	private Mode status;
@@ -166,6 +166,17 @@ public class StorageElement extends HolonElement {
 		return stateOfCharge >= capacity;
 	}
 
+	@Override
+	public int compareTo(StorageElement storageElement) {
+		if(this.stateOfCharge < storageElement.getStateOfCharge()){
+			return -1;
+		}else if(this.stateOfCharge > storageElement.getStateOfCharge()){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+
 	public enum Mode {
 		COLLECT, EMIT, STANDBY
 	}

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

@@ -8,11 +8,7 @@ import ui.model.DecoratedSwitch.SwitchState;
 import ui.model.Model.FairnessModel;
 import ui.view.FlexiblePane;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
+import java.util.*;
 
 
 /**
@@ -133,10 +129,10 @@ public class SimulationManager {
 								return null;
 							}
 						})
-						.filter(ele -> ele != null)
+						.filter(Objects::nonNull)
 						.filter(ele -> (ele.getStatus().equals(StorageElement.Mode.EMIT)
 								|| (ele.getStatus().equals(StorageElement.Mode.COLLECT))))
-						.forEach(obj -> obj.stateOfChargeCalculation());
+						.forEach(StorageElement::stateOfChargeCalculation);
 
 				//find the cable with the energy supplied from his two connected objects are the biggest, from all cables that the network give more energy than the cablecapacity. 
 				IntermediateCableWithState cable = net.getEdgeList().stream().filter(aCable -> energyOnCables > aCable.getModel().getCapacity() && !aCable.getModel().isUnlimitedCapacity()).max((lhs,rhs) -> Float.compare(lhs.getEnergyFromConnetedAtTimestep(timestep, newFlexManager), rhs.getEnergyFromConnetedAtTimestep(timestep, newFlexManager))).orElse(null);

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

@@ -3,6 +3,7 @@ package ui.controller;
 import classes.StorageElement;
 
 import java.util.ArrayList;
+import java.util.Collections;
 
 public class StorageProductionController {
 	private ArrayList<StorageElement> storages;
@@ -34,9 +35,11 @@ public class StorageProductionController {
 	}
 
 	public void enableStorageDischarging(final float energyNeeded) {
+		Collections.sort(storages, Collections.reverseOrder());
 		System.out.println("energy needed from storage" + energyNeeded);
         float energyLeftToEnabled = energyNeeded;
 
+
 //        if(currentStorageProduction() < energyNeeded){//TODO: das if muss ich nochmal ueberdenken
 //        	energyLeftToEnabled = energyNeeded - currentStorageProduction();
             //DONE?: Problem: es wird abgezogen weil ja schon emitter aber wir wolle das ja erhoehen...
@@ -90,6 +93,7 @@ public class StorageProductionController {
 
 	//TODO: selbe probleme wie discharging
 	void enableStorageCharging(float energyAvailable){
+		Collections.sort(storages);
 		System.out.println("energy available to storage" + energyAvailable);
 		float availableEnergyLeft = energyAvailable;
 		for (StorageElement se: storages) {