Bagaimana saya bisa mencegah keunggulan numerik kecil dari mendominasi keseimbangan pertemuan?

27

Saya telah bermain-main untuk beberapa waktu dengan sebuah permainan dan saya memiliki cukup banyak masalah dengan sesuatu:

Saya memiliki dua karakter, yang masing-masing memiliki atribut (sekitar sepuluh) dalam rentang (antara 1 dan 20). Saya ingin menggunakan atribut ini untuk menghasilkan 'roll' sehingga roll yang lebih tinggi memenangkan pertemuan itu. Perlu dicatat bahwa kedua karakter tidak saling merusak / membela. Mereka berdua berguling-guling untuk melihat apakah mereka lulus apa yang kurasa bisa kita sebut pemeriksaan keterampilan. Keduanya bergulir untuk lulus / gagal terhadap nilai umum. Mereka tidak berinteraksi satu sama lain.

Namun, ketika salah satu karakter bahkan memiliki keunggulan numerik kecil, rumus apa pun yang saya hasilkan menghasilkan yang paling unggul yang memenangkan sebagian besar waktu. Ini tidak diinginkan.

Saya sudah mencoba memberi bobot pada atribut 'paling relevan' untuk pengujian pada 80% dan jumlah atribut lainnya pada 20%. Saya juga mencoba membandingkan rata-rata untuk menghasilkan perbedaan relatif dan menggunakannya untuk meningkatkan karakter yang lebih lemah. Kedua pendekatan menghasilkan keuntungan signifikan yang saya coba hapus (misalnya, jika saya menjalankan 5.000 kali pertemuan, itu secara teratur menghasilkan satu sisi memenangkan semua 5.000).

Menambahkan komponen "keberuntungan" hanya penting, tampaknya, jika itu tertimbang dalam mendukung karakter yang lebih rendah, dan saya belum mencapai keseimbangan yang baik di sana.

Pendekatan apa yang bisa saya ambil untuk menumpulkan dampak dari keuntungan numerik kecil tetapi masih mempertahankan dan meningkatkan keuntungan itu ketika kesenjangan relatif dalam atribut meningkat?


Sesuai permintaan, berikut adalah spesifik yang saya miliki sejauh ini. Beberapa hal yang belum saya pahami sehingga masih bersifat umum:

Saat ini, gulungan dihasilkan sebagai

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

Saat ini, ini menghasilkan angka di lingkungan 4.0. Atribut secara acak dihasilkan antara rentang yang ditentukan. Tes saat ini menggunakan satu karakter dengan atribut dari 2 hingga 4, dan lawan antara 3 dan 5. Diprediksi, ini menghasilkan rata-rata hampir 3 dan 4 masing-masing.

Dengan keunggulan satu poin ini, saya ingin melihat yang lebih kuat dari dua kemenangan di bidang 55% hingga 60% dari waktu, dengan peningkatan ini untuk memenangkan sekitar 80% dari waktu dengan keunggulan atribut rata-rata dari 5 atau 6, 90% dengan keunggulan 7 atau 8, menyisakan ruang untuk kemenangan yang tidak mungkin terjadi ketika jeda tumbuh lebih besar. Saya lebih suka untuk tidak pernah menjamin kemenangan, tetapi mungkin hal-hal menjadi sangat tidak mungkin - dengan nada menang 99,5% atau 99,6% dari waktu ketika kesenjangan menjadi sangat besar.

Formula saat ini menghasilkan angka non-acak. Keacakan datang dari pemilihan atribut mana yang relevan. Tidak semua atribut digunakan untuk setiap gulungan. Adalah mungkin bagi seseorang dengan atribut yang lebih lemah secara keseluruhan untuk menjadi lebih kuat di area yang relevan dengan gulungan itu, dan mencuri kemenangan. Tapi, bisa ditebak, itu jarang terjadi.

Upaya saya berikutnya adalah untuk menimbang kekuatan relatif mereka, dengan mengambil rata-rata semua statistik masing-masing, membaginya satu sama lain, dan menggunakan nilai itu untuk memberikan dorongan kecil pada karakter yang lebih rendah. Ini memuluskan beberapa hal, tetapi masih memiliki kecenderungan yang jelas untuk menghasilkan hal-hal seperti 5.000 kemenangan untuk satu orang dari 5.000 percobaan.

ffenliv
sumber
2
Anda mengatakan "peran dihasilkan" tetapi kemudian Anda memposting rumus yang akan selalu menghasilkan angka tetap. Dimana keacakannya?
Philipp
1
Jadi jika saya mengerti Anda dengan benar, satu-satunya keacakan dalam mekanik permainan Anda adalah pemilihan acak dari atribut utama?
Philipp
2
Tetapi seperti yang disiratkan @Philipp, 5000 upaya akan menghasilkan hasil yang sama persis? Atau apakah Anda menghasilkan atribut baru setiap simulasi
Felsir
1
Bagaimana tepatnya satu dari keduanya menang, jika mereka tidak berinteraksi satu sama lain? Tampaknya ada beberapa data yang hilang di sini?
Erik
1
Gulungan yang dihasilkan masing-masing dibandingkan dengan tujuan yang harus mereka capai. Jika satu mencapainya dan yang lainnya tidak, yang itu menang. Jika mereka berdua mencapainya, semakin tinggi dari dua kemenangan. Jika tidak mencapai, tidak ada gunanya. Bahkan dari dasi, mereka membagi titik. Dengan 'tidak berinteraksi', saya bermaksud untuk tidak memukul atau membela satu sama lain dalam pengertian tradisional, karena di situlah beberapa diskusi awal diarahkan.
ffenliv

Jawaban:

36

Masalah dengan pendekatan Anda adalah bahwa Anda memutuskan hasil pertempuran saat Anda memutuskan stat utama. Ketika Anda memiliki 4 statistik utama, dan petarung hanya lebih baik di salah satu dari mereka, peluang menang mereka selalu 1 dalam 4, tidak peduli seberapa besar perbedaan sebenarnya. Saat Anda menginginkan hasil yang lebih berbutir halus, Anda membutuhkan lebih banyak keacakan berbutir halus.

Pertama-tama, saya pikir Anda dapat menyimpan pilihan acak Anda untuk atribut utama dan Anda juga dapat menyimpan rumus Anda jika Anda mau. Ini adalah angka yang mewakili seberapa besar keunggulan yang dimiliki pejuang ini dalam pertemuan khusus ini. Untuk sisa posting ini, saya akan merujuk ini sebagai adil power.

Suatu metode yang saya gunakan dalam banyak permainan dan yang memberi saya pelayanan yang sangat baik ketika harus melakukan duel antara dua hal dengan yang pasti power, adalah dengan menggulirkan angka floating-point acak antara 0dan poweruntuk keduanya dan melihat siapa yang terguling lebih tinggi. Berikut adalah daftar hasil yang diharapkan dari metode ini. Persentase tidak dihitung tetapi dihasilkan secara eksperimental dengan menjalankan 100000 pertarungan per kombinasi dan iterasi menghitung dan menghitung siapa yang menang seberapa sering:

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%

Yang menyenangkan tentang algoritma ini adalah bahwa ia berskala tidak peduli seberapa besar angka yang Anda hadapi. Peluang 0,3 vs 0,7 sama dengan peluang 3 vs 7, 300 vs 700.000.000 vs 7.000.000.000.

Ketika ini masih terlalu tidak terduga untuk selera Anda, Anda dapat membuat pertempuran lebih mudah diprediksi dengan menggulirkan beberapa angka acak untuk setiap pejuang dan menambahkannya. Karena hukum jumlah besar , banyak kejadian acak bahkan akan keluar dan menghasilkan hasil yang lebih mudah diprediksi. Berikut adalah tabel dengan jumlah iterasi yang berbeda.

| 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% | 

Hasil 100% dan 0% pada tabel di atas adalah ilusi karena perbedaan pembulatan. Kecuali jika powerseorang pejuang tepat 0 selalu ada kemungkinan bahwa mereka menang. Itu tidak terjadi pada tes di atas, jadi Anda bisa berharap itu di bawah 1: 100000.

Anda mungkin juga melihat beberapa penyimpangan kecil yang dapat dikaitkan dengan perubahan suasana hati java.lang.Random dan mungkin tidak muncul ketika Anda menjalankan kode lagi dengan seed yang berbeda.

Program yang saya gunakan untuk menghasilkan tabel ini (Jawa).

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;
    }
}

Jika Anda ingin menggunakan kode ini di game Anda, itu dilisensikan di bawah WTF Public License Version 2 yang diterbitkan oleh Sam Hocevar .

Philipp
sumber
Ini merupakan pendekatan yang menarik. Dalam beberapa upaya saya, saya setengah jalan untuk ini. Saya akan memasang ini dan mencobanya. Terimakasih banyak.
ffenliv
10
Persentase dalam tabel pertama Anda dapat dihitung dengan tepat 1 - powerA / ( 2 * powerB ).
Kyle
2
@Kyle Itu hanya berfungsi selama powerA < powerB. Setelah powerA lebih besar, Anda perlu beralih powerB / (2 * powerA).
Dorus
1
Saya tidak yakin StackExchange ToS memungkinkan Anda menyimpang dari lisensi situs wajib pada konten dan kode, bahkan jika lisensi Anda lebih permisif daripada milik mereka. Tentu saja, tidak mungkin untuk menemukan apakah itu MIT yang diusulkan atau masih CC.
Lars Viklund
5
@LarsViklund Anda memulai diskusi di luar topik di sini, tapi tidak, ini tidak benar. Lisensi untuk stackexchange adalah non-eksklusif, yang berarti saya masih bebas untuk memberikan kekayaan intelektual saya di bawah ketentuan lisensi lainnya ketika saya mau. Kontribusi saya memiliki lisensi ganda di bawah CC-BY-SA (sebagaimana diamanatkan oleh Stackexchange) dan WTFPL. Anda dapat memilih dalam kondisi apa Anda ingin menggunakan kontribusi saya.
Philipp
13

Kesalahan Anda menggunakan pendekatan "berbasis dadu". Anda menggunakan komputer, Anda dapat menggunakan sistem apa pun yang Anda suka. Buat tabel yang mengubah perbedaan nilai menjadi% peluang usia untuk menang dan kemudian Anda dapat mengatur nilai untuk apa pun yang Anda suka, mis.

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

(Anda hanya perlu melakukan setengah tabel, cukup selalu memilih A sebagai yang dengan stat yang lebih tinggi)

Jelas, angka-angka ini hanyalah sebuah contoh, Anda dapat membuatnya mengikuti distribusi apa pun yang Anda sukai.

Jack Aidley
sumber
2
Meskipun saat ini saya sedang bekerja dengan sistem berdasarkan jawaban yang diterima, ini cukup sederhana, dan mungkin juga merupakan solusi yang baik untuk saya. Saya tahu StackExchange yang baik akan datang untuk saya.
ffenliv
5

Ini adalah pertanyaan yang cukup mendalam, jujur, dari sudut pandang mekanik game. Tetapi ada beberapa hal yang mungkin bisa membantu.

Pertama, inilah mengapa sebagian besar game memiliki komponen terpisah untuk hit dan damage, di mana ada "roll" untuk melihat apakah Anda menekan untuk damage, kemudian "roll" terhadap tabel damage atau range untuk karakter yang diberikan. Ini juga mengarah pada beberapa arketipe standar di seluruh genre, di mana Anda mungkin memiliki karakter yang lebih kecil, lebih cepat yang memiliki lebih sedikit hitpoint tetapi menangani lebih banyak kerusakan (penyihir meriam kaca, jenis penyamun tertentu) dan karakter yang lebih besar, lapis baja yang melanda lebih sedikit kerusakan (tank, prajurit) ).

Ini mengarah ke keseimbangan alami di mana karakter yang lebih kecil mungkin rapuh, tetapi menghindari dipukul sesering karena kemampuan tipe kelincahan, dan juga meratakan lapangan bermain dengan melakukan lebih banyak kerusakan (mantra, atau efek racun yang merusak lebih dari waktu). Tangki mungkin lebih lambat dan terkena lebih sering, tetapi sering memiliki kesehatan besar atau titik hit untuk mempertahankan, namun cenderung melakukan lebih sedikit kerusakan per hit (atau kerusakan per detik).

Latar belakang untuk ini adalah mengapa banyak game terus menerus melalui penyeimbangan senjata dan kelas dan statistik. World or Warcraft, Destiny, Diablo, Battlefield: semua jenis game dalam genre apa pun sering kali mengalami penyeimbangan dan penyetelan seiring waktu.

Ini mungkin bukan jawaban langsung, tetapi Anda memang meminta ide-ide umum. Jadi, mari kita juga mengevaluasi sistem permainan.

Bagaimana fungsi atribut itu? Jika semuanya sama (tidak ada pola dasar, tidak ada baju besi atau senjata yang lebih baik atau yang lainnya), maka sedikit keuntungan yang pasti akan melemparkan banyak hal demi satu sisi. Sambil menambahkan faset untuk memerangi menyulitkan sistem apa pun, ini juga memungkinkan lebih banyak fleksibilitas.

Jesse Williams
sumber
Selain itu, saya pikir ini adalah pertanyaan yang sangat bagus dan dapat mengarah ke beberapa diskusi mekanik permainan yang sangat menarik. Ada kemungkinan bahwa ini bisa berakhir menjadi berbasis opini, jadi penting untuk berhati-hati terhadap garis singgung seperti itu (game ini melakukannya lebih baik daripada game ini, dan sebagainya), tetapi ada beberapa fundamental yang terlibat yang dapat mencerahkan karena semakin banyak orang memposting.
Jesse Williams
Yang mengherankan, saya memang memiliki mekanik 'pukulan' dan 'kerusakan' terlebih dahulu, tetapi dibuang karena alasan yang tidak lagi saya ingat (dan baru kemarin. Ingatan saya sedikit ... buruk) Saya harus jelas, karakternya tidak saling menyerang / membela. Tidak ada komponen kerusakan. Ini adalah pemeriksaan keterampilan, di mana keduanya diperiksa terhadap nilai umum untuk melihat apakah gulungan 'lolos'. Tidak ada interaksi antara keduanya yang bersaing.
ffenliv
2

Ada dua hal besar.

Pertama, ingat Anda menggunakan komputer. Anda dapat membuat sistem apa pun yang Anda inginkan. Tidak perlu membatasi diri Anda pada roll d20, meskipun ini mudah dipahami untuk pemain. Hal-hal seperti melempar dadu 6 d6 mudah dilakukan di komputer dan hasilnya jauh lebih sedikit.

Kedua, melihat sistem lain seperti D & D jelas bahwa mereka hanya mengurangi efek atribut banyak. Alih-alih memiliki stat dasar Anda tambahkan 80% dari nilainya ke aturan, turunkan dan buat penambahannya lebih halus. Dalam D&D misalnya jika Anda memiliki 18 ketangkasan, Anda hanya mendapatkan 4 sebagai bonus untuk kelas baju besi Anda.

Jadi, singkatnya secara numerik semua yang perlu Anda lakukan adalah menurunkan domain Anda agar lebih sesuai dengan jangkauan Anda. Tapi secara kualitatif saya akan berpikir melihat sistem lain dan membuat hal-hal yang tampaknya kurang matematika akan membuat sistem yang lebih memuaskan bagi pemain.

Yudrist
sumber
1d20 atau 6d6 atau 5d4 - hasilnya tidak lebih atau kurang acak, Anda hanya mengubah rentangnya. Acak adalah acak. Menurunkan rentang dan domain tidak cukup untuk menyeimbangkan sistem. Sepertinya hanya akan menarik lebih banyak hal.
Jesse Williams
8
@ JesseWilliams itu tidak benar. 1d20 memiliki peluang yang sama untuk mendapatkan nilai yang mungkin ada. Dengan 5d4, Anda jauh lebih mungkin mendapatkan 12 atau 13 daripada 20.
Rob Watts
Beberapa gulungan juga membantu menyembunyikan kekurangan pada sejumlah generator sehingga sangat penting pada komputer. Faktanya, menggabungkan gulungan pada tingkat bitwise merupakan dasar dari banyak generator.
Yudrist
Saya berdiri dikoreksi.
Jesse Williams
3
@RobWatts yang masih tidak lebih atau kurang acak, itu hanya distribusi yang berbeda. Memiliki informasi tentang "gulungan" sebelumnya tidak memungkinkan Anda untuk membuat prediksi yang lebih baik tentang hasil di masa mendatang (mengabaikan cacat pada RNG), jadi itu hanya secara acak.
chbaker0
1

Bagaimana dengan ini: Tambahkan konstanta, misalnya 1000, ke semua atribut yang bersangkutan. Maka perbedaan relatif menjadi sangat kecil.

Alex
sumber
1

Ketahui nomor Anda

Menambahkan sedikit ke jawaban Philipp , yaitu rand [x] dibandingkan dengan rand [y] mungkin tidak selalu menghasilkan apa yang diharapkan. Di bawah tabel di mana kita membandingkan A dengan B. Baik A dan B memiliki nilai 1 ... 10. Kami membandingkan dalam dua cara (catatan: rand () dalam hal ini menghasilkan bilangan bulat, yaitu. Gulungan):

  1. rand [A]> rand [B]
  2. rand [A] ≥ rand [B] (mis. lebih besar atau sama dengan)

Selain itu kami membandingkan

  1. rand [A * 1000000]> rand [B * 1000000]
    (dalam hal ini tidak relevan apakah itu> atau ≥ karena mereka sangat dekat). Tokoh-tokoh besar ini berada dalam kurung.

Sel memegang% 's. Setiap hasil memiliki 1 juta iterasi (dibuat menggunakan Dyalog APL ).

┌────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┐
 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
└────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘

Jika melihat A = 2 dan B = 3 (dan 1 juta tes):

  • rand (2) lebih besar dari rand (3) pada 17% kasus
  • rand (2000000) lebih besar dari rand (3000000) di 33% kasus (scaling ./ .. integer rounding)
  • rand (2) lebih besar dari atau sama dengan rand (3) di 50% kasus
  • (rand (2000000) juga lebih besar atau sama dengan rand (3000000) di 50% kasus)

Mungkin mengejutkan:

  • rand (2)> rand (3) hanya 17% dari kasus
  • rand (10)> rand (10) di 45% kasus
  • rand (6)> rand (5) setiap saat

Saya mungkin sebenarnya memecahkan Q ini secara berbeda, hanya dengan mengetikkan tangan tabel 10x10 dengan persentase yang bagus dan diinginkan (mungkin orang juga menginginkan penyimpangan?). Kemudian jika diperlukan interpolasi antara dua nilai, untuk mendapatkan persentase yang tepat, katakan itu karena beberapa alasan 53. Maka mudah untuk menghasilkan hit 53% kemungkinan, 0 atau 1, hanya dengan menjalankan rand (100) dan pengujian jika lebih kecil atau sama dengan 53 :-).

Begitulah yang disebutkan Jack Aidley .

Angin badai
sumber
1
Apakah Anda menggunakan generator angka acak yang menghasilkan bilangan bulat? Jawaban saya menggunakan RNG yang menghasilkan angka floating point presisi ganda antara 0.0dan 1.0. Dalam hal ini perbedaan antara >dan >=diabaikan. Anda mungkin ingin menunjukkannya.
Philipp
Ya, itu adalah bagian dari pesan yang dimaksudkan, hanya untuk menunjukkan perilaku beragam ruang numerik, misalnya. integer bernilai kecil (granularity kasar) vs integer bernilai besar (dan memang juga mengapung) dengan granularitas halus. Saya akan memasukkan "integer" di suatu tempat, terima kasih untuk menunjukkan dengan tepat. Saya benar-benar menunjukkan kelalaian itu: "(dalam hal ini tidak relevan apakah itu> atau ≥ karena mereka sangat dekat"). Seringkali angka menemukan nilai mengejutkan (untuk pikiran manusia) jika sistem tidak didorong untuk mencari keseimbangan. Secara umum, ofc, tidak harus dalam kasus ini.
Stormwind
0

Pendekatan tradisional yang dirujuk oleh beberapa jawaban secara tersirat tetapi tidak ada yang benar-benar menguraikan adalah bahwa tugas tersebut membutuhkan die roll yang diperbaiki, dan menambahkan pengubah kemampuan yang berasal dari statistik Anda.

Misalnya, jika dua pemain mengikuti prosedur:

  • Gulung dadu 14 sisi
  • Tambahkan pengubahnya ke die roll

dan ulangi sampai satu sisi mengalahkan yang lain, lalu Anda mendapatkan angka dalam rentang Anda: inilah peluang kemenangan dengan keuntungan numerik tertentu untuk pengubahnya:

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

sumber
0

Karakter tidak saling menantang untuk supremasi. Mereka menantang persyaratan. Bagaimana jika keduanya melewati persyaratan. Yang menang? Saya terkejut Anda belum cukup menantang logika sehingga Anda bahkan pergi ke perhitungan dengan itu.

Either way, berikut adalah dua hal yang mungkin ada gunanya bagimu.

Menangkan case kebetulan dengan keuntungan:

JIKA lulus / pemeriksaan keterampilan adalah gulungan 10. Rolls 40. B Rolls 42. JIKA hanya satu yang harus menang. Mulai dari sama dengan A 50% Win / B 50% Win. Anda dapat menambahkan% untuk memenangkan peluang berdasarkan jumlah keuntungan. Roll B memiliki (42-40) / 40 = 5% keuntungan dalam hal roll. Menambahkannya secara langsung membuat peluang kemenangan B adalah 55%. Atau Anda dapat menentukan peluang kemenangan khusus per persen keuntungan. Katakan untuk setiap keuntungan 100% yang Anda tambahkan 10% peluang untuk menang. Jadi jika A Rolls 10 dan B roll 20. Kemudian A menang 40% dan B Menangkan 60% dari kasus.

Konsep keacakan yang adil:

Melakukan peluang 30% standar untuk menang, Anda mungkin berakhir dengan memenangkan 38 cek dari 100.

Beberapa orang menginginkan langkah ekstra dalam keadilan dan memastikan bahwa peluang 30% selalu menang tepat 30 dari 100 pertemuan dan cukup dengan keacakan tidak mengetahui pertemuan mana dalam urutan yang merupakan kemenangan dan yang merupakan kerugian.

Ini sangat berguna untuk ekonomi gim yang diperhitungkan dengan baik. Karena stat acak peluang 70% untuk menang. Katakanlah 70% kesempatan bagi gerombolan untuk menjatuhkan 5 emas. Massa mungkin akhirnya menjatuhkan emas 81 kali dari 100. Yang membuang pendapatan / pengeluaran tidak seimbang. Dan tergantung pada berapa banyak entitas / instance menggunakan gulungan inflasi dan / atau kekurangan seperti itu pasti diciptakan. Tentu saja banyak orang yang bahkan tidak memiliki perkiraan kasar tentang input / pengeluaran lengkap dari ekonomi mereka. Banyak orang yang cukup dengan melakukan poin ekonomi "paling banyak". Dan tinggalkan beberapa variabel generasi yang tidak dihitung dan susun perbedaan waktu bahkan dengan keacakan yang adil.

Inflasi dan kekurangan bukanlah masalah mereka sendiri. Anda dapat mengelola keacakan yang tidak adil dan bahkan variabel yang tidak terduga jika ekonomi Anda siap merespons inflasi dan kekurangan secara memadai.

Mengapa repot-repot dengan ini karena hukum banyak hal dalam jangka panjang?

Tidak setiap lingkungan dapat mempertahankan perilaku desainnya sembari mengandalkan hal-hal untuk meratakannya nanti ...

helena4
sumber
Saya suka terutama kalimat terakhir. Meraih dari tempat lain: Saya percaya bahwa sebagai contoh rasio masuk: keluar Viking Lotto adalah 4: 1 dalam jangka panjang (di mana orang bisa mengganti "panjang" dengan "besar"); ia memiliki perilaku desain yang hampir kontroversial (tetapi didefinisikan dengan baik), dan berfungsi. Seseorang tidak dapat mengeksekusi matematika di bawah kecuali perilaku desain didefinisikan secara tepat terlebih dahulu. Angka cenderung tidak terkendali tanpa kendali ...
Stormwind
@ Petir tentu saja. Jika desain / teori kurang - matematika tidak berguna. Ini hanyalah alat. Saya telah melihat desainer dengan tingkat matematika kelas 5 menarik ekonomi yang baik. Mereka hanya memetakan apa yang ingin mereka lakukan secara logis dan pergi ke orang-orang matematika (biasanya coders) untuk alat / saran bagaimana melakukan bit matematika. Entah bagaimana itu masih berhasil tidak menjadi jelas bagi semua orang - Semakin banyak masalah yang Anda miliki dengan cetak biru - semakin banyak sakit kepala yang akan Anda lihat dalam konstruksi. Hanya meraih beberapa sistem dan men-tweak-nya tidak ada gunanya sama sekali. Jika Anda hanya memutuskan apa pun yang berfungsi pertama, itu tidak benar-benar kreatif.
helena4