vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: VB.NET2005
Datum: 10.09.10 15:21

Hallo zusammen!
Ich versuche gerade, eine Zufallszahl von 2 bis 12 zu generieren, mit gleicher Wahrscheinlichkeitenverteilung wie beim Würfeln mit zwei Würfeln.
Wahrscheinlichkeiten sind also:
2: 1/36
3: 2/36
4: 3/36
5: 4/36
6: 5/36
7: 6/36
8: 5/36
9: 4/36
10: 3/36
11: 2/36
12: 1/36

Bei Me.Load mache ich:
Randomize
Meine Funktion sieht so aus:
Public Function Zufallszahl() As Integer
        Dim Wurf1 As Integer = 0
        Dim Wurf2 As Integer = 0
        Do Until Wurf1 > 0
            Wurf1 = Rnd() * 6
        Loop
        Do Until Wurf2 > 0
            Wurf2 = Rnd() * 6
        Loop
Return Wurf1 + Wurf2          
    End Function
Nun habe ich eine Millionen Mal Würfeln lassen, doch die Verteilung weicht über 10 % von der Normal Verteilung ab!

Was mache ich da falsch, oder liegt das am Computer?
Vielen Dank und Viele Grüße!

Beitrag wurde zuletzt am 10.09.10 um 15:21:41 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: ModeratorDaveS (Moderator)
Datum: 10.09.10 16:20

Rnd() ist ein Algorithmus und liefert keine echte Zufallszahl.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: VB.NET2005
Datum: 10.09.10 18:36

Hallo Dave,
vielen Dank für Deine Antwort!
Aber wie kann ich nun Zahlen mit einer bestimmten Wahrscheinlichkeit ausgeben lassen?
Mir fällt da Nichts ein, auch der Tipp "Zufallszahl mit bestimmter Wahrscheinlichkeit" hilft nicht.
Vielen Dank für Eure Antworten!

Beitrag wurde zuletzt am 10.09.10 um 18:48:54 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: GPM
Datum: 10.09.10 19:36

Bei mir liegt die Abweichung mit der Net-Random-Klasse
und 1.000.000 Versuchen unter 1 %


MfG GPM
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: ModeratorDaveS (Moderator)
Datum: 10.09.10 20:50

Wie sieht dein Code aus? Ich bekomme Abweichungen bis zu 70% mit diesem Code, allerdings habe ich einiges getrunken und ich denke man kann sowieso leicht einen Fehler machen (Und wie wird eine Abweichung berechnet?)
        Dim ev() As Integer = {1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1}
        Dim throws(10) As Integer
 
        For i = 1 To 1000000
            throws(Zufallszahl() - 2) += 1
        Next
 
        For i = 0 To 10
            Dim pc As Double = throws(i) / 10000
 
            Dim ex As Double = ev(i) * 100 / 36
 
            Dim pcd As Double = Math.Abs(pc - ex) * 100 / ex
 
            Debug.WriteLine((i + 2).ToString() & ": " & pc.ToString() & " " & _
              ex.ToString() & " " & pcd.ToString())
        Next
2: 3,264 2,77777777777778 17,504
3: 6,6507 5,55555555555556 19,7126
4: 9,9157 8,33333333333333 18,9884
5: 13,1999 11,1111111111111 18,7991
6: 16,5594 13,8888888888889 19,22768
7: 16,5199 16,6666666666667 0,880600000000008
8: 13,2419 13,8888888888889 4,65832000000001
9: 9,8997 11,1111111111111 10,9027
10: 6,6308 8,33333333333333 20,4304
11: 3,2883 5,55555555555556 40,8106
12: 0,8297 2,77777777777778 70,1308

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: GPM
Datum: 10.09.10 21:26

Mein Versuch:
Public Class Form1
    Private WithEvents Btn As New Button With {.Text = "Start", .Parent = Me}
 
    Private Sub Btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
      Handles Btn.Click
        Dim rnd As New Random
        Dim werte() As Int32 = {0, 0, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1}
        Dim zahlen(12) As Int32
        For i As Int32 = 1 To 10 ^ 6
            zahlen(rnd.Next(1, 7) + rnd.Next(1, 7)) += 1
        Next
        Dim soll, ist, diff As Int32
        Dim s As String = "Zahl, Soll, Ist, Diff, Diff%" & Environment.NewLine
        For i As Int32 = 2 To 12
            soll = CInt(10 ^ 6 * werte(i) / 36)
            ist = zahlen(i)
            diff = Math.Abs(soll - ist)
            s &= i & " = " & soll & ", " & ist & "-> " & diff
            s &= ",-> " & diff * 100 / soll & " %" & Environment.NewLine
        Next
        MessageBox.Show(s)
    End Sub
End Class
MfG GPM
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: VB.NET2005
Datum: 11.09.10 10:21

Ich hab jetzt
=Rnd() * 6
durch
Zahl.Next(1,6)
ersetzt. Deklaration von Zahl ist:
Dim Zahl As New Random
Nun sind die Abweichungen aber noch größer, und es kommt zwischendurch 0!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: GPM
Datum: 11.09.10 11:43

Weil (1,6) nur die Zahlen von 1 bis 5 ergibt.
Siehe maxValue:
http://msdn.microsoft.com/de-de/library/2dx6wyd4.aspx

MfG GPM
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: ModeratorDaveS (Moderator)
Datum: 11.09.10 11:53

Wenn ich dafür eine Cryptofunktion für die Zufallszahlen nehme liegen die Ergebnisse viel näher an den theoretischen.

    Private rng As New System.Security.Cryptography.RNGCryptoServiceProvider
 
    Public Function Zufallszahl() As Integer
        Return wurf() + wurf()
    End Function
 
    Dim bytes(1023) As Byte
    Dim bi As Integer = 1024
 
    Public Function wurf() As Integer
        Dim b As Byte
        If bi = bytes.Length Then
            rng.GetBytes(bytes)
            bi = 0
        End If
        b = bytes(bi)
        bi += 1
        Return (b Mod 6) + 1
    End Function
Ergebnis:
2 %Ergebnis: 2,8208 erwartet: 2,77777777777778 Abweichung: 1,54880000000001
3 %Ergebnis: 5,6695 erwartet: 5,55555555555556 Abweichung: 2,05100000000001
4 %Ergebnis: 8,4257 erwartet: 8,33333333333333 Abweichung: 1,1084
5 %Ergebnis: 11,3051 erwartet: 11,1111111111111 Abweichung: 1,7459
6 %Ergebnis: 13,9886 erwartet: 13,8888888888889 Abweichung: 0,717919999999997
7 %Ergebnis: 16,6595 erwartet: 16,6666666666667 Abweichung: 0,0429999999999993
8 %Ergebnis: 13,8871 erwartet: 13,8888888888889 Abweichung: 0,0128800000000012
9 %Ergebnis: 11,0135 erwartet: 11,1111111111111 Abweichung: 0,878499999999992
10 %Ergebnis: 8,2003 erwartet: 8,33333333333333 Abweichung: 1,5964
11 %Ergebnis: 5,3614 erwartet: 5,55555555555556 Abweichung: 3,4948
12 %Ergebnis: 2,6685 erwartet: 2,77777777777778 Abweichung: 3,934

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: VB.NET2005
Datum: 11.09.10 12:04

Vielen Dank GPM!
Mit Maximum 7 sind die Wahrscheinlichkeiten fast optimal!
(Maximale Abweichung 15.000, durchschnittliche Abweichung ca. 3.000, bei 3,6 Mio. Versuchen)
Viele Grüße!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: VB.NET2005
Datum: 11.09.10 13:00

Randomize kann ich jetzt auch weglassen, oder?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: GPM
Datum: 11.09.10 13:47

Ja, wird nur bei Microsoft.VisualBasic.Rnd() benötigt.

MfG GPM
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten 
Autor: VB.NET2005
Datum: 11.09.10 13:58

Ok, Danke!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel