|
|
Konstante Randwerte in Linprog |
|
cruiser05 |
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 14.05.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.05.2014, 15:20
Titel: Konstante Randwerte in Linprog
|
|
|
|
|
Hallo zusammen,
vielleicht ist es auch trivialer als gedacht, aber ich habe ein kleines Problem mit dem linprog in Matlab (Version 2014a).
Bei einem gegebenen Problem habe ich ca 243 Variablen.
Diese habe ich in einen Vektor gepackt.
Diverse Gleichung und Ungleichungen habe ich wie in der Matlab-Hilfe erklärt anhand meines Problems definiert.
Ist es möglich zwei der Variablen in X festzulegen?
Konkret möchte ich zwei Längen (Anfangs - und Endlänge) festlegen. Alles dazwischen soll sich Matlab berechnen.
Wenn ich Anfangs die beiden Werte definiere, ändert Matlab diese Werte beim durchlaufen des Programms.
Hat jemand eine Idee wie diese konstant gehalten werden können?
in c++ habe ich einfach const benutzt. Gibt es was äquivalentes in Matlab?
Beste Grüße
Cruiser05
EDiT:
Wenn ich die beiden Variablen mit Grenzen (upper und lower) auf die dementsprechende Zahl beschränke, dann erhalte ich folgende Fehlermeldung:
"Exiting due to infeasibility: an all-zero row in the constraint
matrix does not have a zero in corresponding right-hand-side entry."
Vielleicht kennt das Problem ja jemand.?
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 17.05.2014, 09:43
Titel:
|
|
Hallo,
reduziere den Vektor auf Länge 241 und rechne die beiden anderen Beiträge mit ein.
Beispiel:
min(f' * x) mit f = [5, 6, 7, 8]
unter Bedingung A *x = b mit A = reshape(1:16, 4,4), b = (17:20)'
die erste und letzte Komponente von x soll festbleiben.
Dann wird daraus
min(fneu' * xneu) mit fneu = [6, 7] (der Rest ist konstant und kann vernachlässigt werden) mit der Bedingung
Aneu * xneu = bneu wobei
Aneu = A(:, 2:3) und bneu = b - A(:, [1 4]) * [x1_fest; x4_fest]
Grüße,
Harald
|
|
|
cruiser05 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 14.05.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.05.2014, 13:46
Titel:
|
|
Hallo Harald,
entschuldige die späte Rückmeldung und vielen Dank für deine Antwort.
Habe deinen Tipp beherzigt, aber ich habe wohl einen grundlegenden peinlichen Fehler meinerseits übersehen.
Ich habe nichtlineare Funktionen in meinem LP einfach versucht dort hinein zu friemeln.
Beispielsweise habe ich die Volumenkonstanz so definiert:
for i = 2:25
Mat_eq(i, [1,i]) = [x(26)*x(27), i+25, i+50]
end
(mit 1, 26,27 mal angenommen als Höhe, Breite, Länge)
(i: Höhe, i+25: Breite, i+50: Länge)
Dort gibt es wahrscheinlich keinen Workaround?
Müssen die Gleichungen zwingend linear sein?
Beste Grüße,
Cruiser05
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 19.05.2014, 16:46
Titel:
|
|
Hallo,
bei linprog müssen Zielfunktion und Nebenbedingungen linear in den Designvariablen sein.
Wenn du Anfang und Ende aus der Optimierung herausnimmst, muss es in diesen beiden natürlich nicht mehr linear sein.
Ich weiß nicht, welche Nebenbedingungen du umsetzen möchtest und kann dir daher auch nicht sagen, ob deine Umsetzung korrekt ist. Ich würde aber allein schon bei der Erzeugung von Mat_eq eine Fehlermeldung erwarten.
Grüße,
Harald
|
|
|
cruiser05 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 14.05.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.05.2014, 12:03
Titel:
|
|
Hallo Harald,
danke für die Rückmeldung.
Dann werde ich wohl mal knobeln.
Meine Bedingungen sind fast alle nicht-linear.
Aber man wächst ja bekanntlich mit seinen Aufgaben, ich versuche es weiter und schreie wenn ich wieder vor einer Mauer stehe.
Danke schonmal für deine Hilfe.
Beste Grüße,
Cruiser05
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 22.05.2014, 12:40
Titel:
|
|
Hallo,
wenn die Nebenbedingungen nichtlinear in den anzupassenden Variablen sind, dann geht eben linprog nicht. Stattdessen kannst du z.B. fmincon verwenden.
Grüße,
Harald
|
|
|
cruiser05 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 14.05.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.05.2014, 16:47
Titel:
|
|
Hallo Harald,
ich habe versucht das Problem für fmincon umzuschreiben.
Kannst du mir sagen ,wie ich mehrere Gleichungen mit Laufvariablen in ceq bekomme?
Die Schreibweise ist ja eigentlich:
Ich habe mehrere Formeln mit Laufvariablen.
Für die Umformung: eps=ln(h1/h0)*2/sqrt(3)
Bei mir sieht diese nun jetzt so aus:
Klappt dies so, oder muss ich das anders schreiben?
Grüße,
cruiser05
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.05.2014, 17:16
Titel:
|
|
Hallo,
Zitat: |
Klappt dies so, oder muss ich das anders schreiben? |
Das hängt davon ab, welche Gleichungen du umsetzen möchtest.
Mir fällt auf, dass das eps (es wird wohl kaum das eps aus MATLAB gemeint sein? Ich würde es umbenennen, um Verwirrung zu vermeiden) aus der vorherigen Gleichung fehlt. Man muss Gleichungen so umstellen, dass auf einer Seite 0 steht.
Die Auswertung könnte übrigens auch vektorisiert erfolgen.
Zudem könnte die Gleichung als lineare Gleichung umgeschrieben werden:
eps=ln(h1/h0)*2/sqrt(3)
eps/2*sqrt(3) = ln(h1/h0)
exp(eps/2*sqrt(3)) = h1/h0
exp(eps/2*sqrt(3)) * h0 - h1 = 0
Grüße,
Harald
|
|
|
cruiser05 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 14.05.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.05.2014, 17:43
Titel:
|
|
|
|
|
Hallo,
eps habe ich gerade einfach für den Umformgrad genommen. Im Programm soll das später im X-Vektor stehen (bspw. X(1) ) weil es sich laufend ändert.
Also müsste ich die Gleichung so einbauen:
?
_____________________________________________________________
Linear funktioniert das doch nicht weil ich den Vorfaktor, welcher zu Beginn in aeq geschrieben wird , nicht kenne, oder? (alle h und eps ändern sich laufend)
_____________________________________________________________
Das Linearisieren habe ich versucht, aber dann hänge ich bei einer anderen Formel fest.
Bei gegebener Formel
ln(Kf) = ln(K) + ln(eps_punkt)*m1 + ln(eps_punkt)*m2*T + m3*T + ln(eps) * m4 + m5*eps
benötige ich den ln von eps (dem Umformgrad [ändert sich mit jedem Durchlauf]).
Mit dem LP bekomme ich das nicht in Matlab.
Ich scheitere bei
Aeq(i,[]) = [];
In den vorderen eckigen Klammern stehen die Spalten der Elemente in der Matrix.
Die hinteren sind der Eintrag, also der lineare Faktor.
Möchte ich nun m4*ln(eps) dort hineinschreiben, dürfte dies meines Wissens nach nicht funktionieren.
Daher wollte ich es mit deinem Vorschlag, dem fmincon, versuchen.
Grüße,
cruiser05
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.05.2014, 18:14
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Im Programm soll das später im X-Vektor stehen (bspw. X(1) ) weil es sich laufend ändert. |
Wenn dem so ist, klar. Aber das kann ich ja nicht ahnen.
Zitat: |
Also müsste ich die Gleichung so einbauen: |
Weiterhin: Das hängt davon ab, welche Gleichungen du umsetzen möchtest.
Nach den Informationen, die ich habe, könnte es ebenso gut
Zitat: |
for i=1:30
ceq = ( ln( X(i+31) / X(i+30) ) ) *2/sqrt(3) - X(1)
end |
heißen müssen.
Zitat: |
Linear funktioniert das doch nicht weil ich den Vorfaktor, welcher zu Beginn in aeq geschrieben wird , nicht kenne, oder? (alle h und eps ändern sich laufend) |
Jep. Das konnte ich aber wie gesagt nicht ahnen.
Zitat: |
Das Linearisieren habe ich versucht, aber dann hänge ich bei einer anderen Formel fest.
Bei gegebener Formel
ln(Kf) = ln(K) + ln(eps_punkt)*m1 + ln(eps_punkt)*m2*T + m3*T + ln(eps) * m4 + m5*eps
benötige ich den ln von eps (dem Umformgrad [ändert sich mit jedem Durchlauf]). |
Bitte klar kenntlich machen, welche Formelteile nun veränderlich sind und welche nicht.
Grüße,
Harald
|
|
|
cruiser05 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 14.05.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.05.2014, 18:28
Titel:
|
|
Hallo,
Sorry. Ich versuche das ganze mal übersichtlich darzustellen
Für
sind alle X variabel. (X(i+31) und X(i+30) sind jeweils Höhen, X(i) ist je ein Epsilon.)
(Es sollen am Ende 30 Epsilon berechnet worden sein.)
Edit: Habe ich mehrere Gleichungen der obigen Art, kann ich diese einfach in je einer Schleife untereinander schreiben oder überschreiben die sich gegenseitig das ceq?
Bei der Gleichung
sind Kf, eps_punkt, T und eps variabel und ändern sich mit jedem Durchlauf.
Am Ende sollten also auch hier je 30 Werte vorhanden sein.
Die 30 Kf werden dann an eine weitere Funktion weitergegeben.
Das ln(K), m1, m2, m3, m4, m5 kann ich direkt festlegen.
Probleme habe ich dann nur mit den ln(eps_punkt) und den ln(eps), wobei sich ja beides immer ändert.
Hoffe ich konnte mein Chaos beseitigen.
Beste Grüße,
cruiser05
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.05.2014, 18:41
Titel:
|
|
Hallo,
es muss natürlich so heißen:
sonst überschreibst du ceq in der Tat in jeder Iteration.
Zitat: |
sind Kf, eps_punkt, T und eps variabel und ändern sich mit jedem Durchlauf. Am Ende sollten also auch hier je 30 Werte vorhanden sein. |
Falls eps, eps_punkt und Kf nicht in der Zielfunktion auftauchen, kann man sich durch Einführung neuer Variablen L_eps = ln(eps) etc. behelfen, in denen die NB dann linear ist. Ansonsten ist es einfach eine nichtlineare NB, und es gibt keinen Weg das zu vermeiden.
Grüße,
Harald
|
|
|
cruiser05 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 14.05.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.05.2014, 18:57
Titel:
|
|
Ok, dann versuche ich das mal mit dem ceq.
Harald hat Folgendes geschrieben: |
Falls eps, eps_punkt und Kf nicht in der Zielfunktion auftauchen, kann man sich durch Einführung neuer Variablen L_eps = ln(eps) etc. behelfen, in denen die NB dann linear ist. Ansonsten ist es einfach eine nichtlineare NB, und es gibt keinen Weg das zu vermeiden.
|
Das war auch mein Gedanke. Nur wenn ich
in Matlab eingebe, dann wird dies nicht bei jeder Iteration angewandt?
Und in dieser Aeq-Schreibweise bekomme ich das nicht hin?
Dann kommt halt direkt die ganze Kf-Formel in ein ceq und schon habe ich mir das mit dem zusätzlichen Umformen gespart.
Das kf wird dann auch wieder in der Zielfunktion gebraucht.
Ich denke deine Anregung mit dem fmincon ist die sinnvollere Lösung als ein einfaches LP erzwingen zu wollen.
Danke nochmal an dieser Stelle für deine Hilfe!
Grüße,
cruiser05
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.05.2014, 19:09
Titel:
|
|
Hallo,
Zitat: |
dann wird dies nicht bei jeder Iteration angewandt? |
Nicht, wenn du lediglich die Startwerte (sofern du welche vorgibst) transformierst und am Ende die Lösung zurücktransformierst.
Zitat: |
Das kf wird dann auch wieder in der Zielfunktion gebraucht. |
Für sich oder wieder als ln(Kf)?
Falls nur für sich, dann kannst du das mit der Transformation vergessen, weil man wenn ja das gesamte Problem transformieren müsste.
Grüße,
Harald
|
|
|
cruiser05 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 14.05.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.05.2014, 19:12
Titel:
|
|
Hallo,
das Kf würde für sich wieder in die Zielfunktion einfließen.
Ich teste mit dem fmincon weiter und hoffe auf positive Resultate.
Grüße,
cruiser05
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|