Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    50

    Algoritmo che setta la probabilità di uscita

    Ciao a tutti!

    Devo simulare il giro di una ruota composta da valori numerici letti da file con relative probabilità di uscita. Con l'oggetto random scelgo a caso che valore deve uscire, ma come faccio ad assegnare ad un valore specifico la probabilità di uscita?

    faccio un esempio:

    avendo 3 valori nelle ruota

    1) 50
    2) 100
    3) 150

    ovviamente hanno tutti la stessa probabilità di uscita 0.33

    ma come faccio ad assegnare le seguenti probabilità?

    1) 0.1
    2) 0.2
    3) 0.7

    Grazie 1000!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Algoritmo che setta la probabilità di uscita

    Originariamente inviato da EnZiMa
    avendo 3 valori nelle ruota

    1) 50
    2) 100
    3) 150

    ovviamente hanno tutti la stessa probabilità di uscita 0.33

    ma come faccio ad assegnare le seguenti probabilità?

    1) 0.1
    2) 0.2
    3) 0.7
    Diciamolo in modo più semplice e con un esempio:
    il 50 vuoi che abbia 1 probabilità su 10
    il 100 vuoi che abbia 2 probabilità su 10
    il 150 vuoi che abbia 7 probabilità su 10

    Bene, ora estrai un valore random compreso tra 0 e 9.

    Se è 0 --> 50
    Se è 1...2 --> 100
    Se è 3...9 --> 150
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    50

    Re: Re: Algoritmo che setta la probabilità di uscita

    Originariamente inviato da andbin
    Diciamolo in modo più semplice e con un esempio:
    il 50 vuoi che abbia 1 probabilità su 10
    il 100 vuoi che abbia 2 probabilità su 10
    il 150 vuoi che abbia 7 probabilità su 10

    Bene, ora estrai un valore random compreso tra 0 e 9.

    Se è 0 --> 50
    Se è 1...2 --> 100
    Se è 3...9 --> 150

    il problema è che non so a priori quanti valori(compresa la probabilità) ho, perchè sono letti da file, quindi magari potrei metterli in un array...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Algoritmo che setta la probabilità di uscita

    Originariamente inviato da EnZiMa
    il problema è che non so a priori quanti valori(compresa la probabilità) ho, perchè sono letti da file, quindi magari potrei metterli in un array...
    Ma non è un grosso problema .... il concetto comunque mi sembra (spero...) chiaro: l'insieme di tutte le probabilità è, per dirla in altro modo, la tua "torta" intera. Ognuno dei valori 50,100,150 si prende una certa "fetta" della torta. Dato un insieme di N numeri casuali (la torta intera), a te basta solo trovare un modo per accorpare i numeri nelle stesse proporzioni delle probabilità.

    Riprendiamo il tuo esempio, hai un file del tipo:
    50 0.1
    100 0.2
    150 0.7

    La somma delle probabilità è 1.0 e nextDouble() di Random ti fornisce un valore compreso tra 0.0 (incluso) e 1.0 (escluso).
    Bene, al 50 saranno assegnati i valori 0.0 <= x < 0.1, al 100 saranno assegnati i valori 0.1 <= x < 0.3 e al 150 saranno assegnati i valori 0.3 <= x < 1.0.

    Devi solo fare delle somme per determinare i range e cercare in quale range cade il valore estratto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    50
    ho provato questa strada:
    codice:
    import java.util.*;
    public class es{
    
    	 private static List<Integer> probabilita = new ArrayList<Integer>();
    	 private static Map <Integer,Integer> mappa = new HashMap <Integer,Integer>();
    	 private static int estratto=0;
    	 private static final int LIMITE=100;
    	 
    	 public static void main(String[]args){
    
    		//metto le probabilita e i valori nell'hashMap(probabilita, valore)
    		mappa.put(70,150);
    		mappa.put(10,50);
    		mappa.put(20,100);
    		
    		//inserisco le probabilita nell'arraylist
    		probabilita.add(70);
    		probabilita.add(10);
    		probabilita.add(20);
    
    		//creo il numero random
    		Random random = new Random();
    		estratto = random.nextInt(LIMITE);
    		
    		System.out.println("Numero random: "+estratto);
    		
    		//ordino la lista delle probabilita
    		Collections.sort(probabilita);
    		
    		for(int i = 0; i < probabilita.size();i++){
    			int corrente = probabilita.get(i);
    
    			if(estratto<=corrente){
    				System.out.println("Numero estratto:"+mappa.get(corrente)+" con probabilita del "+corrente+"%");
    				break;
    				}
    			}
    		}
    }
    sicuramente non è la soluzione migliore e non funziona neanche bene, ho dovuto mettere quel bruttissimo break dentro l'if altrimentri mi beccava anche l'intervallo successivo. Cosi come è, se esce un numero nell'ultimo intervallo tra il 71 e 100 non lo considera

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    50
    UP!

    devo implementare lo stesso algoritmo che fa funzionare questa ruota http://illuminations.nctm.org/ActivityDetail.aspx?ID=79

    help me!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.