Files
EOS/tests/testdata/optimize_result_2_full.json

818 lines
14 KiB
JSON
Raw Normal View History

{
"ac_charge": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"dc_charge": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
],
"discharge_allowed": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0,
1,
0,
0,
0,
0,
1,
0,
1,
1,
1,
1,
1,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
"eautocharge_hours_float": [
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.875,
0.75,
0.5,
1.0,
0.625,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.625,
0.875,
0.625,
0.875,
0.875,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.0,
1.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.5,
0.625,
1.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.75,
0.5,
0.625,
0.375,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.5,
0.625,
0.625,
0.5,
0.625,
0.625,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.625,
0.5,
0.5,
1.0,
0.375,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.625,
0.875,
0.5,
0.5,
0.75,
0.75,
0.75,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.875,
0.75,
1.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
1.0,
0.75,
0.625,
0.875,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.5,
0.875
],
"result": {
"Last_Wh_pro_Stunde": [
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
1053.07,
11551.91,
6564.5599999999995,
7687.03,
14151.67,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
11542.82,
6460.22,
7658.78,
5062.12,
1178.71,
1050.98,
988.56,
912.38,
704.61,
516.37,
868.05,
694.34,
608.79,
556.31,
488.89,
506.91,
804.89,
1141.98,
1056.97,
992.46,
1155.99,
827.01,
1257.98,
1232.67,
871.26,
860.88,
1158.03,
1222.72,
1221.04,
949.99,
987.01,
733.99,
592.97
],
"EAuto_SoC_pro_Stunde": [
5.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
5.0,
22.48,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
31.22,
42.144999999999996,
59.62499999999999,
72.735,
81.475,
92.4,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955,
98.955
],
"Einnahmen_Euro_pro_Stunde": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
"Gesamt_Verluste": 7647.623819992857,
"Gesamtbilanz_Euro": 7.824605715847156,
"Gesamteinnahmen_Euro": 0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
"Gesamtkosten_Euro": 7.824605715847156,
"Home_appliance_wh_per_hour": [
0.0,
0.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.0,
2500.0,
2500.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"Kosten_Euro_pro_Stunde": [
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.027996119999999992,
1.351235592,
1.1423217259999998,
1.226111386,
1.4948178300000001,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
1.2071595,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
1.0534661399999998,
0.0,
0.0,
0.0,
0.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.19588158,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.01995551999999987,
0.08545095,
0.007989913613567745,
0.012219458233588571,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"Netzbezug_Wh_pro_Stunde": [
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
122.78999999999996,
6108.66,
5457.82,
6525.34,
8132.85,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
6023.75,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
4640.82,
0.0,
0.0,
0.0,
0.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
704.61,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
65.59999999999957,
351.65,
35.04348076126204,
55.24167375040041,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"Netzeinspeisung_Wh_pro_Stunde": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"Verluste_Pro_Stunde": [
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.0,
1152.0,
276.0,
345.0,
552.0,
414.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
615.5918181818183,
345.0,
632.3249999999998,
23.391818181818195,
99.72409090909093,
133.72909090909081,
124.41545454545451,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.0,
70.41409090909087,
118.37045454545455,
94.68272727272722,
83.01681818181817,
75.86045454545456,
66.66681818181814,
69.12409090909085,
109.0704545454546,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
101.01681818181828,
0.0,
11.233982308648535,
48.41330768174522,
161.62968357967037,
21.962728535423857,
538.2984000000038,
441.95211196761403,
260.56941082122324,
171.99990368477063,
62.214291413756285,
35.132727272727266,
77.27590909090907,
134.59227272727276,
100.08954545454549,
80.85954545454547
],
"akku_soc_pro_stunde": [
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
80.0,
80.0,
61.06060606060606,
61.06060606060606,
61.06060606060606,
61.06060606060606,
61.06060606060606,
50.341167355371894,
50.341167355371894,
36.91550447658402,
36.17712637741047,
33.0292699724518,
28.808023415977967,
24.88076790633609,
24.88076790633609,
22.658100895316807,
18.921659779614323,
15.932937327823693,
13.312456955922865,
10.917871900826448,
8.813490013774107,
6.63154269972452,
3.1886621900826473,
0.0,
0.0,
0.3120550641291261,
1.07020564583707,
4.578139530578446,
4.728141236897871,
19.68087457022947,
31.94341995234899,
38.90006700591099,
42.674787887051245,
43.17025540478875,
42.06126780148296,
39.622002994320425,
35.373509537020155,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
32.214117319389295
],
"Electricity_price": [
0.000228,
0.0002212,
0.0002093,
0.0001879,
0.0001838,
0.0002004,
0.0002198,
0.000227,
0.0002997,
0.0003195,
0.0003081,
0.0002969,
0.0002921,
0.000278,
0.0003384,
0.0003318,
0.0003284,
0.0003283,
0.0003289,
0.0003334,
0.000329,
0.0003302,
0.0003042,
0.000243,
0.000228,
0.0002212,
0.0002093,
0.0001879,
0.0001838,
0.0002004,
0.0002198,
0.000227,
0.0002997,
0.0003195,
0.0003081,
0.0002969,
0.0002921,
0.000278
]
},
"eauto_obj": {
"device_id": "ev1",
"hours": 48,
"charge_array": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.0,
1.0,
0.5,
0.625,
1.0,
0.75,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.5,
0.625,
0.375,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"discharge_array": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
2024-12-19 14:50:19 +01:00
"discharging_efficiency": 1.0,
"capacity_wh": 60000,
"charging_efficiency": 0.95,
"max_charge_power_w": 11040,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
"soc_wh": 59373.0,
2024-12-19 14:50:19 +01:00
"initial_soc_percentage": 5
},
"start_solution": [
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.0,
0.0,
2.0,
1.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.0,
1.0,
2.0,
2.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
1.0,
1.0,
0.0,
1.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
1.0,
1.0,
1.0,
1.0,
1.0,
0.0,
1.0,
1.0,
1.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
5.0,
4.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
2.0,
6.0,
3.0,
3.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
5.0,
3.0,
5.0,
5.0,
0.0,
6.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
2.0,
3.0,
6.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
4.0,
2.0,
3.0,
1.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
2.0,
3.0,
3.0,
2.0,
3.0,
3.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
3.0,
2.0,
2.0,
6.0,
1.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
3.0,
5.0,
2.0,
2.0,
4.0,
4.0,
4.0,
0.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
5.0,
4.0,
6.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
6.0,
4.0,
3.0,
5.0,
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
2.0,
5.0,
14.0
],
fix: genetic optimizer charge rates, SoC accuracy, and minor bugfixes (#949) * record battery SOC at the start of the interval for accurate display * map battery charge rates to GeneticOptimizationParameters and update related logic Instead of using the EV charge rates, the battery now has its own charge rate defined in the GeneticOptimizationParameters to better separate those entities. * separate raw gene values from SOC-clamped op factors The genetic_*_factor columns in the OptimizationSolution dataframe now always carry the raw gene values (optimizer intent), while the battery1_*_op_mode / battery1_*_op_factor columns and FRBCInstruction operation_mode_factor reflect SOC-clamped effective values that can actually be executed given the battery's state of charge at each hour. Adds GeneticSolution._soc_clamped_operation_factors(): - AC charge factor: proportionally scaled down when battery headroom (max_soc - current_soc) is less than what the commanded factor would store in one hour; zeroed when battery is full. - DC charge factor: zeroed when battery is at or above max SOC. - Discharge: blocked when SOC is at or below min SOC. Both optimization_solution() and energy_management_plan() pass the clamped values to _battery_operation_from_solution(), so the plan instructions the HEMS receives reflect physically achievable targets. * ensure max AC charge power is only used if defined * update fixtures for PV suffix + SOC-clamp algorithm changes * handle None case for home appliance start hour in simulation if the hour is zero, the the home appliance wont start * update handling of invalid charge indices in autocharge hours Seems to be a bug, since all invalid indexes needs to be invalidated (also the first one) * remove double code in simulation preparation and improve comments * update version Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Christopher Nadler <christopher.nadler@gmail.com>
2026-03-17 12:41:15 +01:00
"washingstart": 14
}