[ rick_hunter @ 06.06.2018. 08:13 ] @
Pozdrav.Napravio sam program za uparivanje igrača za igranje neke društvene igre, tipa riziko.
Ima nekoliko stolova sa različitim terenima, tj stolova ima upola manje od broja igrača (na pr. 10 igrača 5 stola, 12 igrača 6 stola). Po dva igrača igraju za jednim stolom.
Da li ima neko ideju kako bih mogao da dodelim igračima svaki put različit sto, sve dok je to moguće?
Da napomenem da imam bazu u kojoj sve beležim.

Unapred hvala!
[ savkic @ 06.06.2018. 09:49 ] @
Pogledaj Bergerov sistem za uparivanje igrača po kolima:
https://sr.wikipedia.org/sr-el...%D0%B1%D0%BB%D0%B8%D1%86%D0%B5
[ rick_hunter @ 06.06.2018. 13:49 ] @
Bergerov sistem je uparivanje igrača. Ne vidim kako mogu da ga primenim za dodeljivanje stolova igračima.
Probao sam da u bazi za svakog igrača beležim za kojim stolom je igrao a zatim kod sledeće dodele stolova iščitavao te podatke i vršio proveru da li je igrao za tim stolom ali često se desi da poslednji par nema dodeljen sto jer je ostao sto na kojem je jedan od tih igrača već igrao.

primer kako bi trebalo da bude:

1. kolo
Igra1 - Igrac2 -> Sto 1
Igra3 - Igrac4 -> Sto 2
Igra5 - Igrac6 -> Sto 3
Igra7 - Igrac8 -> Sto 4


2. kolo

Igra1 - Igra3 -> Sto 3
Igra2 - Igra4 -> Sto 4
Igra5 - Igra7 -> Sto 1
Igra6 - Igra8 -> Sto 2


U ovom slučaju igra se do 2. kola.

[ savkic @ 06.06.2018. 15:06 ] @
> Bergerov sistem je uparivanje igrača. Ne vidim kako mogu da ga primenim za dodeljivanje stolova igračima.

Sve to što tebe sad muči je već razrađeno, ako u tvom turniru igra svako sa svakim, rešenje je to.
Berger je sistem i tablice napravio pre svega za šah gde je osim uparivanja itekako bitan sto za kojim se partija odigrava. Ako pogledaš tablice pažljivije videćeš raspored parova, ujedno i raspored stolova.
[ Milan Milosevic @ 06.06.2018. 21:03 ] @
Šta ti je ovde prioritetnije, da igračima dodeliš uvek različite stolove ili da igrač uvek igra sa različitim igračima, a da sto može da se ponavlja.

[Ovu poruku je menjao Milan Milosevic dana 06.06.2018. u 23:02 GMT+1]
[ Milan Milosevic @ 06.06.2018. 21:57 ] @
Evo ti rešenje za primer šest igrača i tri stola.
Levog igrača pomeraš za po jedno mesto ulevo, a desnog za po jedno mesto udesno.
Ukoliko nema više mesta probaciš ga na kraj odnosno početak.

Code:

[1,2]  [3,4]  [5,6]
[3,6]  [5,2]  [1,4]
[5,4]  [1,6]  [3,2]
[ ((BugA)) @ 06.06.2018. 23:32 ] @
Citat:
savkic: Berger je sistem i tablice napravio pre svega za šah gde je osim uparivanja itekako bitan sto za kojim se partija odigrava. Ako pogledaš tablice pažljivije videćeš raspored parova, ujedno i raspored stolova.

Možda mi nešto promiče, ali mislim da ovo nije tačno. Ako kolone/parove obeležimo brojevima (predstavljajući stolove), vidimo npr. da poslednji igrač uvek igra na prvom stolu (dok mu se protivnici menjaju). E sad, ovo valjda u šahu i ima logike, jer mislim da tu sto za kojim se igra zapravo ipak nije bitan(?), ali jeste bitno ko dobija bele/crne figure, a to se menja (koliko god je ravnomerno moguće).

Dalje, uzimajuću situaciju sa šest igrača i tri stola kao prost (ne i najprostiji) primer za manuelnu analizu, vidimo da nije moguće zadovoljiti uslov da kroz kola igra svako sa svakim (bez ponavljanja), a da pritom igrači ne ponavljaju sto za kojim su igrali (što je i logično, jer imamo pet kola a tri stola). Obrni-okreni, koristeći Bergerove tablice ali ipak menjajući sto za kojim par igra (kolonu u kojoj se par u kolu nalazi), već u trećem kolu dva igrača će ponovo igrati na nekom od stolova za kojima su igrali u prva dva kola (u tabeli ispod obeleženo zvezdicom) - ali ako ispratimo distribuciju stolova kroz sva moguća kola, na kraju opet dolazimo da je ona najpribližnija idealnoj, koliko god je to moguće (isto kao i sa distribucijom belih/crnih figura).

kolo, par za stolom (Bergerova tablica, sa promenom kolona u kojoj se par nalazi - stola na kome igra)
I II III
1 1:6 2:5 3:4
2 5:3 6:4 1:2
3 2:6 3:1 4:5
4 1:4 2:3 6:5
5 4:2 5:1 3:6

igrač, sto u kolu
1 2 3 4 5
1 I III II I* II*
2 II III I II* I*
3 III I II II* III*
4 III II III* I I*
5 II I III III* II*
6 I II I* III III*

igrač, igrao za stolom
1 Ix2 IIx2 III
2 Ix2 IIx2 III
3 I IIx2 IIIx2
4 Ix2 II IIIx2
5 I IIx2 IIIx2
6 Ix2 II IIIx2

igrač, igrao kao beli/crni
1 beli: 3 crni: 2
2 beli: 3 crni: 2
3 beli: 3 crni: 2
4 beli: 2 crni: 3
5 beli: 2 crni: 3
6 beli: 2 crni: 3
[ rick_hunter @ 07.06.2018. 00:15 ] @
Citat:
Milan Milosevic:
Šta ti je ovde prioritetnije, da igračima dodeliš uvek različite stolove ili da igrač uvek igra sa različitim igračima, a da sto može da se ponavlja.

[Ovu poruku je menjao Milan Milosevic dana 06.06.2018. u 23:02 GMT+1]


Bitne su mi obe stvari. Inače igrače uparujem na osnovu rang liste (prvo plasirani sa drugim, treći sa četvrtim...) tako da jaki igraju sa jakima a slabi sa slabima ali pod uslovom da se dva igrača ne susretnu dva puta.Ne odigraju se sva kola.
Na primer za 20 igrača (uvek je paran broj) odigra se od 4 do 5 kola i tu se igra završava i proglašava pobednik.

[ savkic @ 07.06.2018. 00:17 ] @
> Možda mi nešto promiče, ali mislim da ovo nije tačno. Ako kolone/parove obeležimo brojevima (predstavljajući stolove), vidimo npr. da poslednji
> igrač uvek igra na prvom stolu (dok mu se protivnici menjaju). E sad, ovo valjda u šahu i ima logike, jer mislim da tu sto za
> kojim se igra zapravo ipak nije bitan(?), ali jeste bitno ko dobija bele/crne figure, a to se menja (koliko god je ravnomerno moguće).

U pravu si, prevideo sam poslednjeg igraca i njegov raspored po stolovima. Ne znam sto je to tako ispalo, verovatno je takav osnovni algoritam, verujem da ima neka varijanta (poput tvog primera) gde je sto random.
[ ((BugA)) @ 07.06.2018. 00:24 ] @
Citat:
rick_hunter:
Citat:
Milan Milosevic:Šta ti je ovde prioritetnije, da igračima dodeliš uvek različite stolove ili da igrač uvek igra sa različitim igračima, a da sto može da se ponavlja.

Bitne su mi obe stvari. Inače igrače uparujem na osnovu rang liste (prvo plasirani sa drugim, treći sa četvrtim...) tako da jaki igraju sa jakima a slabi sa slabima ali pod uslovom da se dva igrača ne susretnu dva puta.Ne odigraju se sva kola.
Na primer za 20 igrača (uvek je paran broj) odigra se od 4 do 5 kola i tu se igra završava i proglašava pobednik.


Kako ti nije bitno da svako igra sa svakim, Milan ti je već dao rešenje za to (sa sve objašnjenjem algoritma) - tu je maksimalni broj kola jednak broju stolova, a da se neki par ne ponovi (ako dobro vidim).

Za situaciju da je potrebno da svako igra sa svakim, onda ti je rešenje ono što sam ja napisao, Bergerova tablica sa malom modifikacijom u smislu pomeranja parova u okviru kolona (stolova). Tu je maksimalan broj kola za jedan manji od broja igrača (za paran broj igrača), gde će se neki stolovi ravnomerno (koliko je to moguće) ponavljati.
[ savkic @ 07.06.2018. 00:27 ] @
> Bitne su mi obe stvari. Inače igrače uparujem na osnovu rang liste (prvo plasirani sa drugim, treći sa četvrtim...) tako da jaki igraju sa jakima
> a slabi sa slabima ali pod uslovom da se dva igrača ne susretnu dva puta.Ne odigraju se sva kola.

To onda liči na švajcarski sistem parovanja, s tim što je kod njega raspored po stolovima shodno plasmanu (prvoplasirani je uvek na prvom). Elem, verovatno ima neka varijanta gde je raspored po stolovima random.

[ Milan Milosevic @ 07.06.2018. 06:09 ] @
Citat:
rick_hunter:
Citat:
Milan Milosevic:
Šta ti je ovde prioritetnije, da igračima dodeliš uvek različite stolove ili da igrač uvek igra sa različitim igračima, a da sto može da se ponavlja.


Bitne su mi obe stvari. Inače igrače uparujem na osnovu rang liste (prvo plasirani sa drugim, treći sa četvrtim...) tako da jaki igraju sa jakima a slabi sa slabima ali pod uslovom da se dva igrača ne susretnu dva puta.Ne odigraju se sva kola.
Na primer za 20 igrača (uvek je paran broj) odigra se od 4 do 5 kola i tu se igra završava i proglašava pobednik.



Nigde nisi u uvodnom postu spominjao sparivanje po rejtingu igrača.

Ovo ti komplikuje stvar i prosto ne postoji optimalno rešenje jer ne postoji način da utvrdiš koji će igrač izaći kao pobednik iz duela što te sprečava da predvidiš idealnu kombinaciju stolova.

Treba razmisliti o mogućnosti većeg broja stolova tako da se u određenim partijama ne igra na svim stolovima.
Neki mogu da ostanu prazni tj. bez igrača.
Razmisli i o toj mogućnosti.
[ rick_hunter @ 07.06.2018. 07:00 ] @
Citat:
Milan Milosevic:

Citat:
savkic:
> Bitne su mi obe stvari. Inače igrače uparujem na osnovu rang liste (prvo plasirani sa drugim, treći sa četvrtim...) tako da jaki igraju sa jakima
> a slabi sa slabima ali pod uslovom da se dva igrača ne susretnu dva puta.Ne odigraju se sva kola.


Nigde nisi u uvodnom postu spominjao sparivanje po rejtingu igrača.

Ovo ti komplikuje stvar i prosto ne postoji optimalno rešenje jer ne postoji način da utvrdiš koji će igrač izaći kao pobednik iz duela što te sprečava da predvidiš idealnu kombinaciju stolova.

Treba razmisliti o mogućnosti većeg broja stolova tako da se u određenim partijama ne igra na svim stolovima.
Neki mogu da ostanu prazni tj. bez igrača.
Razmisli i o toj mogućnosti.



Uparivanje nije unapred poznato. Za prvo kolo (uparivanje) radi se žreb. Po odigranom prvom kolu radi se rangiranje pa zatim uparivanje za drugo kolo, pa zatim po završetku mečeva drugog kola na osnovu rang liste radi uparivanje za treće kole i sve tako do n kola. Nije potrebno da igra svako sa svakim jer je to previše mečeva, uglavnom se igra od 4 do 5 kola. Oni koji uglavnom pobeđuju igraće će takođe sa onima koji pobeđuju a oni koji gube igraće takođe sa onima koji gube. Tako da se dobijaju mečevi da jaki igraju sa jakima a slabi sa slabima.


[Ovu poruku je menjao rick_hunter dana 07.06.2018. u 08:18 GMT+1]
[ Zlatni_bg @ 08.06.2018. 03:01 ] @
Pa ako je samo to problem, sto ne uvedes neki fiktivni broj, koji ce sadrzati podatak o statistici igraca? Recimo svaka pobeda donosi 30 bodova, svaki poraz oduzima 25. Onda u zreb ubacujes samo one koji su recimo, 100-200 poena, 200-300 poena, 300-600 poena, itd.
[ Zlatni_bg @ 08.06.2018. 03:04 ] @
Ili da ubacis podatak, ako se igra 1 na 1 (nisam obratio paznju da je i to moguce jer si spomenuo riziko, koji se obicno igra sa 2+) koji je bio poslednji protivnik i matchmaking da mu jednostavno ne dozvoli igru sa njim. Mozes i da iskombinujes poene i "lastplayed".

Tebi ne treba algoritam ovde, vec masta.
[ tkaranovic @ 08.06.2018. 06:01 ] @
Ako je 16 takmicara, u prvom krugu ima 8 parova.
Posle prvog kruga se dobijaju dva nivoa:

8 - pobednika
8 - gubitnika

8 pobednika mogu igrati medju sobom. 4 parova igra u sledecem krugu.
8 gunitnika igraju medju sobom. 4 parova igra u sledecem krugu.

Posle drugog kruga 4 nivoa:

4 - pobednika - pobednika
4 - pobednika - gubitnika
4 - gubitnika - pobednika
4 - gubitnika - gubitnika

Posle treceg kruga kruga:

2 - pobednika - pobednika - pobednika
2 - pobednika - pobednika - gubitnika
...

To je isto kao na teniskim turnirima.
Jedina je rqazlika sto ovde i porazeni igraju.
Posle svakog kola postoji novi nivo porazenih.

Problem je pocetni broj takmicara.
U prvom kolu broj takmicara mora da bude 2**Broj kola.

Ako ih im a 20 onda od tih 20 treba dobiti 16.
Tako se na teniskim turnirima igraju kvalifikacije.
Ovde bi se moglo zrebom odrediti kji takmicari se moraju kvalifikovati.
O 8 kvalifikanata 4 pobednika se kvalifikuju a 4 ispadaju sa takmicenja.
Tako se dobija 16 za prvo kolo.

Ako svih 20 mora da igra bez kvalifikacija onda za to treba vise vremena i ideja.
[ rick_hunter @ 08.06.2018. 09:31 ] @
Citat:
rick_hunter:
Pozdrav.Napravio sam program za uparivanje igrača za igranje neke društvene igre, tipa riziko.
Ima nekoliko stolova sa različitim terenima, tj stolova ima upola manje od broja igrača (na pr. 10 igrača 5 stola, 12 igrača 6 stola). Po dva igrača igraju za jednim stolom.
Da li ima neko ideju kako bih mogao da dodelim igračima svaki put različit sto, sve dok je to moguće?
Da napomenem da imam bazu u kojoj sve beležim.

Unapred hvala!


Ja sam već napravio kako će igrači da se uparuju i to nije problem, nego mi je problem kako da izvedem da igrači igraju svaki put na različitom stolu?
Probao sam tipa da se u prvom kolu stolovi dodeljuju random i to je ok. U drugom i sledećim kolima vršio sam proveru da li su igrači igrali na navedenom stolu, ako jesu, proveri sledeći sto a ako nisu dodeli ga.Često se desi da napravi problem kod zadnjeg para. Naime svim predhodnim parovima su dodeljeni brojevi stolova na kojima nisu igrali a zadnjem paru ostao je sto na kojem je već igrano.





[ tkaranovic @ 08.06.2018. 11:29 ] @
Ako se rangiraju to je onda kriterijum.
Sto je onda bitno na kom stolu igraju?
[ rick_hunter @ 08.06.2018. 12:12 ] @
Citat:
tkaranovic:
Ako se rangiraju to je onda kriterijum.
Sto je onda bitno na kom stolu igraju?


Svaki sto ima drugačiju mapu i teren.
[ tkaranovic @ 08.06.2018. 16:18 ] @
Sad vidim da si to vec napisao gore.

Jednom () sam pravio programcic za jednu malu stampariju.
Trebalo je na osnovu dimenzija u naterijalu izanrati onu koja ima najmanje skarta.
Stampar je mislio da je vrlo komplikovano pronaci koja je od velikog broja opcija najbolja.
Jednostavno resenje je bilo da se sortiraju prvih 10 i svaka sledeca se ili ubaci u listu ili se ide dalje.
Stampar je bio zadibljen resenjem ;)
Na kraju se dobije 10 najboljih opcija.
Najbolja od tih 10 je sa najmanje skarta.
Malo sam pojednostavio tu pricu.

Poenta je da se sve opcije izvte i pronadje najbolja.

U ovom slucaju bi to bilo da se svi stolovi krenu vrteti redom dok ne daju resenje za sve parove.
[ Zlatni_bg @ 08.06.2018. 18:02 ] @
I dalje ne vidim sto je problem da se ubaci polje na kom stolu je igrano poslednji put i eventualno sa kim igracem se igralo? :)
[ tkaranovic @ 09.06.2018. 05:38 ] @
Treba napraviti semu igranja pre pocetka.
Tako da oni igraci koji mogu igrati u nekom sledecem kolu odigraju u prethodnim kolima za istim stoovima.
Tako im ostaju zajednicki slobodni stolovi.

Nesto kao kad se izvlace grupe u fudbalu.
Postoji kljuc po kojem se izvlace kuglice.
Kad su izvuceni svi parovi zna se pobednici kojih grupa ce igrati sa kojim gubitnicima unapred.