Zápasový algoritmus

1
Zdravím,
podobný topic jsem tu nenašel, ale pokud to už někdo řešil, klidně mě odkažte na dané téma.

Každopádně si teď trošku hraju s vývojem aplikací a napadlo mě, zkusit naprogramovat jednoduchý manažer. Měla by to být taková oddechovka, ale rád bych začal tím nejdůležitějším, což je zápasový algoritmus.

Jsou vlastně tři přístupy:
1. Provonání ratingů a určení vítěze (prostě lepší tým vyhraje a basta)
2. Práce s ratingy (obrana vs. útok, kreativita vs. disciplína, zakončení vs. kvalita brankáře atd.)
3. Simulace sekundu po sekundě (řeší se pohyb a rozhodnutí každého hráče)

Ke všemu jsem na internetu nalezl různé zdroje, diplomové práce, aplikace na GitHubu ap. (akorát si někdo své know-how chrání víc, někdo míň). Ale jednička mi přijde příliš jednoduchá a předvídatelná, trojka zase příliš složitá pro můj případ. Rád bych implementoval složitější práci s ratingy, jenže paradoxně k tomuto jsem toho našel méně než bych potřeboval.

Takže se teď vlastně snažím vymyslet jak přesně postupovat:
  • jaké vlastnosti by hráči měli mít (tzn. co vše se od hráčů má počítat a jak moc)
  • jak začínat hru (jakým ratingem)
  • jak řešit délku hry (čas? kola/počet akcí? - pokud počet akcí, tak kolik?)
Beru jakoukoli pomoc, radu nebo cokoli Vás napadne.

Re: Zápasový algoritmus

2
Nedávno (asi čtvrt roku) jsem si zkusil vytvořit (víceméně spíš pro sebe) deskovku na téma Fotbalový zápas. Zůstalo ale nakonec jen u hrubého grafického návrhu.

Nejsem programátor (kamarádím se maximálně tak s excelem) ale obecně bych doporučoval začít systémem č. 1 (poměrně jednoduchý systém) jak jej popisuješ, a postupně bych přidával nadstavbu která by dělala hru komplexnější.

Já jsem v tomhle trochu magor a snažil jsem se svou hru udělat maximálně realistickou a když jsem si uvědomil, kolik atributů by musel mít každý hráč a do toho jsem začal přidávat další faktory jako třeba rozhodčí (a jeho atributy), počasí, diváci (myšleno vliv domácího prostředí) atd... deskovka by byla pak prakticky nehratelná a jeden tah by trval třeba celý den.

Re: Zápasový algoritmus

3
NO úplně jednoduché porovnání aplikovat nebudu. Našel jsem částečnou implementaci Soccer-Decoder, což de facto část mého problému. Bohužel jsem nikde nenašel plnou implementaci, kde je zabudován i vliv hřiště, trenéra, zkušeností nebo úbytek fyzičky, ale je to zajímavý odrazový můstek.

Např. celá hra je dělená na akce (tzv. souboj o míč/pozici), kterých je hodně. V implementaci jich je jen 100, ale v práci, kde to tvůrce vysvětluje je jich dokonce 1000 (což už mi přijde přehnané). Taky je tam zajímavě řešený výpočet, kdy se pak číslo nakonec ještě prožene Erlangovou distribucí, takže vyšší útočný rating (zvláště u třech útočníků), než rating jednoho brankáře ještě nutně neznamená, že padne gól.

Co mi tam však trošku vadí je absence stylu hry (counter-attack, passing, defend ap.) a hlavně, že např. do obrany se započítává pouze rating obrany, přitom v moderním fotbalu se více či méně zapojují všichni hráči do každé fáze hry. To ještě bude třeba vyladit, např. kolik procent z ratingu přidává do toho obranného útočník.

Zatím to totiž vidím tak, že nebudu řešit kvalitu hráčů různými atributy či ratingy, ale prostě jen jedním ukazatelem (1-99), jehož poměr se pak přidá do celkového ratingu týmů. Ale i v tomto bych si nechal samozřejmě poradit a do budoucna se nebráním změně, ale v začátku bych asi řešil jediný atribut u hráče, počítá s ním totiž i mnou preferovaný základní algoritmus.

Re: Zápasový algoritmus

4
Kdyby to někoho zajímalo, drobně jsem upravil (a v PHP implementoval) základní ideu soccer-decoder, tak si ji dovolím tady popsat. Beru jakoukoli zpětnou vazbu, např. na úpravu vlivu jednotlivých hráčů na ratingy.

Celý algoritmus počítá s tím, že existuje pět částí hřiště. Na každé straně šestnáctka (GOAL), okolí šestnáctky (FIELD) a střed hřiště (MIDFIELD) a v každé části hřiště proti sobě bojují jiné části týmů, tedy dochází k souboji různých ratingů:
GOAL A: útok B vs brankář A
FIELD A: záloha B vs obrana A (asi něco na způsob kreativity vs. bránění)
MIDFIELD: záloha A vs záloha B (prostě souboj o míč)
FIELD B: záloha A vs obrana B
GOAL B: útok A vs brankář B

Pokud útok porazí brankáře, padne branka. Jinak pokud útočící tým vyhraje "bitvu" nad obranou, tak se posune směrem k bráně soupeře. Pokud zvítězí obrana, začne útočit obrana (tady to ještě není dořešeno tak, aby se chodilo do protiútoku atd. v základním algoritmu se při změně držení míče vždy začíná v MIDFIELD, což ještě chci změnit a toto bych časem rád konzultoval).

A teď vliv pozic hráčů na jednotlivé ratingy:
Brankář = 100 % GK
Obrana = 100 % D, 50% M
Záloha = 100 % M, 50 % S, 10 % D
Útok = 100 % S, 50 % M

Jelikož v moderním fotbale se zapojují hráči prakticky do všech akcí, je otázkou, jak velký vliv případně přidat jednotlivým pozicím na daný rating. Např. u útoku by to bylo zapotřebí otestovat, jestli pak nebude mít příliš navrch nad brankářem.

Jak už jsem psal dříve, budu rád za jakoukoli zpětnou vazbu :ok: ;)

Re: Zápasový algoritmus

5
Zdravím, nevím tedy jestli to tady někdo čte, ale pokud ano, tak se pochlubím s dalším pokrokem:
  • už se mi podařilo vše rozběhat, takže simuluji zápas dle mírně upraveného Soccer-Decoderu i s vlivem fyzičky na výkonnost (s nižší fyzičkou upadá výkonnost rychleji)
Co naopak chybí doladit:
  • změna držení míče, aby se při každé změně nezačínalo uprostřed hřiště (např. když oberu křídlo o míč u šestnáctky, otevře se mi prostor pro útok, ale ten určitě nezačíná hned na půlce hřiště)
  • vliv prostředí - tento faktor je implementován v originále, já jej však implementován nemám, neboť nevím, kolik procent by domácí prostředí mělo přidat na výkonu... dle pojmu "12. hráč" by to bylo cca 8 %, ale v různých rozborech na internetu je dokonce až 20 %, což už mi zase přijde hodně... tady beru jakoukoli radu/zpětnou vazbu
Časem bych pod vliv prostředí rád schoval nejen domácí hřiště, ale i jeho kvalitu a počasí, což má obojí vliv na výkon hlavně v kombinaci se zvoleným stylem (na těžkém terénu se prostě špatně kombinuje).

A s tím se pojí i další věc, se kterou bych potřeboval trochu pomoct a tou jsou herní styly (taktiky). Zatím mě napadly jen protiútoky (CA - counter attack) a držení míče/přihrávky (BP - ball poss/passing). Jaké další herní styly Vás napadají a hlavně, jaké klady/zápory by daný styl měl mít?
  • CA - určitě bonus pro protiútok (zpravidla do otevřené obrany), možná silnější obranu, ale slabší zálohu? Rychlejší úbytek sil (pravděpodobně běhají bez míče)
  • BP - držení míče určitě nestojí tolik sil, takže nižší úbytek sil (= pomalejší zhoršování ratingů), ale co dál? Nižšší ratingy? Nebo naopak vyšší? Nebo spíše výhoda v pokračujícím útoku?
Pokud to tady náhodou někdo čte, zkuste mi napsat zpětnou vazbu, dík ;)
Odpovědět

Zpět na „Offtopic“