Browse Source

battery scheduler now even better

David Heck 4 years ago
parent
commit
ac7b4295a7

+ 1 - 1
src/blackstart/ControlAlgorithm.java

@@ -10,7 +10,7 @@ import javax.swing.*;
 import api.AddOn;
 import classes.*;
 import ui.controller.Control;
-import ui.controller.StorageProductionController;
+import classes.StorageProductionController;
 
 public class ControlAlgorithm implements AddOn {
 	// Gui Part:

+ 15 - 15
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 implements Comparable<StorageElement> {
+public class StorageElement extends HolonElement /*implements Comparable<StorageElement>*/ {
 
 	@Expose
 	private Mode status;
@@ -234,20 +234,20 @@ public class StorageElement extends HolonElement implements Comparable<StorageEl
 		return chargingRatio;
 	}
 
-	@Override
-	public int compareTo(StorageElement storageElement) {//TODO:!!!
-//		if(this.getPossiblePower() < storageElement.getPossiblePower()){
-//			return -1;
-//		}else if(this.getPossiblePower() > storageElement.getPossiblePower()){
-//			return  1;
-//		}else if(this.stateOfCharge < storageElement.getStateOfCharge()){
-//			return -1;
-//		}else if(this.stateOfCharge > storageElement.getStateOfCharge()){
-//			return 1;
-//		}else{
-			return Double.compare(storageElement.getLowDistance()+storageElement.getHighDistance(), this.getLowDistance() + this.getHighDistance());
-//		}
-	}
+//	@Override
+//	public int compareTo(StorageElement storageElement) {//TODO:!!!
+////		if(this.getPossiblePower() < storageElement.getPossiblePower()){
+////			return -1;
+////		}else if(this.getPossiblePower() > storageElement.getPossiblePower()){
+////			return  1;
+////		}else if(this.stateOfCharge < storageElement.getStateOfCharge()){
+////			return -1;
+////		}else if(this.stateOfCharge > storageElement.getStateOfCharge()){
+////			return 1;
+////		}else{
+////			return Double.compare(storageElement.getLowDistance()+storageElement.getHighDistance(), this.getLowDistance() + this.getHighDistance());
+////		}
+//	}
 
 	public enum Mode {
 		COLLECT, EMIT, STANDBY

+ 29 - 6
src/ui/controller/StorageProductionController.java → src/classes/StorageProductionController.java

@@ -1,6 +1,8 @@
-package ui.controller;
+package classes;
 
 import classes.StorageElement;
+import classes.comparator.StorageElemCompOnCharge;
+import classes.comparator.StorageElemCompOnDistance;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -62,7 +64,7 @@ public class StorageProductionController {
 
 	//TODO: selbe probleme wie discharging
 	void enableStorageCharging(float energyAvailable){
-		Collections.sort(storages);
+		Collections.sort(storages, new StorageElemCompOnCharge());
 		System.out.println("energy available to storage" + energyAvailable);
 		double availableEnergyLeft = energyAvailable;
 		for (StorageElement se: storages) {
@@ -198,14 +200,17 @@ public class StorageProductionController {
 
 	public void scheduleDischarging(final double energyNeeded){
 		ArrayList<StorageElement> lowRisk = new ArrayList<StorageElement>();
+		ArrayList<StorageElement> middleRisk = new ArrayList<StorageElement>();
 		ArrayList<StorageElement> highRisk = new ArrayList<StorageElement>();
 		
 		//vorsortieren
 		for (StorageElement ele : storages) {
-			if(ele.getStateOfCharge() - ele.getCurrentMaxOutRatio() < ele.getCurrentMaxOutRatio()
-			|| ele.getStateOfChargeInPercent() < 0.2){
-				if(!ele.chargeDepleted()){
+			if(ele.getStateOfChargeInPercent() < 0.2){
+				if(!ele.chargeDepleted()
+						&& ele.getStateOfCharge() - ele.getCurrentMaxOutRatio() < ele.getCurrentMaxOutRatio()){
 					highRisk.add(ele);
+				}else{
+					middleRisk.add(ele);
 				}
 			}else{
 				lowRisk.add(ele);
@@ -214,14 +219,32 @@ public class StorageProductionController {
 
 		double energyLeftToEnabled = energyNeeded;
 		//activate with lowRisk
+		lowRisk.sort(new StorageElemCompOnDistance());
 		for (StorageElement ele : lowRisk) {
-			energyLeftToEnabled = energyLeftToEnabled - ele.setStatusAndSetEnergy(
+			energyLeftToEnabled -= ele.setStatusAndSetEnergy(
 					StorageElement.Mode.EMIT, energyLeftToEnabled, energyRequiredForPowerplantBlackstart);
 			if(energyLeftToEnabled <=0) {
 				return;
 			}
 		}
 
+		double middleRiskEnable = 0;
+		middleRisk.sort(new StorageElemCompOnCharge());
+		if(energyLeftToEnabled <=0){
+			return;
+		}else{
+			for(StorageElement ele : middleRisk){
+				energyLeftToEnabled -= ele.setStatusAndSetEnergy(
+						StorageElement.Mode.EMIT, energyLeftToEnabled, energyRequiredForPowerplantBlackstart);
+				if(energyLeftToEnabled <=0) {
+					return;
+				}
+			}
+		}
+		energyLeftToEnabled -= middleRiskEnable;
+
+
+
 		double highRiskenable = 0;
 		//activate with highRisk
 		if(energyLeftToEnabled <=0){

+ 16 - 0
src/classes/comparator/StorageElemCompOnCharge.java

@@ -0,0 +1,16 @@
+package classes.comparator;
+
+import classes.StorageElement;
+
+public class StorageElemCompOnCharge extends StorageElementComparator{
+    @Override
+    public int compare(StorageElement a, StorageElement b) {
+        if(a.getStateOfChargeInPercent() < b.getStateOfChargeInPercent()){
+			return 1;
+		}else if(a.getStateOfChargeInPercent() > b.getStateOfChargeInPercent()){
+			return -1;
+		}else {
+            return 0;
+        }
+    }
+}

+ 10 - 0
src/classes/comparator/StorageElemCompOnDistance.java

@@ -0,0 +1,10 @@
+package classes.comparator;
+
+import classes.StorageElement;
+
+public class StorageElemCompOnDistance extends StorageElementComparator{
+    @Override
+    public int compare(StorageElement a, StorageElement b) {
+        return Double.compare(a.getLowDistance()+a.getHighDistance(), b.getLowDistance() + b.getHighDistance());
+    }
+}

+ 10 - 0
src/classes/comparator/StorageElementComparator.java

@@ -0,0 +1,10 @@
+package classes.comparator;
+
+import java.util.Comparator;
+
+import classes.StorageElement;
+
+public abstract class StorageElementComparator implements Comparator<StorageElement> {
+    public abstract int compare(StorageElement a, StorageElement b);
+}
+