funktionierenden Algorithmus finden :(

Für allgemeine Fragen zur Programmierung mit PureBasic.
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

funktionierenden Algorithmus finden :(

Beitrag von True29 »

Hi es geht um folgenden code ;)
Leider weis ich nicht wie man solch eine Algo nennt daher der doofe titel :(
er soll bewirken das ich sagen kann symbol 0 hat die chance 50% von 100% zu erscheinen.
Eventuell hat wer Optimierungsvorschläge ich komme leider nicht weiter.
Grüße und danke.

Code: Alles auswählen

#anz_symbole = 11

Procedure getss(Array symbole.i(1))
  random = Random(100,1)
  grenze = 0
  i=0
  While grenze+Symbole(i) < random And i < #anz_symbole
    grenze+Symbole(i)
    i+1
  Wend
  ProcedureReturn i
EndProcedure

        ;Prozent chance für symbol
        Dim Symbole(12) 
        Symbole(11) = 2
        Symbole(10) = 3
        Symbole(9) = 6
        Symbole(8) = 7
        Symbole(7) = 8
        Symbole(6) = 9
        Symbole(5) = 9
        Symbole(4) = 10
        Symbole(3) = 10
        Symbole(2) = 11
        Symbole(1) = 11
        Symbole(0) = 12

      Define counter.i
  
      For y = 0 To #anz_symbole ;Anzahl symbole
      counter = 0
      Define returnnumber
      
        For x = 0 To 1000 ;Zählungen
          If getss(Symbole()) = y                     
            counter + 1
          EndIf            
        Next x
        
        Debug "-------------"
        Debug "symbol" + y
        Debug StrF(counter/1000*100) +"%"
      Next y
   End
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: funktionierenden Algorithmus finden :(

Beitrag von STARGÅTE »

Ist doch oke der Code, bis auf die Tatsache, dass es keine 100% sind.

Ich würde statt dessen nur Gewichtungen angeben, hier mein RandomField()

Code: Alles auswählen


Procedure RandomField(Array Probability.f(1))
	Protected Field.i, LastField.i = ArraySize(Probability())
	Protected Total.f, Value.f
	For Field = 0 To LastField
		Total + Probability(Field)
	Next
	Value = Total * Random($7FFFFFFF) / $80000000
	Total = 0.0
	For Field = 0 To LastField
		Total + Probability(Field)
		If Value < Total
			ProcedureReturn Field
		EndIf
	Next
EndProcedure


Dim Symbol.f(3)
Symbol(0) = 3.0
Symbol(1) = 1.0
Symbol(2) = 0.25

Dim Test.i(2)
Define I.i, Field.i
For I = 1 To 1000000
	Field = RandomField(Symbol())
	Test(Field) + 1
Next

For Field = 0 To 2
	Debug "Symbol "+Str(Field)+" : "+StrF(Test(Field)/10000.0,2)+"%"
Next
Oben gewichte ich Symbol 0 soll 3mal mehr bekommen als Symbol 1 und Symbol 1 4mal mehr als Symbol 2:
Symbol 0 : 70.53%
Symbol 1 : 23.54%
Symbol 2 : 5.93%
passt.

Edit: Noch mal n kleine Verbesserung.
Zuletzt geändert von STARGÅTE am 31.08.2013 20:23, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: funktionierenden Algorithmus finden :(

Beitrag von True29 »

hi , gleich mal testen ;)
danke.
i7,12gb ram , Windows 10 ,Purebasic 5.50
Antworten