Me aq sa kuptova, profesori tė kėrkon qė probabiliteti i numrave 1-6 tė zareve tė mos jetė i barabartė por tė mund tė kontrollohet duke caktuar probabilitetin e pėrjashtimit (rejectProbability). Pra, zar me hile.
Psh: E zėmė se kemi njė zare pa hile dhe njė zare me hile. Probabiliteti qė tė bier numri 1 nė zaren pa hile ėshtė 1/6 ose 0.167. Pėr zaren me hile vendosim qė probaliteti i pėrjashtimit ėshtė 1.0 ose 100%.
Do hedhim nė fillim zarin me hile. Nėse bie 1, e pėrjashtojmė atė zare dhe hedhim zarin pa hile. Sa ėshtė probabiliteti qė rezultati ėshtė 1?
Probaliteti(rezultati=1) = Probabilitetin(Zari1 = 1) * Probabliteti(Zari2 = 1)
Probaliteti(rezultati=1) = (1/6) * (1/6)
Probaliteti(rezultati=1) = 1/36 = 0.028
Kjo ishte kėrkesa. Mė poshtė gjen edhe programin e modifikuar qė tė lejon tė caktosh probalitetin e pėrjashtimit pėr ēdo numėr tė zares. Krijojmė njė matricė me 6 elementė pėr tė ruajtur probabilitetin e pėrjashtimit dhe si fillim i caktojmė probalitetin 0, dmth nuk pėrjashtojmė asnjė numėr.
Pastaj duke pėrdorur metodėn setRejectProbabality(N, P), caktojmė probalitetin e pėrjashtimit P pėr numrin N tė zarit. Duke vazhduar me shembullin mė lart, pėr tė pėrjashtuar numrin 1, thėrrasim metodėn setRejectProbability(1, 1.0). Pėr tė pėrjashtuar vetėm 50% tė hedhjeve tė numrit 5: setRejectProbability(5, 0.5).
Kur hedhim zaren, marrim njė numėr tė rastėsishėm nga kompjuteri (math.random()) dhe nqs ky numėr ėshtė mė i vogėl ose i barabartė me probabilitetin qė kemi nė matricė, atėherė hedhim zaren pa hile.
Ja kodi nė Java qė bėn kėto qė shpjegova mė lart:
Kodi PHP:
public class WeightedDie {
private double[] rejectProb = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
// simulate the roll of a fair six-sided die (1-6)
public int rollFair(){
return (int)( (Math.random()* 6) + 1);
}
/*
* Simulate the roll of a biased six-sided die (1-6).
* Reduce probability of a 6 from 10/60 to 9/60, with
* equal probability of values from 1-5
*/
public int rollWeighted(){
// pick a number, 1-6 with equal probability
int rtnVal = rollFair();
// but with probability 1/10 reject a 6 for a value
// in range 1-5
if (Math.random() <= this.rejectProb[rtnVal - 1]){
rtnVal = rollFair();
}
return rtnVal;
}
// Input: an int in the range 1-6 and a double in the
// range [0-1)
void setRejectProbability(int side, double rejectProb){
if( rejectProb >= 0.0f && rejectProb <= 1.0f )
this.rejectProb[side - 1] = rejectProb;
}
// Input: an int in the range 1-6
// Output: the rejectProbability of the given input
// value for the given object
double getRejectProbability(int side){
return this.rejectProb[side - 1];
}
}
Pėr tė parė nėse zari me hile punon siē duhet, e hedhim atė 100.000 herė, nė fillim me probabilitetin e pėrjashtimeve (0, 0, 0, 0, 0, 0) dhe pastaj me probabilitetin e pėrjashtimeve (1.0, 0.7, 0.4, 0, 0, 0). Dmth pėrjashtojmė 100% tė njėshave, 70% tė dyshave dhe 40% tė treshave.
Ja kodi nė Java qė e bėn kėtė gjė.
Kodi PHP:
public class Prova {
public static void main(String[] args){
WeightedDie zare = new WeightedDie();
int[] statistikat = {0, 0, 0, 0, 0, 0};
System.out.println("Zare te paanshme (100.000 hedhje)");
for (int i = 0; i < 100000; ++i){ // hedhim zaret
statistikat[zare.rollWeighted() - 1]++; // ruajme numrin
}
for (int i = 0; i < 6; ++i){ // nxjerrim probabilitetin
System.out.println("P(" + (i + 1) + ") = " + (statistikat[i] / 100000.0f) );
}
for (int i = 0; i < 6; ++i){ // shuajme statistikat e zareve te paanshme
statistikat[i] = 0;
}
System.out.println("Zare te anshme (100.000 hedhje)");
zare.setRejectProbability(1, 1.0); // ndryshojme probalitetin e perjashtimeve
zare.setRejectProbability(2, 0.7); // per 1, 2, 3
zare.setRejectProbability(3, 0.4);
for (int i = 0; i < 100000; ++i){ // hedhim zaret
statistikat[zare.rollWeighted() - 1]++;
}
for (int i = 0; i < 6; ++i){ // nxjerrim probabilitetin
System.out.println("P(" + (i + 1) + ") = " + (statistikat[i] / 100000.0f) );
}
}
}
Rezultati nė ekran:
Kodi:
C:\>java Prova
Zare pa hile (100.000 hedhje)
P(1) = 0.16753
P(2) = 0.16355
P(3) = 0.16756
P(4) = 0.16679
P(5) = 0.16682
P(6) = 0.16775
Zare me hile (100.000 hedhje)
P(1) = 0.05874
P(2) = 0.10703
P(3) = 0.15818
P(4) = 0.22656
P(5) = 0.22412
P(6) = 0.22537
Rezultatet tregojnė se probabiliteti i pėrjashtimit ka patur efekt nė probabilitetin e 1, 2, 3.
P(rezultati=1) = P(1 perjashtuar)*P(zari1=1)*P(zari2=1) + P(2 perjashtuar)*P(zari1=2)*P(zari2=1) + P(perjashtuar 3)*P(zari1=3)*P(zari2=1)
P(rezultati=1) = (1)*(1/6)*(1/6) + (0.7)*(1/6)*(1/6) + (0.4)*(1/6)*(1/6)
P(rezultati=1) = (1/36)*(1 + 0.7 + 0.4)
P(rezultati=1) = (0.278)*(2.1)
P(rezultati=1) = 0.5838
0.5838 ~= 0.5874
Pra, programi punon siē duhet. Nė tė njėjtėn mėnyrė mund tė llogaritėsh edhe P(2), P(3), P(...), P(6).
Kodin mė lart e gjen edhe nė skedarėt e bashkėngjitur mė poshtė.
Krijoni Kontakt