Abweichungen vom binären 0-1-Wert. CPLEX. C++. Visual Studio 2010.



  • manni66 schrieb:

    Kann man x mit einem double vergleichen?
    Ist das der Originalcode?
    Wie lautet die vollständige Originalmeldung?

    == in Zeile 11 meinst du sicher auch nicht.

    Ja, das ist ein Ausschnitt aus dem Originalcode.

    Die vollständige Fehlermeldung für Zeile 7 lautet:

    error C2451: Bedingter Ausdruck des Typs 'IloRangeBase' nicht zulässig.

    Die vollständige Fehlermeldung für Zeile 9 lautet:

    error C2451: Bedingter Ausdruck des Typs 'IloRange' nicht zulässig.



  • Wenn ich auf die Schnelle die richtige Doku gefunden habe, war da wohl einer ganz schlau. Möglicherweise funktioniert:

    if (-0.2 <= x[i][j][k]) <= 0.2 )
    

    Jedenfalls geben die Operatoren <= keinen bool zurück.



  • manni66 schrieb:

    Wenn ich auf die Schnelle die richtige Doku gefunden habe, war da wohl einer ganz schlau. Möglicherweise funktioniert:

    if (-0.2 <= x[i][j][k]) <= 0.2 )
    

    Jedenfalls geben die Operatoren <= keinen bool zurück.

    Das habe ich auch schon probiert. Der Fehler bleibt leider bestehen.



  • Dann geht sicher die getValue Funktion, die du schon zur Ausgabe benutzt hast.



  • manni66 schrieb:

    Dann geht sicher die getValue Funktion, die du schon zur Ausgabe benutzt hast.

    Wie meinen? Dass ich bei cplex.getValue () festlegen soll, dass der Wert zwischen -0.2 und 0.2 auf 0 gesetzt werden soll? Da müsste ich doch dann aber auch mit der if-Schleife arbeiten.



  • JodokusQuak schrieb:

    if-Schleife arbeiten.

    Wer if-Schleife sagt muss seinen Mund mit Seife ausspülen 😉

    if( -2.0 <= x[i][j][k].getObjValue() && x[i][j][k].getObjValue() <= 0.2 )
    

    oder so ähnlich.



  • fstream f1("test.txt", ios::out);
    		f1 << "Ausgabe x[i][j][k]" << endl;
    		for (int i=0; i<n; i++) {
    
    			for (int j=0; j<n; j++) {
    
    				for (int k=0; k<m; k++) { 
    
    					if (-0.2 <= cplex.getValue(x[i][j][k]) <= 0.2) {
    
    						x[i][j][k] = 0;
    					}
    
    					f1 << setw(4) << cplex.getValue( x[i][j][k]) << " ";
    				}
    			}
    		} 
    
    		f1.close();
    

    Habe es nun so probiert. Es tritt zwar kein Fehler auf, aber der gewünschte Effekt, dass x auf Null gesetzt wird, kommt nicht zustande.



  • Ich habe nicht gestottert. Der Vergleich in C++ muss schon so "kompliziert" geschrieben werden. Dein Compiler sollte dir auch eine Warnung ausspucken.



  • manni66 schrieb:

    Ich habe nicht gestottert. Der Vergleich in C++ muss schon so "kompliziert" geschrieben werden. Dein Compiler sollte dir auch eine Warnung ausspucken.

    Auch wenn ich

    if( -0.2 <= cplex.getValue(x[i][j][k]) && cplex.getValue(x[i][j][k]) <= 0.2 )
    

    schreibe, funktioniert es nicht.



  • Wird denn die Zuweisung ausgeführt?
    Muss man vielleicht setValue benutzen?



  • manni66 schrieb:

    Wird denn die Zuweisung ausgeführt?
    Muss man vielleicht setValue benutzen?

    Nein, es tritt dann wieder ein Fehler auf. Entweder habe ich den Befehl auch falsch positioniert (dort wo ich die Dateiausgabe erstelle) oder es funktioniert nicht so nicht.


Log in to reply