|
|
Funktion mit Wahrscheinlichkeit ablaufen lassen ? |
|
Chrisch |

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 09.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 08:46
Titel: Funktion mit Wahrscheinlichkeit ablaufen lassen ?
|
 |
Wie kann ich es am besten realisieren, dass ich durch eine Benutzereingabe eine Funktion mit einer bestimmten Wahrscheinlichkeit ablaufen lassen kann ?
Nur als Beispiel möchte ich als Benutzer eine Schleife nur in 30 % aller Fälle durchlaufen, damit ihr Gewicht auf das Endergebnis gering bleibt.
Das soll natürlich variabel sein.
Ich habe es so versucht
aber mit rand erreiche ich ja nur eine Gleichverteilung, dementsprechend ist es irrelevant welche Wahrscheinlichkeit der Benutzer vorgibt.
Jemand eine Idee ?
Danke im Vorraus
|
|
|
|
|
steffi |

Forum-Century
|
 |
Beiträge: 149
|
 |
|
 |
Anmeldedatum: 07.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 09:10
Titel:
|
 |
Du kannst den Benutzer die Eingabe machen lassen, wie von dir vorgeschlagen. Dann könntest du das Ablaufen der Funktion von einer Zufallszahl abhängig machen. Ob diese z.B. unter/über der Eingabe des Benutzers ist. Hab ich mich verständlich ausgedrückt
Hoffe es hilft
_________________
Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
|
|
|
Chrisch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 09.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 09:19
Titel:
|
 |
ja aber die Zufallszahlen sind doch auch alle gleichwahrscheinlich oder ?
Also ist es doch egal, ob der Benutzer 0.1 oder 0.8 eingibt ?
Hm, na ich versuch es mal
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 09:22
Titel:
|
 |
Wie genau soll denn die Benutzereingabe auf den Code Einfluss haben?
Prinzipiell, also wenn Du zu 30% Wahrscheinlichkeit eine Schleife ausführen willst, ginge das am einfachsten über:
Wenn Du die Wahrscheinlichkeit selbst angeben willst, eben entsprechend die 0.3 durch den Wert, den input liefert, ersetzen.
|
|
|
steffi |

Forum-Century
|
 |
Beiträge: 149
|
 |
|
 |
Anmeldedatum: 07.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 09:27
Titel:
|
 |
Hallo,
so wie Keloid hatte ich mein Bsp. gemeint. Wie geschrieben, kann sein, dass ich mich unverständlich ausdrücke....
das
liefert dir gleichverteilt Zahlen zwischen 0 und 1, wie du weißt. Wenn du jetzt das durchlaufen der Schleife davon abhängig machst, ob rand(1,1) unter einer Schwelle war oder nicht, erhälst du die Wahrscheinlichkeit, die du wünschst je nach Wahl der Schwelle.
Wenn du es testen möchtest, kannst du doch bei Durchlauf der Schleife, einen Zähler bei jedem Schleifendurchlauf um 1 hochzählen. Dann prüfst du wie oft deine Schleife durchlaufen wurde im Verhältnis zur Gesamtanzahl der Durchläufe. Bei genügend Durchläufen wirst du dich dem vorgegebenen prozentsatz nähern
_________________
Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
Zuletzt bearbeitet von steffi am 12.08.2008, 09:33, insgesamt einmal bearbeitet
|
|
|
Chrisch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 09.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 09:30
Titel:
|
 |
Hm so ähnlich hatte ich das schon. Ich nahm halt an, das der rand-Befehl
mir Zufallszahlen liefert die alle gleich wahrscheinlich auftreten können.
Also kam ich auf den Trichter rand(..) mit einem MFaktor zu wichten.
Aber so sollte es funktionieren. Vielen Dank euch beiden, beide Vorschläge kann ich gebrauchen.
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 09:48
Titel:
|
 |
rand erzeugt gleichverteilte Zufallsvariablen im halboffenen Intervall (0,1]. Natürlich nur mit einer bestimmten Genauigkeit, die vom verwendeten Algorithmus abhängt.
Wenn Du allerdings erklären könntest, wie Du Dir die Funktionsweise des Codes vorgestellt hast, können wir Dir eventuell noch weiterhelfen.
|
|
|
Chrisch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 09.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 10:32
Titel:
|
 |
Ich glaube ich habe ein Verständnisproblem!
Ich versuchs mal.
Ich verallgemeinere meinen Code etwas, ist sonst schwer lesbar.
Folgendes passiert :
Wenn die Zufallszahlen gleich verteilt sind, bedeutet es doch dass der Zufallsgenerator im Intervall [0..1] jede Zahl mit der gleichen Wahrscheinlichkeit ausspucken kann oder ?
Dementsprechend ist es doch irrelevant, welche "Schwelle" mein Benutzer nun eingibt, ob 25% oder 90% ..weil diese Werte doch nicht unwahrscheinlicher sind als andere, oder ?
Der Generator kann doch gleich wahrscheinlich 0.25 und 0.9 ausgeben ?
Ich möchte eigentlich echte Wahrscheinlicht ..Gibt mein Benutzer 0.2 ein, möchte ich in ca. 2 bis 3 von 10 Versuchen bestimmte Programmteile aufrufen, die in allen anderen Fällen nicht aufgerufen werden.
Uff
|
|
|
Chrisch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 09.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 10:38
Titel:
|
 |
Warum das alles ?
Genetische Algorithmen.
z.b. in meinem Falle lasse ich eine bestimmte N-lange Codierung
bitweise mutieren. Wird diese Funktion ständig aufgerufen divergiert meine Ergebnisfunktion und ich komme nie zum Ziel. Deshalb sollen manche Programmteile nur sachte und selten ausgeführt werden, damit ihr Einfluß sich in Grenzen hält.
|
|
|
steffi |

Forum-Century
|
 |
Beiträge: 149
|
 |
|
 |
Anmeldedatum: 07.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 10:49
Titel:
|
 |
der Code schaut doch gut aus, wenn ich dich richtig verstehe, macht der Code genau das was du möchtest.
Bsp. für das Verständnis:
Wahrscheinlichkeit=0,3 (30%)
Wenn W=rand(1,1) gleichverteilt Zufallszahlen ausspuckt, ist das in Fall
a) eine 0,5 und in b) eine 0,1
Dann wird in Fall a) deine Schleife "es passiert was anderes" machen, in Fall b) passiert "wird ausgeführt"
Wenn das jetzt mehrfach passiert, wird die if Bedingung 30% treffen und die else Bedingung eben die übrigen 70% der Aufrufe.
Soweit jetzt verstanden?
Wenn du Verständnisproblem hast, empfehle ich es einfach mit ganz simplen Zahlen auszuprobieren, oder eben auf einem Blatt Papier mal den Code "durchzuarbeiten".
_________________
Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 12.08.2008, 18:41
Titel:
|
 |
|
 |
|
Eine Ergänzung zu steffis Beispiel:
Würdest Du die Zufallswahrscheinlichkeit über ein == mit dem Eingabewert vergleichen, wäre es tatsächlich egal, welchen Wert Du als Schwellwert angibst.
Da Du aber über ein <= vergleichst, ändert sich die Situation grundlegend.
Nimm beispielsweise einen sechsseitigen Würfel.
Die Wahrscheinlichkeit, genau die 2 zu erhalten ist natürlich so hoch wie die, eine fünf zu erhalten.
Möchtest Du aber eine beliebige Zahl kleiner oder gleich 2 würfeln, dann ist die Wahrscheinlichkeit kleiner als wenn Du eine beliebige Zahl kleiner oder gleich 5 würfeln möchtest, da die Anzahl der Elemente kleiner ist, die Wahrscheinlichkeit pro Element aber gleich hoch:
kleiner oder gleich 2: 1, 2
kleiner oder gleich 5: 1, 2, 3, 4, 5
Jede der Zahlen hat bei einem sechsseitigen Würfel die Wahrscheinlichkeit von 1/6, gewürfelt zu werden, also hast Du im ersten Fall eine Gesamtwahrscheinlichkeit von 2/6 = 1/3, im zweiten Fall von 5/6.
Diese Überlegung kannst Du jetzt auf eine Menge mit 10 Elemente, 100 Elementen, 1 Million Elemente, etc. übertragen.
Daher ist der Schwellwert auf jeden Fall ausschlaggebend.
Noch ein Nachtrag:
Im statistischen Mittel (also für viele Durchläufe Deines Programms) wirst Du bei einem Schwellwert von 0.3 auch wirklich in 3 von 10 Fällen die spezielle Funktion aufgerufen haben. Wenn Du sie nur exakt 10 Mal laufen lässt, kann das durchaus anders aussehen.
|
|
|
Chrisch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 09.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.08.2008, 18:28
Titel:
|
 |
wunderbare Erklärung !
Hatte da einen kleinen Denkfehler drin.
Danke.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|