Wie kann ich verhindern, dass kleine numerische Vorteile das Gleichgewicht einer Begegnung dominieren?


27

Ich habe einige Zeit an einem Spiel herumgebastelt und ich habe eine Menge Ärger mit etwas:

Ich habe zwei Charaktere, von denen jeder Attribute (ungefähr zehn) in einem Bereich (zwischen 1 und 20) hat. Ich möchte diese Attribute verwenden, um einen "Wurf" zu generieren, so dass der höhere Wurf diese bestimmte Begegnung gewinnt. Es ist erwähnenswert, dass die beiden Zeichen nicht sind gegenseitig beschädigen / verteidigen. Sie rollen beide, um zu sehen, ob sie das bestehen, was wir wohl als Fähigkeitsüberprüfung bezeichnen könnten. Sie würfeln beide, um gegen einen gemeinsamen Wert zu bestehen oder zu scheitern. Sie interagieren nicht miteinander.

Wenn jedoch eine der Figuren auch nur einen kleinen numerischen Vorteil hat, hat jede Formel, die ich mir ausgedacht habe, dazu geführt, dass die etwas überlegene die meiste Zeit gewonnen hat. Das ist unerwünscht.

Ich habe versucht, das "relevanteste" Attribut für den Test mit 80% und die Summe der anderen Attribute mit 20% zu gewichten. Ich habe auch versucht, Durchschnittswerte zu vergleichen, um einen relativen Unterschied zu erzielen, und diesen zu verwenden, um den schwächeren Charakter zu verstärken. Beide Ansätze führten zu den signifikanten Vorteilen, die ich zu beseitigen versuche (wenn ich die Begegnung beispielsweise 5.000 Mal ausführe, gibt es ziemlich regelmäßig eine Seite, die alle 5.000 gewinnt).

Das Hinzufügen einer "Glück" -Komponente scheint nur von Bedeutung zu sein, wenn sie zugunsten des geringeren Charakters gewichtet ist und ich dort keine gute Balance gefunden habe.

Mit welchen Ansätzen kann ich die Auswirkung eines kleinen numerischen Vorteils abschwächen und dennoch diesen Vorteil beibehalten und vergrößern, wenn die relative Lücke in den Attributen größer wird?


Gemäß der Anfrage sind hier die Einzelheiten, die ich bisher habe. Einige Dinge, die ich noch nicht herausgefunden habe, bleiben also Allgemeingültigkeiten:

Im Moment wird die Rolle als generiert

0.8 * (mainAttribute) + 0.2 (1/3 * subAttA + 1/3 * subAttB * 1/3 subAttC)

Gegenwärtig werden Zahlen in der Größenordnung von 4,0 erzeugt. Attribute werden zufällig zwischen angegebenen Bereichen generiert. Der aktuelle Test verwendet ein Zeichen mit Attributen von 2 bis 4 und den Gegner zwischen 3 und 5. Vorhersehbar ergibt dies Durchschnittswerte nahe 3 bzw. 4.

Mit diesem Ein-Punkt-Vorteil würde ich gerne den stärkeren der beiden Siege im Bereich von 55% bis 60% der Zeit sehen, wobei sich dieser Vorteil auf etwa 80% der Zeit mit einem durchschnittlichen Attributvorteil von erhöht 5 oder 6, 90% bei den Vorteilen 7 oder 8, so dass ein wenig Raum für einen unwahrscheinlichen Sieg bleibt, wenn die Lücke größer wird. Ich würde es vorziehen, niemals garantierte Siege zu haben, aber vielleicht werden die Dinge sehr unwahrscheinlich - je nachdem, ob 99,5% oder 99,6% der Zeit gewonnen werden, in der die Lücke sehr groß wird.

Die aktuelle Formel erzeugt eine nicht zufällige Zahl. Die Zufälligkeit ergibt sich aus der Auswahl der relevanten Attribute. Nicht alles Attribute werden für jede Rolle verwendet. Es ist möglich, dass derjenige mit den insgesamt schwächeren Attributen in den für diesen Wurf relevanten Bereichen stärker ist und einen Gewinn stiehlt. Aber vorhersehbar kommt es selten vor.

Mein nächster Versuch war es, ihre relativen Stärken abzuwägen, indem ich den Durchschnitt aller Werte eines jeden Einzelnen ermittelte, sie gegeneinander aufteilte und diesen Wert verwendete, um dem kleineren Charakter einen kleinen Schub zu verleihen. Dies hat die Situation ein wenig geglättet, hatte aber immer noch eine ausgeprägte Tendenz, aus 5.000 Versuchen 5.000 Siege für einen Mann zu erzielen.


2
Sie sagen, die "Rolle wird generiert", aber dann veröffentlichen Sie eine Formel, die immer eine feste Zahl generiert. Wo ist die Zufälligkeit?
Philipp

1
Wenn ich Sie also richtig verstehe, ist die einzige Zufälligkeit in Ihrer Spielmechanik die zufällige Auswahl des Hauptattributs?
Philipp

2
Aber wie @Philipp impliziert, werden dann 5000 Versuche genau die gleichen Ergebnisse liefern? Oder generieren Sie bei jeder Simulation neue Attribute
Felsir

1
Wie genau gewinnt einer der beiden, wenn sie nicht miteinander interagieren? Anscheinend fehlen hier einige Daten?
Erik

1
Die Rolle, die jeder produziert, wird mit einem Ziel verglichen, das er erreichen muss. Wenn einer es erreicht und der andere nicht, gewinnt dieser. Wenn beide es erreichen, gewinnt der höhere der beiden. Wenn keiner erreicht, bekommt keiner den Punkt. In dem unwahrscheinlichen Gleichstand spalteten sie den Punkt. Mit "nicht interagieren" meinte ich, nicht im herkömmlichen Sinne gegeneinander zu schlagen oder sich dagegen zu verteidigen, da hier ein Teil der anfänglichen Diskussion angesiedelt war.
Ffenliv

Antworten:


36

Das Problem bei Ihrer Herangehensweise ist, dass Sie das Ergebnis des Kampfes in dem Moment bestimmen, in dem Sie sich für den Hauptstatus entscheiden. Wenn Sie 4 Hauptstatistiken haben und der Kämpfer nur in einer von ihnen besser ist, beträgt die Gewinnchance immer 1 zu 4, unabhängig davon, wie groß die Unterschiede tatsächlich sind. Wenn Sie feinkörnigere Ergebnisse erzielen möchten, benötigen Sie feinkörnigere Zufälligkeiten.

Zuallererst denke ich, dass Sie Ihre zufällige Auswahl für das Hauptattribut behalten können, und Sie können auch Ihre Formel behalten, wenn Sie möchten. Es ist die Zahl, die angibt, wie viel Vorsprung dieser Kämpfer in dieser spezifischen Begegnung hat. Für den Rest dieses Beitrags werde ich dies als gerecht bezeichnenpower .

Eine Methode, die ich in vielen Spielen angewandt habe und die mir beim Zweikampf sehr geholfen hat Dingen mit einem bestimmten geht power, ist es, eine zufällige Gleitkommazahl zwischen 0und powerfür beide zu würfeln und zu sehen, wer höher würfelt. Hier ist eine Liste der erwarteten Ergebnisse dieser Methode. Die Prozentsätze werden nicht berechnet, sondern experimentell generiert, indem 100000 Kämpfe pro Kombination und Iterationszahl ausgeführt werden und gezählt wird, wer wie oft gewonnen hat:

PowerA | PowerB | Win chance of A
  9    |   1    |    94.5%
  8    |   2    |    87.5%
  7    |   3    |    78.6%
  6    |   4    |    66.6%
  5    |   5    |    50.0%
  4    |   6    |    33.3%
  3    |   7    |    21.5%
  2    |   8    |    12.5%
  1    |   9    |    5.5%

Das Schöne an diesem Algorithmus ist, dass er skaliert, egal wie groß die Zahlen sind, mit denen Sie es zu tun haben. Die Chance von 0,3 gegen 0,7 ist die gleiche wie die von 3 gegen 7, 300 gegen 700 oder 3.000.000.000 gegen 7.000.000.000.

Wenn dies für Ihren Geschmack immer noch zu unvorhersehbar ist, können Sie den Kampf vorhersehbarer machen, indem Sie für jeden Kämpfer mehrere Zufallszahlen würfeln und diese addieren. Aufgrund des Gesetzes über große Zahlen gleichen sich viele zufällige Ereignisse aus und führen zu besser vorhersehbaren Ergebnissen. Hier ist eine Tabelle mit unterschiedlicher Anzahl von Iterationen.

| A | B | Iterations
|   |   |       1 |     2 |     3 |     4 |     5 |     6 |     7 |     8 |     9 |
-----------------------------------------------------------------------------------
| 9 | 1 |   94.5% | 99.3% | 99.9% |100.0% |100.0% |100.0% |100.0% |100.0% |100.0% | 
| 8 | 2 |   87.4% | 96.3% | 98.8% | 99.5% | 99.8% |100.0% |100.0% |100.0% |100.0% | 
| 7 | 3 |   78.7% | 89.2% | 94.0% | 96.6% | 97.8% | 98.9% | 99.2% | 99.6% | 99.7% | 
| 6 | 4 |   66.8% | 74.3% | 79.2% | 82.9% | 85.7% | 88.0% | 89.9% | 91.2% | 92.5% | 
| 5 | 5 |   50.0% | 50.0% | 50.0% | 50.0% | 50.0% | 50.0% | 50.0% | 50.0% | 50.0% | 
| 4 | 6 |   33.6% | 25.6% | 20.9% | 17.1% | 14.7% | 12.0% | 10.2% |  8.9% |  7.5% | 
| 3 | 7 |   21.4% | 10.7% |  6.0% |  3.5% |  2.0% |  1.2% |  0.7% |  0.4% |  0.3% | 
| 2 | 8 |   12.7% |  3.7% |  1.2% |  0.4% |  0.1% |  0.1% |  0.0% |  0.0% |  0.0% | 
| 1 | 9 |    5.5% |  0.7% |  0.1% |  0.0% |  0.0% |  0.0% |  0.0% |  0.0% |  0.0% | 

Die Ergebnisse von 100% und 0% in der obigen Tabelle sind eine Illusion aufgrund von Rundungsdifferenzen. Sofern der powereines Kämpfers nicht genau 0 ist, besteht immer die Möglichkeit, dass er gewinnt. Im obigen Test ist es einfach nicht vorgekommen, daher können Sie damit rechnen, dass es unter 1: 100000 liegt.

Möglicherweise stellen Sie auch leichte Unregelmäßigkeiten fest, die auf Stimmungsschwankungen von java.lang.Random zurückzuführen sind und möglicherweise nicht angezeigt werden, wenn Sie den Code erneut mit einem anderen Startwert ausführen.

Das Programm, mit dem ich diese Tabelle erstellt habe (Java).

public class Main {

    private static Random random = new Random();
    private static final int SAMPLES = 100000;

    public static void main(String[] args) {        
        for (int i = 1; i < 10; i++) {
            double powerA = 10.0 - i;
            double powerB = i;
            System.out.print("| ");
            System.out.print((int)powerA);
            System.out.print(" | ");
            System.out.print((int)powerB);
            System.out.print(" |   ");

            for (int iterations = 1; iterations < 10; iterations++) {
                int wins = 0;
                for (int j = 0; j < SAMPLES; j++) {
                    if (fight(powerA, powerB, iterations)) wins++;
                }
                System.out.print(String.format("%2.1f", 100.0 * (double)wins / (double)SAMPLES));
                System.out.print("% | ");
            }
            System.out.print("\n");
        }       
    }

    private static boolean fight(double powerA, double powerB, int iterations) {        
        double sumA = 0.0f;
        double sumB = 0.0f;     
        for (int i = 0; i < iterations; i++) {
            sumA += random.nextDouble() * powerA;
            sumB += random.nextDouble() * powerB;

        }       
        return sumA > sumB;
    }
}

Wenn Sie diesen Code in Ihrem Spiel verwenden möchten, ist er unter der von Sam Hocevar veröffentlichten WTF Public License Version 2 lizenziert .


Dies ist ein interessanter Ansatz. Bei einigen meiner Versuche war ich auf halbem Weg. Ich werde das verkabeln und es versuchen. Danke vielmals.
Ffenliv

10
Die Prozentsätze in Ihrer ersten Tabelle können genauso berechnet werden 1 - powerA / ( 2 * powerB ).
Kyle

2
@Kyle Das funktioniert nur so lange powerA < powerB. Sobald powerA größer ist, müssen Sie zu wechseln powerB / (2 * powerA).
Dorus

1
Ich bin mir nicht sicher, ob Sie mit dem StackExchange-ToS von der obligatorischen Site-Lizenz für Inhalt und Code abweichen können, selbst wenn Ihre Lizenz mehr Erlaubnis als ihre hat. Natürlich kann man nicht feststellen, ob es sich um das vorgeschlagene MIT oder noch um das CC handelt.
Lars Viklund

5
@LarsViklund Sie beginnen hier eine Off-Topic-Diskussion, aber nein, das ist falsch. Die Lizenz zum Stapelaustausch ist nicht exklusiv, was bedeutet, dass ich mein geistiges Eigentum nach wie vor unter anderen Lizenzbedingungen abgeben kann, wenn ich möchte. Meine Beiträge sind gemäß CC-BY-SA (gemäß Auftrag von Stackexchange) und WTFPL doppelt lizenziert. Sie können wählen, unter welchen Bedingungen Sie meine Beiträge verwenden möchten.
Philipp

13

Dein Fehler ist ein "würfelbasierter" Ansatz. Sie haben einen Computer, auf dem Sie ein beliebiges System verwenden können. Stellen Sie eine Tabelle auf, die einen Unterschied in den Werten in eine Gewinnchance für das prozentuale Alter umwandelt, und setzen Sie die Werte dann auf absolut alles, was Sie möchten, z

Difference (A-B) | %chance A wins
-----------------|---------------
+5 or greater    | 100%
+4               | 95%
+3               | 85%
+2               | 70%
+1               | 55%
0                | 50%

(Sie brauchen nur die Hälfte der Tabelle zu tun, wählen Sie einfach immer A als diejenige mit der höheren Statistik)

Offensichtlich sind diese Zahlen nur ein Beispiel. Sie können festlegen, welche Verteilung Ihnen gefällt.


2
Obwohl ich derzeit mit einem System arbeite, das auf der akzeptierten Antwort basiert, ist dies recht einfach und möglicherweise auch eine gute Lösung für mich. Ich wusste, dass der alte StackExchange für mich durchkommen würde.
Ffenliv

5

Dies ist eine ziemlich tiefe Frage, ehrlich gesagt, vom Standpunkt der Spielmechanik. Aber es gibt ein paar Dinge, die helfen könnten.

Aus diesem Grund haben die meisten Spiele eine separate Komponente für Treffer und Schaden, in der ein "Wurf" ausgeführt wird, um festzustellen, ob Sie einen Treffer erzielen, und dann ein "Wurf" gegen eine Schadenstabelle oder -reichweite für den angegebenen Charakter. Dies führt auch zu einigen genreübergreifenden Standardarchetypen, bei denen Sie möglicherweise kleinere, schnellere Charaktere mit weniger Trefferpunkten, aber mehr Schaden verursachen (Glaskanonenmagier, bestimmte Arten von Schurken) und größere, gepanzerte Charaktere, die weniger Schaden verursachen (Panzer, Krieger) ).

Dies führt zu einem natürlichen Gleichgewicht, in dem der kleinere Charakter möglicherweise zerbrechlich ist, jedoch nicht so oft getroffen wird, weil er agil ist. Außerdem wird das Spielfeld dadurch ausgeglichen, dass mehr Schaden verursacht wird (ein Zauberspruch oder ein Gifteffekt, der Schaden verursacht) Zeit). Der Panzer ist möglicherweise langsamer und wird häufiger getroffen, verfügt jedoch häufig über eine große Menge an Lebenspunkten oder Trefferpunkten, verursacht jedoch tendenziell weniger Schaden pro Treffer (oder Schaden pro Sekunde).

Der Hintergrund für diese ist, warum viele Spiele fortwährend das Ausbalancieren von Waffen und Klassen und Statistiken durchlaufen. World oder Warcraft, Destiny, Diablo, Battlefield: Jede Art von Spiel in jedem Genre durchläuft im Laufe der Zeit oft das Balancieren und Optimieren.

Dies ist möglicherweise keine direkte Antwort, aber Sie haben nach allgemeinen Ideen gefragt. Bewerten wir also auch das Spielsystem.

Wie funktionieren diese Attribute? Wenn alles andere gleich ist (kein Archetyp, keine Rüstung oder bessere Waffen oder was auch immer), dann ist es absolut wahrscheinlich, dass ein geringer Gewinn die Dinge schwer zugunsten einer Seite wirft. Das Hinzufügen von Facetten im Kampf erschwert jedes System, ermöglicht aber auch mehr Flexibilität.


Abgesehen davon denke ich, dass dies eine ausgezeichnete Frage ist und zu einigen sehr interessanten Diskussionen über die Spielmechanik führen könnte. Es ist möglich, dass dies letztendlich meinungsbasiert wird, daher ist es wichtig, auf solche Tangenten zu achten (dieses Spiel macht es besser als dieses Spiel usw.), aber es sind einige Grundlagen beteiligt, die aufschlussreich sein können, wenn mehr Leute posten.
Jesse Williams

Amüsanterweise hatte ich zuerst einen Mechaniker für Treffer und Schäden, der jedoch aus Gründen verschrottet wurde, an die ich mich nicht mehr erinnere (und es war erst gestern. Mein Gedächtnis ist ein bisschen ... schlecht). Ich sollte klar sein, die Charaktere greifen einander nicht an / verteidigen sich nicht. Es gibt keine Schadenskomponente. Es ist eine Fähigkeitsüberprüfung, bei der beide mit einem gemeinsamen Wert verglichen werden, um festzustellen, ob der Wurf „bestanden“ wurde. Es gibt keine Interaktion zwischen den beiden, die miteinander konkurrieren.
Ffenliv

2

Es gibt zwei große Dinge.

Denken Sie zunächst daran, dass Sie sich an einem Computer befinden. Sie können jedes gewünschte System erstellen. Sie müssen sich nicht auf einen W20-Wurf beschränken, obwohl dies für Spieler leicht zu verstehen ist. Dinge wie das Würfeln von 6 Würfeln mit 6 Würfeln sind für einen Computer sehr einfach und führen zu weitaus weniger zufälligen Ergebnissen.

Zweitens ist es bei der Betrachtung anderer Systeme wie D & D offensichtlich, dass sie die Wirkung von Attributen nur stark drosseln. Anstatt Ihre Basisstatistik zu veranlassen, der Regel 80% ihres Wertes hinzuzufügen, verkleinern Sie sie und machen Sie die Addition subtiler. In D & D zum Beispiel, wenn Sie 18 Geschicklichkeit haben, erhalten Sie nur 4 als Bonus für Ihre Rüstungsklasse.

Kurz gesagt: Alles, was Sie tun müssen, ist, Ihre Domain zu verkleinern, um sie besser auf Ihre Reichweite abzustimmen. Aber qualitativ würde ich denken, ein Blick auf andere Systeme und Dinge, die weniger mathematisch erscheinen, würden zu einem zufriedenstellenderen System für den Spieler führen.


1d20 oder 6d6 oder 5d4 - die Ergebnisse sind nicht mehr oder weniger zufällig, Sie ändern nur den Bereich. Zufall ist zufällig. Die Verkleinerung von Reichweite und Domäne reicht nicht aus, um ein System auszugleichen. Es wird wahrscheinlich nur länger dauern.
Jesse Williams

8
@ JesseWilliams das ist nicht wahr. 1d20 hat die gleiche Chance, einen der möglichen Werte zu erhalten. Mit 5d4 ist die Wahrscheinlichkeit, dass Sie eine 12 oder 13 erreichen, sehr viel höher als eine 20.
Rob Watts,

Mehrere Rollen verbergen auch Fehler in Zahlengeneratoren, so dass dies besonders auf Computern wichtig ist. Tatsächlich ist das Kombinieren von Rollen auf einer Art Bit-Ebene so ziemlich die Basis vieler Generatoren.
Yudrist

Ich stehe korrigiert.
Jesse Williams

3
@RobWatts das ist immer noch nicht mehr oder weniger zufällig, es ist nur eine andere Distribution. Wenn Sie Informationen über frühere "Würfe" haben, können Sie die zukünftigen Ergebnisse nicht besser vorhersagen (Fehler im RNG werden ignoriert), daher ist dies ebenso zufällig.
Chbaker0

1

Wie wäre es damit: Fügen Sie allen betroffenen Attributen eine Konstante hinzu, z. B. 1000. Dann wird die relative Differenz sehr klein.


1

Kenne deine Zahlen

Ein wenig zu Philipps Antwort hinzugefügt, nämlich dass rand [x] im Vergleich zu rand [y] nicht immer das produziert, was man erwartet. Unterhalb einer Tabelle, in der wir A mit B vergleichen. Sowohl A als auch B haben die Werte 1 ... 10. Wir vergleichen auf zwei Arten (Anmerkung: rand () erzeugt in diesem Fall ganze Zahlen, dh Rolls):

  1. rand [A]> rand [B]
  2. rand [A] ≥ rand [B] (dh größer oder gleich)

Zusätzlich vergleichen wir

  1. rand [A * 1000000]> rand [B * 1000000]
    (in diesem Fall ist es unerheblich, ob es> oder ≥ ist, da sie so nahe sind). Diese großen Zahlen stehen in Klammern.

Zellen halten%. Jedes Ergebnis enthält 1 Million Iterationen (mit Dyalog APL erstellt ).

┌────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┐
 A      B  1 (1000000)│ 2 (2000000)│ 3 (3000000)│ 4 (4000000)│ 5 (5000000)│ 6 (6000000)│ 7 (7000000)│ 8 (8000000)│ 9 (9000000)│10(10000000)│
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 1 (1000000)│ >0(50) 100  >0(25) 50  >0(17) 33  >0(13) 25  >0(10) 20   >0(8) 17   >0(7) 14   >0(6) 13   >0(6) 11   >0(5) 10
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 2 (2000000)│>50(75) 100 >25(50) 75 >17(33) 50 >12(25) 38 >10(20) 30  >8(17) 25  >7(14) 21  >6(13) 19  >6(11) 17  >5(10) 15
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 3 (3000000)│>67(83) 100 >50(67) 83 >33(50) 67 >25(37) 50 >20(30) 40 >17(25) 33 >14(21) 29 >12(19) 25 >11(17) 22 >10(15) 20
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 4 (4000000)│>75(87) 100 >62(75) 88 >50(62) 75 >37(50) 63 >30(40) 50 >25(33) 42 >21(29) 36 >19(25) 31 >17(22) 28 >15(20) 25
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 5 (5000000)│>80(90) 100 >70(80) 90 >60(70) 80 >50(60) 70 >40(50) 60 >33(42) 50 >29(36) 43 >25(31) 38 >22(28) 33 >20(25) 30
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 6 (6000000)│>83(92) 100 >75(83) 92 >67(75) 83 >58(67) 75 >50(58) 67 >42(50) 58 >36(43) 50 >31(38) 44 >28(33) 39 >25(30) 35
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 7 (7000000)│>86(93) 100 >79(86) 93 >71(79) 86 >64(71) 79 >57(64) 71 >50(57) 64 >43(50) 57 >38(44) 50 >33(39) 44 >30(35) 40
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 8 (8000000)│>88(94) 100 >81(87) 94 >75(81) 87 >69(75) 81 >63(69) 75 >56(62) 69 >50(56) 62 >44(50) 56 >39(44) 50 >35(40) 45
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 9 (9000000)│>89(94) 100 >83(89) 94 >78(83) 89 >72(78) 83 >67(72) 78 >61(67) 72 >55(61) 67 >50(56) 61 >44(50) 56 >40(45) 50
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
10(10000000)│>90(95) 100 >85(90) 95 >80(85) 90 >75(80) 85 >70(75) 80 >65(70) 75 >60(65) 70 >55(60) 65 >50(55) 60 >45(50) 55
└────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘

Bei A = 2 und B = 3 (und 1 Million Tests):

  • rand (2) ist in 17% der Fälle größer als rand (3)
  • rand (2000000) ist in 33% der Fälle größer als rand (3000000)
  • rand (2) ist in 50% der Fälle größer oder gleich rand (3)
  • (rand (2000000) ist in 50% der Fälle auch größer oder gleich rand (3000000))

Überraschungen könnten sein, dass:

  • Rand (2)> Rand (3) in nur 17% der Fälle
  • rand (10)> rand (10) in 45% der Fälle
  • Rand (6)> Rand (5) jedes Mal

Tatsächlich könnte ich dieses Q anders lösen, indem ich einfach eine 10x10-Tabelle mit schönen, gewünschten Prozentsätzen von Hand eingebe (vielleicht will man auch Unregelmäßigkeiten?). Interpolieren Sie dann, falls erforderlich, zwischen zwei Werten, um einen genauen Prozentsatz zu erhalten, sagen Sie, dass dies aus irgendeinem Grund 53 ist. Dann ist es einfach, einen Treffer mit einer 53% -Probierbarkeit, eine 0 oder 1, zu generieren, indem Sie einfach einen Rand (100) ausführen und testen wenn es kleiner oder gleich 53 ist :-).

Das ist in etwa so, wie Jack Aidley es erwähnt.


1
Verwenden Sie einen Zufallsgenerator, der ganze Zahlen generiert? Meine Antwort verwendet ein RNG, das Gleitkommazahlen mit doppelter Genauigkeit zwischen 0.0und erzeugt 1.0. In diesem Fall ist der Unterschied zwischen >und >=vernachlässigbar. Vielleicht möchten Sie darauf hinweisen.
Philipp

Ja, das ist Teil der beabsichtigten Nachricht, um nur das unterschiedliche Verhalten numerischer Räume hervorzuheben, z. Ganzzahlen mit kleinem Wert (grobe Granularität) vs. Ganzzahlen mit großem Wert (und in der Tat auch Gleitkommazahlen) mit feiner Granularität. Ich füge irgendwo "integer" ein, danke fürs Auffinden. Ich weise tatsächlich auf diese Vernachlässigbarkeit hin: "(in diesem Fall ist es unerheblich, ob es> oder ≥ ist, da sie so nahe sind"). Oft finden Zahlen überraschende Werte (für den menschlichen Verstand), wenn das System nicht ermutigt wird, das Gleichgewicht zu suchen. Generell natürlich nicht unbedingt in diesem Fall.
Stormwind

0

Der traditionelle Ansatz, auf den sich mehrere Antworten implizit bezogen haben, auf den jedoch niemand hingewiesen hat, besteht darin, dass für die Aufgabe ein fester Würfelwurf erforderlich ist und ein von Ihren Statistiken abgeleiteter Fähigkeitsmodifikator hinzugefügt wird.

Zum Beispiel, wenn zwei Spieler das Verfahren befolgen:

  • Wirf einen 14-seitigen Würfel
  • Füge ihren Modifikator zum Würfelwurf hinzu

und wiederhole, bis eine Seite die andere schlägt, dann bekommst du Zahlen in deiner Reichweite: Hier sind die Gewinnchancen mit einem bestimmten numerischen Vorteil für ihren Modifikator:

0   50%
1   57%
2   64%
3   70%
4   76%
5   81%
6   85%
7   89%
8   92%
9   95%
10  97%

0

Die Charaktere fordern sich nicht gegenseitig um die Vorherrschaft heraus. Sie fordern eine Anforderung heraus. Was ist, wenn beide die Anforderung erfüllen? Wer gewinnt? Ich bin überrascht, dass Sie die Logik nicht genug in Frage gestellt haben, dass Sie sogar damit gerechnet haben.

Hier sind zwei Dinge, die dir vielleicht etwas Gutes tun.

Gewinnen Sie einen Zufallsfall mit Vorteil:

WENN der Pass-Bar / Skill-Check ein Wurf von 10 ist. A Würfel 40. B Würfel 42. WENN nur einer gewinnen muss. Ausgehend von einem Gewinn von A 50% / B 50%. Sie können% hinzufügen, um die Chance basierend auf der Menge des Vorteils zu gewinnen. Rolle B hat einen Vorteil von (42-40) / 40 = 5% in Bezug auf die Rolle. Durch direktes Hinzufügen erhält B eine Gewinnchance von 55%. Oder Sie können eine benutzerdefinierte Gewinnchance pro Prozent Vorteil bestimmen. Nehmen wir an, Sie addieren für jeden 100% igen Vorteil 10% Gewinnchance. Also, wenn A 10 würfelt und B 20 würfelt, dann gewinnt A 40% und B 60% der Fälle.

Faires Zufallskonzept:

Wenn Sie eine Standard-Gewinnchance von 30% haben, können Sie am Ende 38 von 100 Schecks gewinnen.

Einige Leute wollen einen zusätzlichen Schritt in der Fairness und stellen sicher, dass eine 30% ige Chance immer genau 30 von 100 Begegnungen gewinnt und genügen mit der Zufälligkeit, nicht zu wissen, welche Begegnungen in der Sequenz ein Gewinn und welche ein Verlust sind.

Dies ist besonders nützlich für gut kalkulierte Spielökonomien. Weil eine zufällige 70% ige Gewinnchance besteht. Sprich 70% Chance für einen Mob, 5 Gold zu verlieren. Die Mobs könnten das Gold 81-mal von 100 fallen lassen. Das führt dazu, dass die Einnahmen / Ausgaben aus dem Gleichgewicht geraten. Und je nachdem, wie viele Einheiten / Instanzen solche Rollen verwenden, kommt es zwangsläufig zu Inflation und / oder Engpässen. Natürlich haben viele Leute nicht einmal eine grobe Schätzung der vollständigen Ausgaben- / Kosteneinsparungen ihrer Wirtschaft. Viele Leute reichen aus, um "die meisten" Wirtschaftspunkte zu erzielen. Und lassen Sie einige Generierungsvariablen, die nicht berechnet werden, und stapeln Sie Diskrepanzen über die Zeit hinaus, selbst bei fairer Zufälligkeit.

Inflation und Engpässe sind für sich genommen kein Problem. Sie können nicht faire Zufälligkeiten und sogar unvorhergesehene Variablen verwalten, wenn Ihre Wirtschaft so eingerichtet ist, dass sie angemessen auf Inflation und Engpässe reagiert.

Warum sollte man sich damit als Gesetz der großen Zahlen beschäftigen? kümmern, die Dinge auf lange Sicht ausgleicht?

Nicht jede Umgebung kann ihr Designverhalten beibehalten, während sie sich darauf verlässt, dass die Dinge später ausgeglichen werden ...


Mir gefällt vor allem der letzte Satz. Greifen von woanders: Ich glaube, dass zum Beispiel das In: Out-Verhältnis von Viking Lotto auf lange Sicht ca. 4: 1 beträgt (wobei man "long" durch "large" ersetzen könnte); Es hat ein fast kontroverses (aber gut definiertes) Designverhalten und funktioniert. Die folgenden Berechnungen können nur ausgeführt werden, wenn zuerst das Entwurfsverhalten genau definiert wird. Zahlen sind in der Regel unkontrolliert ohne Kontrolle ...
Stormwind

@Stormwind natürlich. Wenn das Design / die Theorie fehlt, ist Mathematik nutzlos. Es ist nur ein Werkzeug. Ich habe Designer mit einem Mathe-Niveau der 5. Klasse gesehen, die gute Einsparungen erzielt haben. Sie zeichneten einfach auf, was sie logisch tun wollten, und gingen zu den Mathematikern (normalerweise den Programmierern), um zu erfahren, wie die mathematischen Aufgaben auszuführen sind. Es gelingt immer noch, nicht jedem klar zu sein - Je mehr Probleme Sie mit der Blaupause haben, desto mehr Kopfschmerzen werden Sie beim Bau sehen. Nur ein System zu packen und es zu optimieren, ist völlig sinnlos. Wenn Sie sich nur für das entscheiden, was zuerst funktioniert, ist es nicht wirklich kreativ.
Helena4
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.