Verfasst am: 13.06.2014, 10:28
Titel: Optimierung eines Algorithmuses
Kann mir niemand bei meinem Problem helfen??
ich habe letztens einen Post gemacht, aber es kam leider kein Feedback..Ich bin sehr aufgeschmissen...egal wie viel ich ich lese und versuche, es kommt nichts richtiges raus.
Verfasst am: 14.06.2014, 23:03
Titel: Re: Optimierung eines Algorithmuses
Hallo KeCa11,
Wenn Du inzwischen einiges versucht hast, wäre es eine gute Idee diese erfolglosen Versuche in dem bestehenden Thread zu erklären. Es motiviert immer sehr, wenn man sieht, dass der Fragensteller selbst an seinem Problem arbeitet und nicht einfach wartet.
Erwartest Du, dass sich die Leser jetzt auf die Suche nach Deinem anderen Thread machen?
Mein Ziel ist es, eine kraft von einem Bauteil zu erzielen, welches nah an der geforderten Kraft liegt. Dieses Bauteil (Blechstreifen) liegt in einem definierten Wertebereich für die Dicke und Breite. Außerdem sind Restriktionen wie z.B. das nichtlineare Materialverhalten, die zulässige Spannung und die konstante Masse bzw. konstanter Querschnitt gegeben. Weiterhin sind Nebenbedingungen wie eine minimale bzw. maximale Schranke der Breiten und Dicken angegeben.
Ich habe die 2 Variablen Breite b und Dicke t.
Ich habe schon ein m-File geschrieben, welches mir eine Matrix für die Strapkraft mit den jeweiligen Kräften und der Bereich für die geforderte Kraft erstellt hat, aber dennoch muss ich alles selber ablesen. Dieses will ich nun mit einem Algorithmus umgehen und möchte, dass dieser mir genau am Ende angibt, welche optimalen geometrischen Parameter und die dazugehörige Strapkraft ist. Außerdem soll er mir die Konvergenz, also die genaue Differenz zwischen der geforderten und der tatsächlichen Kraft auf die definierte Genauigkeit angeben.
Meine Frage nun an euch ist, wie ich für das aufgeführte Beispiel das Ganze in Matlab programmieren kann und wie ich das Ganze in der Optimization-Toolbox anwende.
Für die Verwendung der Optimization Toolbox benötige ich ja 2 m-files. Eines/mehrere Zielfunktionen als 1 m-file und eines für die Nebenbedingungen/Restriktionen.
Ich habe mich über verschiedene Verfahren erkundigt und bin zu dem Entschluss gekommen, dass sich das SQP-Verfahren am besten für meinen Fall eignet. Aber dennoch bin ich für anderes offen, da ich ja nicht genau weis welches wirklich besser passt.
Im Anhang findet ihr mein m-file. Ist zwar sehr simpel aufgebaut, aber es zeigt mir alle Breiten und Dicken mit den jeweiligen Kräften an...Das dumme ist, dass ich alles selber ablesen muss...
Ich wäre euch sehr dankbar wenn ihr mir helfen könntet wie die Zielfunktion und die Nebenbedingungen/Restriktionen aussehen müssen.
Code:
%%Vorgehensweise für die Berechnung der Strapkraft
% Darstellung in einer Matrix
%% ---------Dicke t (als Zeilenvektor)--------------
tj = linspace(1,2);
%% ---------Breite b (als Spaltenvektor)-----------------
bi = linspace(10,20);
%% -----------Koordinatenanzeige in Matrixschreibweise---------------- [TJ,BI] = meshgrid(tj,bi);
%% ---------Berechnung des Korrekturfaktors als eine Matrix------------ for i = 1:length(bi) for j = 1:length(tj)
Korrekturfaktor(i,j) = (0.5+0.3333*tj(j))+(0.05*bi(i));
end end
%% ---------Berechnung der Strapkraft als eine Matrix------------ for i = 1:length(bi) for j = 1:length(tj)
Fstrap(i,j) = ((Korrekturfaktor(i,j)*470*((bi(i)*tj(j).^3)/12))/(7.5*(tj(j)/2))*2);
end end
%% ----------------Werte aus Matrix filtern-----------
Fstrap_neu=Fstrap;
Fstrap_neu(Fstrap_neu<=1550)=0; %mindest zulässige Kraft
Fstrap_neu(Fstrap_neu>1650)=0 ; %maximal zulässige Kraft
%% ---------------Erstellung von Vektoren für das Ablesen der jeweiligen Ergebnissen-----------
k = 1;
I = [];
J = [];
for i = 1:100 for j = 1:100 if Fstrap(i,j)>1550 && Fstrap(i,j)<1650; %Bereich für die Kraft
I(k) = i; %Erstellen der Breiten-Werte als Vektor die im Bereich liegen
J(k) = j; %Erstellen der Dicken-Werte als Vektor die im Bereich liegen
k = k+1; %immer +1 damit man bis zur gewählten Länge berechnen kann
end end end
%% --------%Strapkraft-Matrix als Oberflächendiagramm anzeigen------ figure;
surf(tj,bi,Fstrap,Fstrap_neu);%durch das Fstrap_neu wird die Fläche anders angezeigt
% Achsen- und Titelbeschriftung title('Oberflächendiagramm Strapkraft','FontSize',14);
xlabel('Dicke t','FontSize',12);
ylabel('Breite b','FontSize',12);
zlabel('Kraft','FontSize',12);
colormapspring %farbliche Darstellung des Diagramms
colormapjet
%% --------%Korrekturfaktor-Matrix als Oberflächendiagramm anzeigen------ figure;
surf(tj,bi,Korrekturfaktor);
% Achsen- und Titelbeschriftung title('Oberflächendiagramm Korrekturfaktor','FontSize',14);
xlabel('Dicke t','FontSize',12);
ylabel('Breite b','FontSize',12);
zlabel('Korrekturfaktor C','FontSize',12);
colormapwinter %farbliche Darstellung des Diagramms
es gibt ja einen Bereich von der geforderten Kraft die ich erreichen soll..dazu habe ich folgendes geschrieben
Code:
%% ----------------Werte aus Matrix filtern-----------
Fstrap_neu=Fstrap;
Fstrap_neu(Fstrap_neu<=1550)=0; %mindest zulässige Kraft
Fstrap_neu(Fstrap_neu>1650)=0 ; %maximal zulässige Kraft
%% ---------------Erstellung von Vektoren für das Ablesen der jeweiligen Ergebnissen-----------
k = 1;
I = [];
J = [];
for i = 1:100 for j = 1:100 if Fstrap(i,j)>1550 && Fstrap(i,j)<1650; %Bereich für die Kraft
I(k) = i; %Erstellen der Breiten-Werte als Vektor die im Bereich liegen
J(k) = j; %Erstellen der Dicken-Werte als Vektor die im Bereich liegen
k = k+1; %immer +1 damit man bis zur gewählten Länge berechnen kann
end end end
dadurch bekomme ich I und J als Vektor raus..diese sind die Werte mit dene ich dann in den Vektor von der Breite bzw. Dicke reingehe und diese dann ablese...dazu kann ich dann in der Matrix von der Strapkraft FStrap den Wert auch ablesen...
Ich weis es ist jetzt für dich bestimmt ein bisschen unverständlich beschrieben.
Wenn ich solve eingebe im command window kommt folgender Fehler
meine Empfehlung wäre, das mit fmincon anzugehen.
Zu minimieren ist der Unterschied zwischen geforderter Kraft und erzielter Kraft (--> Objective Function). Alle anderen Restriktionen müssen als Nebenbedingungen umgesetzt werden.
Verwenden würde ich hier fmincon (Optimization Toolbox).
Sollte diese Toolbox nicht vorhanden sein, ist eine Alternative fminsearch. Dabei können Nebenbedingungen als Strafterme für die Zielfunktion Berücksichtigung finden.
Die Umsetzung ist so oder so eine gewisse Herausforderung, also bitte die Beispiele in der Doku sorgfältig durcharbeiten und auch mal das Forum nach fmincon durchstöbern - ich habe hierzu schon viele Fragen beantwortet.
Zum Thema "Kaufen vs. selbst schreiben":
Es ist generell natürlich möglich, sich alles an Toolbox-Funktionalität selbst zu schreiben. Das bedeutet jedoch teilweise einen beträchtlichen Aufwand. Ich würde z.B. nie auf die Idee kommen, eine Funktion SOLVE selbst zu schreiben.
danke für deine Hilfe, inzwischen habe ich mich auch schlau gemacht, und bin auch der Meinung das ich fmincon benutzen werde.
Ich habe bei der Arbeit die Lizenz für das Curve Fitting und Optimization Toolbox, also kann ich es damit lösen.
Harald ich bin dir vorerst sehr dankbar das du dich kompetent geäußert hast und mir helfen willst mein Problem zu lösen.
Ich habe zwar einiges zu fmincon hier im forum gelesen, aber bin der Meinung, dass es auf mein problem nicht ganz zutrifft, da ich eine schwierigere Aufgabenstellung habe.
die Schwierigkeit liegt meist in der Komplexität der Zielfunktion und der nichtlinearen Nebenbedingungen. Für fmincon ist das aber relativ egal, solange das Interface der Funktion passt.
Mein Vorschlag also:
Versuchs mal mit fmincon, stelle insbesondere die benötigten Eingabeargumente für fmincon zusammen.
Wenn es dabei dann Probleme gibt, schaue ich gerne noch einmal drauf. Dazu dann bitte den bisherigen Code inkl. eventueller Testdaten zur Verfügung stellen.
Grüße,
Harald
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.