Симуляция Монте-Карло с броском костей и монетами - PullRequest
0 голосов
/ 18 декабря 2018

в одной из моих недавних лабораторий нас попросили провести симуляцию Монте-Карло в java, вопрос был сформулирован очень странно, но из того, что я могу собрать, нам нужно было симулировать бросание игральных костей и добычу биткойнов.В основном, каждые 200 рулонов добывали биткойн, но мы хотели знать только количество раз, которое требуется, чтобы бросить шестерку, когда добывается биткойн, а затем нам нужно получить среднее количество рулонов, которое мы бросили 6. У меня естьбазовое решение сделано, но оно не правильно, и часть биткойнов меня смущает, кто-нибудь знает, как я могу улучшить свой код.

import java.util.*; 

 public class monteCarloDiceRollBitCoin
 {

     public static void main (String args[])
     {  

         Random rand = new Random();
         int dice = 0;
         int rolled = 0; 
         Random bitCoin = new Random();
         int bitcoinMined = 0;  
         int times = 0; 




            for (int i=0; i<1000000; i++){ //MonteCarlo simulation 1,000 
             times 

                for(int counter = 0; counter <=200; counter++)
                {

                    dice = rand.nextInt(6) + 1; // 6 is the maximum and the 
                    1 is our minimum, like simulating a dice roll
                    bitcoinMined = bitCoin.nextInt(200);

                        if(dice==6 && counter == 200)
                        {
                            rolled++; //increment the rolled variable if 
                            dice returns a 6
                            bitcoinMined++; // when counter is 200 a bitcoin 
                            has been mined
                        }

                        /*if(counter == 300)
                        {
                            bitCoin++; 
                        }*/




                       }



                /*int average = rolled/bitCoin;
                System.out.println("Six was rolled " + rolled + "times");
                System.out.println(bitCoin + "bitcoin(s) were mined");
                System.out.println("The average number that a six was rolled 
                is" + average);*/
             }
                int average = rolled/bitcoinMined;
                System.out.println(" Six was rolled " + rolled + "times ");
                System.out.println(bitcoinMined + " bitcoin(s) were mined 
                ");
                System.out.println(" The average number that a six was 
                rolled is " + average);

             }
            }

У меня есть объявленная переменная times, которую я не использовал, потому что яЯ просто пытаюсь выяснить, где его поставить, пожалуйста, имейте в виду, что я все еще относительно новичок в программировании, и даже мои демонстранты сказали, что это был очень странный вопрос для нас.Спасибо

1 Ответ

0 голосов
/ 02 января 2019

Вопрос действительно немного расплывчатый.Я не понимаю, что вы имеете в виду под "Среднее время, когда выпала шестерка", если вы можете объяснить, я адаптирую код ...

Из того, что я могу понять из вашего объяснения, я сделал это:

import java.util.Random;

public class MonteCarloDiceRollBitCoin {

    public static void main(String args[]) {
    Random rand = new Random();
    int rolled = 0;
    int bitcoinMined = 0;
    int bitcoinMinedAtSix = 0;
    int sixCounter=0;
    for (int i = 0; i < 1000000; i++) { // MonteCarlo simulation 1000000 times
        int dice = rand.nextInt(6) + 1; // 6 is the maximum and the 1 is our minimum, like simulating a dice roll
        if (dice == 6) {
            rolled++; // increment the rolled variable if dice returns a 6
        }
        if ((i+1) % 200 == 0) {
            bitcoinMined++; // increment counter divides by 200 : bitcoin has been mined
            if(sixCounter==0) {
                sixCounter=rolled; // this will remember the amount of sixRoled to mine the FIRST bitcoin.
            }
            if (dice == 6) {
                bitcoinMinedAtSix++; // and we also have a dice=6
            }
        }
    }
    System.out.println("Six was rolled " + rolled + " times.");
    System.out.println("Six was rolled " + sixCounter + " times before the first bitcoin was mined.");
    System.out.println(bitcoinMined + " bitcoin(s) were mined.");
    System.out.println(bitcoinMinedAtSix + " bitcoin(s) at Dice=6 were mined.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...