Closed TB-DevAcc closed 2 years ago
Das ist in der Tat ein grundlegendes Problem, wenn wir immer die ausgelesenen Werte vom RKI als Basis haben wollen, weil diese immer 401 Landkreise haben. https://github.com/TB-DevAcc/MVSEIQRD_Model/blob/084641037e87bb21a9877ae8dcafd0a8657837f1/app/controller.py#L608-L626
get_simulation_initial_values()
bekommt J als Parameter übergeben und gibt basierend darauf entweder 401 Landkreise oder 1 Landkreis (Deutschland) zurück.
- Würde vorschlagen
get_simulation_initial_values()
bekommt J als Parameter übergeben und gibt basierend darauf entweder 401 Landkreise oder 1 Landkreis (Deutschland) zurück.
Das klingt gut. Der "1 Landkreis" (Dtl) sollte ja dann die Summe der 401 sein?
- Wenn wir auch Werte dazwischen abbilden wollen, könnte man einfach die ersten J Elemente des dahinter liegenden Dataframes zurückgeben
Ich denke das macht inhaltlich nicht so viel Sinn. Angenommen man möchte die Simulation für J=16 (Bundesländer) ausführen, dann muss man auch eine neue Datei bzw. Werte bereitstellen.
Warum ist denn die Simulation im Moment überhaupt abhängig von den Landkreis Daten? Sollte die nicht nur dann abhängig sein wenn J=401 gesetzt, und die entsprechenden Werte in params eingegeben werden? Es sollte ja eigentlich nicht vorkommen, dass J, K und die anderen Parameter nicht zusammenpassen, solange die Eingabedaten korrekt sind.
Das klingt gut. Der "1 Landkreis" (Dtl) sollte ja dann die Summe der 401 sein?
Korrekt - unterteilt in die 6 Altersgruppen.
Ich denke das macht inhaltlich nicht so viel Sinn. Angenommen man möchte die Simulation für J=16 (Bundesländer) ausführen, dann muss man auch eine neue Datei bzw. Werte bereitstellen.
Find ich tatsächlich auch nicht wirklich sinnvoll, habe es aber einfach mal vorgeschlagen. Über die Situation mit J=16 (Bundesländer) habe ich auch bereits nachgedacht und diesen Fall könnten wir, wenn wir das haben wollen, wahrscheinlich auch recht einfach abbilden, da die ersten beiden Nummern der Landkreis-ID das Bundesland anzeigen (01 -> SH, 09 -> BY, 11 -> BE).
Warum ist denn die Simulation im Moment überhaupt abhängig von den Landkreis Daten? Sollte die nicht nur dann abhängig sein wenn J=401 gesetzt, und die entsprechenden Werte in params eingegeben werden? Es sollte ja eigentlich nicht vorkommen, dass J, K und die anderen Parameter nicht zusammenpassen, solange die Eingabedaten korrekt sind.
Ähm, ich dachte mir, dass esdas sinvollste ist, immer genaue Werte aus der csv-Datei zu verwenden und im Init des Controllers deshalb immer das Laden der Basisdaten aufrufe: https://github.com/TB-DevAcc/MVSEIQRD_Model/blob/084641037e87bb21a9877ae8dcafd0a8657837f1/app/controller.py#L205 Wir können das Laden der Daten aber gerne von irgendetwas, wie z.B. J=401, abhängig machen.
Über die Situation mit J=16 (Bundesländer) habe ich auch bereits nachgedacht und diesen Fall könnten wir, wenn wir das haben wollen, wahrscheinlich auch recht einfach abbilden, da die ersten beiden Nummern der Landkreis-ID das Bundesland anzeigen (01 -> SH, 09 -> BY, 11 -> BE).
Ah cool. Ja das ist dann nice to have für die Erstellung von Szenarien, aber muss ja nicht in unsere App rein.
Wir können das Laden der Daten aber gerne von irgendetwas, wie z.B. J=401, abhängig machen.
Also mal die Szenarien:
Default: J=1, K=6
model = Model() # Modell wird mit default_values.json initialisiert, also J=1, K=6; (Klassen müssen in json Form (J, K) haben)
model.run()
model.run_app() # oder plot()
J=401, K=6 Mit Pseudofunktionen für dh:
dh = DataHandler() # DataHandler wird mit default Landkreis Daten (RKI_COVID19.csv ... ) initialisiert
params = dh.initialize() # params: dict = {<Relevante Klassen in Form (J, K); J; K; Relevante Parameter in Form (1,)>}
model = Model(params=params, fill_missing_values=True) # Modell wird mit params von Landkreis daten initialisiert plus Default Werte
model.run()
model.plot()
J=16, K=6 Mit Pseudofunktionen für dh:
dh = DataHandler(coviddata=Bundesländer.csv, bedsdata=BLBeds.csv, impfdata=BLImpf.csv)
params = dh.initialize() # params: dict = {<Relevante Klassen in Form (J, K); J; K; Relevante Parameter in Form (1,)>}
# Oder alternativ
dh = DataHandler()
params = dh.initialize()
params['J'] = 16
params['S'] = [sum(x) for x in [LK Data in Bundesland]]
...
model = Model(params=params, fill_missing_values=True) # Modell wird mit params von Landkreis daten initialisiert plus Default Werte model.run() model.plot()
4. J=1, K != 6
_Mit Pseudofunktion set_S_value_
```python
params = {}
params['K'] = k
params['S'] = [set_S_value(x) for x in range(k)]
...
model = Model(params=params, , fill_missing_values=True) # Modell wird mit params initialisiert und mit default_values ergänzt
model.run()
model.run_app() # oder plot()
Stimmt ihr da mit überein?
Ja, wobei du bei 2. und 3. dh nicht explizit erstellen müsstest, das passiert automatisch im Controller (zumindest für Basiswerte der Simulation) Bei 4. bin ich mir nicht sicher, ob wir das brauchen.
Ja, wobei du bei 2. und 3. dh nicht explizit erstellen müsstest, das passiert automatisch im Controller (zumindest für Basiswerte der Simulation)
Aber dann ist ja dem Model nicht klar welche parameter es verwenden soll wenn automatisch mit dh von (echten) Daten initialisiert wird. Kann gerne implizit funktionieren, aber sollte dann ja mit einer Flag gesetzt werden. Wie unterscheiden wir sonst zwischen 1., 2. und 3.?
Bei 4. bin ich mir nicht sicher, ob wir das brauchen.
Ist als theoretisch mögliches Szenario gedacht, weniger als konkreter Fall für den wir etwas implementiert haben. Sollte aber eben theoretisch möglich sein, oder nicht?
Aber dann ist ja dem Model nicht klar welche parameter es verwenden soll wenn automatisch mit dh von (echten) Daten initialisiert wird. Kann gerne implizit funktionieren, aber sollte dann ja mit einer Flag gesetzt werden. Wie unterscheiden wir sonst zwischen 1., 2. und 3.?
Das Model sagt dem Controller über dessen __init__
, ob er base_parameter laden soll:
https://github.com/TB-DevAcc/MVSEIQRD_Model/blob/20aff845d5ca3d73fd0d63d9be6ac8153ea77ba6/app/controller.py#L78-L86
Die Unterscheidung, ob wir für J=1, J=16 oder J=401 Daten der Landkreise laden, machen wir über J.
Ist als theoretisch mögliches Szenario gedacht, weniger als konkreter Fall für den wir etwas implementiert haben. Sollte aber eben theoretisch möglich sein, oder nicht?
Theoretisch ja 😄
Describe the bug Für J=401 sollte die Simulation funktionieren, dauert allerdings erwartungsweise recht lange. Mit unserem eigentlichen Default J=1 funktioniert die Simulation nicht mehr, da die verschiedenen shapes nicht zusammenpassen.
To Reproduce Steps to reproduce the behavior:
Expected behavior A running simulation with correct broadcastet values
Code snippets (J,) Funktioniert nicht mehr für J=1, da Beds immer noch shape (401,) hat https://github.com/TB-DevAcc/MVSEIQRD_Model/blob/084641037e87bb21a9877ae8dcafd0a8657837f1/app/controller.py#L231
S hat bei initialisierung shape (J, K), erhält hier aber auch shape (J*401*K)
Additional context 77d5177eea5407293c6a18860a5724f79022deff ist vermutlich der letzte funktionierende commit.