Maximale Laufzeit verändern?



  • CppKnecht schrieb:

    "This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information."

    Äh, das ist, was kommt, wenn eine Exception geworfen wird und kein entsprechendes catch() gefunden wird. Zeig Code.


  • Mod

    CppKnecht schrieb:

    Kann mir jemand sagen, wie ich die maximale Laufzeit verändern kann?

    Hihi. Ich denke, du solltest entweder eine englische Laufzeit benutzen oder eine mit weniger irreführenden deutschen Übersetzungen.



  • CppKnecht schrieb:

    Der Code ist soweit richtig

    Falsch.

    CppKnecht schrieb:

    Kann mir jemand sagen, wie ich die maximale Laufzeit verändern kann?

    Es gibt keine maximale Laufzeit. Dein Code ist sicher von vorne bis hinten falsch. Wahrscheinlich hast du das ganze auch komplett falsch implementiert und bei einer besseren Implementierung würde der Algorithmus wesentlich schneller durchlaufen.



  • Mit Runtime ist die Laufzeit-Umgebung gemeint, also die Umgebung, in der dein Programm läuft. Die Fehlermeldung heißt auf Deutsch übersetzt also ungefähr "Diese Anwendung hat bei der Laufzeit-Umgebung angefordert, sich auf einem unüblichen Weg zu beeenden, bitte kontaktieren Sie das Support-Team der Anwendung für weitere Informationen.".



  • CppKnecht schrieb:

    Kann mir jemand sagen, wie ich die maximale Laufzeit verändern kann?

    weniger ein und ausschalten.



  • #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include <ctime>
    #include <iterator>
    #include <algorithm>
    #include <math.h>
    #include <iomanip>
    #include <vector>
    #include <functional>
    #include <numeric>
    #include <boost/random.hpp>
    #include <time.h>
    using namespace std;

    double Round(double, int);
    void zl(int kappa, vector<double> Z, int c_v, double &Zentrale_Loesung);

    boost::mt11213b mt;
    boost::normal_distribution<double> D_verteilung(5, 2);
    boost::normal_distribution<double> Z_verteilung(106, 5);

    boost::variate_generator<boost::mt11213b&, boost::normal_distribution<double> >
    get_Demand(mt, D_verteilung);
    boost::variate_generator<boost::mt11213b&, boost::normal_distribution<double> >
    get_Zahlbereit(mt, Z_verteilung);

    int main ()
    {
    int c_v = 87; //variable Kosten 87*1.15=100.05
    int kappa = 450; //Kapazität, knappa Ressource
    int h=100; //Anzahl Händler
    int delta; //Nachfragemenge auf dem Markt
    double b_f=100;
    double b_rs = 90;
    int verh_ite=4; //gute Begründung oder Schranken programmieren

    double ave_b_zul=0;
    double hilfe=0;

    int anz_ite=7;

    //Vektoren Defintion für die Wiedergabe
    vector<double> ave_zentrale_loesung(anz_ite, 0);
    vector<double> ave_Z_max(anz_ite, 0);
    vector<double> ave_Z_min(anz_ite, 0);

    for (int q=0; q<anz_ite; q++)
    {
    //Normalverteilung Anfang
    cout << clock() << " ";
    double D[h]; /*Nachfragemenge jedes Händlers*/

    //std::generate_n(D, h, normal_distribution(5.0, 2.0));

    for (int i=0; i < h; i++)
    {
    D[i] = get_Demand();
    D[i] = Round (D[i], 0);
    }
    double d=0;
    for (int i=0; i < h; i++)
    {
    d += D[i];
    }
    delta = static_cast<int>(d);
    vector<double> Z(delta,0); //Zahlungsbereitschaft
    //std::generate_n(Z.begin(), delta, normal_distribution(106.0, 6.0));
    //std::copy(Z, Z+kappa, std::ostream_iterator<double>(std::cout, "\n"));

    for (int i=0; i<delta; i++)
    {
    Z.at(i)=get_Zahlbereit();
    // cout << Z.at(i) << endl;
    cout << clock() << " ";
    }

    //Normalverteilung Ende

    //Zuordnung Anfang
    //vector<vector<double> > Z_Handler;

    double** Z_Handler=NULL;
    Z_Handler = new double*[h];
    int w = 0;
    for (int i=0; i<h ;i++)
    {
    d = D[i];
    w = static_cast<int>(d);
    Z_Handler[i] = new double [w];
    cout << clock() << " ";
    }

    //Einspeisung der Werte
    int w_kum = 0;
    for (int i=0; i<h; i++)
    {
    //Z_Handler.resize(i);
    d = D[i];
    w = static_cast<int>(d);
    // cout << endl << w << endl;
    //Z_Handler[i].resize(w);
    for (int j=0; j<w; j++)
    {
    //Z_Handler[i].push_back(Z.at(w_kum+j));
    Z_Handler[i][j]=Z.at(w_kum+j);
    }
    w_kum += w;
    }
    //Zuordnung Ende

    //ZENTRALE LÖSUNG Anfang
    //std::sort(Z.begin(), Z.end(), std::greater<double>());
    //std::copy(Z.begin(), Z.end(), std::ostream_iterator<double>(std::cout, " "));
    double Zentrale_Loesung=0;
    //zl(kappa, Z, c_v, Zentrale_Loesung);
    // ave_zentrale_loesung.at(0)=Zentrale_Loesung;
    // ave_Z_max.at(0)=Z.at(0);
    // ave_Z_min.at(0)=Z.back();
    //Zentrale Lösung Ende

    delete[] Z_Handler;
    }

    return 0;
    }

    //Funktionsdefinition
    double Round(double amount, int power_of_ten)
    {
    double pten; /* 10 to the power_of_ten /
    double intpart; /
    Integerteil der durch pten geteilten Zahl /
    double halfsign; /
    Plus oder Minus 0.5 für korrekte Rundung */
    double temp;
    temp = (double)power_of_ten;

    pten= pow((double)(10), temp); /* auf Zehnerpotenz definieren */
    halfsign = (amount < 0.0) ? - 0.5 : 0.5;
    modf( (double)(amount * pten + halfsign), &intpart);
    return ((double)(intpart / pten) );
    }

    void zl(int kappa, vector<double> Z, int c_v, double &Zentrale_Loesung)
    {

    for (int i=0; i<kappa; i++)
    {
    Zentrale_Loesung+=10;
    }
    /Das Ergebnis der zentralen Lösung entspricht dem maximalen Gewinn, den
    die Supply Chain erzielen kann auf dem Markt
    /

    //std::copy(Z, Z+kappa, std::ostream_iterator<double>(std::cout, "\n"));
    //cout << fixed << endl << "Das ist das Ergebnis der Zentralen Loesung:" << endl << Zentrale_Loesung << endl;
    //cout << fixed << endl << "Hoechster Wert der Zahlungsbereitschaft:" << endl << Z.at(0) << endl;
    //cout << fixed << endl << "Niedrigster Wert der Zahlungsbereitschaft:" << endl << Z.back() << endl;
    }



  • 👍 👍 👍

    Super. Einfach den ganzen Code reinhauen, auch noch unformatiert. Wir sind alle begeistert.



  • Mechanics schrieb:

    👍 👍 👍

    Super. Einfach den ganzen Code reinhauen, auch noch unformatiert. Wir sind alle begeistert.

    Schnell gemacht.

    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include <ctime>
    #include <iterator>
    #include <algorithm>
    #include <math.h>
    #include <iomanip>
    #include <vector>
    #include <functional>
    #include <numeric>
    #include <boost/random.hpp>
    #include <time.h>
    using namespace std;
    
    double Round(double, int);
    void zl(int kappa, vector<double> Z, int c_v, double &Zentrale_Loesung);
    
    boost::mt11213b mt;
    boost::normal_distribution<double> D_verteilung(5, 2);
    boost::normal_distribution<double> Z_verteilung(106, 5);
    
    boost::variate_generator<boost::mt11213b&, boost::normal_distribution<double> >
    get_Demand(mt, D_verteilung);
    boost::variate_generator<boost::mt11213b&, boost::normal_distribution<double> >
    get_Zahlbereit(mt, Z_verteilung);
    
    int main ()
    {
        int c_v = 87; //variable Kosten 87*1.15=100.05
        int kappa = 450; //Kapazität, knappa Ressource
        int h=100; //Anzahl Händler
        int delta; //Nachfragemenge auf dem Markt
        double b_f=100;
        double b_rs = 90;
        int verh_ite=4; //gute Begründung oder Schranken programmieren
    
        double ave_b_zul=0;
        double hilfe=0;
    
        int anz_ite=7;
    
    //Vektoren Defintion für die Wiedergabe
        vector<double> ave_zentrale_loesung(anz_ite, 0);
        vector<double> ave_Z_max(anz_ite, 0);
        vector<double> ave_Z_min(anz_ite, 0);
    
        for (int q=0; q<anz_ite; q++)
        {
    //Normalverteilung Anfang
            cout << clock() << " ";
            double D[h]; /*Nachfragemenge jedes Händlers*/
    
    //std::generate_n(D, h, normal_distribution(5.0, 2.0));
    
            for (int i=0; i < h; i++)
            {
                D[i] = get_Demand();
                D[i] = Round (D[i], 0);
            }
            double d=0;
            for (int i=0; i < h; i++)
            {
                d += D[i];
            }
            delta = static_cast<int>(d);
            vector<double> Z(delta,0); //Zahlungsbereitschaft
    //std::generate_n(Z.begin(), delta, normal_distribution(106.0, 6.0));
    //std::copy(Z, Z+kappa, std::ostream_iterator<double>(std::cout, "\n"));
    
            for (int i=0; i<delta; i++)
            {
                Z.at(i)=get_Zahlbereit();
    // cout << Z.at(i) << endl;
                cout << clock() << " ";
            }
    
    //Normalverteilung Ende
    
    //Zuordnung Anfang
    //vector<vector<double> > Z_Handler;
    
            double** Z_Handler=NULL;
            Z_Handler = new double*[h];
            int w = 0;
            for (int i=0; i<h ; i++)
            {
                d = D[i];
                w = static_cast<int>(d);
                Z_Handler[i] = new double [w];
                cout << clock() << " ";
            }
    
    //Einspeisung der Werte
            int w_kum = 0;
            for (int i=0; i<h; i++)
            {
    //Z_Handler.resize(i);
                d = D[i];
                w = static_cast<int>(d);
    // cout << endl << w << endl;
    //Z_Handler[i].resize(w);
                for (int j=0; j<w; j++)
                {
    //Z_Handler[i].push_back(Z.at(w_kum+j));
                    Z_Handler[i][j]=Z.at(w_kum+j);
                }
                w_kum += w;
            }
    //Zuordnung Ende
    
    //ZENTRALE LÖSUNG Anfang
    //std::sort(Z.begin(), Z.end(), std::greater<double>());
    //std::copy(Z.begin(), Z.end(), std::ostream_iterator<double>(std::cout, " "));
            double Zentrale_Loesung=0;
    //zl(kappa, Z, c_v, Zentrale_Loesung);
    // ave_zentrale_loesung.at(0)=Zentrale_Loesung;
    // ave_Z_max.at(0)=Z.at(0);
    // ave_Z_min.at(0)=Z.back();
    //Zentrale Lösung Ende
    
            delete[] Z_Handler;
        }
    
        return 0;
    }
    
    //Funktionsdefinition
    double Round(double amount, int power_of_ten)
    {
        double pten; /* 10 to the power_of_ten */
        double intpart; /* Integerteil der durch pten geteilten Zahl */
        double halfsign; /* Plus oder Minus 0.5 für korrekte Rundung */
        double temp;
        temp = (double)power_of_ten;
    
        pten= pow((double)(10), temp); /* auf Zehnerpotenz definieren */
        halfsign = (amount < 0.0) ? - 0.5 : 0.5;
        modf( (double)(amount * pten + halfsign), &intpart);
        return ((double)(intpart / pten) );
    }
    
    void zl(int kappa, vector<double> Z, int c_v, double &Zentrale_Loesung)
    {
    
        for (int i=0; i<kappa; i++)
        {
            Zentrale_Loesung+=10;
        }
        /*Das Ergebnis der zentralen Lösung entspricht dem maximalen Gewinn, den
        die Supply Chain erzielen kann auf dem Markt*/
    
    //std::copy(Z, Z+kappa, std::ostream_iterator<double>(std::cout, "\n"));
    //cout << fixed << endl << "Das ist das Ergebnis der Zentralen Loesung:" << endl << Zentrale_Loesung << endl;
    //cout << fixed << endl << "Hoechster Wert der Zahlungsbereitschaft:" << endl << Z.at(0) << endl;
    //cout << fixed << endl << "Niedrigster Wert der Zahlungsbereitschaft:" << endl << Z.back() << endl;
    }
    

    Stellt sich noch die Frage was wir damit sollen.



  • Ich würde sagen dein Speicher läuft irgendwann voll, weil du die Elemente von Z_Handler nie deletest.

    Warum sind da eigentlich Kommentare mit std::vector usw. drin? Das wäre der Code den du eigentlich schreiben solltest ...



  • Erstmal dankeschön für die schnellen Antworten.

    Mechanics schrieb:

    CppKnecht schrieb:

    Der Code ist soweit richtig

    Falsch.

    CppKnecht schrieb:

    Kann mir jemand sagen, wie ich die maximale Laufzeit verändern kann?

    Es gibt keine maximale Laufzeit. Dein Code ist sicher von vorne bis hinten falsch. Wahrscheinlich hast du das ganze auch komplett falsch implementiert und bei einer besseren Implementierung würde der Algorithmus wesentlich schneller durchlaufen.

    Gut zu wissen, dass es keine Laufzeitbeschränkungen gibt...trotzdem kommt diese Meldung bei anz_ite=7, aber bei 6 nicht.
    Eigentlich muss das ganze auch mit h=1000 und kappa=4500 bei anz_ite=100 durchführen.

    Übrigens ist das nur ein Auszug aus meinem Programm, weil angefangen haben alles Schritt für Schritt zu checken...aber hier hakt es schon.

    Hacker schrieb:

    CppKnecht schrieb:

    "This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information."

    Äh, das ist, was kommt, wenn eine Exception geworfen wird und kein entsprechendes catch() gefunden wird. Zeig Code.

    Eigentlich habe ich keinen try block eingefügt, also sollte auch kein catch() verlangt sein. Außer es passiert bei der Normalverteilung bei boost, was ich nicht glaube, da es ja auch bei anderen funktioniert.

    Mechanics schrieb:

    CppKnecht schrieb:

    Der Code ist soweit richtig

    Falsch.

    CppKnecht schrieb:

    Kann mir jemand sagen, wie ich die maximale Laufzeit verändern kann?

    Es gibt keine maximale Laufzeit. Dein Code ist sicher von vorne bis hinten falsch. Wahrscheinlich hast du das ganze auch komplett falsch implementiert und bei einer besseren Implementierung würde der Algorithmus wesentlich schneller durchlaufen.

    Man kann es mit Sicherheit schneller gestalten, aber da habe auch einfach nicht die Erfahrung...und bald keine Zeit mehr 😞

    ghf schrieb:

    CppKnecht schrieb:

    Kann mir jemand sagen, wie ich die maximale Laufzeit verändern kann?

    weniger ein und ausschalten.

    Was meinst du damit?



  • Bashar schrieb:

    Ich würde sagen dein Speicher läuft irgendwann voll, weil du die Elemente von Z_Handler nie deletest.

    Warum sind da eigentlich Kommentare mit std::vector usw. drin? Das wäre der Code den du eigentlich schreiben solltest ...

    Ich delete doch Z_Handler am Ende von main()... es ist auch innerhalb der letzten schleife, sodass bei jedem Durchlauf der Speicher wieder frei gegeben wird. Oder lieg ich falsch?

    Mechanics schrieb:

    👍 👍 👍

    Super. Einfach den ganzen Code reinhauen, auch noch unformatiert. Wir sind alle begeistert.

    Sorry für das Nicht-Formatieren.



  • CppKnecht schrieb:

    Bashar schrieb:

    Ich würde sagen dein Speicher läuft irgendwann voll, weil du die Elemente von Z_Handler nie deletest.

    Warum sind da eigentlich Kommentare mit std::vector usw. drin? Das wäre der Code den du eigentlich schreiben solltest ...

    Ich delete doch Z_Handler am Ende von main()

    Warum muss man eigentlich immer alles zweimal schreiben? Die Elemente von Z_Handler deletest du nicht.

    double** Z_Handler=NULL;
    Z_Handler = new double*[h];    // <- wird deletet
    int w = 0;
    for (int i=0; i<h ; i++)
    {
      d = D[i];
      w = static_cast<int>(d);
      Z_Handler[i] = new double [w];  // <- wird nicht deletet
      cout << clock() << " ";
    }
    


  • und warum kommentierst du den tollen std::vector aus?



  • Bashar schrieb:

    CppKnecht schrieb:

    Bashar schrieb:

    Ich würde sagen dein Speicher läuft irgendwann voll, weil du die Elemente von Z_Handler nie deletest.

    Warum sind da eigentlich Kommentare mit std::vector usw. drin? Das wäre der Code den du eigentlich schreiben solltest ...

    Ich delete doch Z_Handler am Ende von main()

    Warum muss man eigentlich immer alles zweimal schreiben? Die Elemente von Z_Handler deletest du nicht.

    double** Z_Handler=NULL;
    Z_Handler = new double*[h];    // <- wird deletet
    int w = 0;
    for (int i=0; i<h ; i++)
    {
      d = D[i];
      w = static_cast<int>(d);
      Z_Handler[i] = new double [w];  // <- wird nicht deletet
      cout << clock() << " ";
    }
    
    for(int i=0;i<h;i++)
            delete Z_Handler[i];
        delete[] Z_Handler;
    

    Ich delete es jetzt, aber funzt noch immer nicht.

    otze schrieb:

    und warum kommentierst du den tollen std::vector aus?

    Weil es mit dem vector auch nicht geklappt hat. Es bricht dann sogar bei einer geringeren Iteration ab.



  • Irgendwas stimmt an der Logik nicht. get_Demand kann dir auch negative Werte liefern. Wenn du das dann als Größe für ein double-Array benutzt, geht das natürlich in die Hose.



  • CppKnecht schrieb:

    Hacker schrieb:

    CppKnecht schrieb:

    "This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information."

    Äh, das ist, was kommt, wenn eine Exception geworfen wird und kein entsprechendes catch() gefunden wird. Zeig Code.

    Eigentlich habe ich keinen try block eingefügt, also sollte auch kein catch() verlangt sein.

    Nein, wenn du keinen try-Block einfügst dann kommt es auch (bei jeder Exception).



  • MFK schrieb:

    Irgendwas stimmt an der Logik nicht. get_Demand kann dir auch negative Werte liefern. Wenn du das dann als Größe für ein double-Array benutzt, geht das natürlich in die Hose.

    Ja!!! Du hast recht! Das war der große Fehler!
    Ich habe es folgend behoben:

    double a=0;
        for (int i=0; i < h; i++)
        {
            a=get_Demand();
            if (a>=0)
            {
                D[i] = a;
                D[i] = Round (D[i], 0);
            }
            else
            D[i]=0;
        }
    

    Ich werde gleich gucken, ob der Rest des Programms funzt. Wenn nicht, dann werde ich mich noch mal melden. An sonsten ein großes Dankeschön an alle, die kommentiert haben! Vor allem MFK und Bashar! 🙂



  • CppKnecht schrieb:

    otze schrieb:

    und warum kommentierst du den tollen std::vector aus?

    Weil es mit dem vector auch nicht geklappt hat. Es bricht dann sogar bei einer geringeren Iteration ab.

    Dann liegt es natürlich am std::vector und garantiert nicht daran, dass du etwas dummes tust. Fürs nächste mal: an einer Stelle wo std::vector steht, kannst du keine Speicherlecks erzeugen. Strebe Einfachheit des Codes an. Das beinhaltet gut getesteten Code von anderen zu verwenden, anstatt den Eigenen.



  • otze schrieb:

    CppKnecht schrieb:

    otze schrieb:

    und warum kommentierst du den tollen std::vector aus?

    Weil es mit dem vector auch nicht geklappt hat. Es bricht dann sogar bei einer geringeren Iteration ab.

    Dann liegt es natürlich am std::vector und garantiert nicht daran, dass du etwas dummes tust. Fürs nächste mal: an einer Stelle wo std::vector steht, kannst du keine Speicherlecks erzeugen.

    Doch, wenn man so dumm ist und das aufruft. 🤡


Anmelden zum Antworten