Hallo,
Ich habe folgendes Problem.
Ein Vektor L hat 1:n Werte, diese Werte sind abhängig von einem Vektor p der abhängig ist von einem Vektor T1. Nun möchte ich dass der Vektor L in Abhängigkeit von den Werten der Vektoren T1,p optimierten. Hier mal der Code mit einer Schleife zum besseren Verständnis, so hoffe ich.
Code:
L=[3,4,7,10,12,12]*100;
T1=repmat([456],1,2) %Startwert T1
p=repmat([11138],1,2) %Startwert p
t=1;6;
for i=1;length(t) if T1(1,i)==3
p(1,i)=1;
T1(1,i+1)=4;
end if T1(1,i)==4,
p(1,i)=1;
T1(1,i+1)=5;
end if T1(1,i)==5
p(1,i)=138
T1(1,i+1)=3
%oder
p(1,i)==6;
T1(1,i+1)=7;
end if T1(1,i)==6
p(1,i)=1
TP(1,i)=7
%oder
p(1,i)=138
TP(1,i+1)=4;
end end
die Option gewählt wird deren Summe von (L(j)-p(j))^2 minimal ist.
Habe mir schon verschiede Optimierungsfunktionen wie
[]=linprog() ; []=quadprog usw. angeschaut und versucht das Problem mittels diesen Verfahren zu lösen, bin aber auf keine Lösungsmöglichkeit gekommen.
Wäre sehr dankbar für Tipps oder dergleichen, da mir nichts mehr einfällt
Ok, das habe ich befürchtet und es tut mir Leid für die schlechte Darstellung.
Ich habe 3 Vektoren (L,p,T1) die alle gleich Lang sind (L=v=T1=1:n*Werte*)
Der Vektor L wird mir übergeben und soll minimiert werden indem p so verschoben wird, dass Sum((L-p)^2) minimal wird.
Dabei muss p aber die Bedingungen erfüllen die ich in die schleife geschrieben habe, also
z.B.: P(1,i)=1 an wenn T1(1,i)=3 oder p(1,i)=138 wenn T1(1,i)=7 usw.
j sollte alle Iterationen angeben (die man berechnen kann), die durchlaufen werden bis sum((L-p)^2) minimal ist.
Hoffe jetzt ein wenig verständlicher.
Ich habe 3 Vektoren (L,p,T1) die alle gleich Lang sind (L=v=T1=1:n*Werte*)
Der Vektor L wird mir übergeben und soll minimiert werden indem p so verschoben wird, dass Sum((L-p)^2) minimal wird.
Also soll jetzt L oder Sum((L-p)^2) minimiert werden? Wobei zu klären wäre, was L -> min überhaupt heißen soll. Was bedeutet hier p wird verschoben? Ich kann es mir denken, möchte aber nicht raten...
Richi hat Folgendes geschrieben:
Dabei muss p aber die Bedingungen erfüllen die ich in die schleife geschrieben habe, also
z.B.: P(1,i)=1 an wenn T1(1,i)=3 oder p(1,i)=138 wenn T1(1,i)=7 usw.
j sollte alle Iterationen angeben (die man berechnen kann), die durchlaufen werden bis sum((L-p)^2) minimal ist.
Hoffe jetzt ein wenig verständlicher.
OK, es gibt also noch diese Nebenbedingungen. Die müssen natürlich mit eingepflegt werden in das Verfahren.
Ich würde von der Schreibweise p(1,i) wegkommen. p(i) reicht völlig. Das ist aber Geschmackssache, und streiten möchte ich deswegen nicht...
Das ist zwar ein konkretes Beispiel, aber dennoch bin ich nicht in der Lage, das von dir angestrebte Verfahren damit zu verallgemeinern. Es wäre gut, wenn du das Problem in einer universellen Sprache beschreiben könntest, nämlich der Mathematik. Siehe hier als Unterstützung: http://www.reiter1.com/Glossar/Kombinatorik.htm
Guten morgen.
Leider konnte/kann ich das Problem nicht so übersetzen das es eine Form der Kombinatorik annimmt.
Ich versuche es nochmal ausführlich und hoffe das es ich Klarheit schaffen kann.
Der Vektor T1 läuft zwischen den Grenzen [3;7] und kann dabei wobei der Anfangszustand
T1=[4,5,6,4,5,6]
und die Kombinationsmöglichkeiten
T1=[4,5,6,4,5,3];T1=[4,5,6,7,5,6];T1=[4,5,6,7,5,3];T1=[4,5,3,4,5,6];T1=[4,5,3,4,5,3]
wir haben 6 Werte, die 5 ist dabei immer fix. D.h. wir haben 3 mögliche Stellen an denen wir den Vektor ändern können um 2 Werte.
Daher haben wir:
2(Werte um den der Vektor geändert werden kann)*3(Positionen an denen die Werte geändert werden können)^1.
Bei einer Länge von T1=9 wären es 2*3^2 Kombinationsmöglichkeiten.
Nun Orientiert sich der P-Vektor an den Einträgen des T1 Vektors nach obigen Schema.
Als letzten Schritt wird nun für jede Kombinationsmöglichkeit von T1 und damit P
die Summe von (L(i)-P(i))^2 gebildet und optimiert
Der Vektor T1 läuft zwischen den Grenzen [3;7] ...
Was bedeutet das? Dass die Komponenten des Vektors den Wert k=3,...,7 annehmen können?
Richi hat Folgendes geschrieben:
...und kann dabei wobei der Anfangszustand
T1=[4,5,6,4,5,6]
und die Kombinationsmöglichkeiten
T1=[4,5,6,4,5,3];T1=[4,5,6,7,5,6];T1=[4,5,6,7,5,3];T1=[4,5,3,4,5,6];T1=[4,5,3,4,5,3]
wir haben 6 Werte, die 5 ist dabei immer fix. D.h. wir haben 3 mögliche Stellen an denen wir den Vektor ändern können um 2 Werte.
Wenn Komponenten mit dem Wert 5 aus dem Anfangszustand T1=[4,5,6,4,5,6] fix sind, betrifft das zwei Werte, nämlich Position 2 und 5. Dann bleiben aber 4 Positionen, an denen der Vektor variiert werden kann. Du sprichst aber von 3 Positionen. Aus deinem Beispiel entnehme ich, dass die erste Position ebenfalls fix ist. Ist das der Fall?
Dann schreibst du, dass es 2 Werte gibt, welche die Komponenten annehmen können. Gibt es dazu eine bestimmte Regel?
Richi hat Folgendes geschrieben:
Daher haben wir:
2(Werte um den der Vektor geändert werden kann)*3(Positionen an denen die Werte geändert werden können)^1.
Bei einer Länge von T1=9 wären es 2*3^2 Kombinationsmöglichkeiten.
Wie kommst du auf 2*3^2 Kombinationsmöglichkeiten? Das hieße ja, dass Positionen variiert werden können?!
Richi hat Folgendes geschrieben:
Nun Orientiert sich der P-Vektor an den Einträgen des T1 Vektors nach obigen Schema.
Als letzten Schritt wird nun für jede Kombinationsmöglichkeit von T1 und damit P
die Summe von (L(i)-P(i))^2 gebildet und optimiert
Der Vektor T1 läuft zwischen den Grenzen [3;7] ...
Was bedeutet das? Dass die Komponenten des Vektors den Wert k=3,...,7 annehmen können?
Genau, der Vektor T1 kann die Grenzen (3,4,5,6,7) annehmen.
Zitat:
Wenn Komponenten mit dem Wert 5 aus dem Anfangszustand T1=[4,5,6,4,5,6] fix sind, betrifft das zwei Werte, nämlich Position 2 und 5. Dann bleiben aber 4 Positionen, an denen der Vektor variiert werden kann. Du sprichst aber von 3 Positionen. Aus deinem Beispiel entnehme ich, dass die erste Position ebenfalls fix ist. Ist das der Fall?
Bei diesem Beispiel richtig, hier ist die erste stelle ebenfalls fix. Ein Mögliches Beispiel in dem das nicht gegeben wäre wenn der Vektor T1 den Anfangszustand T1=[5,6,4,5,6,4] hat.
Zitat:
Dann schreibst du, dass es 2 Werte gibt, welche die Komponenten annehmen können. Gibt es dazu eine bestimmte Regel?
Ja die Regel hatte ich in die Schleife geschrieben, in meinem ersten Beitrag.
Wenn T1(i)== 3,4 -->P(i)=1 und T(i+1)=T(i)+1;
Wenn T1(i)== 5,6 --> P(i)=1 dann T(i+1)=T(i)+1 oder P(i)=138 dann T(i+a)=T(i)-2
Wenn T1(i)=7--> P(i)=138 und T(i+1)=T(i)-2
Also die Kombinationsmöglichkeiten ergeben sich so, wenn ich mehrere Beispiele durchrechne.
OK! Jetzt hatte ich wohl die "Erleuchtung"... Nehmen wir an, der Vektor T1 habe die Länge n, dann gibt es n-3 (wegen T1(i+1) und T1(i-2)) Positionen, die variiert werden können. Insgesamt gibt es 5 verschiedene Werte zwischen 3 und 7 und somit, als obere Schranke, 5^(n-3) verschiedene Variationen.
Das bedeutet also, dass du zunächst die Bedingungen anpassen musst wegen des Randes:
Wenn T1(i)== 3,4 und i<n -->P(i)=1 und T(i+1)=T(i)+1;
Wenn T1(i)== 5,6 und i<n --> P(i)=1 dann T(i+1)=T(i)+1 oder P(i)=138 dann T(i+1)=T(i)-2
Wenn T1(i)=7 und i>2--> P(i)=138 und T(i+1)=T(i)-2
Nun geht es um das Optimierungsverfahren. Sowas wie linprog usw. macht hier keinen Sinn. Man muss schlicht vollständig Enumerieren.
D.h. du verwendest eine Schleife, die ausgehend von der Startlösung 5^(n-3) Variationen untersucht. Allerdings sollte man eine geschickte Abbruchbedingung implementieren. Wenn nämlich die Startlösung im Laufe der Iteration erneut auftaucht, kann man abbrechen. Ich vermute, dass das Verfahren Fixpunkte hat.
Also als mögliche Kombinationsmöglichkeiten habe 2*3^(n) mit n=erhöht um 1 je weiterer 3 variablen.
Bsp:
Bei t=[1,2,3];
T1(1)=[4,5,6];P1(1)=[1,1,138] und
T1(2)=[4,5,3];P1(2)=[1,138,1]
hier also eine änderbare Stelle mit 2 Kombinationen. 2*3^(0)=1
Bei t=[1,2,3,4,5,6];
T1(1)=[4,5,6,4,5,6];P1(1)=[1,1,138,1,1,138];
T1(2)=[4,5,6,4,5,3];P1(2)=[1,1,138,1,138,1];
...
T1(6)=[4,5,3,4,5,3];P1(6)=[1,138,1,1,138,1]
hier also 3 änderbare Stellen mit jeweils 2 kombinantionen. 2*3^(1)=6.
Und bei t=[1,2,3,4,5,7,8,9]--> Kombinationsmöglichkeiten 2*3^(2)=18
Zitat:
Nun geht es um das Optimierungsverfahren. Sowas wie linprog usw. macht hier keinen Sinn. Man muss schlicht vollständig Enumerieren.
D.h. du verwendest eine Schleife, die ausgehend von der Startlösung 5^(n-3) Variationen untersucht
Genau das war mein Problem, dass Einbinden einer Schleife die alle Kombinationen durchläuft und mir dann die optimale Lösung angibt. Die Bedingungen sind dabei in der inneren Schleife abgebildet.
Für eine einen vektor mit t=1:9
Code:
for j=1:(2*3^2) for i=1:length(L)
opt(j)=sum(L-p)^2;
if T(1,i)== 3
p(1,i)=1;
T(1,i+1)=T(1,i)+TW;
end if T(1,i)== 4
p(1,i)=1;
T(1,i+1)=T(1,i)+TW;
end if T(1,i)== 5
p(1,i)=1;
T(1,i+1)=T(1,i)+TW;
end if T(1,i)== 6
p(1,i)=1;
T(1,i+1)=T(1,i)+TW;
end if T(1,i)== 5
p(1,i)=138;
T(1,i+1)=T(1,i)+TK;
end if T(1,i)== 6
p(1,i)=138;
T(1,i+1)=T(1,i)+TK;
end if T(1,i)== 7
p(1,i)=138;
T(1,i+1)=T(1,i)+TK;
end end end
Was die Anzahl der Kombinationsmöglichkeiten betrifft, habe ich eine obere Schranke verwendet, weil ich ich schlicht zu faul war, die genaue Anzahl zu ermitteln.
Allerdings habe ich noch einen Schnitzer in meinen Vorschlägen, denn der Fall, dass von i zwei abgezogen wird, kommt ja gar nicht vor!
OK, und warum funktioniert der zuletzt angegebene Code nicht?
Bei deinem Ansatz fehlt natürlich noch die eigentliche Iteration. Wenn du aus dem Startvektor T1_0 ein T1_1 berechnest, führst du die gleiche Rechnung mit T1_1 aus und erhältst ein T1_2 usw.
Danke nochmal für die tatkräftige Unterstützung und deine Geduld.
Mit deinem Ansatz funktioniert es.
Gruß Ricardo.
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
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.