Suche Hilfe für kleines Simulationsprogramm :-D



  • ..



  • Vielen Dank für die Anregungen und auch für die Kritiken 😉

    Kann es verstehen wenn es bei machen einen gewissen Unmut hervorruft. Nur habe ich in anderen Fächern keinerlei Porbleme aber nun ein Projekt in C++ wovon ich kaum Ahnung habe. Hätte ja auch Aris ziehen können ... aber nein 😉

    Ich dank erstmal für die kleinen Programme und werd doch irgendwie zwischen den anderen Prüfungen es wohl selbst versuchen müssen. War ja auch nur eine fixe Idee von mir hier zu fragen.

    Alle Programme die wir in der Übung gemacht haben, sind leider komplett anders gewesen (berühmten Tankerflottenbeispiele 🙂 ).Trotzdem dank an all diejenigen die mir hier ein wenig geholfen haben. 👍

    Was für euch einfach erscheint, ist für mich wahrscheinlich kompliziert. ist wohl nicht jeden Quellcode in die Wiege gelegt worden.

    Wenn ich an ein gescheites Buch in der Hinsicht kommen würde wäre es auch von Vorteil. Stroustrupp geht nicht soweit und ein anderes Buch habe ich auch vergebens angeschaut, welches sich mit Simulation beschäftigt! Wieder war nur die Tankerflotte da 😃

    Naja wünsch euch trotzdem alles gute 🤡

    Und nochmal vielen Dank an Erhard Henkes, für die Mühe die du dir gegeben hast. Wenns bei mir klickt dann bekomm ich es ja vielleicht doch hin 🙂



  • Vielen Dank für die Anregungen und auch für die Kritiken 😉

    Kann es verstehen wenn es bei machen einen gewissen Unmut hervorruft. Nur habe ich in anderen Fächern keinerlei Porbleme aber nun ein Projekt in C++ wovon ich kaum Ahnung habe. Hätte ja auch Aris ziehen können ... aber nein 😉

    Ich dank erstmal für die kleinen Programme und werd doch irgendwie zwischen den anderen Prüfungen es wohl selbst versuchen müssen. War ja auch nur eine fixe Idee von mir hier zu fragen.

    Alle Programme die wir in der Übung gemacht haben, sind leider komplett anders gewesen (berühmten Tankerflottenbeispiele 🙂 ).Trotzdem dank an all diejenigen die mir hier ein wenig geholfen haben. 👍

    Was für euch einfach erscheint, ist für mich wahrscheinlich kompliziert. ist wohl nicht jeden Quellcode in die Wiege gelegt worden.

    Wenn ich an ein gescheites Buch in der Hinsicht kommen würde wäre es auch von Vorteil. Stroustrupp geht nicht soweit und ein anderes Buch habe ich auch vergebens angeschaut, welches sich mit Simulation beschäftigt! Wieder war nur die Tankerflotte da 😃

    Naja wünsch euch trotzdem alles gute 🤡

    Und nochmal vielen Dank an Erhard Henkes, für die Mühe die du dir gegeben hast. Wenns bei mir klickt dann bekomm ich es ja vielleicht doch hin 🙂



  • Ja, zeig mal, wir helfen dann sofort weiter.
    Poste doch mal so ein komplettes Tankerflottenbeispiel, oder schicke es mir per mail.



  • Die Zahl der Studenten haben wir ja schon, die schwanken zwischen 80 und 100 (Grenzen bei Normalverteilung: 90 +- 2*sqrt(25) ). Du brauchst keinen gleichverteilten Generator, sondern einen mit Normalverteilung, also mit unterschiedlicher Wahrscheinlichkeit der erzeugten Zahlen.

    Wie machst du das mit der Essensauswahl durch die Studenten? Hast du da schon eine eigene Idee oder soll ich meine posten?

    Hier findest du übrigens einen ziemlich universellen Zufallsgenerator:
    http://www.c-plusplus.net/forum/viewtopic.php?t=47483&highlight=w�rfeln

    boost/random bietet ebenfalls eine ganze Palette. Ist für dich vielleicht am einfachsten.



  • Studenten: x[date] = 80 + rand()%21) ;

    Preiskategorie : 2,30 | 2,80 | 3,00 | 3,30 | 3,40 | 3,80 | 4,00
    Wahrscheinlichk.: 1 | 2 | 4 | 6 | 4 | 2 | 1 (Summe: 20)

    Man könnte z.B. gleichverteilte(!) Zufallszahlen erzeugen im Bereich 0 ... 19 und dann über switch/case-Abfrage der Zufallszahl das entsprechende Essensangebot zufällig aber entsprechend gewichtet zurückgeben.

    0 -> 2,30
    1,2 -> 2,80
    3-6 -> 3,00
    7-12 -> 3,30
    13-16 -> 3,40
    17,18 -> 3,80
    19 -> 4,00

    Wenn man min. 80 Studenten erwartet, bietet man z.B. 80 Essen nach dieser Verteilung in einer Schleife an. Man muss immer, wenn ein Essen völlig aus ist, neues Essen dieser Sorte nachschieben. Das sollte man aber möglichst alles flexibel gestalten, damit man entweder den Umsatz/Gewinn maximieren kann bzw. die Studenten zufrieden stellt.

    Jetzt fehlt nur noch der Zugriff der Studenten auf das Essensangebot:
    "Die Auswahl der Preiskategorie erfolgt umgekehrt proportional zur Preiskategorie unter Berücksichtigung der Normierung zur Wahrscheinlichkeit".
    Also bilden wir den Kehrwert von jedem Preis und normieren in der Summe auf 10000000000:

    2,30 0,4348 1944844717
    2,80 0,3571 1597551017
    3,00 0,3333 1491047616
    3,30 0,3030 1355497833
    3,40 0,2941 1315630250
    3,80 0,2632 1177142855
    4,00 0,2500 1118285712

    sum: 2,2356 10000000000

    Diesen Rechenschritt sollte man auch einbauen, damit man das allgemein hat.

    Dann können wir wieder Zufallszahlen (vielleicht 1...10000) erzeugen und via if/else einen Zugriff eines Studenten auf das Essen simulieren. Also bei 1 ... 10000:
    1 ... 1597 -> 2,80
    1598 ... 3088 -> 3,00
    etc.

    Vielleicht gibt es auch noch einfachere Ideen. Bin ja kein Mathematiker.



  • ..



  • Ist dir langweilig Erhard Henkes? *g



  • noch ein kleiner tipp am rande...
    zum testen von simulationen nimmt man eigentlich immer feste unterschiedliche seeds und ärgert sich nicht mit einem srand(time(0)) rum...

    die abbildung der normalverteilung durch die gleichverteilung wie erhard sie vorschlägt halte ich zumindest für verbesserunugswürdig. da würde ich glaube ich lieber einen fertigen randomnumbergenerator für verwenden....

    Schätzen Sie die mittleren Einnahmen der Mensa! Geben Sie ein Konfidenzintervall für die täglichen Einnahmen zum Niveau 95% an!!!

    hierbei sollte man bedenken das die werte von zufallsgeneratoren öfters nicht unabhängig sind... wenn man die varianz aber nach der normalüblichen formel schätzt wird diese bei positiver korrelation unterschätzt was meist heisst das man zu früh aufhört zu simulieren da dann das konfidenzinterwall meist schon die gewünscht grösse bekommen hat in wirklichkeit ist es aber viel grösser da die varianz ja unterschätzt wurde...

    überlicherweise lässt man die simulation auch mit verschiedenen seeds am ende durchlaufen um abschätzen zu können ob die ergebnisse halbwegs konstannt bleiben...

    hat man ein system mit einer transiente, also eine simulation die sich erst einschwingen muss ist es in der Praxis wohl üblich 3 simulation mit unterschiedlichen seeds nebeneinander laufen zu lassen und die werte der simulation zu nehmen die am längsten läuft...



  • die abbildung der normalverteilung durch die gleichverteilung wie erhard sie vorschlägt halte ich zumindest für verbesserunugswürdig. da würde ich glaube ich lieber einen fertigen randomnumbergenerator für verwenden....

    Stimmt, hier sollte man einen Generator mit Normalverteilung einsetzen (boost, blitz). Jetzt warte ich aber erst mal, was der Anfrager so vorschlägt/fragt.



  • Ich weiss nicht ob das jetzt stimmt was ich von mir gebe aber so als idee um eine normalverteilung zu approximieren...

    bildet man aus einer stichprobe eines samples einer beliebig verteilten zufallsvariable (ich weiss jetzt gar nicht ob hier auch gelten muss das die unabhängig von einander verteilt sind aber nehmen wir das mal an) den mittelwert so gilt x_quer ist normalverteilt mit (mü,sigma^2/n)... (das ist ja gerade der spass den man auch beim konfidenzintervall annimmt)

    das mü von deiner verteilung kennst du ja, wenn du ne gleichverteilung hast und %n rechnest ist das mü gerade (n-1)/2 (das sigma schätzt du aus dem sample)...

    dann hast du eine normalverteilte zufallsvaribale (ich würde empfehlen ca. 20 werte aufzuaddieren)...

    zum transformieren auf die normalverteilung die du brauchst müsstest du dann nur entsprechend den abstand zwischen mü und den 90 studenten verschieben und dann noch die varianz stauchen oder strecken...



  • so, das ganze driftet etwas ab 🙂



  • Dieser Thread wurde von Moderator/in Korbinian aus dem Forum Projekte in das Forum Rund um die Programmierung verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • hab das mal eben mit der normalverteilung ausprobiert ich glaub das funzt sogar wirklich... wie gesagt ohne garantie aber mit der mfc malt der mir ne schöne glockenkurve...

    ist noch verbesserungswürdig insbesondere ist schwachsinnig das ich die varianz bei jedem mal neu schätze statt das ein paar mal zu machen und dann den mittelwert der varianzen als schätzer zu nehmen aber vom prinzip her scheinst so zu gehen...

    double normalverteilte_zufallsvariable(double mue,double sigma){
    
    	int i,temp,n=100;
    	double var,zv,mue_rand;
    	zv=var=0;
    	mue_rand=RAND_MAX/2.0;
    	for(i=0;i<n;++i){
    		temp=rand();
    		zv+=temp;
    		var+=(temp-mue_rand)*(temp-mue_rand);
    	}
    	zv/=n;
    	var/=n*(n-1);
    
    	zv+=mue-mue_rand;
    
    	zv*=sigma/pow(var,0.5);
    
    	return zv;
    
    }
    
    void test(double* array,int n,double mue,double sigma,int values){
    
    	int i;
    	double x,u,o,interval;
    	u=mue+3*sigma;
    	o=mue-3*sigma;
    	interval=(o-u)/(n-2);
    
    	memset(array,0,n*sizeof(double));
    
    	for(i=0;i<values;++i){
    		x=normalverteilte_zufallsvariable(mue,sigma);
    		++array[(int)(min(max(0,1+(x-u)/interval),n-1))];
    	}
    }
    
    double max_value(double* array,int n){
    	double max=*array;
    	for(int i=1;i<n;++i)
    		if(max<array[i])
    			max=array[i];
    	return max;
    }
    
    void CMalemaleDlg::OnButton1(){ 
    
        CWnd *wp; 
        CDC *pDC; 
        CRect Rect;
    	CString str;
        double y,von,bis; 
        int i,width,height,n; 
    
    	n=700;
    	double *array=new double[n];
    
    	test(array,n,0,1,500000);
    
    	von=0; 
        bis=max_value(array,n);
    
        wp = GetDlgItem(IDC_STATIC_DIAGRAMM); 
        pDC = wp->GetDC(); 
        wp->GetWindowRect(&Rect); 
        width=min(n,abs(Rect.TopLeft().x-Rect.BottomRight().x)); 
        height=abs(Rect.TopLeft().y-Rect.BottomRight().y); 
    
        for(i=0;i<width;++i){ 
            double wert=array[i];    
    		if(bis>=wert && von<=wert){ 
                y=height-(height*(wert-von)/(bis-von)); 
                pDC->SetPixel(i,(int)y,RGB(255,0,0)); 
    
            }    
    
        } 
    
    	delete [] array;
    
        wp->ReleaseDC(pDC); 
    
    }
    


  • In boost gibt es unter boost/random/normal_distribution.hpp auch einen Generator für Normalverteilung. Anwendung: http://www.c-plusplus.net/forum/viewtopic.php?p=596452#596452



  • Damit wir hier mal konkret weiter kommen, ein Einstieg in die Simulation, die zeigt, wie wenig marktorientiert sich die Mensa verhält, da sie die Nachfrage der Studenten nicht in allen Kategorien befriedigt:

    ..



  • Hallo Leute!
    Ich bin wirklich sehr überrascht über euer Engagement.
    Leider bin ich jetzt 3 Wochen zum Praktikum im Ausland und habe dort nicht die Möglichkeit zu programmieren. Finde ich schade da eure Anregungen sehr gut und ausführlich sind. Denk mal so viel Details würde der Prof nicht erwarten da es nicht so umfangreich angesiedelt war.

    Wie gesagt bin ich in 3 Wochen erst wieder fähig die Aufgabe zu erarbeiten, und habe eine Woche dann Zeit für die Lösung. Also bestimmt ordentlich was zu tun, da ich nicht über das Wissen verfüge das ihr habt (leider) 🙂

    So dann VIELEN VIELEN DANK für die Ratschläge die bis jetzt kamen, wenn ich es dann net hinbekommen bin ich selbst Schuld!

    MFG Joerg de Boerg



  • @Joerg de Boerg: wenn du Unterstützung brauchst, wir stehen bereit. 🙂



  • Hehe, Erhard ist schon ganz heiss auf die nächste Simulation 😉

    war aber auch wirklich mal ne nette Aufgabe, nicht so ein standard 0815 sortieren sie nach weiss ich was... hat sich der aufgabensteller mal richtig mühe gegeben



  • Solche Simulationen finde ich in der Tat recht amüsant. Ich denke, dass ich die Aufgabe mit meinem Angebot-/Nachfragespiel etwas verfälscht habe. Wahrscheinlich werden nicht jeden Tag alle Preiskategorien angeboten, sondern nur eine Auswahl. Mir ist allerdings noch nicht klar, wieviele verschiedene Essenskategorien täglich angeboten werden (spielt vielleicht auch keine Rolle, also müsste man mit einer Variable modellieren, obiges Programm wäre dann die Variante, wenn man täglich alles anbietet).

    Das Programm lässt sich aber leicht an alle möglichen Fragestellungen anpassen.
    Mich interessiert das zur Modellierung wirtschaftlicher Vorgänge in der Produktion, z.B. für Losgrößenoptimierung bei komplexen Kampagnenproduktionen.

    Ich habe den MT-Generator kombiniert mit Normalverteilung von boost genommen. Das ist an einer Hochschule sicher nicht erlaubt. 😉
    Hat jemand einen transparenten Normalverteilungsgenerator parat?


Anmelden zum Antworten