diff --git a/_alp/Agents/UI_company/Code/Functions.java b/_alp/Agents/UI_company/Code/Functions.java index cb6deb06..fd042626 100644 --- a/_alp/Agents/UI_company/Code/Functions.java +++ b/_alp/Agents/UI_company/Code/Functions.java @@ -460,6 +460,10 @@ else if (batteryAsset == null) { ((J_EAStorageElectric)batteryAsset).setCapacityElectric_kW(setBatteryCapacity_kWh*existing_batterypower_capacity_ratio); //Set Power ((J_EAStorageElectric)batteryAsset).setStorageCapacity_kWh(setBatteryCapacity_kWh); //Set storage capacity +//Add battery algorithm if it is not present +if(GC.p_batteryAlgorithm == null){ + GC.p_batteryAlgorithm = new J_BatteryManagementSelfConsumption(GC); +} /*ALCODEEND*/} @@ -672,7 +676,7 @@ else if (batteryAsset == null) { if (vehicleType == OL_EnergyAssetType.ELECTRIC_VEHICLE || vehicleType == OL_EnergyAssetType.ELECTRIC_VAN || vehicleType == OL_EnergyAssetType.ELECTRIC_TRUCK ){ // Create EVS double storageCapacity_kWh = 0; double capacityElectricity_kW = 0; - double stateOfCharge_r = 1; // Initial state of charge + double stateOfCharge_fr = 1; // Initial state of charge switch(vehicleType){ case ELECTRIC_VEHICLE: @@ -694,7 +698,7 @@ else if (batteryAsset == null) { } //Create EV and connect to GC and selected trip tracker - J_EAEV electricVehicle = new J_EAEV(parentGC, capacityElectricity_kW, storageCapacity_kWh, stateOfCharge_r, timestep_h, energyConsumption_kWhpkm, vehicleScaling, vehicleType, tripTracker); + J_EAEV electricVehicle = new J_EAEV(parentGC, capacityElectricity_kW, storageCapacity_kWh, stateOfCharge_fr, timestep_h, energyConsumption_kWhpkm, vehicleScaling, vehicleType, tripTracker); electricVehicle.available = available; diff --git a/_alp/Agents/Zero_Loader/Code/Functions.java b/_alp/Agents/Zero_Loader/Code/Functions.java index 6f5a5152..0e29d354 100644 --- a/_alp/Agents/Zero_Loader/Code/Functions.java +++ b/_alp/Agents/Zero_Loader/Code/Functions.java @@ -393,9 +393,31 @@ else if(RegionCoords.startsWith("LineString")){ gridbattery.v_liveConnectionMetaData.contractedFeedinCapacityKnown = false; } - gridbattery.set_p_parentNodeElectricID( dataBattery.gridnode_id() ); + gridbattery.set_p_parentNodeElectricID( dataBattery.gridnode_id() ); gridbattery.set_p_heatingType( OL_GridConnectionHeatingType.NONE ); - gridbattery.set_p_batteryOperationMode( OL_BatteryOperationMode.valueOf(dataBattery.default_operation_mode()) ); + + switch (dataBattery.operation_mode()) { + case PRICE: + gridbattery.p_batteryAlgorithm = new J_BatteryManagementPrice(gridbattery); + break; + case PEAK_SHAVING_PARENT_NODE: + J_BatteryManagementPeakShaving batteryAlgorithm = new J_BatteryManagementPeakShaving(gridbattery); + GridNode gn = findFirst(energyModel.pop_gridNodes, x -> x.p_gridNodeID.equals(gridbattery.p_parentNodeElectricID)); + if (gn == null) { + throw new RuntimeException("Could not find GridNode with ID: " + gridbattery.p_parentNodeElectricID + " for GCGridBattery"); + } + batteryAlgorithm.setTarget(gn); + gridbattery.p_batteryAlgorithm = batteryAlgorithm; + break; + case PEAK_SHAVING_COOP: + // target agent is still null, should be set at the moment of coop creation + batteryAlgorithm = new J_BatteryManagementPeakShaving(gridbattery); + batteryAlgorithm.setTargetType( OL_ResultScope.ENERGYCOOP ); + gridbattery.p_batteryAlgorithm = batteryAlgorithm; + break; + default: + throw new RuntimeException("Battery Operation Mode: " + dataBattery.operation_mode() + " is not supported for GCGridBattery."); + } //Get initial state gridbattery.v_isActive = dataBattery.initially_active(); @@ -1369,7 +1391,7 @@ else if(companyGC.c_heatingTypes.contains(OL_GridConnectionHeatingType.GASBURNER double storageCapacity_kWh = 0; double energyConsumption_kWhpkm = 0; double capacityElectricity_kW = 0; -double stateOfCharge_r = 1; // Initial state of charge +double stateOfCharge_fr = 1; // Initial state of charge double timestep_h = energyModel.p_timeStep_h; double vehicleScaling = 1.0; @@ -1409,7 +1431,7 @@ else if(companyGC.c_heatingTypes.contains(OL_GridConnectionHeatingType.GASBURNER //Create the EV vehicle energy asset with the set parameters + links -J_EAEV electricVehicle = new J_EAEV(parentGC, capacityElectricity_kW, storageCapacity_kWh, stateOfCharge_r, timestep_h, energyConsumption_kWhpkm, vehicleScaling, vehicle_type, null); +J_EAEV electricVehicle = new J_EAEV(parentGC, capacityElectricity_kW, storageCapacity_kWh, stateOfCharge_fr, timestep_h, energyConsumption_kWhpkm, vehicleScaling, vehicle_type, null); if (!isDefaultVehicle && annualTravelDistance_km > 1000){ electricVehicle.tripTracker.setAnnualDistance_km(annualTravelDistance_km); @@ -2495,9 +2517,7 @@ else if(pvPower_kW != null && pvPower_kW > 0){ } // Elke survey company krijgt hoe dan ook een batterij EA (ook als op dit moment nog geen batterij aanwezig is, maar dan is capaciteit gewoon 0) f_addStorage(companyGC, battery_power_kW, battery_capacity_kWh, OL_EnergyAssetType.STORAGE_ELECTRIC); -companyGC.p_batteryOperationMode = OL_BatteryOperationMode.BALANCE; - -//Aansturing toevoegen ? +companyGC.p_batteryAlgorithm = new J_BatteryManagementSelfConsumption(companyGC); //add to scenario: current current_scenario_list.setCurrentBatteryCapacity_kWh(battery_capacity_kWh); @@ -3122,7 +3142,7 @@ GridNode f_createHeatGridNode() contracted_feed_in_capacity_kw(0.0). storage_capacity_kwh(0.0). -default_operation_mode("BALANCE"). +operation_mode(OL_BatteryOperationMode.PEAK_SHAVING_PARENT_NODE). latitude(0). longitude(0). polygon(null). diff --git a/_alp/Agents/tabElectricity/Code/Functions.java b/_alp/Agents/tabElectricity/Code/Functions.java index 97061778..fefd204d 100644 --- a/_alp/Agents/tabElectricity/Code/Functions.java +++ b/_alp/Agents/tabElectricity/Code/Functions.java @@ -392,7 +392,7 @@ else if ( gc instanceof GCUtility ) { while ( nbHouseBatteries > nbHousesWithBatteryGoal ) { GCHouse house = findFirst(zero_Interface.energyModel.Houses, p -> p.p_batteryAsset != null ); house.p_batteryAsset.removeEnergyAsset(); - house.p_batteryOperationMode = OL_BatteryOperationMode.BALANCE; // reset to default + house.p_batteryAlgorithm = null; nbHouseBatteries--; } while ( nbHouseBatteries < nbHousesWithBatteryGoal) { @@ -403,7 +403,7 @@ else if ( gc instanceof GCUtility ) { double batteryStateOfCharge = 0.5; new J_EAStorageElectric(house, batteryCapacity_kW, batteryStorageCapacity_kWh, batteryStateOfCharge, zero_Interface.energyModel.p_timeStep_h ); - house.p_batteryOperationMode = OL_BatteryOperationMode.HOUSEHOLD_LOAD; + house.p_batteryAlgorithm = new J_BatteryManagementSelfConsumption( house ); nbHouseBatteries++; } } diff --git a/_alp/Agents/tabMobility/Code/Functions.java b/_alp/Agents/tabMobility/Code/Functions.java index 21dec319..1b6c354c 100644 --- a/_alp/Agents/tabMobility/Code/Functions.java +++ b/_alp/Agents/tabMobility/Code/Functions.java @@ -354,10 +354,10 @@ boolean f_dieselToElectricTruck(List gcList) // Re-add Electric vehicle double capacityElectric_kW = zero_Interface.energyModel.avgc_data.p_avgEVMaxChargePowerTruck_kW; double storageCapacity_kWh = zero_Interface.energyModel.avgc_data.p_avgEVStorageTruck_kWh; - double initialStateOfCharge_r = 1.0; + double initialStateOfCharge_fr = 1.0; double energyConsumption_kWhpkm = zero_Interface.energyModel.avgc_data.p_avgEVEnergyConsumptionTruck_kWhpkm; double vehicleScalingElectric = 1.0; - J_EAEV electricTruck = new J_EAEV(gc, capacityElectric_kW, storageCapacity_kWh, initialStateOfCharge_r, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, vehicleScalingElectric, OL_EnergyAssetType.ELECTRIC_TRUCK, tripTracker); + J_EAEV electricTruck = new J_EAEV(gc, capacityElectric_kW, storageCapacity_kWh, initialStateOfCharge_fr, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, vehicleScalingElectric, OL_EnergyAssetType.ELECTRIC_TRUCK, tripTracker); electricTruck.available = available; zero_Interface.c_orderedVehicles.add(0, electricTruck); @@ -429,10 +429,10 @@ boolean f_hydrogenToElectricTruck(List gcList) // Re-add Electric vehicle double capacityElectric_kW = zero_Interface.energyModel.avgc_data.p_avgEVMaxChargePowerTruck_kW; double storageCapacity_kWh = zero_Interface.energyModel.avgc_data.p_avgEVStorageTruck_kWh; - double initialStateOfCharge_r = 1.0; + double initialStateOfCharge_fr = 1.0; double energyConsumption_kWhpkm = zero_Interface.energyModel.avgc_data.p_avgEVEnergyConsumptionTruck_kWhpkm; double vehicleScalingElectric = 1.0; - J_EAEV electricTruck = new J_EAEV(gc, capacityElectric_kW, storageCapacity_kWh, initialStateOfCharge_r, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, vehicleScalingElectric, OL_EnergyAssetType.ELECTRIC_TRUCK, tripTracker); + J_EAEV electricTruck = new J_EAEV(gc, capacityElectric_kW, storageCapacity_kWh, initialStateOfCharge_fr, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, vehicleScalingElectric, OL_EnergyAssetType.ELECTRIC_TRUCK, tripTracker); electricTruck.available = available; zero_Interface.c_orderedVehicles.add(0, electricTruck); @@ -846,10 +846,10 @@ boolean f_dieselToElectricVan(List gcList) // Re-add Electric vehicle double capacityElectric_kW = zero_Interface.energyModel.avgc_data.p_avgEVMaxChargePowerVan_kW; double storageCapacity_kWh = zero_Interface.energyModel.avgc_data.p_avgEVStorageVan_kWh; - double initialStateOfCharge_r = 1.0; + double initialStateOfCharge_fr = 1.0; double energyConsumption_kWhpkm = zero_Interface.energyModel.avgc_data.p_avgEVEnergyConsumptionVan_kWhpkm; double vehicleScalingElectric = 1.0; - J_EAEV electricVan = new J_EAEV(gc, capacityElectric_kW, storageCapacity_kWh, initialStateOfCharge_r, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, vehicleScalingElectric, OL_EnergyAssetType.ELECTRIC_VAN, tripTracker); + J_EAEV electricVan = new J_EAEV(gc, capacityElectric_kW, storageCapacity_kWh, initialStateOfCharge_fr, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, vehicleScalingElectric, OL_EnergyAssetType.ELECTRIC_VAN, tripTracker); electricVan.available = available; zero_Interface.c_orderedVehicles.add(0, electricVan); @@ -995,10 +995,10 @@ boolean f_dieselToElectricCar(List gcList) // Re-add Electric vehicle double capacityElectric_kW = zero_Interface.energyModel.avgc_data.p_avgEVMaxChargePowerCar_kW; double storageCapacity_kWh = zero_Interface.energyModel.avgc_data.p_avgEVStorageCar_kWh; - double initialStateOfCharge_r = 1.0; + double initialStateOfCharge_fr = 1.0; double energyConsumption_kWhpkm = zero_Interface.energyModel.avgc_data.p_avgEVEnergyConsumptionCar_kWhpkm; double vehicleScalingElectric = 1.0; - J_EAEV electricCar = new J_EAEV(gc, capacityElectric_kW, storageCapacity_kWh, initialStateOfCharge_r, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, vehicleScalingElectric, OL_EnergyAssetType.ELECTRIC_VEHICLE, tripTracker); + J_EAEV electricCar = new J_EAEV(gc, capacityElectric_kW, storageCapacity_kWh, initialStateOfCharge_fr, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, vehicleScalingElectric, OL_EnergyAssetType.ELECTRIC_VEHICLE, tripTracker); electricCar.available = available; zero_Interface.c_orderedVehicles.add(0, electricCar); diff --git a/_alp/Classes/Class.Battery_data.java b/_alp/Classes/Class.Battery_data.java index 3bc537a7..fa16370c 100644 --- a/_alp/Classes/Class.Battery_data.java +++ b/_alp/Classes/Class.Battery_data.java @@ -23,7 +23,7 @@ public class Battery_data { double connection_capacity_kw; Double contracted_delivery_capacity_kw; Double contracted_feed_in_capacity_kw; - String default_operation_mode; + OL_BatteryOperationMode operation_mode; double latitude; double longitude; String polygon;