Nesouvísí s Nette ale je to zajímavý problém
- Klobás
- Člen | 113
Ahoj,
rád bych poprosil znalé, zda by nepomohli vymyslet následující i když vím, že to s Nette nesouvisí, snad nedostanu vyhubováno a nebudu smazán, protože nevím moc kam jinam do jaké komunity chytrých lidí kolem programovaní a PHP se obrátit.
1)
Mám seznam týmů (je jedno kolik) a u každého týmu znám jeho sílu (je
jedno jestli je síla vyjádřena v % od 0 – 100 nebo je sílá týmu od
1 – 10).
Rád bych nějak simuloval výsledek mezi týmy. Potřebuji do toho
zahrnout:
náhodu
(výhodu, domácí bude hrát ve velké většine případů lépe doma než
venku)
sílu týmu
případně cokoli dalšího co vás napadne.
Pár ukázkových zápasů:
Brazílie – Indie (Brazílie je top tým, Indie naopak), možné výsledky: 5:0, 4:0, 9:0 (občas i tolik gólů padne); 6:0; 4:1 (občas i looser dá gól).
Češi – Slováci (šance tak 55:45); 0:0, 1:0, 3:0, 0:2, 1:1, 2:0, 0:1, 5:0, 0:0, 1:2
atd.
Výsledky typu 5:5, 8:3 padají velmi málo, stejně tak jako dvouciferné nebo velmi vysoké (od cca 6 branek na tým nahoru) občas a spíše jen když se hraje s velmi slabými týmy.
- Jak nejlépe generovat průběh zápasu (branky, karty akce, tj něco jako umělou inteligenci)
Zhlédl jsem se ve fotbalových manažerech typu www.mifa.cz, www.brejk.cz, www.hattrick.org
Chtěl jsem si udělat jednodušší manažer pro sebe a několik kamarádů (umím vytvořit vazby, tabulky, výpisy, tabulky, a celkově to naprogramovat aby se to dalo ovládat, ale ty složité algoritmy na generování výsledků, zápasů atd už nezvládám :( (což je celkem problém, proto kdybyste mě někdo popostrčil nebo mi pomohl nějakým příkladem či něčím co mne dostane o kousel dál, budu velmi vděčen.
- Kde vzít seznamy jmen různých národností (Potřebuji vygenerovat tisíce různých jmen třeba z Itálie, Anglie, Moldavska atd .. je mi jasné že to bude kombinací jména a příjmení dané národnosti, ale kde vzít ty „číselníky“?
Díky moc.
- Klobás
- Člen | 113
CZechBoY napsal(a):
Pro ne-Nette dotazy se doporučuje www.djpw.cz
Vím, tam jsem to položil taky, ale to spíše fórum pro začátečnické věci typu proč se mi nefunguje SQL dotaz …
- Pavel Kravčík
- Člen | 1196
Trochu zkušeností by mohl mít @Kcko. Ten měl pěkný web s výsledky – i když pravda se asi negenerovaly.
Rozdělil bych to na dvě hodnoty – kvalita obrany a kvalita útoku. Lépe
se Ti to bude vypočítávat a bude to takové věrohodnější. Každopádně
nejdřív to vymysli matematicky. Stačí najít metody, které se tomu
věnují. Za minutu na Google jsem našel – „Binomické rozdělení
pravděpodobnosti“. V jednoduchém manažeru si můžeš matici
pravděpodobnostních výsledků generovat ručně např.
obrana 6 vs útok 8 -> 0 gólů = 10%, 1 = 30%, 2 = 20%, 3 = 5%, 4 = 3% ... 8 = 0.01%
.
Každopádně – asi nejlepší rada. Napiš autorům těch webů. Rádi Ti poradí, jsou to většinou fajn kluci zapálení pro věci kolem fotbalu, managerů a programování. :)
- Honza.Mottl
- Člen | 104
Ad 3) ma to nejednotnou strukturu, ale neco se tam da najit:
https://en.wikipedia.org/…_given_names
https://en.wikipedia.org/…es_in_Europe
- Klobás
- Člen | 113
Pavel Kravčík napsal(a):
Trochu zkušeností by mohl mít @Kcko. Ten měl pěkný web s výsledky – i když pravda se asi negenerovaly.
Rozdělil bych to na dvě hodnoty – kvalita obrany a kvalita útoku. Lépe se Ti to bude vypočítávat a bude to takové věrohodnější. Každopádně nejdřív to vymysli matematicky. Stačí najít metody, které se tomu věnují. Za minutu na Google jsem našel – „Binomické rozdělení pravděpodobnosti“. V jednoduchém manažeru si můžeš matici pravděpodobnostních výsledků generovat ručně např.
obrana 6 vs útok 8 -> 0 gólů = 10%, 1 = 30%, 2 = 20%, 3 = 5%, 4 = 3% ... 8 = 0.01%
.Každopádně – asi nejlepší rada. Napiš autorům těch webů. Rádi Ti poradí, jsou to většinou fajn kluci zapálení pro věci kolem fotbalu, managerů a programování. :)
Ahoj,
Kcko trochu znám už z dob DC++ :D.
Psal jsem mu a odepsal mi, že tuhle „umělou“ inteligenci neřešil, ale
pokud to prý má být smysluplné, potřebuju na to vyšší matematiku a on to
prý nikdy nedělal, jinak by poradil. Koukal jsem se na jeho spanelskyfotbal a
má to udělané moc pěkně, ma tam hafo tabulek a statistik, ale tu umělou
inteligenci ne.
Zkusím ještě obeslat ty ostatní portály, nicméně díky za popostrčení.
- Klobás
- Člen | 113
Honza.Mottl napsal(a):
Ad 3) ma to nejednotnou strukturu, ale neco se tam da najit:
https://en.wikipedia.org/…_given_names
https://en.wikipedia.org/…es_in_Europe
Díky za odkazy, chtělo by to ovšem trošku ucelenější seznamy, no budu googlit.
- Klobás
- Člen | 113
Pavel Kravčík napsal(a):
Trochu zkušeností by mohl mít @Kcko. Ten měl pěkný web s výsledky – i když pravda se asi negenerovaly.
Rozdělil bych to na dvě hodnoty – kvalita obrany a kvalita útoku. Lépe se Ti to bude vypočítávat a bude to takové věrohodnější. Každopádně nejdřív to vymysli matematicky. Stačí najít metody, které se tomu věnují. Za minutu na Google jsem našel – „Binomické rozdělení pravděpodobnosti“. V jednoduchém manažeru si můžeš matici pravděpodobnostních výsledků generovat ručně např.
obrana 6 vs útok 8 -> 0 gólů = 10%, 1 = 30%, 2 = 20%, 3 = 5%, 4 = 3% ... 8 = 0.01%
.Každopádně – asi nejlepší rada. Napiš autorům těch webů. Rádi Ti poradí, jsou to většinou fajn kluci zapálení pro věci kolem fotbalu, managerů a programování. :)
Jinak prosímtě jak jsi k tomu došel?
Jak by to tedy vypadalo kdybych měl
Síly 0 – 10 nebo 0 – 100 (to je fuk)
- Tým 1 (síla 6) vs Tým 2 (síla 8) ⇒ co padne?
- Tým 3 (síla 1) vs Tým 4 (síla 10) ⇒ co padne?
Koukám na WIKI a pořád mne nenapadá jak to tam zadrátovat.
- Pavel Kravčík
- Člen | 1196
Potřebuješ dvě věci pro ten výpočet. Nemůžeš vědět, co padne. Můžeš, ale vědět jaká je šance, že to spadne. :)
- Matici pravděpodobnosti, když se potkají konkrétní obrana a útok.
- Matematický vzorec, který to pak spočítá dle výskytu pravděpodobnosti.
Matici jsem vypsal výše, dala by se asi udělat i automaticky. Ale jednodušší pro Tebe bude si nějakou vytvořit ručně. Tj. pokud se potká síla 8vs6 je šance, že padne jeden gól dle mě nejvyšší. Protože 8 je větší než 6, ale ne o hodně. Takže to bude vyrovnaný zápas. Největší šance tedy je, že padne 0–2 gólů. Těm možnostem dáš více procent. Že padnou 3 góly je už méně pravděpodobné, proto jem nahořel dal 5%. Osm je skoro scifi takže jsem dal do matice 0,01%.
Druhá část je převést matematický vzorec z té wiki.
Jednoduchý příklad s kostkou. Na kostce při „ideální“ testu padne
z šesti pokusů rovnoměrně každá možnost. Tj. matice by vyapala takhle:
1 - 16,67%, 2 - 16,67% ...
. Každá hodnota má stejnou šanci
padnout.
1,2,3,4,5,6
Druhý příklad s fixlovanou kostkou (vlastně systém těch výsledků).
Hraješ Kingdom Come a máš kostku, na které častěji padají lichá čísla.
Abys to dokázal nasimulovat musíš použít nějakou tu matematickou poučku.
Matice by vypadala takhle přibližně (nepočítám jsem línej)
1 = 10%, 2 = 5%, 3 = 10%, 4 = 5%, 5 = 10%, 6 = 5%
. Při více
iteracích toho hodnu dostaneš častěji podobný výsledek, kde se bude
v průměru vyskytovat více lichých čísel.
1,2,3,3,5,6
- Klobás
- Člen | 113
Pavel Kravčík napsal(a):
Potřebuješ dvě věci pro ten výpočet. Nemůžeš vědět, co padne. Můžeš, ale vědět jaká je šance, že to spadne. :)
- Matici pravděpodobnosti, když se potkají konkrétní obrana a útok.
- Matematický vzorec, který to pak spočítá dle výskytu pravděpodobnosti.
Matici jsem vypsal výše, dala by se asi udělat i automaticky. Ale jednodušší pro Tebe bude si nějakou vytvořit ručně. Tj. pokud se potká síla 8vs6 je šance, že padne jeden gól dle mě nejvyšší. Protože 8 je větší než 6, ale ne o hodně. Takže to bude vyrovnaný zápas. Největší šance tedy je, že padne 0–2 gólů. Těm možnostem dáš více procent. Že padnou 3 góly je už méně pravděpodobné, proto jem nahořel dal 5%. Osm je skoro scifi takže jsem dal do matice 0,01%.
Druhá část je převést matematický vzorec z té wiki.
Jednoduchý příklad s kostkou. Na kostce při „ideální“ testu padne z šesti pokusů rovnoměrně každá možnost. Tj. matice by vyapala takhle:
1 - 16,67%, 2 - 16,67% ...
. Každá hodnota má stejnou šanci padnout.1,2,3,4,5,6
Druhý příklad s fixlovanou kostkou (vlastně systém těch výsledků). Hraješ Kingdom Come a máš kostku, na které častěji padají lichá čísla. Abys to dokázal nasimulovat musíš použít nějakou tu matematickou poučku. Matice by vypadala takhle přibližně (nepočítám jsem línej)
1 = 10%, 2 = 5%, 3 = 10%, 4 = 5%, 5 = 10%, 6 = 5%
. Při více iteracích toho hodnu dostaneš častěji podobný výsledek, kde se bude v průměru vyskytovat více lichých čísel.1,2,3,3,5,6
Pořád ještě jako úplně nevím, protože potřebuji góly pro oba aktéry daného zápasu, ale nechám si to rozležet v hlavě, díky každopádně.
- nightfish
- Člen | 519
Klobás napsal(a):
Pořád ještě jako úplně nevím, protože potřebuji góly pro oba aktéry daného zápasu, ale nechám si to rozležet v hlavě, díky každopádně.
Pro každý zápas musíš vygenerovat dva počty vstřelených gólů – první pro dvojici [tým 1 útok, tým 2 obrana] a druhý pro dvojici [tým 2 útok, tým 1 obrana] – tím dostaneš celkové skóre zápasu.
- Klobás
- Člen | 113
nightfish napsal(a):
Klobás napsal(a):
Pořád ještě jako úplně nevím, protože potřebuji góly pro oba aktéry daného zápasu, ale nechám si to rozležet v hlavě, díky každopádně.Pro každý zápas musíš vygenerovat dva počty vstřelených gólů – první pro dvojici [tým 1 útok, tým 2 obrana] a druhý pro dvojici [tým 2 útok, tým 1 obrana] – tím dostaneš celkové skóre zápasu.
Ano, ale i tak mi to nejde moc sestavit. V mojí sportovní jednoduché simulaci mi už chybí jen toto. Nenapsal by někdo nějakou easy metodu?
- Pavel Kravčík
- Člen | 1196
No samozřejmě si uděláš funkci a dáš do ní 2× parametry jak zmiňoval @nightfish.
Pokud chceš hodně „triviální“ random. Tak si napiš pole 0–100 pro kombinace a pak pouštěj rand v ranfe 100 čísel. :)
- Klobás
- Člen | 113
Pavel Kravčík napsal(a):
No samozřejmě si uděláš funkci a dáš do ní 2× parametry jak zmiňoval @nightfish.
Pokud chceš hodně „triviální“ random. Tak si napiš pole 0–100 pro kombinace a pak pouštěj rand v ranfe 100 čísel. :)
Haha :) takovej trivialni teda nechci. Necham tomu cas, třeba to casem napisi, ted mi to proste nejde.
- Pavel Kravčík
- Člen | 1196
Ty čteš, ale neposloucháš. :) Myslel jsem to takhle. Pokud to pole bude mít cca 100 hodnot, už to bude relativně věrohodné. Tohle je nejjednodušší a relativně přesné při určitém počtu kombinací, co jde vymyslet. Například tenhle kód, když se potkají 6. Dopadne to náhodně, ale je větší šance že to skončí 1:1, protože jsou týmy vyrovnané.
$array = [];
$array['6vs6'] = [0 => '0:0', 1 => '1:1', 2 => '1:1', 3 => '2:2', 4 => '2:1', 5 => '1:2'];
echo $array[rand(1,6)]; //vysledek
- David Matějka
- Moderator | 6445
zkus si to nejdřív „naprogramovat“ v offline :)) například
jednoduchý model – vem si šestihraný kostky a každý tým hází tolika
kostkama, jakou má sílu (v rozmezí třeba 1–3). kdo hodil víc, vstřelil
gól. a když bude součet stejný, tak hra končí.
a pak si to převeď na kód a upravuj si parametry, aby to hezky
vycházelo :)