浏览代码

fixes in fitness function

David Heck 5 年之前
父节点
当前提交
e344bdd596

+ 3 - 2
src/classes/StorageElement.java

@@ -198,8 +198,9 @@ public class StorageElement extends HolonElement implements Comparable<StorageEl
 		return energyAfterResistance;
 	}
 
-	public float getUtilization(){
-		return (getEnergyPerElement() * 100) / currentMaxOutRatio;
+	public double getUtilization(float energyRequiredForPowerplantBlackstart){
+		return (resistanceCalculator.calcEnergyNeededForCertainEnergyAfterResistance(getEnergyPerElement(), getLowDistance(), getHighDistance(), energyRequiredForPowerplantBlackstart)
+				* 100) / currentMaxOutRatio;
 	}
 
 	public float getStateOfCharge() {

+ 2 - 2
src/classes/resistanceCalculator.java

@@ -100,10 +100,10 @@ public class resistanceCalculator {
         return specificMaterialResistance * (distance / (0.25 * Math.PI * Math.pow(diameter, 2)));
     }
 
-    float calcEnergyNeededForCertainEnergyAfterResistance(double energyWanted, double lowDistance, double highDistance, float energyRequiredForPowerplantBlackstart){
+    double calcEnergyNeededForCertainEnergyAfterResistance(double energyWanted, double lowDistance, double highDistance, float energyRequiredForPowerplantBlackstart){
         double energyBeforeHighVoltage = calcEnergyNeededBeforePartOfGrid(energyWanted, highVoltage, highDistance, highSpecificMaterialResistance, highDiameter, energyRequiredForPowerplantBlackstart);
         energyBeforeHighVoltage = 1.02 * energyBeforeHighVoltage;
-        return (float) calcEnergyNeededBeforePartOfGrid(energyBeforeHighVoltage, lowVoltage, lowDistance, lowSpecificMaterialResistance, lowDiameter, energyRequiredForPowerplantBlackstart);
+        return calcEnergyNeededBeforePartOfGrid(energyBeforeHighVoltage, lowVoltage, lowDistance, lowSpecificMaterialResistance, lowDiameter, energyRequiredForPowerplantBlackstart);
     }
 
     private double calcEnergyNeededBeforePartOfGrid(double energyWanted, int voltage, double distance,

+ 7 - 5
src/ui/controller/StorageProductionController.java

@@ -44,7 +44,7 @@ public class StorageProductionController {
         	for (StorageElement se: storages) {
 				if(!se.chargeDepleted()){
 					energyLeftToEnabled = energyLeftToEnabled - se.setStatusAndSetEnergy(
-											StorageElement.Mode.EMIT, energyLeftToEnabled /*/ storagesLeft*/, energyRequiredForPowerplantBlackstart);
+											StorageElement.Mode.EMIT, energyLeftToEnabled / storagesLeft, energyRequiredForPowerplantBlackstart);
 				}
 				storagesLeft = storagesLeft - 1;
                 if(energyLeftToEnabled <= 0){
@@ -92,7 +92,9 @@ public class StorageProductionController {
 		double distancePenalty = 0;
 		for (StorageElement ele : storages) {
 			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
-				distancePenalty = goodDistance(ele);
+				if(ele.getStatus().equals(StorageElement.Mode.EMIT)) {
+					distancePenalty += goodDistance(ele);
+				}
 			}
 		}
 		return distancePenalty;
@@ -107,7 +109,7 @@ public class StorageProductionController {
 	}
 
 	private double produceTooMuch(StorageElement ele){
-		if(avgUtilization() <= ele.getUtilization()){
+		if(avgUtilization() >= ele.getUtilization(energyRequiredForPowerplantBlackstart)){
 			return 0;
 		}else{
 			return 1;
@@ -115,7 +117,7 @@ public class StorageProductionController {
 	}
 
 	private double produceTooLittle(StorageElement ele){
-		if(avgUtilization() >= ele.getUtilization()){
+		if(avgUtilization() <= ele.getUtilization(energyRequiredForPowerplantBlackstart)){
 			return 0;
 		}else{
 			return 1;
@@ -136,7 +138,7 @@ public class StorageProductionController {
 		double totalUtilization = 0;
 		for (StorageElement ele : storages) {
 			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
-				totalUtilization += ele.getUtilization();
+				totalUtilization += ele.getUtilization(energyRequiredForPowerplantBlackstart);
 			}
 		}
 		return totalUtilization/activeStorages();