Browse Source

distancefitness New

David Heck 4 years ago
parent
commit
4037610c13
2 changed files with 81 additions and 80 deletions
  1. 10 10
      src/classes/StorageElement.java
  2. 71 70
      src/ui/controller/StorageProductionController.java

+ 10 - 10
src/classes/StorageElement.java

@@ -236,17 +236,17 @@ public class StorageElement extends HolonElement implements Comparable<StorageEl
 
 	@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{
+//		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 {

+ 71 - 70
src/ui/controller/StorageProductionController.java

@@ -4,6 +4,7 @@ import classes.StorageElement;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.LinkedList;
 
 public class StorageProductionController {
 	private ArrayList<StorageElement> storages;
@@ -16,8 +17,8 @@ public class StorageProductionController {
 
 	public float currentPossibleStorageProduction() {
 		float possibleEnergy = 0;
-		for (StorageElement so : storages) {
-			possibleEnergy += so.getPossibleProduction(energyRequiredForPowerplantBlackstart);
+		for (StorageElement ele : storages) {
+			possibleEnergy += ele.getPossibleProduction(energyRequiredForPowerplantBlackstart);
 		}
 		return possibleEnergy;
 	}
@@ -39,21 +40,21 @@ public class StorageProductionController {
 	public void enableStorageDischarging(final double energyNeeded) {
 		Collections.sort(storages, Collections.reverseOrder());
 //		System.out.println("energy needed from storage" + energyNeeded);
-		int storagesLeft = storages.size();
+//		int storagesLeft = storages.size();
         double energyLeftToEnabled = energyNeeded;
         	for (StorageElement se: storages) {
 				if(!se.chargeDepleted()){
 					energyLeftToEnabled = energyLeftToEnabled - se.setStatusAndSetEnergy(
 											StorageElement.Mode.EMIT, energyLeftToEnabled, energyRequiredForPowerplantBlackstart);
 				}
-				storagesLeft = storagesLeft - 1;
+//				storagesLeft = storagesLeft - 1;
                 if(energyLeftToEnabled <= 0){
                 	System.out.println("enabled energy from storage");
 					assessFitness(1,1,1,energyNeeded);
                     return;
-                }else if(storagesLeft <= 0){
+                }/*else if(storagesLeft <= 0){
                 	System.out.println("nicht genug enabled");
-				}
+				}*/
             }
 
 	}
@@ -84,75 +85,89 @@ public class StorageProductionController {
 	private void assessFitness(float w1, float w2, float w3, double energyNeeded){
 		double fitness = 0f;
 
-		fitness = w1 * distanceFitness() + w2 * supplyFitness(energyNeeded) + w3 * holdMaxPowerFitness();
+		fitness = w1 * distanceFitness(energyNeeded) + w2 * supplyFitness(energyNeeded) + w3 * holdMaxPowerFitness();
 		System.out.println("Fitness score: " + fitness);
 	}
 
-	private double distanceFitness(){//TODO: nicht lieber mit wiederstand?
+	private double distanceFitness(double energyNeeded){//TODO: nicht lieber mit wiederstand?
 		double distancePenalty = 0;
-		for (StorageElement ele : storages) {
+		ArrayList<StorageElement> sortedElements = storages;
+		Collections.sort(sortedElements, Collections.reverseOrder());
+		for (StorageElement ele : sortedElements) {
 			if(!ele.chargeDepleted()){
 				if(ele.getStatus().equals(StorageElement.Mode.EMIT)) {
-					distancePenalty += goodDistance(ele);
+					distancePenalty += goodDistance(energyNeeded ,ele);
+					energyNeeded -= ele.getEnergyPerElement();
 				}
 			}
 		}
 		return distancePenalty;
 	}
 
-	private double goodDistance(StorageElement ele){
-		if(avgDistance() < ele.getHighDistance() + ele.getLowDistance()){
-			return produceTooMuch(ele);
-		}else{
-			return produceTooLittle(ele);
-		}
-	}
-
-	private double produceTooMuch(StorageElement ele){
-		if(avgUtilization() >= ele.getUtilization(energyRequiredForPowerplantBlackstart)){
+	private double goodDistance(double energyNeeded, StorageElement ele){
+		if(energyNeeded <= 0){
 			return 0;
-		}else{
-			return Math.abs(avgUtilization() - ele.getUtilization(energyRequiredForPowerplantBlackstart));
 		}
-	}
-
-	private double produceTooLittle(StorageElement ele){
-		if(avgUtilization() <= ele.getUtilization(energyRequiredForPowerplantBlackstart)){
-			return 0;
-		}else{
-			return Math.abs(avgUtilization() - ele.getUtilization(energyRequiredForPowerplantBlackstart));
-		}
-	}
-
-	private double avgDistance(){
-		double totalDistance = 0;
-		for (StorageElement ele : storages) {
-			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
-				totalDistance += ele.getHighDistance() + ele.getLowDistance();
+		if(energyNeeded >= ele.getCurrentMaxOutRatio()){
+			if(ele.getChargingRatio() < ele.getCurrentMaxOutRatio()){
+				return Math.abs(ele.getCurrentMaxOutRatio() - ele.getChargingRatio());
+			}else{
+				return 0;
 			}
-		}
-		return totalDistance/activeStorages();
-	}
-
-	private double avgUtilization(){
-		double totalUtilization = 0;
-		for (StorageElement ele : storages) {
-			if(!ele.chargeDepleted()){
-				totalUtilization += ele.getUtilization(energyRequiredForPowerplantBlackstart);
+		}else{
+			if(ele.getChargingRatio() < energyNeeded){
+				return Math.abs(energyNeeded - ele.getChargingRatio());
+			}else{
+				return 0;
 			}
 		}
-		return totalUtilization/activeStorages();
 	}
 
-	private double activeStorages(){
-		double activeStorages = 0;
-		for (StorageElement ele : storages) {
-			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
-				activeStorages++;
-			}
-		}
-		return activeStorages;
-	}
+//	private double produceTooMuch(StorageElement ele){
+//		if(avgUtilization() >= ele.getUtilization(energyRequiredForPowerplantBlackstart)){
+//			return 0;
+//		}else{
+//			return Math.abs(avgUtilization() - ele.getUtilization(energyRequiredForPowerplantBlackstart));
+//		}
+//	}
+//
+//	private double produceTooLittle(StorageElement ele){
+//		if(avgUtilization() <= ele.getUtilization(energyRequiredForPowerplantBlackstart)){
+//			return 0;
+//		}else{
+//			return Math.abs(avgUtilization() - ele.getUtilization(energyRequiredForPowerplantBlackstart));
+//		}
+//	}
+//
+//	private double avgDistance(){
+//		double totalDistance = 0;
+//		for (StorageElement ele : storages) {
+//			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
+//				totalDistance += ele.getHighDistance() + ele.getLowDistance();
+//			}
+//		}
+//		return totalDistance/activeStorages();
+//	}
+//
+//	private double avgUtilization(){
+//		double totalUtilization = 0;
+//		for (StorageElement ele : storages) {
+//			if(!ele.chargeDepleted()){
+//				totalUtilization += ele.getUtilization(energyRequiredForPowerplantBlackstart);
+//			}
+//		}
+//		return totalUtilization/activeStorages();
+//	}
+//
+//	private double activeStorages(){
+//		double activeStorages = 0;
+//		for (StorageElement ele : storages) {
+//			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
+//				activeStorages++;
+//			}
+//		}
+//		return activeStorages;
+//	}
 
 	private double supplyFitness(double energyNeeded){
 		double activeStoragePower = 0;
@@ -185,18 +200,4 @@ public class StorageProductionController {
 			return ele.getNominalOutRatio() - (ele.getStateOfCharge() - ele.getChargingRatio());
 		}
 	}
-
-//	private float storageEnergy(StorageElement ele){
-//		return ele.getStateOfCharge();
-//	}
-//
-//	private float totalEnergy(){
-//		float energy = 0;
-//		for (StorageElement ele : storages) {
-//			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
-//				energy = energy + storageEnergy(ele);
-//			}
-//		}
-//		return  energy;
-//	}
 }