Doku: Anforderungen + ADRs (Symfony, htmx, SQLite, HA-Consumer)
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
# 006 – Inspiration-Algorithmus: gewichteter Mix (offene Gewichtung)
|
||||
|
||||
**Status:** proposed (Gewichtung offen, Algorithmus fix)
|
||||
|
||||
**Kontext.** „Inspiration" schlägt **jeweils 5** Gerichte aus dem Archiv vor,
|
||||
neue 5 auf Button. Der Betreiber möchte einen **Mix aus drei Kriterien**:
|
||||
lange nicht gekocht, seltene (wenige Auftritte) und beliebte (häufig gekocht).
|
||||
Genauere Gewichtung und die Definition von „seltene" / „beliebte" werden bei
|
||||
der Implementierung festgelegt.
|
||||
|
||||
**Entscheidung (Prinzip).** Score-Funktion `score(g)` mit drei Termen:
|
||||
1. **Staleness**: `now - max(gegessen_am)` (normiert an die älteste
|
||||
`gegessen_am`) → gewichtet mit `w_slow` (>0, primär, z. B. 0.5).
|
||||
2. **Rarity**: `1 / (auftritt_count + 1)` (auftritt = Anzahl aller Einträge
|
||||
mit gleichem `name`) → gewichtet mit `w_rare` (sekundär, z. B. 0.3).
|
||||
3. **Popularity**: `auftritt_count / max(auftritt_count)` → gewichtet mit
|
||||
`w_hot` (tertiär, z. B. 0.2).
|
||||
|
||||
`score = w_slow*stale + w_rare*rare + w_hot*hot`, Sortierung absteigend.
|
||||
`w_slow + w_rare + w_hot = 1.0`; konkrete Werte in `config/inspirations.yaml`
|
||||
und per ADR-006-Bis (Patch) fixieren, wenn die App läuft.
|
||||
|
||||
**Konsequenzen.**
|
||||
- + Alle drei Nutzerintentionen (Alte, Seltene, Beliebte) sind vertreten.
|
||||
- + Gewichte prozentual änderbar, ohne Code.
|
||||
- − „Beliebte" ist kontraintuitiv, wenn der Nutzer genau das **nicht**
|
||||
möchte (z. B. „mööchte etwas Neues"). Dann `w_hot=0`.
|
||||
- Offene Fragen:
|
||||
- [ ] Gewichte `w_slow/w_rare/w_hot` (Default: 0.5/0.3/0.2?)
|
||||
- [ ] „Auftritt" zählt **Alle Zeit** oder **letzte N Tage**? (Vorschlag: alle Zeit)
|
||||
- [ ] Deduping gegen die letzte 5er-Ladung? (Vorschlag: ja, Session-basiert)
|
||||
Reference in New Issue
Block a user