# informatiCup ## Presentation * Intro * Name der Gruppe * Name der Personen * Agenda (orientiert an Zeitplan) * Vorüberlegungen * Wo anfangen * Welche Ziele * Mögliche ML Ansätze * Architektur * Observer * Evolution des Observers * Modellierung in Objekte * Request flow * Heristiken * Nichtumsetzbarkeit von ML * Human + Stupid * Ensemble * Auswertung und Tuning * Execution Manager * Fazit * Fragen * Backup Slides (Zu was könnten Fragen kommen?) ## Eventuelle Fragen ## Next todos * Make Heurisitc classfication ensemble better [L] * Make heuristics better [L] * write docu [L] * Docu * Setup [DONE] * Basic Structure [T] * Dockerfile [DONE] * DockerHub auto-build setup [[DONE]](https://hub.docker.com/repository/docker/couchconsulting/ic20) * Discuss Game object refactoring * Move computed things to @properties * eher weniger oder * init ist ziemlich überladen mittlerweile * Evaluate caching decorators for speedup * nicht mehr aber aufschreiben für doku unter verbesserungen. ähnlich wie parallaization der einzelen heuristiken * Würde halt vor allem mit Punkt 1 zusammenfallen * remove unused functions and properties (check whether pylint can resolve this automatically) * sollte gehen sind aber auch nur 2 stück so weit ich weiß, sonst kann ich es in pycharm suchen lassen * Ungenutzer Code wird sich vermutlich in der Bewertung für die Wartbarkeit nicht so gut machen. ## Done * extend observer [T] * think about: maybe add error logger to oberserver to see if anything is wrong with my actions (try -> except -> end round ) [DONE] * more planed executions? especially for events/3er-actions [short] - do not do if takes too long * Start & Track Tool to start client and server with a seed.[DONE] * Extend observer to document store and log seeds [DONE] * Automated heuristic tester that allows to get avg rounds, win/loss ratio [DONE] * Last touches Human heuristic * ## Programmieren * In Python (PEP 8) * GitHub [DONE] 1. Webserivce bauen (nach Vorlage) [DONE] 2. Klassen für alle Daten * Eingabe/state -> cities -> events [Begründent mit allen Infos as PDF] * Hilfefunktionen * Ausgabe: Actions model [DONE] * Events [DONE] 4. Beobachter programmieren und Simmulieren [Ongoing] * Sammel alle events + Pre/post state of city * Also global events und stadt spezfische kennen * ALle keime kennen * beobachter mit unterschiedlichen aktionen testen (random action antwort) * Erweitern mit statischer aktionsleiste 6. Mögliche Aktionsliste mit Klasse [DONE] * Alle möglichen aktions 7. Abhängikeitsbaum [Ongoing] * https://drive.google.com/file/d/1jmkTKUckfA1JoWvMd9mKYNsSZ-yQDHVU/view?usp=sharing * (May change in the future, not the best idea possibliy) Points independent, therefore "EndRound" is missing since it only depends on the points * Heuristic bias as result: Check first for the best action and then if you have enough points. If not enough points EndRound * heurstic always checks for all possible actions , thus it can be validated against what would be possible and do nothing if possible * alternative give points into heuristic and make it also decide wheter it is a good idea to wait or use the points * Missing target vaues for automatic herustic, thus if we find a way to get target values for action it would be doable via NN etc. 9. Huerisitcmethoden um mögliche Aktionsliste auszuführen [Schwerste] * WIP: * Done: * Human heuristic * Build msot generic feature vector of the game state * Ansätze: * SAT/SMT/Theory Solver * ML (SVM oder NN) * Keimspread-Modell * Nachforschen Spielheuristic * random forest * Heuristic wobei jede aktion variabeln hat die durch game status gefüllt wird und die vorhandenen punkte (einflussfaktorenfunktionen) * Funktion- based NN * Deadl Heursitc inverted of softmax output * solution only focused on graphs and how something may spread and how you could avoid the spread * adjustable humanheuristic reweigh after a game has ended * Ensenmble classifiere als endansatz () 10. Aktionen ausführen [DONE] ### Other * Check: Kann durch bioTerrorism nur vorhandenes Pathogen hinzukommen? Folgen für Modeling (Doch liste von outbreaks?) [DONE] * still correct? (check outbreak is list? and if yes fix implementation) -> No second outbreak * macht nix kaputt weil solang kein outbreak da ist, nix passiert und wenn da einfach nur prevalnce verstärkt * bioTerrorism -> outbreak? jaein ## Ausarbeitung * Kompoentendiagram * Sequenzdiagram * Archteictural Decissions ## Orga * 15. Januar 2020 (einschl.): Ende der Annahme der vollständigen Lösung (E-Mail: ludger.porada@gi.de) ## Resourcen AWS Educate Classrooms Der InformatiCup 2020 wird von Amazon mit einem AWS Educate Classroom für Wettbewerbsteilnehmer unterstützt. Darin enthalten sind 150$ AWS-Budget und Free-Tier-Ressourcen für, zum Beispiel, AWS Lambda. Ihre Zugangsdaten erhalten Sie auf Wunsch mit Ihrer Anmeldung zum InformatiCup. ## Details der Aufgabe ### Ziel Software die Menschheit vor eine Pandemie retten durch gewinnen eines rundenbasierten Spiel. * Aufgabe wird gelöst *teilweise* durch Beobachtung innerhalb der Spiele (aka ML algo durchaus möglich) ### Spielabluaf 0. Startguthaben Punkte: 40 | Summe Einwohner aller Städe: X 1. In zufällig gewählten Städten berechen zufällig gewählte Keime aus * Eigenschaften der Städte und Keime wirken sich auf die Ausbreitung der Keime innerhalb der Städte und zwischen den Städten sowie auf die Eintrittswahrscheinlichkeiten von Ereignissen aus. 2. Abwechselnde Runden * Pandemie-Runde: * Pro Runde können Keime in neuen Städten auftreten durhc Übertragung etc. * Aktion/Spielstatus = Eingabe * HTTP-POST-Request, JSON, UTF-8 * JSON Eingabe Data - siehe PDF * Heiler-Runde: * + 20 Punkte (herausfinden ob am Anfang oder Ende der Runde) * Gezhält von Spiel * Aktionen = Ausgabe * Aktionen kosten Punkte * Beliebig viele Aktion pro Runde * Runden-Ende: * Check Sieg/Niederlage bedingung * Ende: Alle Keime eliminiert oder Menschheit ausgelöscht * Menschheit ausgelöscht := Summe Einwohner aller Städte jetzt <= (Summe Einwohner aller Städte Runde 1)/2 * ?Alle Keime eliminiert := Nieman mehr Infiziert? #### Wichtige Details für Spielablauf * Aktionsentscheidung ohne Beachtung der Historie des Spiel, da eingegbene Spielzuständen unterschiedlichen Spielen gehören könnten. * Spielzustände nicht eindeutig zuordbar * ?Eigne Historie aufbauen? * Ereignisse lassen Rückschlüsse auf Historie zu. * e.g. # Runden entwicklung Impfstoff gegen einen Keim ### Werte * Menge von Städten * Eigenschaften-Unveränderlich: [Name, Koordinaten, Flugverbindungen (zu anderen Städten)] * Eigenschfaten-Veränderlich: [Einwohnerzahl, Stärke der Wirtschaft, Stabilität der Regierung, Hygienestandards, Achtsamkeit der Einwohner] * Hat Events wo Keime drinnen stehen etc. * Anmerkungen: * Koordinaten nutzen? * Event haben eine "sinceRound" und "prevalence" angabe welche für Prioritiserung benutzt werden könnte * Keime * Eigenschaften-Unveränderlich: * Name (Fiktiv) * Infektiosität: % Infizierung Einwohner ander Städte oder seiner Stadt * Mobilität: % Übergang des Keims auf nicht verbunde Städte * Dauer: # Runde der Infektion und der möglichkeit andere zu Infizieren * Letalität: % Infizierter Stribt * Infizierte Sterben oder werden Immun gegen diesen Keim * Menge endlich * Mögliche Keime sind unbekannt aber dürfen "gesammelt" werden über hinreichend viele Spiele hinweg. * Events: * Events für das Ganze Spiel oder nur für Städte * Hat Eigenschaften und Auswirkungen auf Spielgeschehen * Mögliche Events sind unbekannt aber dürfen "gesammelt" werden über hinreichend viele Spiele hinweg. * Error: Eingabe wenn Aktion nicht akzeptiert wurde #### Details * Numerische Eigenschaftswerte sind auf "--" (min), "-", "o", "+", "++" (max) abgebildet. ## Anforderungen/Anmerkungen für Programmierung 1. Webservice der Eingabe annimmt [Vorlageverfügbar] * Hintergrundinfos können nicht geupdatet werden. Daher folgendes Hardcoden/Festenspeicher Planen: * Keime + Eigenschaften * Ereignise + Eigenschaften analog * Berücksichtigen Sie die Umsetzung der Produktivversion Ihrer Software als zustandslosen Webservice von Anfang an in Ihrem Softwareentwurf. 2. Software die Antwortet und als Response an die Eingabe zurückschickt * Antwort ?Liste? von Dicts * Umsetzung Prioritiserung welche Aktion hauptfrage: * Implizierungsgraphen/Bayesnetze * ML * Docker/Webserivce Umsetzung * Docker besser für Local * Webservice besser für Koopertaives teste/entwickeln? * Klassen für alle Daten (Eingabe/Ausgabe) * Beobachter programmieren der alle Datensammelt * ### Annahmen/Folgerung: * Tool zum Testen vorhanden * Eingabe code ist immer richtig * Trotzdem Testen für Code quaility/korrektheit? * Piroritisuerng/Heurisitc für Aktionen Nötig, folgendes kann benutzt werden in allen möglichen Kombinationen: * Stadtstatus * Event haben eine "sinceRound" und "prevalence" angabe welche für Prioritiserung benutzt werden könnte * Keimstatus * Ende-Bedingung * Punkte verfügbar/Kosten * Skallierungsfaktor # Bewertung * Heuristik: In Möglichst wenig Runden alle Keime eliminieren * Wenn Gewinnt, in wenig Runden * Wenn Verliert, in möglichst vielen Runden * Güte des Lösungsansatzes * Form der Ausarbeitung * Softwarearchitektur und -quailität * Mögliche Erweiterung * [Wenn im Finale] Qualität der Präsentation In detail, siehe Checkliste Bewertungskriterien der PDF # Ausarbeitung * Installation, Bedienung der Software * Theoretischen Lösungsansatz * Angucken alter Wettbewerbsausarbeitungen: https://github.com/InformatiCup/