mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-08-31 12:46:38 +00:00
feat(optimization): support a 15-minute optimization interval
The genetic optimizer was hard-wired to an hourly grid and forced
optimization.interval to 3600 s. Generalize it to a configurable slot grid
of length prediction.hours * (3600 / interval), accepting 900 (15 min) in
addition to the default 3600 (1 hour) so the optimizer can schedule on a
quarter-hour grid for 15-minute dynamic electricity tariffs.
- genetic.py: slot_duration_h / slots_per_hour / total_slots helpers; all GA
vectors sized by total_slots; simulate()/evaluate() indexed by start slot.
- geneticparams.py: allow {900, 3600}; scale the load power series to per-slot
energy, mirroring the PV series.
- battery.py / inverter.py: scale power caps to per-slot energy caps via
slot_duration_h; homeappliance.py carries the hook.
- geneticsolution.py: serialize solution and plan on the slot grid (interval
freq, start-slot offset, second-based instruction instants).
The default 3600 s interval keeps the previous hourly behaviour; the genetic
regression suite is unchanged. Adds tests for the 15-minute slot grid.
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
| genetic | `EOS_OPTIMIZATION__GENETIC` | `GeneticCommonSettings` | `rw` | `required` | Genetic optimization algorithm configuration. |
|
||||
| horizon | | `int` | `ro` | `N/A` | Number of optimization steps. |
|
||||
| horizon_hours | `EOS_OPTIMIZATION__HORIZON_HOURS` | `int` | `rw` | `24` | The general time window within which the energy optimization goal shall be achieved [h]. Defaults to 24 hours. |
|
||||
| interval | `EOS_OPTIMIZATION__INTERVAL` | `int` | `rw` | `3600` | The optimization interval [sec]. Defaults to 3600 seconds (1 hour) |
|
||||
| interval | `EOS_OPTIMIZATION__INTERVAL` | `int` | `rw` | `3600` | The optimization interval (slot length) [sec]. The genetic optimizer supports 3600 (1 hour) and 900 (15 min); other values fall back to 3600. Defaults to 3600 seconds (1 hour). |
|
||||
| keys | | `list[str]` | `ro` | `N/A` | The keys of the solution. |
|
||||
:::
|
||||
<!-- pyml enable line-length -->
|
||||
|
||||
@@ -139,17 +139,16 @@ The energy management can be run in three modes:
|
||||
Each device simulation run must ensure that all tasks or appliance cycles (e.g., running a
|
||||
dishwasher) are completed within the configured time windows.
|
||||
|
||||
- **interval**: Defines the time step in seconds between control actions
|
||||
(e.g. `3600` for one hour, `900` for 15 minutes).
|
||||
- **interval**: Defines the time step (slot length) in seconds between control actions.
|
||||
The genetic algorithm supports `3600` (one hour, the default) and `900` (15 minutes);
|
||||
any other value falls back to `3600`. The number of optimization slots is
|
||||
`prediction.hours * (3600 / interval)`, and device power caps as well as the solution
|
||||
and energy-management-plan serializers are slot-aware.
|
||||
|
||||
:::{warning}
|
||||
**Current Limitation**
|
||||
|
||||
At present, the `interval` setting is **not used** by the genetic algorithm. Instead:
|
||||
|
||||
- The control interval is fixed to **1 hour**.
|
||||
|
||||
Support for configurable intervals (e.g. 15-minute steps) may be added in a future release.
|
||||
:::{note}
|
||||
Use `900` together with a 15-minute electricity price source (for example a dynamic or
|
||||
exchange-priced tariff) to let the optimizer schedule on a quarter-hour grid. Keeping the
|
||||
default `3600` preserves the previous hourly behaviour.
|
||||
:::
|
||||
|
||||
#### Genetic Algorithm Parameters
|
||||
|
||||
Reference in New Issue
Block a user