Zufällige Entscheidungen treffen mit Wahrscheinlichkeit
Verfasst: 10.08.2008 19:40
Hallo,
eins vorweg: es geht hier jetzt nicht um einen besonders ausgefuchsten Code oder sowas, aber ich bin durch mein derzeitiges Projekt auf eine kleine Idee gekommen, und damit nicht jeder selbst draufkommen muß stelle ich sie hier direkt vor
Wenn man für irgendwelche zufälligen Dinge Entscheidungen treffen muß, dann macht man oft erstmal solche Konstrukte:
Später will man die Gewichtung verteilen, und man macht möglicherweise sowas:
Oft kommt es vor, daß man immer wieder an der Gewichtung feilen möchte, und dann darf man wieder und wieder ändern, und wenn es mehrere solcher Entscheidungen mit unterschiedlichen Random-Werten nacheinander gibt, sieht man das Verhalten auch nicht direkt auf den ersten Blick.
Die - zugegeben sehr einfache, aber dafür auch genauso effektive - Lösung für diese Sache ist eine kleine, handliche Procedure zu schreiben, die man am besten in seine Standard-Include irgendwo einbaut:
Somit braucht man nur noch die Wahrscheinlichkeit in Prozent angeben und bekommt ein entsprechendes Ergebnis. Bei mehreren zufälligen Entscheidungen, die nacheinander und mit unterschiedlicher Wahrscheinlichkeit auftreten, ergibt sich somit ein sehr übersichtliches Bild, und Änderungen sind extrem schnell und intuitiv gemacht:
...im Gegensatz zu solch einem Durcheinander wie hier:
Wie gesagt - auf sowas kann jeder kommen, aber für diejenigen, die noch nicht drauf gekommen sind, ist das hoffentlich ein netter kleiner Vorschlag 
eins vorweg: es geht hier jetzt nicht um einen besonders ausgefuchsten Code oder sowas, aber ich bin durch mein derzeitiges Projekt auf eine kleine Idee gekommen, und damit nicht jeder selbst draufkommen muß stelle ich sie hier direkt vor

Wenn man für irgendwelche zufälligen Dinge Entscheidungen treffen muß, dann macht man oft erstmal solche Konstrukte:
Code: Alles auswählen
If Random(1)
; mach dies
Else
; mach das
EndIf
Code: Alles auswählen
If Random(5) > 2
; mach dies
Else
; mach das
EndIf
Die - zugegeben sehr einfache, aber dafür auch genauso effektive - Lösung für diese Sache ist eine kleine, handliche Procedure zu schreiben, die man am besten in seine Standard-Include irgendwo einbaut:
Code: Alles auswählen
Procedure decide(probability)
If probability > 0 And Random(100) <= probability
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Code: Alles auswählen
If decide(30)
; mach dies
Else
If decide(25)
; mach das
Else
; mach jenes
EndIf
EndIf
If decide(60)
; mach noch das
Else
; oder halt das
EndIf
...im Gegensatz zu solch einem Durcheinander wie hier:
Code: Alles auswählen
If decide(9) < 3
; mach dies
Else
If Not decide(3)
; mach das
Else
; mach jenes
EndIf
EndIf
If decide(4) < 3
; mach noch das
Else
; oder halt das
EndIf
