Browse Source

float was not suitable for fitness function, went to double including storageelement production resistance, might need more changes

David Heck 4 years ago
parent
commit
2dd2495fea

+ 6 - 6
src/classes/StorageElement.java

@@ -82,8 +82,8 @@ public class StorageElement extends HolonElement implements Comparable<StorageEl
 	 *               by the storage
 	 * @return float how much energy was collected/emited
 	 */
-	public float setStatusAndSetEnergy(Mode status, float energyWanted, float energyRequiredForPowerplantBlackstart) {
-		float energyNeed = resistanceCalculator.calcEnergyNeededForCertainEnergyAfterResistance(energyWanted, getLowDistance(), getHighDistance(), energyRequiredForPowerplantBlackstart);
+	public double setStatusAndSetEnergy(Mode status, double energyWanted, float energyRequiredForPowerplantBlackstart) {
+		double energyNeed = resistanceCalculator.calcEnergyNeededForCertainEnergyAfterResistance(energyWanted, getLowDistance(), getHighDistance(), energyRequiredForPowerplantBlackstart);
 		this.status = status;
 		switch (status) {
 		case STANDBY:
@@ -98,8 +98,8 @@ public class StorageElement extends HolonElement implements Comparable<StorageEl
 			} else {// less wanted than what can be max be given
 				if(stateOfCharge >= energyNeed){//TODO: das kann doch garnicht funktioniern
 //					return emitWantedEnergy(energyNeed, energyRequiredForPowerplantBlackstart);//zurueckrechnungs problem! float nicht genau genug
-					this.setEnergyPerElement(energyWanted);
-					chargingRatio = energyNeed;
+					this.setEnergyPerElement((float) energyWanted);
+					chargingRatio = (float) energyNeed;
 					return energyWanted;
 				}
 			}
@@ -127,8 +127,8 @@ public class StorageElement extends HolonElement implements Comparable<StorageEl
 						chargingRatio = -(capacity - stateOfCharge);
 						return capacity - stateOfCharge;
 					} else { // take all engery that is available
-						this.setEnergyPerElement(-energyWanted);
-						chargingRatio = -energyWanted;
+						this.setEnergyPerElement((float) -energyWanted);
+						chargingRatio = (float) -energyWanted;
 						return energyWanted;
 					}
 				}

+ 1 - 1
src/classes/resistanceCalculator.java

@@ -100,7 +100,7 @@ public class resistanceCalculator {
         return specificMaterialResistance * (distance / (0.25 * Math.PI * Math.pow(diameter, 2)));
     }
 
-    float calcEnergyNeededForCertainEnergyAfterResistance(float energyWanted, double lowDistance, double highDistance, float energyRequiredForPowerplantBlackstart){
+    float 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);

+ 23 - 23
src/ui/controller/StorageProductionController.java

@@ -36,11 +36,11 @@ public class StorageProductionController {
 //		return producedEnergy;
 //	}
 
-	public void enableStorageDischarging(final float energyNeeded) {
+	public void enableStorageDischarging(final double energyNeeded) {
 		Collections.sort(storages, Collections.reverseOrder());
 //		System.out.println("energy needed from storage" + energyNeeded);
 		int storagesLeft = storages.size();
-        float energyLeftToEnabled = energyNeeded;
+        double energyLeftToEnabled = energyNeeded;
         	for (StorageElement se: storages) {
 				if(!se.chargeDepleted()){
 					energyLeftToEnabled = energyLeftToEnabled - se.setStatusAndSetEnergy(
@@ -68,7 +68,7 @@ public class StorageProductionController {
 	void enableStorageCharging(float energyAvailable){
 		Collections.sort(storages);
 		System.out.println("energy available to storage" + energyAvailable);
-		float availableEnergyLeft = energyAvailable;
+		double availableEnergyLeft = energyAvailable;
 		for (StorageElement se: storages) {
 			if(!se.fullyCharged()){
 				availableEnergyLeft = availableEnergyLeft - se.setStatusAndSetEnergy(
@@ -81,15 +81,15 @@ public class StorageProductionController {
 		}
 	}
 
-	private void assessFitness(float w1, float w2, float w3, float energyNeeded){
-		float fitness = 0f;
+	private void assessFitness(float w1, float w2, float w3, double energyNeeded){
+		double fitness = 0f;
 
 		fitness = w1 * distanceFitness() + w2 * supplyFitness(energyNeeded) + w3 * holdMaxPowerFitness();
 		System.out.println("Fitness score: " + fitness);
 	}
 
-	private float distanceFitness(){//TODO: nicht lieber mit wiederstand?
-		float distancePenalty = 0;
+	private double distanceFitness(){//TODO: nicht lieber mit wiederstand?
+		double distancePenalty = 0;
 		for (StorageElement ele : storages) {
 			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
 				distancePenalty = goodDistance(ele);
@@ -98,7 +98,7 @@ public class StorageProductionController {
 		return distancePenalty;
 	}
 
-	private float goodDistance(StorageElement ele){
+	private double goodDistance(StorageElement ele){
 		if(avgDistance() < ele.getHighDistance() + ele.getLowDistance()){
 			return produceTooMuch(ele);
 		}else{
@@ -106,7 +106,7 @@ public class StorageProductionController {
 		}
 	}
 
-	private float produceTooMuch(StorageElement ele){
+	private double produceTooMuch(StorageElement ele){
 		if(avgUtilization() <= ele.getUtilization()){
 			return 0;
 		}else{
@@ -114,7 +114,7 @@ public class StorageProductionController {
 		}
 	}
 
-	private float produceTooLittle(StorageElement ele){
+	private double produceTooLittle(StorageElement ele){
 		if(avgUtilization() >= ele.getUtilization()){
 			return 0;
 		}else{
@@ -122,8 +122,8 @@ public class StorageProductionController {
 		}
 	}
 
-	private float avgDistance(){
-		float totalDistance = 0;
+	private double avgDistance(){
+		double totalDistance = 0;
 		for (StorageElement ele : storages) {
 			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
 				totalDistance += ele.getHighDistance() + ele.getLowDistance();
@@ -132,8 +132,8 @@ public class StorageProductionController {
 		return totalDistance/activeStorages();
 	}
 
-	private float avgUtilization(){
-		float totalUtilization = 0;
+	private double avgUtilization(){
+		double totalUtilization = 0;
 		for (StorageElement ele : storages) {
 			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
 				totalUtilization += ele.getUtilization();
@@ -142,8 +142,8 @@ public class StorageProductionController {
 		return totalUtilization/activeStorages();
 	}
 
-	private float activeStorages(){
-		float activeStorages = 0;
+	private double activeStorages(){
+		double activeStorages = 0;
 		for (StorageElement ele : storages) {
 			if(ele.getStatus().equals(StorageElement.Mode.EMIT)){
 				activeStorages++;
@@ -152,22 +152,22 @@ public class StorageProductionController {
 		return activeStorages;
 	}
 
-	private float supplyFitness(float energyNeeded){
-		int activeStoragePower = 0;
+	private double supplyFitness(double energyNeeded){
+		double activeStoragePower = 0;
 		for (StorageElement ele : storages) {
 			if(ele.getStatus().equals(StorageElement.Mode.EMIT)) {
 				activeStoragePower += ele.getEnergyPerElement();
 			}
 		}
 		if(activeStoragePower < energyNeeded){
-			return (float) Math.pow(9000, 9000);//TODO:
+			return Math.pow(9000, 9000);//TODO:
 		}else{
 			return activeStoragePower - energyNeeded;
 		}
 	}
 
-	private float holdMaxPowerFitness(){
-		float couldNotHoldPower = 0;
+	private double holdMaxPowerFitness(){
+		double couldNotHoldPower = 0;
 		for (StorageElement ele : storages) {
 			if(ele.getStatus().equals(StorageElement.Mode.EMIT)) {
 				couldNotHoldPower += maxPowerNextIteration(ele);
@@ -176,11 +176,11 @@ public class StorageProductionController {
 		return couldNotHoldPower;
 	}
 
-	private float maxPowerNextIteration(StorageElement ele){
+	private double maxPowerNextIteration(StorageElement ele){
 		if(ele.getStateOfCharge() - ele.getEnergyPerElement() >= ele.getCurrentMaxOutRatio()){//TODO:
 			return 0;
 		}else{
-			return (float) Math.pow(2, ele.getStateOfCharge() - ele.getEnergyPerElement());
+			return Math.pow(2, ele.getStateOfCharge() - ele.getEnergyPerElement());
 		}
 	}