Jak zasymulować sprawiedliwie walkę ?

0

Mam takie małe zadanie chodzi o to żeby zrobić symulacje treningu i walki.
Do wytrenowania mamy np jakies tam 3 mozliwosci: A,B,C
Każda z tych możliwości może zostać wytrenowana a skok jest o 0.1
Czyli powiedzmy po 3 dniach mozemy miec:

A: 2.3
B: 1.9
C: 3.2

I teraz taka osoba z takimi możliwościami chce walczyć z inna osobą, która ma:

A: 3.4
B: 2.3
C: 0.4

Jak zatem sprawiedliwie rozegrać walkę czyli sprawdzić kto jest silniejszy i kto
powienien wygrać ? Chodzi o to by ktoś nie robił cały czas samego A bo nawet jeśli zrobi
samo:

A: 6.0
B: 0.0
C: 0.0

to zeby nie mial zawsze 100% wygrywalnosci z inna osoba ktra trenuje rozne inne cechy.?
Sa jakies algorytmy albo co zastosować takiego znanego ?

0

Może mechanika papier-kamień-nożyce?

Czyli osoba A:2 B:0 C:0 wygrywa z A:0 B:2 C:0 która wygrywa z kolei z A:0 B:0 C:2 która za to wygrywa z tą pierwszą.

0

Nozyce kamien papier zbyt losowe, chociaz przewage mialaby osoba z wyzszym punktem. Ale nadal zbyt malo paramterow pobocznych. w przypadku rownej liczby czynnika B inne musialby miec znaczenie. Zerkne na te srednie wazone

2

To może papier-kamień-nożyce-jaszczurka-Spock?

1

Może jakaś wariacja wszystko na wszystko?
Wykorzystując twoje przykłady:

przeciwnik1
A1: 2.3
B1: 1.9
C1: 3.2

przeciwnik2
A2: 3.4
B2: 2.3
C2: 0.4

(A1 - A2) * 2 = -2.2
(A1 - B2) = 0.0
(A1 - C2) = 1.9

(B1 - A2) = -1.5
(B1 - B2) * 2 = -0.8
(B1 - C2) = 1.5

(C1 - A2) = -0.2
(C1 - B2) = 0.9
(C1 - C2) * 2 = 5.6

Wynik: 5.2
przeciwnik1 wygrywa
Mimo że przeciwnik2 ma dwie statystyki wyższe, to przeciwnik1 odbija sobie na statystyce C, którą ma wytrenowaną najlepiej, a która u przeciwnika2 kuleje.
Różnica dwóch tych samych statystyk u przeciwników liczona podwójnie, wszystkie wyniki cząstkowe sumowane.

przeciwnik1
A1: 2.3
B1: 1.9
C1: 3.2

przeciwnik2
A2: 6.0
B2: 0.0
C2: 0.0

Wynik: 5.6
przeciwnik1 wygrywa
Przeciwnik1 znowu wygrywa mimo bardzo dużej przewagi przeciwnika2 w statystyce A. Gdyby przeciwnik2 podbił sobie trochę B, to by może wygrał, bo nie zgarniałby tam tyle minusów. Pakowanie ciągle w A (nawet do 7.0 punktów) nic by nie dało.

0

Coś takiego by w sumie chodziło, muszę zasymulować rożne skrajne warianty ale mniej więcej obaj przeciwnicy mieliby szanse na podobne statystyki, dlatego muszę zoabczyć skrajny przypadek z uśrednionym.

P.S. jeśli znak (+) wygrywa przeciwnik 1 jeśli (-) wygrywa nr 2 tak?

0

Zrobiłem symulacje i wyszło tak:

A1: 1
B1: 1
C1: 1

A2:3
B2:0
C2:0

Wynik wyjdzie 0, czyli błąd bo chciałem żeby tutaj wyszło właśnie, że powinien wygrać przeciwnik 1 mający doświadczenie w 3 dziedzinach a nie w jednej. bo tak to można ciągle pakować w jedno i mieć 120 w jednym a inni po 40 w różnych i będzie to samo

0

To jest akurat średni przykład, ponieważ ogranicza się do (A1+B1+C1-A2-B2-C2), co jest bezsensowne jak obydwu przeciwników miało taki sam czas na trening. Trzeba w tym wypadku to dobrze przeanalizować, może za każdym razem na korzyść gracza wpływałby pierwiastek z różnicy parametrów. Może np. zrobić różne statystyki, powiedzmy atak, obrona, szybkość, czy atak, obrona, życie. Trzeba tylko tak zmapować wytrenowane parametry do rzeczywistych w obliczeniach, żeby najlepsza taktyka była nieoczywista (zrobić coś w stylu kamień papier nożyce, tylko na wyższym poziomie, patrz np. Starcraft).

Edit: Zainteresował mnie ten problem i przetestowałem ilość wygranych gdy kryterium zwycięstwa jest wygrana w dwóch parametrach z 3 i wygląda to sensownie (nie brałem pod uwagę remisów, można je rozwiązać metodą kamień, papier, nożyce): http://ideone.com/2MJJh .

0

Wygląda sensownie czyli że warto trenować każdą wartość po kolei, np siła, szybkość, odporność. Tylko tam jest zestawienie do 7 ale przy nieskończoności powinno być tak samo prawidłowo. Ale ten Python mnie rozwalił :D nic nie kumam

1 użytkowników online, w tym zalogowanych: 0, gości: 1