Browse Source

eval ease of use

David Heck 4 years ago
parent
commit
9f92f55d7e
2 changed files with 142 additions and 1 deletions
  1. 122 1
      src/blackstart/ControlAlgorithm.java
  2. 20 0
      src/classes/StorageProductionController.java

+ 122 - 1
src/blackstart/ControlAlgorithm.java

@@ -39,6 +39,11 @@ public class ControlAlgorithm implements AddOn {
 	private TextField fileNameTextfield;
 	private TextField schedulTextfield;
 	private TextField renewableTextfield;
+	private TextField addBatteryTextfield;
+	private TextField addBatteryTypeTextfield;
+	private TextField removeBatteryTextfield;
+	private TextField removeBatteryTypeTextfield;
+
 
 	private int blackstartSuccessTime;
 	private int blackstartStartTime;
@@ -177,6 +182,38 @@ public class ControlAlgorithm implements AddOn {
 		renewableLabel.setBounds(530, 60, 300, 20);
 		parameterPanel.add(renewableLabel);
 
+		addBatteryTextfield = new TextField("0");
+		addBatteryTextfield.setBounds(425, 110, 95, 20);
+		parameterPanel.add(addBatteryTextfield);
+
+		JLabel addBatteryLabel = new JLabel("add number of certain batterytype");
+		addBatteryLabel.setBounds(530, 110, 300, 20);
+		parameterPanel.add(addBatteryLabel);
+
+		addBatteryTypeTextfield = new TextField("Car");
+		addBatteryTypeTextfield.setBounds(425, 135, 95, 20);
+		parameterPanel.add(addBatteryTypeTextfield);
+
+		JLabel addBatteryTypeLabel = new JLabel("What kind of battery to add");
+		addBatteryTypeLabel.setBounds(530, 135, 300, 20);
+		parameterPanel.add(addBatteryTypeLabel);
+
+		removeBatteryTextfield = new TextField("0");
+		removeBatteryTextfield.setBounds(425, 160, 95, 20);
+		parameterPanel.add(removeBatteryTextfield);
+
+		JLabel removeBatteryLabel = new JLabel("remove number of certain batterytype");
+		removeBatteryLabel.setBounds(530, 160, 300, 20);
+		parameterPanel.add(removeBatteryLabel);
+
+		removeBatteryTypeTextfield = new TextField("Car");
+		removeBatteryTypeTextfield.setBounds(425, 205, 95, 20);
+		parameterPanel.add(removeBatteryTypeTextfield);
+
+		JLabel removeBatteryTypeLabel = new JLabel("What kind of battery to remove");
+		removeBatteryTypeLabel.setBounds(530, 205, 300, 20);
+		parameterPanel.add(removeBatteryTypeLabel);
+
 		return parameterPanel;
 	}
 
@@ -242,6 +279,8 @@ public class ControlAlgorithm implements AddOn {
 			// init
 			renewableProducers = getRenewableProducers();
 			consumers = getConsumers();
+			addCertainKindOfBatteries(Integer.parseInt(addBatteryTextfield.getText()),addBatteryTypeTextfield.getText());
+			removeCertainKindOfBatteries(Integer.parseInt(removeBatteryTextfield.getText()), removeBatteryTypeTextfield.getText());
 			totalNumberOfHouses = consumers.size();
 			powerplant = control.getSimManager().getPowerplant();// DANGER DONT GIVE NULL
 			setPowerPlantBlackstartResistance(-Float.parseFloat(blackstartEnergyrequierementTextfield.getText()));
@@ -277,7 +316,7 @@ public class ControlAlgorithm implements AddOn {
 			blackstartStartTime = Integer.parseInt(blackstartStartTimeTextfield.getText());
 			control.getModel().setIterations(Integer.parseInt(simulationDurationTextfield.getText()));
 			for (StorageElement se : getStorageElements()) {
-				if ("Car".equals(se.getEleName())) {
+				if (se.getEleName().startsWith("Car")) {
 					se.setStateOfCharge(Float.parseFloat(carStartCharge.getText()));
 				} else {
 					se.setStateOfCharge(Float.parseFloat(storageStartCharge.getText()));
@@ -554,6 +593,87 @@ public class ControlAlgorithm implements AddOn {
 		return list;
 	}
 
+	private void removeCertainKindOfBatteries(int amount, String kind){
+		int start = highestAmountOfBatteriesOfCertainKindInALLHouse(kind);
+		while(amount > 0){
+			for (HolonObject hO : consumers){
+				if(numberOfCertainKindOfBatteryPerHouse(hO, kind) == start) {
+					if (delSingleElem(hO, kind)) {
+						amount--;
+					}
+				}
+				if(amount == 0){
+					return;
+				}
+			}
+			start--;
+		}
+	}
+
+	private boolean delSingleElem(HolonObject hO, String kind){
+		for(HolonElement ele : hO.getElements()){
+			if(ele.getEleName().startsWith(kind)){
+//				control.deleteElementCanvas(hO.getId(),ele.getId());
+				hO.getElements().remove(ele);
+				return true;
+			}
+		}
+		return false;
+	}
+
+	private int highestAmountOfBatteriesOfCertainKindInALLHouse(String kind){
+		int count = 0;
+		for (HolonObject hO : consumers){
+			int eleCount = numberOfCertainKindOfBatteryPerHouse(hO, kind);
+				if(eleCount > count){
+					count = eleCount;
+				};
+		}
+		return count;
+	}
+
+	private void addCertainKindOfBatteries(int amount, String kind){
+		int start = 0;
+		while(amount > 0){
+			for (HolonObject hO : consumers){
+				if(numberOfCertainKindOfBatteryPerHouse(hO, kind) <= start){
+					if(kind.startsWith("Car")){
+						hO.addElement(new StorageElement(kind + start,
+								1,
+								0,
+								control.getModel(),
+								75000,
+								22000,
+								22000));
+					}else{
+						hO.addElement(new StorageElement(kind + start,
+								1,
+								0,
+								control.getModel(),
+								13500,
+								46000,
+								4600));
+					}
+					amount--;
+				}
+				if(amount == 0){
+					return;
+				}
+			}
+			start++;
+		}
+	}
+
+	private int numberOfCertainKindOfBatteryPerHouse(HolonObject house, String kind){
+		int count = 0;
+		for(HolonElement ele : house.getElements()){
+			if(ele.getEleName().startsWith(kind)){
+				count++;
+			}
+		}
+		return count;
+	}
+
 	private void writeOutputTxt(){
 		println("totalSOC: " + SPC.getTotalSoc() + "W/m");
 		try {
@@ -568,6 +688,7 @@ public class ControlAlgorithm implements AddOn {
 		println("blackstart resi: " + getEnergyRequiredForPowerplantBlackstart());
 		println("renewable: " + currentRenewableProduction());
 		println("totalnumber of houses: " + totalNumberOfHouses);
+		println("totalcars: " + SPC.getTotalCarNumber() + " totalhomebatteries: " + SPC.getTotalHomeBatteryNumber());
 		println("possiblestorage: " + SPC.currentPossibleStorageProduction());
 		println("totalSOC: " + SPC.getTotalSoc() + "W/m");
 		for (StorageElement ele :

+ 20 - 0
src/classes/StorageProductionController.java

@@ -332,4 +332,24 @@ public class StorageProductionController {
 		}
 		return soc;
 	}
+
+	public int getTotalCarNumber(){
+		int cars = 0;
+		for (StorageElement ele: storages) {
+			if(ele.getEleName().startsWith("Car")){
+				cars++;
+			}
+		}
+		return cars;
+	}
+
+	public int getTotalHomeBatteryNumber(){
+		int homeBatteries = 0;
+		for (StorageElement ele: storages) {
+			if(ele.getEleName().startsWith("Storage")){
+				homeBatteries++;
+			}
+		}
+		return homeBatteries;
+	}
 }