ソースを参照

initial storage charge impl

David Heck 4 年 前
コミット
e725b37e9c

+ 24 - 7
src/algo/StorageElement.java

@@ -71,11 +71,11 @@ public class StorageElement extends HolonElement {
 			if (stateOfCharge >= energy) { // enough energy stored than wanted
 				if (energy >= maxInRatio) { // more energy wanted than can be given
 					this.setEnergyPerElement(maxOutRatio);
-					stateOfCharge = stateOfCharge - maxOutRatio;//TODO: not hear but in simulation manager
+//					stateOfCharge = stateOfCharge - maxOutRatio;//TODO: not hear but in simulation manager
 					return maxOutRatio;
 				} else { // less energy wanted that can be given
 					this.setEnergyPerElement(energy);
-					stateOfCharge = stateOfCharge - energy;
+//					stateOfCharge = stateOfCharge - energy;
 					return energy;
 				}
 			} else {// not enough energy stored than wanted
@@ -84,7 +84,7 @@ public class StorageElement extends HolonElement {
 					return 0;
 				} else { // emit energy that is available even though is less that wanted
 					this.setEnergyPerElement(stateOfCharge);
-					stateOfCharge = 0;
+//					stateOfCharge = 0;
 					return stateOfCharge;
 				}
 			}
@@ -92,11 +92,11 @@ public class StorageElement extends HolonElement {
 			if (energy >= maxInRatio) { // more engery given than can be collected
 				if (stateOfCharge + maxInRatio > capacity) { // Storage nearly full only load rest to get full
 					this.setEnergyPerElement(-(capacity - stateOfCharge));
-					stateOfCharge = capacity;
+//					stateOfCharge = capacity;
 					return capacity - stateOfCharge;
 				} else { // load with maximal of what can be collected
 					this.setEnergyPerElement(-maxInRatio);
-					stateOfCharge = stateOfCharge + maxInRatio;
+//					stateOfCharge = stateOfCharge + maxInRatio;
 					return maxInRatio;
 				}
 			} else { // less engery given than can be taken in
@@ -106,11 +106,11 @@ public class StorageElement extends HolonElement {
 				} else {
 					if (stateOfCharge + energy > capacity) { // Storage nearly full only load rest to get full
 						this.setEnergyPerElement(-(capacity - stateOfCharge));
-						stateOfCharge = capacity;
+//						stateOfCharge = capacity;
 						return capacity - stateOfCharge;
 					} else { // take all engery that is available
 						this.setEnergyPerElement(-energy);
-						stateOfCharge = stateOfCharge + energy;
+//						stateOfCharge = stateOfCharge + energy;
 						return energy;
 					}
 				}
@@ -125,6 +125,23 @@ public class StorageElement extends HolonElement {
 		return this.status;
 	}
 
+	public void chargeCalc(){
+		switch (status){
+			case COLLECT:
+				stateOfCharge = stateOfCharge - getEnergyPerElement();
+				break;
+			case EMIT:
+				stateOfCharge = stateOfCharge + getEnergyPerElement();
+				break;
+			default:
+		}
+		if(stateOfCharge <= 0 || stateOfCharge >= capacity){
+			status = Mode.STANDBY;
+			setEnergyPerElement(0);
+		}
+
+	}
+
 	public void setStateOfCharge(float stateOfCharge){
 		if(stateOfCharge < capacity){
 			this.stateOfCharge = stateOfCharge;

+ 5 - 3
src/algo/StorageProductionController.java

@@ -48,14 +48,16 @@ public class StorageProductionController {
                 }
             }
         }else{
-//            disableStorageProduction(energyNeeded - currentStorageProduction());
+            disableStorageProduction(energyNeeded - currentStorageProduction());
         }
 
 	}
 
 	public void disableStorageProduction(float energyNotNeeded) {
-		for (StorageElement se : storages) {
-			se.setStatusAndSetEnergy(StorageElement.Mode.STANDBY, 0);
+		if(energyNotNeeded == -1) {
+			for (StorageElement se : storages) {
+				se.setStatusAndSetEnergy(StorageElement.Mode.STANDBY, 0);
+			}
 		}
 //		float disabledEnergy = 0;
 //		StorageElement.Mode lastMode = null;

+ 1 - 1
src/algo/TestAlgo.java

@@ -245,7 +245,7 @@ public class TestAlgo implements AddOn {
 			/////////
 			setPowerplantProduction(0);
 			enableAllConsumers();
-			SPC.disableStorageProduction(-1);
+			SPC.disableStorageProduction(-1); //disable all storage production
 			for (StorageElement se :
 					getStorageElements()) {
 				se.setStateOfCharge(10000);

+ 23 - 2
src/ui/controller/SimulationManager.java

@@ -1,5 +1,6 @@
 package ui.controller;
 
+import algo.StorageElement;
 import classes.*;
 import classes.comparator.EnergyMinToMaxComparator;
 import classes.comparator.MinEnergyComparator;
@@ -29,7 +30,7 @@ import java.util.List;
 import java.util.ListIterator;
 
 import javax.swing.JPanel;
-
+
 
 /**
  * Controller for Simulation.
@@ -111,7 +112,27 @@ public class SimulationManager {
 			doAnotherLoop = false;
 			list = calculateNetworks(minimumModel, timestep, leftOver);
 			for(MinimumNetwork net : list) {
-				float energyOnCables = net.getHolonObjectList().stream().filter(object -> object.getEnergyAtTimeStepWithFlex(timestep, newFlexManager) > 0.0f).map(object -> object.getEnergyAtTimeStepWithFlex(timestep, newFlexManager)).reduce(0.0f, ((a,b) -> a + b));
+				float energyOnCables = net.getHolonObjectList()
+						.stream()
+						.filter(object -> object.getEnergyAtTimeStepWithFlex(timestep, newFlexManager) > 0.0f)
+						.map(object -> object.getEnergyAtTimeStepWithFlex(timestep, newFlexManager))
+						.reduce(0.0f, ((a,b) -> a + b));
+				//calculation for storage
+				net.getHolonObjectList()
+						.stream()
+						.flatMap(holonObject -> holonObject.getElements().stream())
+						.map(ele -> {
+							if (ele instanceof StorageElement) {
+								return (StorageElement) ele;
+							}else {
+								return null;
+							}
+						})
+						.filter(ele -> ele != null)
+						.filter(ele -> (ele.getStatus().equals(StorageElement.Mode.EMIT)
+								|| (ele.getStatus().equals(StorageElement.Mode.COLLECT))))
+						.forEach(obj -> obj.chargeCalc());
+
 				//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);
 				if(cable != null) {