Zufallsauswahl zwischen 2 Strategien

Sunnyharry

Mitglied
Hallo
Ich hab einen vorgegeben Quellcode
Java:
public class Zonk{
    public static void main(String[] in){
        if(in.length != 2) {
            System.out.println("Usage Zonk N Strategy");
        }

        int winCounter = 0;

        int N =Integer.parseInt(in[0]);
        int strategy =Integer.parseInt(in[1]);

        for (int i=0; i<N; i++) {
            int price = (int)(1.0+(Math.random()*3));
            int selected = (int)(1.0+(Math.random()*3));
      
            if(strategy == 1) {
                // Strategy 1 always change the selection
                if (selected != price) winCounter++;
            }
            else {
                // Strategy 2 always keep the selection
                if (selected == price) winCounter++;
            }
        }

        System.out.println("P(win)="+((double)winCounter/N));

    }
}

Jetzt sind meine Aufgaben folgende:
a) Erweitern Sie das Programm um eine dritte Strategie, die zufällig eine der beiden anderen
Strategien auswählt.
b) Welche Gewinnwahrscheinlichkeit ermitteln Sie mit dem Programm f ̈r diese dritte Strategie.
c) Erweitern Sie das Programm so, dass wenn man den Strategieparameter weglässt alle Stra-
tegien nacheinander probiert werden und wenn zusätzlich der Grö̈ssenparameter weggelassen
wird soll die Größe auf 10000 gesetzt werden.
d) Machen Sie einen Vorschlag, wie das Programm geschrieben werden kann, so dass man einen
beliebigen Parameter weglassen kann. Warum funktioniert das mit der bisherigen Lö̈sung nicht?

So ich habs jetzt mehrfach versucht zu lösen, doch irgendwie schaff ich es nicht wirklich :autsch:
Ich hab mir jetzt Gedanken zu a gemacht. Es ist ja eine If Schleife. Soweit ich das sehe, wird die Strategie 1 benutzt, wenn "Strategie" == 1 ist. Ansonsten wird ja Strategie 2 ausgeführt. Damit ich jetzt eine dritte Strategie programmieren kann, die zufällig zwischen den beiden Strategien aussucht, muss ich nicht so eine art math.random eintippen, dass entweder 1 oder bsp 2 aussucht. Also ich muss ja die 1 oder eine andere zahl random kriegen. Sind meine Gedanken richtig oder bin ich auf dem Holzweg?
 
Alles klar. If ABFRAGE ^^

Also der angegebene Quelltext ist schon in der Aufgabe vorgegeben. Es geht um das sogenannte "Ziegenproblem"
Bei der Strategie 1, wechselt das Programm seine von Anfang an ausgewählte chance/ Tür.
Bei der Strategie 2 behält das Programm seine Anfangsauswahl/Tür.
Jetzt muss ich die Datei so umschreiben,dass zufällig zwischen Strategie 1 und 2 ausgewählt wird und nicht mehr von alleine.
Ich habs jetzt so gemacht. Ist das soweit richtig?
Java:
public class Zonk{
    public static void main(String[] in){
        if(in.length != 2) {
            System.out.println("Usage Zonk N Strategy");
        }

        int winCounter = 0;

        int N =Integer.parseInt(in[0]);
        int strategy =0;

        for (int i=0; i<N; i++) {
            int price = (int)(1.0+(Math.random()*3));
            int selected = (int)(1.0+(Math.random()*3));
       
      if (Math.random() < 0.5) strategy = 1;
            else strategy=2;      

            if(strategy == 1) {
                // Strategy 1 always change the selection
                if (selected != price) winCounter++;
            }
            else {
                // Strategy 2 always keep the selection
                if (selected == price) winCounter++;
            }
        }

        System.out.println("P(win)="+((double)winCounter/N));

    }
}
 
So. Mit den von mir geschriebenen Änderungen konnte ich den Teil a) und b) lösen.
Jetzt muss ich noch c) und d) machen.
Bei c) muss ich irgendwie die If Abfrage so ändern, das alle 3 Teile nach einander ablaufen und gleichzeitig muss ich den Größenparameter umstellen auf 10000. Ich hab jetzt int N =10000; gesetzt. Nur weiß ich nicht wie ich weiter machen soll. Irgend jemand eine Idee?

Ansonsten noch ne Idee zu D ?
 
Hm. Für die Aufgabe a) : Da sollte man damit rechnen, dass der Lehrer genau das erwartet, was in der Aufgabenstellung steht. Ursprünglich konnte man eine von zwei Strategien auswählen. Die Aufgabe war nun, eine dritte Strategie einzuführen, die zufällig eine der beiden anderen wählt. Was du gemacht hast wäre eher ... einfach so zufällig (und merhmals) zwischen zwei Stragegien hin- und her zu schalten.
Die Lösung würde IMHO(!so wie ich das verstehe!) anfangen mit sowas wie
Code:
int strategy =Integer.parseInt(in[1]);
[b]if (strategy == 3) 
{ 
... 
}
[/b]

Für die c) musst du wohl noch genauer überlegen, was mit mit Abfragen wie
[c]if (in.length == ... ) { ... }[/c]
so alles anstellen kann. Vielleicht wird sich dann die Antwort zu d) auch ergeben...
 

Neue Themen


Zurück
Oben