Nesouvísí s Nette ale je to zajímavý problém

Klobás
Člen | 113
+
0
-

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.

  1. 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.czwww.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.

  1. 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
+
0
-

Nikdo nic? :( fňuk.

CZechBoY
Člen | 3608
+
0
-

Pro ne-Nette dotazy se doporučuje www.djpw.cz

Klobás
Člen | 113
+
0
-

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 …

CZechBoY
Člen | 3608
+
0
-

To tohle taky :D Je tam taky spousta chytrých lidí a občas jsem tam potkal i diskuse o netriviálních problémech.

Pavel Kravčík
Člen | 1181
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

  1. Tým 1 (síla 6) vs Tým 2 (síla 8) ⇒ co padne?
  2. 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 | 1181
+
0
-

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
+
0
-

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 | 472
+
0
-

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
+
0
-

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 | 1181
+
0
-

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
+
0
-

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 | 1181
+
0
-

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
+
+2
-

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 :)