From 0b97ba846bcd40a431976996a7d23586d4fb9f63 Mon Sep 17 00:00:00 2001 From: GillisHommen Date: Tue, 16 Sep 2025 15:05:25 +0200 Subject: [PATCH 1/7] Updates relating to ChargePoint charging behavior --- Zero_Interface-Loader.alpx | 7 +++++-- .../Agents/Zero_Interface/Levels/Level.level.xml | 2 -- .../Agents/tabElectricity/Levels/Level.level.xml | 16 ++++++++-------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Zero_Interface-Loader.alpx b/Zero_Interface-Loader.alpx index 306dc0aa..7ab2de9f 100644 --- a/Zero_Interface-Loader.alpx +++ b/Zero_Interface-Loader.alpx @@ -1,8 +1,8 @@ + AnyLogicVersion="8.9.6.202509050523" + AlpVersion="8.9.6"> 1658477103134 @@ -219,6 +219,7 @@ 1.0 1.0 0.1 + DEFAULT 1658477089982 1920 @@ -446,5 +447,7 @@ e6625695-25a2-43d0-9056-1e9a1a594b1e 91990287-4edf-4e38-aa6c-66d0e906807b 2216cdd0-177c-5678-9e88-dd8b95312234 + 1737c8c6-b526-4dd8-589e-ee4e205b06f4 + 6a43bef6-8b70-4253-a828-82c3ab399655 diff --git a/_alp/Agents/Zero_Interface/Levels/Level.level.xml b/_alp/Agents/Zero_Interface/Levels/Level.level.xml index 0515a42b..706efb72 100644 --- a/_alp/Agents/Zero_Interface/Levels/Level.level.xml +++ b/_alp/Agents/Zero_Interface/Levels/Level.level.xml @@ -2156,12 +2156,10 @@ else{ -4144960 -1 true - ANYLOGIC false https://a.tile.openstreetmap.org/[zoom]/[x]/[y].png WEB_SERVICE CREATE_STRAIGHT_LINE - ANYLOGIC CAR FASTEST DIJKSTRABI diff --git a/_alp/Agents/tabElectricity/Levels/Level.level.xml b/_alp/Agents/tabElectricity/Levels/Level.level.xml index b91ce58b..586ee399 100644 --- a/_alp/Agents/tabElectricity/Levels/Level.level.xml +++ b/_alp/Agents/tabElectricity/Levels/Level.level.xml @@ -2151,11 +2151,11 @@ f_setResidentialBatteries( sl_householdBatteriesResidentialArea_pct.getValue(), for( GCHouse house : zero_Interface.energyModel.Houses ){ //house.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.SIMPLE); house.f_addChargingManagementToGC(OL_ChargingAttitude.SIMPLE, false); - house.f_activateV2GChargingMode(false); + house.f_activateV2GChargingMode(false, false); } for( GCPublicCharger publicCharger : zero_Interface.energyModel.PublicChargers ){ //publicCharger.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.SIMPLE); - publicCharger.f_activateV2GChargingMode(false); + publicCharger.f_activateV2GChargingMode(false, false); } break; case 1: @@ -2165,11 +2165,11 @@ f_setResidentialBatteries( sl_householdBatteriesResidentialArea_pct.getValue(), for( GCHouse house : zero_Interface.energyModel.Houses ){ //house.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.BALANCE); house.f_addChargingManagementToGC(OL_ChargingAttitude.BALANCE, false); - house.f_activateV2GChargingMode(false); + house.f_activateV2GChargingMode(false, true); } for( GCPublicCharger publicCharger : zero_Interface.energyModel.PublicChargers ){ //publicCharger.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.PRICE); - publicCharger.f_activateV2GChargingMode(false); + publicCharger.f_activateV2GChargingMode(false, true); } break; case 2: @@ -2179,11 +2179,11 @@ f_setResidentialBatteries( sl_householdBatteriesResidentialArea_pct.getValue(), for( GCHouse house : zero_Interface.energyModel.Houses ){ //house.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.V2G); house.f_addChargingManagementToGC(OL_ChargingAttitude.BALANCE, false); - house.f_activateV2GChargingMode(true); + house.f_activateV2GChargingMode(true, true); } for( GCPublicCharger publicCharger : zero_Interface.energyModel.PublicChargers ){ //publicCharger.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.V2G); - publicCharger.f_activateV2GChargingMode(true); + publicCharger.f_activateV2GChargingMode(true, true); } break; } @@ -2519,7 +2519,7 @@ f_setVehiclesPrivateParking(uI_Tabs.f_getSliderGridConnections_houses(), sl_priv 0 0.0 -16777216 - + 12 @@ -2647,7 +2647,7 @@ f_setVehiclesPrivateParking(uI_Tabs.f_getSliderGridConnections_houses(), sl_priv 0 0.0 -16777216 - + 12 From bd2a223042e9832b26967d250103e3bd83416e8f Mon Sep 17 00:00:00 2001 From: Ate Hempenius Date: Thu, 18 Sep 2025 10:38:47 +0200 Subject: [PATCH 2/7] adding new mobility tab for residential --- _alp/Agents/UI_EnergyHub/Code/Functions.java | 4 +- .../Agents/Zero_Interface/Code/Functions.java | 5 +- .../Agents/tabElectricity/Code/Functions.java | 199 ----- _alp/Agents/tabElectricity/Code/Functions.xml | 84 -- .../tabElectricity/Levels/Level.level.xml | 664 +-------------- .../tabMobility/Code/AdditionalClassCode.java | 7 +- _alp/Agents/tabMobility/Code/Functions.java | 203 +++++ _alp/Agents/tabMobility/Code/Functions.xml | 106 ++- .../Agents/tabMobility/Levels/Level.level.xml | 778 +++++++++++++++++- 9 files changed, 1101 insertions(+), 949 deletions(-) diff --git a/_alp/Agents/UI_EnergyHub/Code/Functions.java b/_alp/Agents/UI_EnergyHub/Code/Functions.java index bdfffabc..43139d1e 100644 --- a/_alp/Agents/UI_EnergyHub/Code/Functions.java +++ b/_alp/Agents/UI_EnergyHub/Code/Functions.java @@ -63,12 +63,12 @@ if (zero_Interface.p_selectedProjectType == OL_ProjectType.RESIDENTIAL) { ((tabElectricity)uI_Tabs.pop_tabElectricity.get(0)).getGroupElectricityDemandSliders_ResidentialArea().setVisible(true); ((tabHeating)uI_Tabs.pop_tabHeating.get(0)).getGroupHeatDemandSlidersResidentialArea().setVisible(true); - ((tabMobility)uI_Tabs.pop_tabMobility.get(0)).getGroupMobilityDemandSliders().setVisible(true); + ((tabMobility)uI_Tabs.pop_tabMobility.get(0)).getGr_mobilitySliders_residential().setVisible(true); } else { ((tabElectricity)uI_Tabs.pop_tabElectricity.get(0)).getGroupElectricityDemandSliders_Businesspark().setVisible(true); ((tabHeating)uI_Tabs.pop_tabHeating.get(0)).getGroupHeatDemandSlidersCompanies().setVisible(true); - ((tabMobility)uI_Tabs.pop_tabMobility.get(0)).getGroupMobilityDemandSliders().setVisible(true); + ((tabMobility)uI_Tabs.pop_tabMobility.get(0)).getGr_mobilitySliders_default().setVisible(true); } //Initialize slider gcs and set sliders diff --git a/_alp/Agents/Zero_Interface/Code/Functions.java b/_alp/Agents/Zero_Interface/Code/Functions.java index f84f4b54..5e297306 100644 --- a/_alp/Agents/Zero_Interface/Code/Functions.java +++ b/_alp/Agents/Zero_Interface/Code/Functions.java @@ -3152,19 +3152,20 @@ ArrayList f_updateJ_EAlistAfterDeserialisation(ArrayList E uI_Tabs.add_pop_tabElectricity(); uI_Tabs.add_pop_tabHeating(); +uI_Tabs.add_pop_tabMobility(); // Group visibilities // When using an extension of a generic tab don't forget to typecast it! if (p_selectedProjectType == OL_ProjectType.RESIDENTIAL) { ((tabElectricity)uI_Tabs.pop_tabElectricity.get(0)).getGroupElectricityDemandSliders_ResidentialArea().setVisible(true); ((tabHeating)uI_Tabs.pop_tabHeating.get(0)).getGroupHeatDemandSlidersResidentialArea().setVisible(true); + ((tabMobility)uI_Tabs.pop_tabMobility.get(0)).getGr_mobilitySliders_residential().setVisible(true); } else { - uI_Tabs.add_pop_tabMobility(); uI_Tabs.add_pop_tabEHub(); ((tabElectricity)uI_Tabs.pop_tabElectricity.get(0)).getGroupElectricityDemandSliders_Businesspark().setVisible(true); ((tabHeating)uI_Tabs.pop_tabHeating.get(0)).getGroupHeatDemandSlidersCompanies().setVisible(true); - ((tabMobility)uI_Tabs.pop_tabMobility.get(0)).getGroupMobilityDemandSliders().setVisible(true); + ((tabMobility)uI_Tabs.pop_tabMobility.get(0)).getGr_mobilitySliders_default().setVisible(true); ((tabEHub)uI_Tabs.pop_tabEHub.get(0)).getGroupHubSliders().setVisible(true); } /*ALCODEEND*/} diff --git a/_alp/Agents/tabElectricity/Code/Functions.java b/_alp/Agents/tabElectricity/Code/Functions.java index 07bcdd06..767fd644 100644 --- a/_alp/Agents/tabElectricity/Code/Functions.java +++ b/_alp/Agents/tabElectricity/Code/Functions.java @@ -447,173 +447,11 @@ else if ( gc instanceof GCUtility ) { zero_Interface.f_resetSettings(); /*ALCODEEND*/} -double f_setPublicChargingStations(double publicChargers_pct) -{/*ALCODESTART::1750063382330*/ -int totalNbChargers = zero_Interface.c_orderedPublicChargers.size(); -int currentNbChargers = count(zero_Interface.c_orderedPublicChargers, x -> x.v_isActive); -int nbChargersGoal = roundToInt(publicChargers_pct / 100 * totalNbChargers) ; - -while ( currentNbChargers > nbChargersGoal ) { - GCPublicCharger gc = findFirst(zero_Interface.c_orderedPublicChargers, x -> x.v_isActive); - if (gc != null) { - gc.f_setActive(false); - zero_Interface.c_orderedPublicChargers.remove(gc); - zero_Interface.c_orderedPublicChargers.add(0, gc); - currentNbChargers--; - - for (J_EADieselVehicle car : zero_Interface.c_mappingOfVehiclesPerCharger.get(gc)) { - car.reRegisterEnergyAsset(); - } - } - else { - throw new RuntimeException("Charger slider error: there are not sufficient chargers to remove"); - } -} -while ( currentNbChargers < nbChargersGoal){ - GCPublicCharger gc = findFirst(zero_Interface.c_orderedPublicChargers, x -> !x.v_isActive); - if (gc != null) { - gc.f_setActive(true); - zero_Interface.c_orderedPublicChargers.remove(gc); - zero_Interface.c_orderedPublicChargers.add(0, gc); - currentNbChargers++; - - for (J_EADieselVehicle car : zero_Interface.c_mappingOfVehiclesPerCharger.get(gc)) { - J_ActivityTrackerTrips tripTracker = car.getTripTracker(); //Needed, as triptracker is removed when removeEnergyAsset is called. - car.removeEnergyAsset(); - car.setTripTracker(tripTracker);//Re-set the triptracker again, for storing. - } - } - else { - throw new RuntimeException("Charger slider error: there are no more chargers to add"); - } -} - -//Update variable to change to custom scenario -if(!zero_Interface.b_runningMainInterfaceScenarios){ - zero_Interface.b_changeToCustomScenario = true; -} - -zero_Interface.f_resetSettings(); - -/*ALCODEEND*/} - -double f_setV1GChargerCapabilities(double goal_pct) -{/*ALCODESTART::1750259219309*/ -int totalNbChargers = zero_Interface.c_orderedV1GChargers.size(); -int currentNbChargers = count(zero_Interface.c_orderedV1GChargers, x -> x.V1GCapable); -int nbChargersGoal = roundToInt(goal_pct / 100.0 * totalNbChargers); - -while (currentNbChargers < nbChargersGoal) { - J_EAChargePoint j_ea = findFirst(zero_Interface.c_orderedV1GChargers, x -> !x.V1GCapable); - j_ea.V1GCapable = true; - currentNbChargers++; - zero_Interface.c_orderedV1GChargers.remove(j_ea); - zero_Interface.c_orderedV1GChargers.add(0, j_ea); - -} -while (currentNbChargers > nbChargersGoal) { - J_EAChargePoint j_ea = findFirst(zero_Interface.c_orderedV1GChargers, x -> x.V1GCapable); - j_ea.V1GCapable = false; - currentNbChargers--; - zero_Interface.c_orderedV1GChargers.remove(j_ea); - zero_Interface.c_orderedV1GChargers.add(0, j_ea); -} - -// Update variable to change to custom scenario -if(!zero_Interface.b_runningMainInterfaceScenarios){ - zero_Interface.b_changeToCustomScenario = true; -} - -zero_Interface.f_resetSettings(); -/*ALCODEEND*/} - -double f_setV2GChargerCapabilities(double goal_pct) -{/*ALCODESTART::1750259468109*/ -int totalNbChargers = zero_Interface.c_orderedV2GChargers.size(); -int currentNbChargers = count(zero_Interface.c_orderedV2GChargers, x -> x.V2GCapable); -int nbChargersGoal = roundToInt(goal_pct / 100.0 * totalNbChargers); - -while (currentNbChargers < nbChargersGoal) { - J_EAChargePoint j_ea = findFirst(zero_Interface.c_orderedV2GChargers, x -> !x.V2GCapable); - j_ea.V2GCapable = true; - currentNbChargers++; - zero_Interface.c_orderedV2GChargers.remove(j_ea); - zero_Interface.c_orderedV2GChargers.add(0, j_ea); - -} -while (currentNbChargers > nbChargersGoal) { - J_EAChargePoint j_ea = findFirst(zero_Interface.c_orderedV2GChargers, x -> x.V2GCapable); - j_ea.V2GCapable = false; - currentNbChargers--; - zero_Interface.c_orderedV2GChargers.remove(j_ea); - zero_Interface.c_orderedV2GChargers.add(0, j_ea); -} - -// Update variable to change to custom scenario -if(!zero_Interface.b_runningMainInterfaceScenarios){ - zero_Interface.b_changeToCustomScenario = true; -} - -zero_Interface.f_resetSettings(); -/*ALCODEEND*/} - double f_setDemandIncrease(List gcList,double demandReduction_pct) {/*ALCODESTART::1750326729005*/ f_setDemandReduction(gcList, -demandReduction_pct); /*ALCODEEND*/} -double f_setVehiclesPrivateParking(List gcListHouses,double privateParkingEV_pct) -{/*ALCODESTART::1750328750011*/ -List gcListOrderedVehiclesPrivateParking = findAll( zero_Interface.c_orderedVehiclesPrivateParking, h -> gcListHouses.contains(h.getParentAgent())); - -int nbOfPrivateParkedEV = (int)sum(findAll(gcListHouses, gc -> gc.p_eigenOprit), x -> x.c_electricVehicles.size()); -int desiredNbOfPrivateParkedEV = roundToInt(privateParkingEV_pct / 100 * gcListOrderedVehiclesPrivateParking.size()); - - -// we scale the consumption instead of getting the diesel/EV parameter from avgc data to represent the 'size' of the car -double ratioEVToDieselConsumption = zero_Interface.energyModel.avgc_data.p_avgEVEnergyConsumptionCar_kWhpkm / zero_Interface.energyModel.avgc_data.p_avgDieselConsumptionCar_kWhpkm; - -while ( nbOfPrivateParkedEV > desiredNbOfPrivateParkedEV){ - J_EAVehicle j_ea = findFirst( gcListOrderedVehiclesPrivateParking, h -> h instanceof J_EAEV); - if (j_ea.vehicleScaling != 1) { - throw new RuntimeException("f_setVehiclesPrivateParking does not work with vehicles that have a vehicleScaling other than 1"); - } - J_ActivityTrackerTrips triptracker = j_ea.tripTracker; - double energyConsumption_kWhpkm = j_ea.getEnergyConsumption_kWhpkm() / ratioEVToDieselConsumption; - j_ea.removeEnergyAsset(); - gcListOrderedVehiclesPrivateParking.remove(j_ea); - zero_Interface.c_orderedVehiclesPrivateParking.remove(j_ea); - J_EADieselVehicle dieselCar = new J_EADieselVehicle(j_ea.getParentAgent(), energyConsumption_kWhpkm, zero_Interface.energyModel.p_timeStep_h, 1, OL_EnergyAssetType.DIESEL_VEHICLE, triptracker); - gcListOrderedVehiclesPrivateParking.add(dieselCar); - zero_Interface.c_orderedVehiclesPrivateParking.add(dieselCar); - nbOfPrivateParkedEV --; -} -while ( nbOfPrivateParkedEV < desiredNbOfPrivateParkedEV){ - J_EAVehicle j_ea = findFirst( gcListOrderedVehiclesPrivateParking, h -> h instanceof J_EADieselVehicle); - if (j_ea.vehicleScaling != 1) { - throw new RuntimeException("f_setVehiclesPrivateParking does not work with vehicles that have a vehicleScaling other than 1"); - } - J_ActivityTrackerTrips triptracker = j_ea.tripTracker; - double energyConsumption_kWhpkm = j_ea.getEnergyConsumption_kWhpkm() * ratioEVToDieselConsumption; - j_ea.removeEnergyAsset(); - gcListOrderedVehiclesPrivateParking.remove(j_ea); - zero_Interface.c_orderedVehiclesPrivateParking.remove(j_ea); - double capacityElectricity_kW = randomTrue(0.6) ? randomTrue(0.4) ? 3.2 : 5.6 : 11.0; - double storageCapacity_kWh = uniform_discr(65,90); - J_EAEV ev = new J_EAEV(j_ea.getParentAgent(), capacityElectricity_kW, storageCapacity_kWh, 1, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, 1, OL_EnergyAssetType.ELECTRIC_VEHICLE, triptracker); - gcListOrderedVehiclesPrivateParking.add(ev); - zero_Interface.c_orderedVehiclesPrivateParking.add(ev); - nbOfPrivateParkedEV++; -} - -//Update variable to change to custom scenario -if(!zero_Interface.b_runningMainInterfaceScenarios){ - zero_Interface.b_changeToCustomScenario = true; -} - -zero_Interface.f_resetSettings(); -/*ALCODEEND*/} - double f_updateSliders_Electricity() {/*ALCODESTART::1754926103683*/ if(gr_electricitySliders_default.isVisible()){ @@ -726,22 +564,16 @@ else if(productionGC.v_liveAssetsMetaData.activeAssetFlows.contains(OL_AssetFlow double f_updateElectricitySliders_residential() {/*ALCODESTART::1754926103687*/ List houseGridConnections = new ArrayList<>(); -List chargerGridConnections = new ArrayList<>(); List gridBatteryGridConnections = new ArrayList<>(); for (GridConnection GC : findAll(uI_Tabs.f_getSliderGridConnections_all(), gc -> gc.v_isActive)) { if(GC instanceof GCHouse){ houseGridConnections.add((GCHouse)GC); } - else if(GC instanceof GCPublicCharger){ - chargerGridConnections.add((GCPublicCharger)GC); - } else if(GC instanceof GCGridBattery){ gridBatteryGridConnections.add((GCGridBattery)GC); } } -chargerGridConnections.addAll(uI_Tabs.f_getPausedSliderGridConnections_chargers()); - int nbHouses = houseGridConnections.size(); int nbHousesWithPV = count(houseGridConnections, x -> x.v_liveAssetsMetaData.activeAssetFlows.contains(OL_AssetFlowCategories.pvProductionElectric_kW)); @@ -782,37 +614,6 @@ else if(GC instanceof GCGridBattery){ sl_electricityDemandIncreaseResidentialArea_pct.setValue(roundToInt(electricityDemandIncrease_pct), false); -//Private EV -if (zero_Interface.c_orderedVehiclesPrivateParking.size() > 0) { - int nbPrivateEVs = count(zero_Interface.c_orderedVehiclesPrivateParking, x -> x instanceof J_EAEV); - double privateEVs_pct = 100.0 * nbPrivateEVs / zero_Interface.c_orderedVehiclesPrivateParking.size(); - sl_privateEVsResidentialArea_pct.setValue(roundToInt(privateEVs_pct), false); -} -else{ - sl_privateEVsResidentialArea_pct.setEnabled(false); -} - - -//Chargers -int nbPublicChargers = chargerGridConnections.size(); -if(nbPublicChargers > 0 ){ - int nbActivePublicChargers = count(chargerGridConnections, x -> x.v_isActive); - double activePublicChargers_pct = 100.0 * nbActivePublicChargers / nbPublicChargers; - sl_publicChargersResidentialArea_pct.setValue(activePublicChargers_pct, false); - - int nbV1GChargers = count(zero_Interface.c_orderedV1GChargers, x -> chargerGridConnections.contains(x) && x.V1GCapable); - int nbV2GChargers =count(zero_Interface.c_orderedV2GChargers, x -> chargerGridConnections.contains(x) && x.V2GCapable); - double V1G_pct = 100.0 * nbV1GChargers / nbPublicChargers; - double V2G_pct = 100.0 * nbV2GChargers / nbPublicChargers; - sl_chargersThatSupportV1G_pct.setValue(V1G_pct, false); - sl_chargersThatSupportV2G_pct.setValue(V2G_pct, false); -} -else{ - sl_publicChargersResidentialArea_pct.setEnabled(false); - sl_chargersThatSupportV1G_pct.setEnabled(false); - sl_chargersThatSupportV2G_pct.setEnabled(false); -} - //Gridbatteries double averageNeighbourhoodBatterySize_kWh = 0; for (GCGridBattery gc : gridBatteryGridConnections) { diff --git a/_alp/Agents/tabElectricity/Code/Functions.xml b/_alp/Agents/tabElectricity/Code/Functions.xml index 70a6a229..3755768c 100644 --- a/_alp/Agents/tabElectricity/Code/Functions.xml +++ b/_alp/Agents/tabElectricity/Code/Functions.xml @@ -284,66 +284,6 @@ - - VOID - double - 1750063382330 - - 80 - 1130 - - false - true - true - - - - - - - - VOID - double - 1750259219309 - - 80 - 1090 - - false - true - true - - - - - - - - VOID - double - 1750259468109 - - 80 - 1110 - - false - true - true - - - - - - VOID double @@ -368,30 +308,6 @@ - - VOID - double - 1750328750011 - - 80 - 1170 - - false - true - true - - - ]]> - - - - - - - VOID double diff --git a/_alp/Agents/tabElectricity/Levels/Level.level.xml b/_alp/Agents/tabElectricity/Levels/Level.level.xml index 586ee399..ecf0b145 100644 --- a/_alp/Agents/tabElectricity/Levels/Level.level.xml +++ b/_alp/Agents/tabElectricity/Levels/Level.level.xml @@ -1744,7 +1744,7 @@ zero_Interface.f_resetSettings(); 1750063382221 235 - 145 + 165 LEFT - - false - 1750063382231 - - 265 - 207 - - true - true - false - SHAPE_DRAW_2D3D - - false - true - f_setPublicChargingStations(sl_publicChargersResidentialArea_pct.getIntValue()); - - - 0 - HORIZONTAL - 0 - 100 - 1 - false - - - - 1750063382233 - - 20 - 212 - - true - true - false - SHAPE_DRAW_2D - sl_publicChargersResidentialArea_pct.isVisible() - false - 0 - 0.0 - -16777216 - - - - 12 - - - LEFT - - - 1750063382235 - - 245 - 212 - - true - true - false - SHAPE_DRAW_2D - sl_publicChargersResidentialArea_pct.isVisible() - false - 0 - 0.0 - -16777216 - - sl_publicChargersResidentialArea_pct.getIntValue() + " %" - - - 12 - - - RIGHT - 1750063382237 @@ -2048,7 +1967,7 @@ f_setResidentialBatteries( sl_householdBatteriesResidentialArea_pct.getValue(), 1750063382243 266 - 310 + 220 CENTER - - false - 1750063382249 - - 31 - 239 - - true - true - false - SHAPE_DRAW_2D3D - - false - -16777216 - true - switch (chargingMethodResidentialArea.getValue()){ - case 0: - gr_settingsV1G.setVisible(false); - gr_settingsV2G.setVisible(false); - - for( GCHouse house : zero_Interface.energyModel.Houses ){ - //house.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.SIMPLE); - house.f_addChargingManagementToGC(OL_ChargingAttitude.SIMPLE, false); - house.f_activateV2GChargingMode(false, false); - } - for( GCPublicCharger publicCharger : zero_Interface.energyModel.PublicChargers ){ - //publicCharger.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.SIMPLE); - publicCharger.f_activateV2GChargingMode(false, false); - } - break; - case 1: - gr_settingsV1G.setVisible(true); - gr_settingsV2G.setVisible(false); - - for( GCHouse house : zero_Interface.energyModel.Houses ){ - //house.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.BALANCE); - house.f_addChargingManagementToGC(OL_ChargingAttitude.BALANCE, false); - house.f_activateV2GChargingMode(false, true); - } - for( GCPublicCharger publicCharger : zero_Interface.energyModel.PublicChargers ){ - //publicCharger.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.PRICE); - publicCharger.f_activateV2GChargingMode(false, true); - } - break; - case 2: - gr_settingsV1G.setVisible(false); - gr_settingsV2G.setVisible(true); - - for( GCHouse house : zero_Interface.energyModel.Houses ){ - //house.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.V2G); - house.f_addChargingManagementToGC(OL_ChargingAttitude.BALANCE, false); - house.f_activateV2GChargingMode(true, true); - } - for( GCPublicCharger publicCharger : zero_Interface.energyModel.PublicChargers ){ - //publicCharger.set_p_chargingAttitudeVehicles(OL_ChargingAttitude.V2G); - publicCharger.f_activateV2GChargingMode(true, true); - } - break; -} - -// Update variable to change to custom scenario -if(!zero_Interface.b_runningMainInterfaceScenarios){ - zero_Interface.b_changeToCustomScenario = true; -} - -zero_Interface.f_resetSettings(); - - - - HORIZONTAL - - - - false - - 1750063382251 20 - 145 + 165 CENTER - - 1754985941671 - - 40 - 1050 - - false - true - false - SHAPE_DRAW_2D3D - false - 0 - 10 - 3 - -16711936 - null - SOLID - 310 - 140 - 0.0 - -1 - null - - - 1754985941673 - - 190 - 1055 - - false - true - false - SHAPE_DRAW_2D - false - 0 - 0.0 - -16777216 - - - - 18 - - - CENTER - diff --git a/_alp/Agents/tabMobility/Code/AdditionalClassCode.java b/_alp/Agents/tabMobility/Code/AdditionalClassCode.java index 9dff3ded..6f973569 100644 --- a/_alp/Agents/tabMobility/Code/AdditionalClassCode.java +++ b/_alp/Agents/tabMobility/Code/AdditionalClassCode.java @@ -1,8 +1,13 @@ // Default Sliders -public ShapeGroup getGroupMobilityDemandSliders() { +public ShapeGroup getGr_mobilitySliders_default() { return this.gr_mobilitySliders_default; } +//Residential sliders +public ShapeGroup getGr_mobilitySliders_residential() { + return this.gr_mobilitySliders_residential; +} + public ShapeSlider getSliderMobilityDemandReduction_pct () { return this.sl_mobilityDemandReduction_pct; } diff --git a/_alp/Agents/tabMobility/Code/Functions.java b/_alp/Agents/tabMobility/Code/Functions.java index 8d583b5e..4358e980 100644 --- a/_alp/Agents/tabMobility/Code/Functions.java +++ b/_alp/Agents/tabMobility/Code/Functions.java @@ -1422,6 +1422,9 @@ else if ( sliderHydrogenCars == null && pct_hydrogenCarSlider != 0 ) { if(gr_mobilitySliders_default.isVisible()){ f_updateMobilitySliders_default(); } +else if(gr_mobilitySliders_residential.isVisible()){ + f_updateMobilitySliders_residential(); +} else{ f_updateMobilitySliders_custom(); } @@ -1572,3 +1575,203 @@ else if (vehicle instanceof J_EAHydrogenVehicle){ zero_Interface.f_resetSettings(); /*ALCODEEND*/} +double f_updateMobilitySliders_residential() +{/*ALCODESTART::1758183013077*/ +List chargerGridConnections = uI_Tabs.f_getSliderGridConnections_chargers(); +chargerGridConnections.addAll(uI_Tabs.f_getPausedSliderGridConnections_chargers()); + + +//Private EV +if (zero_Interface.c_orderedVehiclesPrivateParking.size() > 0) { + int nbPrivateEVs = count(zero_Interface.c_orderedVehiclesPrivateParking, x -> x instanceof J_EAEV); + double privateEVs_pct = 100.0 * nbPrivateEVs / zero_Interface.c_orderedVehiclesPrivateParking.size(); + sl_privateEVsResidentialArea_pct.setValue(roundToInt(privateEVs_pct), false); +} +else{ + sl_privateEVsResidentialArea_pct.setEnabled(false); +} + + +//Chargers +int nbPublicChargers = chargerGridConnections.size(); +if(nbPublicChargers > 0 ){ + int nbActivePublicChargers = count(chargerGridConnections, x -> x.v_isActive); + double activePublicChargers_pct = 100.0 * nbActivePublicChargers / nbPublicChargers; + sl_publicChargersResidentialArea_pct.setValue(activePublicChargers_pct, false); + + int nbV1GChargers = count(zero_Interface.c_orderedV1GChargers, x -> chargerGridConnections.contains(x) && x.V1GCapable); + int nbV2GChargers =count(zero_Interface.c_orderedV2GChargers, x -> chargerGridConnections.contains(x) && x.V2GCapable); + double V1G_pct = 100.0 * nbV1GChargers / nbPublicChargers; + double V2G_pct = 100.0 * nbV2GChargers / nbPublicChargers; + sl_chargersThatSupportV1G_pct.setValue(V1G_pct, false); + sl_chargersThatSupportV2G_pct.setValue(V2G_pct, false); +} +else{ + sl_publicChargersResidentialArea_pct.setEnabled(false); + sl_chargersThatSupportV1G_pct.setEnabled(false); + sl_chargersThatSupportV2G_pct.setEnabled(false); +} +/*ALCODEEND*/} + +double f_setPublicChargingStations(double publicChargers_pct) +{/*ALCODESTART::1758183975214*/ +int totalNbChargers = zero_Interface.c_orderedPublicChargers.size(); +int currentNbChargers = count(zero_Interface.c_orderedPublicChargers, x -> x.v_isActive); +int nbChargersGoal = roundToInt(publicChargers_pct / 100 * totalNbChargers) ; + +while ( currentNbChargers > nbChargersGoal ) { + GCPublicCharger gc = findFirst(zero_Interface.c_orderedPublicChargers, x -> x.v_isActive); + if (gc != null) { + gc.f_setActive(false); + zero_Interface.c_orderedPublicChargers.remove(gc); + zero_Interface.c_orderedPublicChargers.add(0, gc); + currentNbChargers--; + + for (J_EADieselVehicle car : zero_Interface.c_mappingOfVehiclesPerCharger.get(gc)) { + car.reRegisterEnergyAsset(); + } + } + else { + throw new RuntimeException("Charger slider error: there are not sufficient chargers to remove"); + } +} +while ( currentNbChargers < nbChargersGoal){ + GCPublicCharger gc = findFirst(zero_Interface.c_orderedPublicChargers, x -> !x.v_isActive); + if (gc != null) { + gc.f_setActive(true); + zero_Interface.c_orderedPublicChargers.remove(gc); + zero_Interface.c_orderedPublicChargers.add(0, gc); + currentNbChargers++; + + for (J_EADieselVehicle car : zero_Interface.c_mappingOfVehiclesPerCharger.get(gc)) { + J_ActivityTrackerTrips tripTracker = car.getTripTracker(); //Needed, as triptracker is removed when removeEnergyAsset is called. + car.removeEnergyAsset(); + car.setTripTracker(tripTracker);//Re-set the triptracker again, for storing. + } + } + else { + throw new RuntimeException("Charger slider error: there are no more chargers to add"); + } +} + +//Update variable to change to custom scenario +if(!zero_Interface.b_runningMainInterfaceScenarios){ + zero_Interface.b_changeToCustomScenario = true; +} + +zero_Interface.f_resetSettings(); + +/*ALCODEEND*/} + +double f_setV1GChargerCapabilities(double goal_pct) +{/*ALCODESTART::1758183975221*/ +int totalNbChargers = zero_Interface.c_orderedV1GChargers.size(); +int currentNbChargers = count(zero_Interface.c_orderedV1GChargers, x -> x.V1GCapable); +int nbChargersGoal = roundToInt(goal_pct / 100.0 * totalNbChargers); + +while (currentNbChargers < nbChargersGoal) { + J_EAChargePoint j_ea = findFirst(zero_Interface.c_orderedV1GChargers, x -> !x.V1GCapable); + j_ea.V1GCapable = true; + currentNbChargers++; + zero_Interface.c_orderedV1GChargers.remove(j_ea); + zero_Interface.c_orderedV1GChargers.add(0, j_ea); + +} +while (currentNbChargers > nbChargersGoal) { + J_EAChargePoint j_ea = findFirst(zero_Interface.c_orderedV1GChargers, x -> x.V1GCapable); + j_ea.V1GCapable = false; + currentNbChargers--; + zero_Interface.c_orderedV1GChargers.remove(j_ea); + zero_Interface.c_orderedV1GChargers.add(0, j_ea); +} + +// Update variable to change to custom scenario +if(!zero_Interface.b_runningMainInterfaceScenarios){ + zero_Interface.b_changeToCustomScenario = true; +} + +zero_Interface.f_resetSettings(); +/*ALCODEEND*/} + +double f_setV2GChargerCapabilities(double goal_pct) +{/*ALCODESTART::1758183975227*/ +int totalNbChargers = zero_Interface.c_orderedV2GChargers.size(); +int currentNbChargers = count(zero_Interface.c_orderedV2GChargers, x -> x.V2GCapable); +int nbChargersGoal = roundToInt(goal_pct / 100.0 * totalNbChargers); + +while (currentNbChargers < nbChargersGoal) { + J_EAChargePoint j_ea = findFirst(zero_Interface.c_orderedV2GChargers, x -> !x.V2GCapable); + j_ea.V2GCapable = true; + currentNbChargers++; + zero_Interface.c_orderedV2GChargers.remove(j_ea); + zero_Interface.c_orderedV2GChargers.add(0, j_ea); + +} +while (currentNbChargers > nbChargersGoal) { + J_EAChargePoint j_ea = findFirst(zero_Interface.c_orderedV2GChargers, x -> x.V2GCapable); + j_ea.V2GCapable = false; + currentNbChargers--; + zero_Interface.c_orderedV2GChargers.remove(j_ea); + zero_Interface.c_orderedV2GChargers.add(0, j_ea); +} + +// Update variable to change to custom scenario +if(!zero_Interface.b_runningMainInterfaceScenarios){ + zero_Interface.b_changeToCustomScenario = true; +} + +zero_Interface.f_resetSettings(); +/*ALCODEEND*/} + +double f_setVehiclesPrivateParking(List gcListHouses,double privateParkingEV_pct) +{/*ALCODESTART::1758183975234*/ +List gcListOrderedVehiclesPrivateParking = findAll( zero_Interface.c_orderedVehiclesPrivateParking, h -> gcListHouses.contains(h.getParentAgent())); + +int nbOfPrivateParkedEV = (int)sum(findAll(gcListHouses, gc -> gc.p_eigenOprit), x -> x.c_electricVehicles.size()); +int desiredNbOfPrivateParkedEV = roundToInt(privateParkingEV_pct / 100 * gcListOrderedVehiclesPrivateParking.size()); + + +// we scale the consumption instead of getting the diesel/EV parameter from avgc data to represent the 'size' of the car +double ratioEVToDieselConsumption = zero_Interface.energyModel.avgc_data.p_avgEVEnergyConsumptionCar_kWhpkm / zero_Interface.energyModel.avgc_data.p_avgDieselConsumptionCar_kWhpkm; + +while ( nbOfPrivateParkedEV > desiredNbOfPrivateParkedEV){ + J_EAVehicle j_ea = findFirst( gcListOrderedVehiclesPrivateParking, h -> h instanceof J_EAEV); + if (j_ea.vehicleScaling != 1) { + throw new RuntimeException("f_setVehiclesPrivateParking does not work with vehicles that have a vehicleScaling other than 1"); + } + J_ActivityTrackerTrips triptracker = j_ea.tripTracker; + double energyConsumption_kWhpkm = j_ea.getEnergyConsumption_kWhpkm() / ratioEVToDieselConsumption; + j_ea.removeEnergyAsset(); + gcListOrderedVehiclesPrivateParking.remove(j_ea); + zero_Interface.c_orderedVehiclesPrivateParking.remove(j_ea); + J_EADieselVehicle dieselCar = new J_EADieselVehicle(j_ea.getParentAgent(), energyConsumption_kWhpkm, zero_Interface.energyModel.p_timeStep_h, 1, OL_EnergyAssetType.DIESEL_VEHICLE, triptracker); + gcListOrderedVehiclesPrivateParking.add(dieselCar); + zero_Interface.c_orderedVehiclesPrivateParking.add(dieselCar); + nbOfPrivateParkedEV --; +} +while ( nbOfPrivateParkedEV < desiredNbOfPrivateParkedEV){ + J_EAVehicle j_ea = findFirst( gcListOrderedVehiclesPrivateParking, h -> h instanceof J_EADieselVehicle); + if (j_ea.vehicleScaling != 1) { + throw new RuntimeException("f_setVehiclesPrivateParking does not work with vehicles that have a vehicleScaling other than 1"); + } + J_ActivityTrackerTrips triptracker = j_ea.tripTracker; + double energyConsumption_kWhpkm = j_ea.getEnergyConsumption_kWhpkm() * ratioEVToDieselConsumption; + j_ea.removeEnergyAsset(); + gcListOrderedVehiclesPrivateParking.remove(j_ea); + zero_Interface.c_orderedVehiclesPrivateParking.remove(j_ea); + double capacityElectricity_kW = randomTrue(0.6) ? randomTrue(0.4) ? 3.2 : 5.6 : 11.0; + double storageCapacity_kWh = uniform_discr(65,90); + J_EAEV ev = new J_EAEV(j_ea.getParentAgent(), capacityElectricity_kW, storageCapacity_kWh, 1, zero_Interface.energyModel.p_timeStep_h, energyConsumption_kWhpkm, 1, OL_EnergyAssetType.ELECTRIC_VEHICLE, triptracker); + gcListOrderedVehiclesPrivateParking.add(ev); + zero_Interface.c_orderedVehiclesPrivateParking.add(ev); + nbOfPrivateParkedEV++; +} + +//Update variable to change to custom scenario +if(!zero_Interface.b_runningMainInterfaceScenarios){ + zero_Interface.b_changeToCustomScenario = true; +} + +zero_Interface.f_resetSettings(); +/*ALCODEEND*/} + diff --git a/_alp/Agents/tabMobility/Code/Functions.xml b/_alp/Agents/tabMobility/Code/Functions.xml index fb3e26bd..db79ac06 100644 --- a/_alp/Agents/tabMobility/Code/Functions.xml +++ b/_alp/Agents/tabMobility/Code/Functions.xml @@ -692,7 +692,7 @@ 1754928402700 -330 - 80 + 100