From 402571afa7f1200e2bd6c9c0cc1e997b826642ba Mon Sep 17 00:00:00 2001 From: Luc-Sol Date: Tue, 15 Jul 2025 17:31:46 +0200 Subject: [PATCH 1/4] small refactor - Refactored: stateOfCharge_r -> stateOfCharge_fr - removed HOUSEHOLD_LOAD as an option for batteryOperationMode --- _alp/Agents/UI_company/Code/Functions.java | 4 ++-- _alp/Agents/Zero_Loader/Code/Functions.java | 4 ++-- _alp/Agents/tabElectricity/Code/Functions.java | 2 +- _alp/Agents/tabMobility/Code/Functions.java | 16 ++++++++-------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/_alp/Agents/UI_company/Code/Functions.java b/_alp/Agents/UI_company/Code/Functions.java index cb6deb06..e204ebde 100644 --- a/_alp/Agents/UI_company/Code/Functions.java +++ b/_alp/Agents/UI_company/Code/Functions.java @@ -672,7 +672,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 +694,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 a232ffd0..db013d09 100644 --- a/_alp/Agents/Zero_Loader/Code/Functions.java +++ b/_alp/Agents/Zero_Loader/Code/Functions.java @@ -1443,7 +1443,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; @@ -1483,7 +1483,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); diff --git a/_alp/Agents/tabElectricity/Code/Functions.java b/_alp/Agents/tabElectricity/Code/Functions.java index 97061778..c1eaf3ca 100644 --- a/_alp/Agents/tabElectricity/Code/Functions.java +++ b/_alp/Agents/tabElectricity/Code/Functions.java @@ -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_batteryOperationMode = OL_BatteryOperationMode.SELF_CONSUMPTION; 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); From bcce02ea379a57a80216c64ac1ffc4ae0512d9f2 Mon Sep 17 00:00:00 2001 From: Luc-Sol Date: Thu, 17 Jul 2025 15:35:57 +0200 Subject: [PATCH 2/4] Instantiation of new BatteryAlgorithm Classes - replaced: String default_operation_mode with OL_BatteryOperationMode operation_mode - Removed references to subtennants - Replaced setting p_batteryOperationMode in GC with filling p_batteryAlgorithm - Changed default battery behaviour for companies from Balance to SelfConsumption --- _alp/Agents/UI_company/Variables.xml | 18 ------ .../Agents/Zero_Interface/Code/Functions.java | 1 - _alp/Agents/Zero_Loader/Code/Functions.java | 60 ++++++++----------- _alp/Agents/Zero_Loader/Code/Functions.xml | 1 + .../Agents/tabElectricity/Code/Functions.java | 4 +- _alp/Classes/Class.Battery_data.java | 2 +- 6 files changed, 30 insertions(+), 56 deletions(-) diff --git a/_alp/Agents/UI_company/Variables.xml b/_alp/Agents/UI_company/Variables.xml index 1231ad84..f8ad944e 100644 --- a/_alp/Agents/UI_company/Variables.xml +++ b/_alp/Agents/UI_company/Variables.xml @@ -1338,24 +1338,6 @@ String - - 1709571660792 - - -740 - 250 - - false - true - true - - ArrayList - A_SubTenant - String - - 1711722238158 diff --git a/_alp/Agents/Zero_Interface/Code/Functions.java b/_alp/Agents/Zero_Interface/Code/Functions.java index 4da80cc3..f8833d5b 100644 --- a/_alp/Agents/Zero_Interface/Code/Functions.java +++ b/_alp/Agents/Zero_Interface/Code/Functions.java @@ -529,7 +529,6 @@ else if (v_previousClickedObjectType == OL_GISObjectType.BUILDING || } companyUI.p_amountOfBuildings = companyUI.c_ownedBuildings.size(); - companyUI.c_subTenants = COC.c_subTenants; //Initialize adress variable (changes with selected GC) companyUI.v_adressGC = companyUI.c_ownedGridConnections.get(0).p_address.getAddress(); diff --git a/_alp/Agents/Zero_Loader/Code/Functions.java b/_alp/Agents/Zero_Loader/Code/Functions.java index db013d09..9e205270 100644 --- a/_alp/Agents/Zero_Loader/Code/Functions.java +++ b/_alp/Agents/Zero_Loader/Code/Functions.java @@ -413,9 +413,31 @@ A_SubTenant f_createSubtenant(com.zenmo.zummon.companysurvey.Survey survey,com.z 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_BatteryPrice(gridbattery); + break; + case PEAK_SHAVING_PARENT_NODE: + J_BatteryPeakShaving batteryAlgorithm = new J_BatteryPeakShaving(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_BatteryPeakShaving(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(); @@ -1130,9 +1152,6 @@ GIS_Object f_createGISObject(String name,double latitude,double longitude,String double f_createSurveyCompanies_Zorm() {/*ALCODESTART::1726584205815*/ -//Initialize parameters -List subTenants = new ArrayList(); - //Get the survey data List surveys = f_getSurveys(); traceln("Size of survey List: %s", surveys.size()); @@ -1165,11 +1184,6 @@ GIS_Object f_createGISObject(String name,double latitude,double longitude,String boolean hasNaturalGasConnection = (gridConnection.getNaturalGas().getHasConnection() != null)? gridConnection.getNaturalGas().getHasConnection() : false; boolean hasExpansionRequest = (gridConnection.getElectricity().getGridExpansion().getHasRequestAtGridOperator() != null ) ? gridConnection.getElectricity().getGridExpansion().getHasRequestAtGridOperator() : false; - if (!gridConnection.getElectricity().getHasConnection() && !hasExpansionRequest && !hasNaturalGasConnection){ - subTenants.add(f_createSubtenant(survey, address)); - continue; - } - if(survey_owner == null){// Connection owner does not exist yet: create and initialize new one survey_owner = energyModel.add_pop_connectionOwners(); survey_owner.p_actorID = survey.getCompanyName(); @@ -1301,26 +1315,6 @@ else if (map_buildingData_Vallum != null && !map_buildingData_Vallum.isEmpty()){ //Pass the number of survey companies to interface for the dynamic legend zero_Interface.v_numberOfSurveyCompanies = v_numberOfSurveyCompanies; } - - -//Add created subtenants to main tenant(should happen after the other companies have been created) -for(A_SubTenant subtenant : subTenants){ - - //Find grid connection that feeds the subtenant (achter de meter) - GridConnection GC = findFirst(energyModel.f_getActiveGridConnections(), - GCU -> GCU.p_address != null && GCU.p_address.getAddress().equals(subtenant.p_address.getAddress())); - - if (GC != null){ - subtenant.p_mainTenantID = GC.p_ownerID; - subtenant.p_connectedGridConnection = GC; - - ConnectionOwner owner = findFirst(energyModel.pop_connectionOwners, p -> p.p_actorID.equals(GC.p_ownerID)); - owner.c_subTenants.add(subtenant); - } - else { - traceln("Subtenant '" + subtenant.p_actorID + "' at " + subtenant.p_address.getAddress()+ ", does not have a main tenant"); - } -} /*ALCODEEND*/} List f_getSurveys() @@ -2860,9 +2854,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_BatterySelfConsumption(companyGC); //add to scenario: current current_scenario_list.setCurrentBatteryCapacity_kWh(battery_capacity_kWh); @@ -3484,7 +3476,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/Zero_Loader/Code/Functions.xml b/_alp/Agents/Zero_Loader/Code/Functions.xml index fd127b48..147aff0b 100644 --- a/_alp/Agents/Zero_Loader/Code/Functions.xml +++ b/_alp/Agents/Zero_Loader/Code/Functions.xml @@ -121,6 +121,7 @@ 1726584205783 + true 449.001 219.001