Küçük sayısal avantajların karşılaşmanın dengesini etkilemesini nasıl önleyebilirim?


27

Bir süredir bir oyunla uğraşıyorum ve bir şeyle ilgili ciddi bir sorun yaşıyorum:

Her biri bir aralıkta özniteliklere (yaklaşık on) sahip (1 ile 20 arasında) iki karakterim var. Bu özellikleri, 'rulo' oluşturmak için kullanmak, böylece yüksek rulo o özel karşılaşmayı kazanır. İki karakterin birbirlerine zarar vermediğini / savunmadığını belirtmekte fayda var . Her ikisi de yetenek sınavı diyebileceğimizi düşündüğümden geçip geçmediklerini görmek için yuvarlanıyorlar. İkisi de ortak bir değere karşı geçmek / başarısız olmak için yuvarlanıyorlar. Birbirleriyle etkileşime girmezler.

Bununla birlikte, karakterlerden birinin bile küçük bir sayısal avantajı olduğunda, ortaya çıkmış olduğum herhangi bir formül, zamanın çok büyük bir çoğunluğunu kazanan çok hafif üstün bir sonuç verdi. Bu istenmeyen bir durumdur.

Test için 'en alakalı' özniteliği% 80’de ve diğer özniteliklerin% 20’sinde ağırlıklandırmayı denedim. Göreceli bir fark üretmek için ortalamaları karşılaştırmayı ve zayıf karakteri arttırmak için kullanmayı da denedim. Her iki yaklaşım da kaldırmaya çalıştığım önemli avantajlarla sonuçlandı (örneğin, karşılaşmayı 5.000 kez çalıştırırsam, düzenli olarak tüm 5.000'i kazanan bir tarafı üretir).

Bir "şans" bileşeni eklemek sadece önemli, bir şekilde daha az karakter lehine bir şekilde ağırlıklandırılmışsa ve orada iyi bir denge kurmamış gibi görünüyor.

Küçük bir sayısal avantajın etkisini körelemek, ancak niteliklerdeki göreceli boşluk arttıkça bu avantajı korumak ve arttırmak için hangi yaklaşımları kullanabilirim?


İstek başına, işte şimdiye kadar sahip olduğum özellikler. Henüz çözemediğim bazı şeyler var.

Şu anda, rulo olarak üretilir

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

Şu anda, bu 4.0 mahallesinde sayıları üretiyor. Öznitelikler, belirtilen aralıklar arasında rasgele oluşturulur. Mevcut test, 2'den 4'e kadar özniteliğe sahip bir karakter ve rakibi 3 ila 5'e kadar olan karakterleri kullanır.

Bu tek puanlık avantajla, zamanın% 55 -% 60'ında iki galibiyetin daha güçlü olduğunu görmek isterim; 5 veya 6,% 90, 7 veya 8 avantajlarında, boşluk büyüdüğünde olası bir galibiyet için yer bıraktı. Hiçbir zaman garantili kazanımların olmamasını tercih ederim, ancak belki de işler pek mümkün değil - aralığın çok büyüdüğü zamanların% 99,5 veya% 99,6'sını kazanma ayarına.

Mevcut formül rastgele olmayan bir sayı üretir. Rassallık, hangi özelliklerin alakalı olduğu seçiminden gelir. Değil tüm özelliklerin her biri rulo kullanılır. Genel olarak daha zayıf özelliklere sahip olanın o topla ilgili alanlarda daha güçlü olması ve bir galibiyet çalması mümkündür. Ancak, tahmin edilebileceği gibi, nadiren olur.

Bir sonraki denemem, göreceli güçlerini tartmak, her bir istatistiğin ortalamasını alarak, onları birbirine bölerek ve daha küçük karaktere küçük bir destek vermek için bu değeri kullanmaktı. Bu, işleri biraz düzeltti, ancak 5.000 denemeden biri için 5.000 kazanç gibi şeyler üretme eğiliminde olduğu açıktı.


2
"Rol üretildi" diyorsunuz ancak daha sonra her zaman sabit bir sayı oluşturacak bir formül gönderdiniz. Rastgelelik nerede?
Philipp,

1
Öyleyse sizi doğru anlarsam, oyun teknisyeninizdeki tek rastgelelik ana özelliğin rastgele seçilmesi mi?
Philipp,

2
Fakat @Philipp'in de belirttiği gibi, 5000 deneme aynı sonuç verecek mi? Veya her bir simülasyonda yeni özellikler mi üretiyorsunuz
Felsir

1
Birbiriyle etkileşime girmiyorlarsa, ikisi nasıl biri kazanır? Burada eksik bazı veriler var mı?
Erik,

1
Her birinin ürettiği rulo, ulaşması gereken hedefle karşılaştırılır. Biri ona ulaşırsa, diğeri ulaşmazsa, o kazanır. İkisi de ona ulaşırsa, iki galibiyet yükselir. Hiçbiri ulaşmazsa, o noktaya değinmez. Olasılıkta bile olsa kravat, noktayı bölerler. 'Etkileşim yapmamak' ile, geleneksel anlamda birbirlerine karşı vurmamak ya da savunmak istemedim, çünkü ilk tartışmanın bazılarının yönlendirildiği yer.
ffenliv

Yanıtlar:


36

Yaklaşımınızla ilgili sorun, ana stat üzerinde karar verdiğiniz anda savaşın sonucuna karar vermenizdir. 4 ana istatistik olduğunda ve avcı bunlardan sadece birinde daha iyi olduğunda, kazanma şansları her ne kadar büyük olursa olsun, 4'te 1 olur. Daha iyi ayarlanmış sonuçlar istediğinizde, daha fazla ayarlanmış rasgelelik gerekir.

Her şeyden önce, ana özellik için rastgele seçiminizi koruyabileceğinizi ve isterseniz formülünüzü de koruyabileceğinizi düşünüyorum. Bu savaşçının bu özel karşılaşmada ne kadar üstünlüğü olduğunu gösteren sayı. Bu yazının geri kalanı için, buna tam olarak değineceğim power.

Çok fazla oyunda kullandığım ve belirli iki şey arasında bir düello olduğunda bana oldukça iyi hizmet eden bir yöntem power, ikisi arasında 0ve powerher ikisinde de rastgele bir kayan nokta sayısı döndürmek ve kimin daha yükseğe çıktığını görmek. İşte bu yöntemin beklenen sonuçlarının bir listesi. Yüzdeler hesaplanmaz ancak deney başına, kombinasyon başına 100000 dövüş ve yineleme sayımı yapıp ne kadar sık ​​kazandığını sayarak hesaplanır:

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%

Bu algoritma ile ilgili güzel olan şey, sayıların ne kadar büyük olduğunun önemi yok. 0,3'e karşı 0,7 şansı, 3'e karşı 7, 300'e karşı 700 ya da 3.000.000.000'e karşı 7.000.000.000'dekiyle aynıdır.

Zevkiniz için bu hala öngörülemeyen olduğunda, her savaşçı için birden fazla rasgele sayı atarak savaşı daha öngörülebilir hale getirebilir ve toplayabilirsiniz. Büyük sayılar yasası nedeniyle , birçok rastgele olay bile ortadan kalkacak ve daha öngörülebilir sonuçlarla sonuçlanacaktır. Farklı yineleme sayısına sahip bir tablo.

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

Yukarıdaki tablodaki% 100 ve% 0'ın sonuçları, yuvarlama farklılıklarından dolayı bir yanılsamadır. powerBir savaşçının tam 0 olmadıkça kazanma olasılığı her zaman vardır. Sadece yukarıdaki testte olmadı, bu yüzden 1: 100000'in altında olmasını bekleyebilirsiniz.

Ayrıca, java.lang.Random'un ruh hali değişikliklerine bağlı olabilecek ve kodu farklı bir tohumla tekrar çalıştırdığınızda görünmeyebilecek bazı hafif düzensizlikler de fark edebilirsiniz.

Bu tabloyu oluşturmak için kullandığım program (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;
    }
}

Bu kodu oyununuzda kullanmak isterseniz, Sam Hocevar tarafından yayınlanan WTF Public License Version 2 lisansı altındadır .


Bu ilginç bir yaklaşım. Denemelerimin bazılarında, bunun yarısına kadar gittim. Bunu bağlayıp deneyeceğim. Çok teşekkürler.
ffenliv

10
İlk tablonuzdaki yüzdeler tam olarak hesaplanabilir 1 - powerA / ( 2 * powerB ).
Kyle,

2
@Kyle Bu sadece o kadar çalışır powerA < powerB. PowerA büyüdükten sonra, geçiş yapmanız gerekir powerB / (2 * powerA).
Dorus

1
StackExchange ToS, lisansınız izin verilenden daha izinli olsa bile, zorunlu site lisansından içerik ve kod konusunda ayrılmanıza izin verdiğinden emin değilim. Elbette, önerilen MIT olup olmadığını veya hala CC olup olmadığını bulmak mümkün değildir.
Lars Viklund

5
@LarsViklund Burada konu dışı bir tartışma başlatıyorsunuz, ancak hayır, bu yanlış. Yığın değiş tokuş lisansı münhasır değildir, yani fikri mülkiyetimi istediğim zaman diğer lisans koşulları altında vermekte özgürüm. Katkılarım CC-BY-SA (Stackexchange tarafından zorunlu olduğu şekilde) ve WTFPL kapsamında çift lisanslıdır. Katkılarımı hangi şartlar altında kullanmak istediğinizi seçebilirsiniz.
Philipp,

13

Hata, "zar temelli" bir yaklaşım kullanıyor. İstediğiniz herhangi bir sistemi kullanabileceğiniz bir bilgisayardasınız. Değerlerdeki bir farkı kazanma şansı% yaşına çeviren bir masa hazırlayın ve ardından değerleri kesinlikle istediğiniz herhangi bir şeye ayarlayabilirsiniz;

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

(Tablonun sadece yarısını yapmanız yeterlidir, her zaman A'yı daha yüksek stat olanı seç)

Açıkçası, bu sayılar sadece bir örnektir, dağıtımın sizi memnun ettiği her neyse onu takip etmesini sağlayabilirsiniz.


2
Şu anda kabul edilen cevabı temel alan bir sistemle çalışıyorum, ancak bu oldukça basit ve aynı zamanda benim için iyi bir çözüm olabilir. StackExchange'in benim için iyi olacağını biliyordum.
ffenliv

5

Bu dürüst olmak gerekirse, oyun mekaniği açısından oldukça derin bir sorudur. Ancak yardımcı olabilecek birkaç şey var.

Birincisi, çoğu oyunun hasar ve vuruş için ayrı bir bileşeni vardır, hasar için vurup vurmadığınızı görmek için bir "rulo", ardından verilen karakter için bir hasar masasına veya menziline karşı "rulo". Bu, aynı zamanda daha az hasarlanma noktasına sahip daha küçük, daha hızlı karakterlere sahip olabileceğiniz, ancak daha fazla hasar verebilecek (cam top büyücüleri, belirli hileci türleri) ve daha az hasar için vurulan daha büyük, zırhlı karakterlere (tanklar, savaşçılar) sahip olabileceğiniz türlerde bazı standart arketiplere yol açar. ).

Bu, daha küçük karakterin kırılgan olabileceği doğal bir dengeye yol açar, ancak çeviklik türü bir yetenek nedeniyle sık sık vurulmasını önler ve oyun alanını daha fazla hasar vererek (bir büyü veya üzerinde hasar veren bir zehir etkisi yaparak) dengeler. süresi). Tank daha yavaş olabilir ve daha sık çarpabilir, ancak çoğu zaman sürdürebilecek çok büyük sağlık veya vuruş noktaları vardır, ancak vuruş başına daha az zarar verme eğilimindedir (veya saniyedeki hasar).

Bunların arka planı, birçok oyunun sürekli silah ve sınıf ve istatistik dengelemesinden geçmesidir. World veya Warcraft, Destiny, Diablo, Battlefield: Herhangi bir türdeki herhangi bir oyun türü, zaman içerisinde dengeleme ve ayarlamadan geçer.

Bu doğrudan bir cevap olmayabilir, ancak genel fikirler istediniz. Öyleyse oyun sistemini de değerlendirelim.

Bu özellikler nasıl çalışır? Eğer her şey eşitse (arketip yok, zırh veya daha iyi silah yok ya da olmasın), herhangi bir hafif kazancın kesinlikle bir tarafı lehine ağır atması muhtemeldir. Savaşmak için faset eklemek, herhangi bir sistemi zorlaştırırken, aynı zamanda daha fazla esneklik sağlar.


Bir kenara, bence bu mükemmel bir soru ve bazı ilginç oyun mekaniği tartışmalarına yol açabilir. Bunun düşünceye dayalı bir hale gelmesi muhtemel olabilir, bu yüzden bu tür teğetlere dikkat etmek önemlidir (bu oyun bu oyundan daha iyi bir şey yapar) ve daha çok insanın gönderdiği gibi aydınlanmayı gerektiren bazı temeller vardır.
Jesse Williams

Komik bir şekilde, önce bir “vuruş” ve “hasar” tamircisim oldu, ama artık hatırlamamadığım nedenlerle hurdaya çıkardım (ve sadece dündü. Hafızam biraz ... fakir). birbirlerine saldırmıyor / savunmuyorlar. Hasar bileşeni yok. Rulonun “geçip geçmediğini” görmek için her ikisinin de ortak bir değere göre kontrol edildiği bir yetenek kontrolüdür. Rekabet eden ikisi arasında bir etkileşim yoktur.
ffenliv

2

İki büyük şey var.

İlk önce, bir bilgisayarda olduğunuzu unutmayın. İstediğiniz herhangi bir sistemi yapabilirsiniz. Kendinizi bir d20 rulosu ile sınırlamanıza gerek yok, ancak bu oyuncular için anlaşılması kolaydır. 6 d6 zar atmak gibi şeyler bir bilgisayarda kolaydır ve çok daha az rastgele sonuç verir.

İkincisi, D & D gibi diğer sistemlere baktığımızda, özelliklerin etkisini büyük ölçüde azalttığı açıktır. Temel statünüzün değerinin% 80'ini kurala eklemek yerine, küçültün ve ilavesini daha ince yapın. Örneğin D & D'de 18 el becerisine sahipseniz, zırh sınıfınıza sadece 4 bonus kazandırırsınız.

Kısacası, sayısal olarak yapmanız gereken tek şey, alanınıza daha iyi uyacak şekilde etki alanınızı küçültmektir. Ancak nitel olarak, diğer sistemlere bakmayı ve daha az matematiksel görünen şeyleri ortaya çıkarmayı, oyuncu için daha tatmin edici bir sistem yaratacağını düşünürdüm.


1d20 veya 6d6 veya 5d4 - sonuçlar aşağı yukarı rasgele değildir, yalnızca aralığı değiştirirsiniz. Rastgele rastgeledir. Menzili ve alanı küçültmek sistemi dengelemek için yeterli değil. Sadece işleri daha uzun sürebilir.
Jesse Williams

8
@JesseWilliams doğru değil. 1d20, olası değerlerden herhangi birini elde etmek için eşit şansa sahiptir. 5d4 ile, 20 ya da 13 ya da 13 puan aldınız. 20
Rob Watts

Birden fazla rulo aynı zamanda sayı üreteçlerindeki kusurları gizler, bu nedenle özellikle bilgisayarlarda önemlidir. Aslında ruloları bit cinsinden bir seviyede birleştirmek pek çok üreticinin temelini oluşturuyor.
Yudrist

Düzeltilmiş duruyorum.
Jesse Williams

3
@RobWatts hala az çok rastgele olmayan, sadece farklı bir dağıtım. Önceden "yuvarlanma" hakkında bilgi sahibi olmak, gelecekteki sonuçların daha iyi bir tahminini yapmanıza izin vermez (RNG'deki kusurları görmezden gelir), bu yüzden rastgele.
chbaker0

1

Bunun hakkında: İlgili tüm özelliklere bir sabit, örneğin 1000 ekleyin. Sonra bağıl fark çok az olur.


1

Numaralarını bilmek

Philipp'in cevabına biraz ekleme yapmak , yani rand [y] ile karşılaştırılan rand [x] 'in beklediği şeyi üretemeyebilir. A'yı B ile karşılaştırdığımız bir tablonun altında Hem A hem de B 1 ... 10 değerlerine sahiptir. İki şekilde karşılaştırırız (not: rand () bu durumda tamsayılar üretir, yani rulolar):

  1. rand [A]> rand [B]
  2. rand [A] ≥ rand [B] (yani daha büyük veya ona eşit)

Ek olarak karşılaştırıyoruz

  1. rand [A * 1000000]> rand [B * 1000000]
    (bu durumda,> veya ≥ çok yakın oldukları için bir önemi yoktur). Bu büyük rakamlar parantez içindedir.

Hücreler% s tutar. Her sonuçta 1 milyon yineleme vardır ( Dyalog APL kullanılarak yapılır ).

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

A = 2 ve B = 3’e (ve 1 milyon test) bakıyorsanız:

  • Rand (2) vakaların% 17'sinde rand (3) 'den daha büyük
  • rand (2000000), vakaların% 33'ünde rand (3000000) 'den daha büyüktür (ölçek ölçeklendirme. / .. tamsayı yuvarlama)
  • rand (2) vakaların% 50'sinde rand (3) 'e eşit veya ondan daha büyüktür.
  • (rand (2000000) ayrıca vakaların% 50'sinde rand (3000000) 'e eşit veya ondan daha büyüktür)

Sürprizler şöyle olabilir:

  • rand (2)> rand (3) vakaların sadece% 17'sinde
  • rand (10)> rand (10) vakaların% 45'inde
  • rand (6)> rand (5) her zaman

Aslında bu Q'yu farklı bir şekilde çözebilirim, sadece 10x10'luk bir masayı güzel, istenen yüzdeleri elle yazarak (belki de bir usulsüzlük ister?). Daha sonra gerekirse iki değer arasında enterpolasyon yapın, kesin bir yüzdeyi elde etmek için, bunun bir nedeni olduğunu söyleyin 53. O zaman, basitçe bir rand (100) uygulayarak ve test ederek,% 53 olasılıklı bir vuruş (0 veya 1) oluşturmak kolaydır. 53 daha küçük veya eşit olması durumunda :-).

Bu, Jack Aidley'in bahsettiği çizgi boyunca .


1
Tam sayı üreten rasgele bir sayı üreticisi mi kullanıyorsunuz? Cevabım, 0.0ve arasında çift duyarlıklı kayan nokta sayıları üreten bir RNG kullanıyor 1.0. Bu durumda arasındaki fark >ve >=önemsiz. Bunu belirtmek isteyebilirsin.
Philipp,

Evet, bu, sayısal alanların değişen davranışını belirtmek için istenen mesajın bir parçası. küçük-değerli tamsayılar (kaba taneciklik) vs. Bir yere "integer" ekleyeceğim, saptamak için thx. Aslında bu ihmal edilebilirliğe dikkat çekiyorum: "(bu durumda,> ya da> çok yakın oldukları için ilgisizdir"). Sistem denge kurmaya teşvik edilmezse, genellikle sayılar şaşırtıcı değerler (insan sağlığı için) bulurlar. Genel olarak konuşursak, ofc, bu durumda mutlaka değil.
Stormwind

0

Birçok cevabın dolaylı olarak referans aldığı, ancak hiç kimsenin açıklayamadığı geleneksel yaklaşım, görevin sabit bir kalıp rulosu gerektirmesi ve istatistiklerinden elde edilen bir yetenek değiştirici eklemesidir.

Örneğin, iki oyuncu işlemi takip ederse:

  • 14 taraflı kalıbı yuvarla
  • Değiştiricilerini kalıp rulosuna ekleyin

ve bir taraf diğerini geçinceye kadar tekrarlayın, sonra menzilinizde sayılar elde edersiniz: işte onların değiştiricisine verilen rakamsal avantajı ile kazanma şansı:

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

0

Karakterler üstünlük için birbirlerine meydan okumazlar. Bir gereksinime meydan okurlar. Her ikisi de şartı geçerse ne olur? Kim kazanır? Mantığa itiraz etmemiş olsanız bile, onunla birlikte hesaplama yapmaya gittiniz.

Her iki durumda da, işte size iyi yapabilecek iki şey.

Avantajlı fırsat kazanın:

Geçiş çubuğu / beceri kontrolü 10'luk bir rulo ise. A Rolls 40. B Rolls 42. Sadece birinin kazanması gerekiyorsa. Eşit A 50% Win / B den başlayarak% 50 Win. Avantaj miktarına bağlı olarak şansı kazanmak için% ekleyebilirsiniz. B silindiri, rulo bakımından (42-40) / 40 =% 5 avantaja sahiptir. Doğrudan ekleme B'nin kazanma şansını% 55'e getirir. Veya yüzde avantaj başına özel bir kazanma şansı belirleyebilirsiniz. Her% 100 avantaj için% 10 kazanma şansı eklediğinizi söyleyin. Yani eğer A Rolls 10 ve B, 20'ye yuvarlanırsa. O zaman, A% 40 kazanır ve B vakaların% 60 kazanır.

Adil rastgelelik kavramı:

Standart% 30 kazanma şansı kazanmak, 100 üzerinden 38 çek kazanma ile sonuçlanabilir.

Bazı insanlar adalet içinde fazladan bir adım atmak isterler ve% 30'luk bir şansın her 100 karşılaşmadan tam 30'unu kazandıklarından emin olun ve sekansta karşılaşanların bir kazanma olduğunu ve kaybeden olduğunu bilmeme rastgele- siyle yetinmeyin.

Bu özellikle iyi hesaplanmış oyun ekonomileri için kullanışlıdır. Çünkü rastgele% 70 stat statüsü kazanma şansı. Bir çeteye 5 altın düşürme şansı% 70 deyin. Çeteler, altının 100 üzerinden 81 kez düşmesiyle sona erebilir. Bu da gelir / gider dengesini düşürür. Ve kaç tane kurum / kuruluşun böyle bir rulo enflasyonu kullandığına bağlı olarak kaçınılmaz olarak enflasyon ve / veya eksiklikler yaratılır. Tabii ki pek çok insan ekonomilerinin tam girdi / gider geri dönüşü hakkında kaba bir tahminde bile bulunmuyor. Pek çok insan "en" ekonomik noktaları yapmakta yeterlidir. Ve hesaplanmamış bazı nesil değişkenleri bırakın ve adil rastgelelikle bile fazla mesaide tutarsızlığı istifleyin.

Enflasyon ve eksiklikler kendi başlarına bir sorun değil. Ekonominiz enflasyona ve kıtlığa yeterince yanıt verecek şekilde ayarlanmışsa, adil olmayan rasgeleliği ve hatta öngörülemeyen değişkenleri yönetebilirsiniz.

Büyük sayıların yasası uzun vadede bazı şeyleri düzelttiği için neden bu konuyla uğraşmak ?

Her ortam tasarım davranışını koruyamazken, daha sonra yapılması gerekenlere de güvenebilir ...


Özellikle son cümleyi seviyorum. Başka yerlerden kapma: Örneğin Viking Lotto'nun giriş: çıkış oranının uzun vadede yaklaşık 4: 1 olduğuna inanıyorum (burada "uzun" u "büyük" ile değiştirebilir); neredeyse tartışmalı (ancak iyi tanımlanmış) bir tasarım davranışına sahip ve çalışıyor. İlk önce tasarım davranışı kesin olarak tanımlanmadıkça, altındaki matematiği uygulayamazsınız. Sayılar kontrolsüz kontrolsüz olma eğilimindedir ...
Stormwind

@ Elbette rüzgar fırtınası. Tasarım / teori eksikse - matematik yararsızdır. Onun ama bir araç. 5. sınıf matematik düzeyinin iyi olduğu ekonomileri çeken tasarımcıları gördüm. Mantıksal olarak yapmak istediklerini basitçe haritalandırdılar ve matematik bitlerini nasıl yapacaklarını / tavsiyeleri için matematik arkadaşlarına (genellikle kodlayıcılara) gittiler. Her nasılsa hala herkes için açık olmamayı yönetiyor - Planla ne kadar sıkıntı yaşıyorsanız - inşaatta daha fazla baş ağrısı göreceksiniz. Sadece bazı sistem kapmak ve tweaking noktası tamamen eksik. İlk önce neyin işe yarayacağına karar verirseniz, bu gerçekten yaratıcı değil.
helena4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.