* Wynik uczenia (generowania strategii)

Zazwyczaj rozszerzenie .result

Plik zawiera:
 - identyfikator gry
 - strategię obrońcy wygenerowaną przez program,
 - informację o metodzie użytej do wygenerowania strategii, w tym
   - konfigurację,
   - wersję,
 - informację czasie obliczeń,
 - informację o modelu CPU (do kontroli przy porównywaniu czasów). 

Formatem jest JSON z następującymi polami:
 - payoff :: wartości oczekinawe wypłat dla danej strategii
   - defender :: wypłata obrońcy
   - atttacker :: wypłata atakująccego
 - defenderStrategy :: behawioralna strategia obrońcy (jako drzewo)
   - state :: stan widziany przez gracza (information set)
   - strategy :: lista [(ruch, prawdopodobieństwo)]
   - successors :: lista [(ruch, osiągnięty stan, strategia dla
                   poddrzewa)], strategia dla poddrzewa ma taką samą
                   (rekurencyjną) strukturę jak defenderStrategy
 - methodInfo :: informacje o metodzie uczenia, jej wersji parametrach
 - trainingTime :: czas uczenia w sekundach
 - cpuInfo :: model cpu
 - game :: Informacja o rodzaju i id gry
   - type :: typ gry (tożsamy z rozszerzeniem pliku z grą)
   - id :: UUID gry 


Wartości stanu, ruchu są specyficzne dla każdego typu gry. 

* Gra na grafie

Zasady: TODO

Opis per-unit timestep

** Format pliku z grą

Rozszerzenie .ggame

Pewną słabością jeśli chodzi o czytelność jest założenie na sztywno,
że obrońcy startują z wierzchołka 0. 

Wszystkie wypłaty są z przedziału [0,1]. Zakładamy, że neutralną
wartością jest 0.5. Taka jest wypłata, jeśli nie dojdzie ani do
skutecznego ataku ani do złapania. 

Pola JSONa
 - graphConfig :: opis grafu
   - vertexCount :: liczba wierzchołków (w zasadzie nadmiarowa,
                    wystarczyłby max numer z krawędzi
   - edges :: tablica definiująca krawędzie skierowane, każdy element ma
     - from :: wierzchołek startowy (numer)
     - to :: wierzchołek końcowy (numer)
 - targets :: lista numerów wierzchołków, które są celami
 - spawn :: numer wierzchołka, który jest startem atakującego
 - vertexDefenderRewards :: lista o długości równej liczbie
      wierzchołków -- wypłaty obrońcy za złapanie atakującego
 - vertexAttackerPenalties :: j.w. wypłaty atakującego
 - targetDefenderPenalties :: wypłaty obrońcy za powodzenie ataku w
      celu -- tablica o długości równej targets
 - targetAttackerRewards :: 
 - defenderUnitCount ::liczba jednostek obrońcy
 - rounds :: długość gry
 - id :: UUID gry

** Format strategii i stanu w wyjściu 

*** Ruch

Pojedyncza liczba -- numer wierzchołka do którego przesuwamy
jednostkę. 

*** Stan

- positions :: tablica aktualnych pozycji jednostek obrońcy
- currentUnit :: pozycja jednostki, którą ustawi najbliższy ruch
- timeStep :: numer rundy we właściwym czasie gry

