ich bin ein Anfänger mit Matlab und entschuldige mich bereits im Voraus, falls ich Mist mache.
Ich möchte ein Optimierungsproblem definieren und zwar
minimiere
Dabei habe ich eine (nxn)-Matrix T und eine (mxm)-Matrix Y gegeben.
Zusätzlich habe ich die Nebenbedingung, dass
und
Ich habe leider keine Ahnung wie ich das Matlab übergeben soll, damit es mir eine Lösung liefert. Für meine x soll also gelten: {0,1}.
Jetzt hätte ich gerne die Matrix X (wo nur 0en und 1en sind) und den optimalen Funktionswert dazu. Ich bin über jeden Hinweis sehr dankbar.
Die Formulierung der Nebenbedingungen ist mir nicht klar. Sollte x nicht mit 2 Indizes angesprochen werden?
Für kleine Matrizen würde ich alle Kombinationen durchtesten.
Meine einzige Idee für große Matrizen wäre, mit ga die mxn-Matrix x als Vektor mit m*n Elementen aufzufassen und Integer Constraints anzugeben.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
du hast natürlich komplett recht was die Nebenbedingungen angeht. Ich meine natürlich in der Summe bei den Nebenbedingungen.
Ich habe das ganze jetzt implementiert und will es über quadprog lösen.
Mein Problem ist, dass er bei exitflag = -6 angibt und 0 Iterationen macht.
Ich habe es wie folgt lösen wollen: quadprog(M,f,A,b,Aeq,beq,lb,ub)
M ist eine (12x12)-Matrix, f ist ein Vektor aus 0en (12 Einträge), da ich f gar nicht betrachten möchte. Das ist A
Die Bedingung ergibt mir .
Weil meine {0,1} sein sollen, habe ich noch lb und ub dazu genommen, wobei lb der 0-Vektor mit 12 Einträgen ist und ub ist der 1-Vektor (auch 12 Einträge. Ich finde mein Problem nicht und warum matlab das mit quadprog nicht löst.
Ich habe noch vergessen zu erwähnen, dass mein x jetzt ein 12-er Vektor ist, damit ich das als formulieren kann. Mein x sind dann natürlich alle Einträge der Matrix, also ein Vektor mit 12 Einträgen.
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
danke für die schnelle Antwort. Das mit der Exitflag habe ich jetzt raus, aber wieso liefert er mir wenn ich quadprog anwende eine falsche Lösung.
Ich habe die Matritzen und Vektoren so definiert, wie ich es vorher beschrieben habe und er gibt mir als Lösung den Vektor x mit 12 1en als Eintrag.
Da sind doch aber meine Nebenbedingungen verletzt und ich kann meinen Fehler nicht finden.
poste bitte den kompletten zusammenhängenden Code, inkl. Aufruf von quadprog. Sonst kann man dir schlecht helfen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Es tut mir leid, ich bin neu hier und bin mir nicht sicher ob ich jetzt das gemacht habe, was du wolltest.
Jetzt stehen hier alle Matritzen und alle Vektoren drin, die ich quadprog übergebe.
Mit der Beschreibung nachdem ich die Funktion quadprog aufrufe, kann ich absolut gar nichts anfangen.
negative exitflag bedeutet, dass ein Problem aufgetreten ist und die Lösung nicht verwertbar ist. Welche, ist ja auch angegeben.
Die Alternative wäre ein anderer Algorithmus, der aber wiederum nicht alle Nebenbedingungen verwerten kann. Somit bliebe
fmincon
oder eben... wolltest du nicht, dass die Lösung nur 0 und 1 hat? Dann bietet sich (wie gesagt) nur
ga
an.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Okay Dankeschön, dann gucke ich mir mal an wie die Funktion ga funktioniert und werde es darüber probieren. Genau die sollen nur 0 oder 1 sein.
Ich wundere mich aber etwas, warum er über quadprog eine unzulässige Lösung ausgibt. Beide Nebenbedingungen sind ja verletzt. Mal sehen was ga ausgibt. Vielen Dank für deine Hilfe !
warum er über quadprog eine unzulässige Lösung ausgibt.
Weil mit dem Algorithmus keine gefunden werden kann, weil er nur für konvexe Probleme funktioniert und dieses als nichtkonvex erkannt wurde.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Super, vielen Dank ! Ich wusste nicht, dass der nur für konvexe OP gedacht ist.
Ich habe es jetzt mit ga probiert und er funktioniert auch, also er gibt mir ein Ergebnis. Aber das Ergebnis ist nicht die beste Lösung. Er beachtet zwar die Nebenbedingungen, aber ich habe über Ausprobieren einen Wert gefunden, der einen niedrigeren Funktionswert liefert.
Code:
>> [x,fval,exitflag,output]=ga(@Test,12,A,b,Aeq,beq,lb,ub)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
problemtype: 'linearconstraints'
rngstate: [1×1struct]
generations: 98
funccount: 19601
message: 'Optimization terminated: average change in the fitness value less than options.FunctionTolerance.'
maxconstraint: 8.8534e-04
Ich wusste nicht, dass der nur für konvexe OP gedacht ist.
Die Statusmeldung beklagt sich ja über die Nicht-Konvexität. In der Doku steht's auch.
Zitat:
Ich habe es jetzt mit ga probiert und er funktioniert auch, also er gibt mir ein Ergebnis. Aber das Ergebnis ist nicht die beste Lösung.
Das liegt in der Natur von ga. Wenn du nur 0 und 1 als Lösung haben willst, solltest du das Argument IntCon von ga nutzen. Dann dürfte es besser aussehen.
Bei 0/1 - Einträgen würde ich auch in Betracht ziehen, alle Kombinationen in einer for-Schleife durchzutesten. Sind ja "nur" 2^12 = 4096
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
dankeschön für deine Hilfe, du rettest mir hier echt den Arsch. Ich werde es zu Hause gleich mal mit IntCon probieren, aber so wie ich das verstehe (und wie du ja auch schon angedeutet hast), habe ich bei ga mit Intcon keine Gleichheitsrestriktionen. Das wäre schon blöd, da ich die brauche und nicht in Ungleichheitsrestriktionen umformulieren kann. Gibt es denn nicht eine Funktion die folgendes kann:
- x*M*x' minimieren für x gleich 0 oder 1 (wobei M eine Matrix ist und x ein Vektor)
- Restriktionen: und
- das richtige Ergebnis liefern
quasi ga mit Intcon und Gleichheitsrestriktionen und einem richtigen Ergebnis.
Das mit der Schleife habe ich mir auch schon gedacht, aber ich bastele dieses Bsp nur um zu probieren ob ich es richtig implementiere. Mein x Vektor hat später circa 40 Argumente und das in einer Schleife ist glaube ich etwas zu aufwendig.
Ach mensch, ich muss mal anfangen richtig zu lesen. Du hast mir ja auch schon fmincon empfohlen und laut Beschreibung sollte der funktionieren. Da kann ich bei min f(x) mein x auch als Matrix übergeben und ich habe Gleichheits und Ungleichheitsrestriktionen zur Verfügung. Ich bin gespannt ob es funktioniert. Ich probiere es nachher gleich mal und mal sehen ob ich es hinbekomme ein x als Matrix zu übergeben.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.