Wahrscheinlichkeiten für Zellularautomaten in c#



  • Hallo Leute,

    hab folgendes Problem mit den Transformationsregeln von ZA:

    Ein 1 dim. Zellularautomat ist eine Reihe von 0 und 1.
    Regeln für ZA können sein (üblicherweise werden diese Regeln für ZA genommen, man kann aber auch per Hand durch die GUI die Regeln verändern um mit dem ZA zu experimentieren):

    111 folgt 0
    110--0
    101--0
    100--1
    011--1
    010--1
    001--1
    000--0

    Durch diese Regeln kann der neue Zellenzustand berechnet werden.
    Die erste Regel hier 111(Linker Nachbar 1, Zelle im Zustand t ist 1, Rechter Nachbar 1) folgt null bedeutet: wenn eine Zelle im Zustand 1 ist und seine beiden Nachbarn (links und rechts) ebenfalls im Zustand 1 sind, dann geht die Zelle im nächsten Zeitabschnitt (Generation) in den Zustand 0 über.
    Für das von mir gewählte Beispiel gilt: 111010111 = 0 0 0 1 01 0, falls wir die o. g. Regeln benutzen, die ja wie erwähnt auch verändert werden können.

    In einer Teilaufgabe sollen die Regeln wie oben z.B. 00011110 nicht Deterministisch sein (für jede Generation gilt immer die gleiche Regel), sondern von einer gewissen Wahrscheinlichkeit abhängen. D. h. es soll nicht immer gelten aus 111 folgt 0, sondern die Wahrscheinlichkeit das in der nächsten Generation aus 111 – 0 folgt soll bei X liegen (entweder wird es eine 0 oder 1).

    Ich brauche eine Methode, die mit einer Wahrscheinlichkeit x eine 1 ausgibt und mit einer Wahrscheinlichkeit y die 0 ausgibt, wobei gilt x+y=1.
    Die Wahrscheinlichkeit soll vom User Eingegeben werden können.

    war das Verständlich genug ?! 🙂

    Ich hoffe sehr das Ihr mir weiter helfen könnt.

    gruss
    jetnet



  • Benutze übrigens .Net 2003, und Programmiere mit C#



  • Dieser Thread wurde von Moderator/in estartu_de aus dem Forum MFC (Visual C++) in das Forum C# und .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo jetnet!
    Ich musste kürzlich auch was mit Wahrscheinlichkeiten programmieren, und habe das mit Random gemacht.

    Random a=new Random();
    double p;
    //erzeugt eine Zufallszahl zwischen 0 und 1
    p=a.NextDouble();
    //x ist jetzt die Wahrscheinlichkeit, z.B. bei 95% 0,95
    if(p>x)
    {
    //Anweisungen, die mit (1-x)% Wahrscheinlichkeit ausgeführt werden sollen
    }
    else
    {
    //Anweisungen, die mit x% Wahrscheinlichkeit ausgeführt werden sollen
    }
    

    Geht wahrscheinlich eleganter, aber bei mir klappts. 😉
    Mfg
    Michael



  • MERCI 🙂 !


Anmelden zum Antworten