WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Optimization Toolbox mit Ansys

 

Guardian
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2013, 19:03     Titel: Optimization Toolbox mit Ansys
  Antworten mit Zitat      
Hallo Smile

vorneweg, ich hab schon das Forum durchsucht und viele andere Quellen durchgelesen, aber keine brauchbare Antwort dazu gefunden.

Ich würde gerne mit der Toolbox eine Optimierung durchführen, die auf eine Ansys Simulation zugreift. Die nötigen Parameter hab ich mittlerweile aus Ansys in Matlab mit einem Skript auslesen können. Nur wie geht es jetzt weiter?
In der Optimization Toolbox muss eine Objective function in Form einer function handle definiert werden. Das Problem ist, dass die Funktion unbekannt ist, da sie ja erst simuliert wird.... Was ich habe sind nur die Variablen (Geometrieparameter, Materialparameter usw.) mit denen Matlab spielen soll um die Zielgröße zu optimieren. Geht das überhaupt? Wie muss denn dann meine objective function aussehen?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.10.2013, 19:28     Titel:
  Antworten mit Zitat      
Hallo,

Aussehen der Objective Function:
Input: ein Vektor x, der deine Variablen enthält.
Output: der Zielfunktionswert

Ohne Ansys zu kennen muss deine Zielfunktion also wohl folgendes machen:
- aus x die einzelnen Variablen extrahieren
- mit diesen Variablen die Ansys-Simulation durchführen
- aus den Ergebnissen den Zielfunktionswert berechnen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Guardian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2013, 12:05     Titel:
  Antworten mit Zitat      
Danke erstmal, aber so ganz habe ich das Aussehen der objective function noch nicht verstanden. Crying or Very sad
Machen wir es mal konkreter:
sagen wir ich habe 7 variable Größen für die Optimierung p1-p7. Sieht das dann so aus?

Code:
function x= zielfunktion(p1,p2,p3,p4,p5,p6,p7)

Startwert für p1-p7 definieren (p1= ..., p2=..., p3=..., usw.)

Auslesen von p1-p7 in Textdatei (für Ansys)

Warte auf Aktualisierung von Ergebnistextdatei (von Ansys)

Einlesen des Ergebnisses für Zielwert aus Ergebnistextdatei

Optimierungsschritt erzeugt neue Werte für p1-p7

Auslesen von p1-p7 in textdatei (für Ansys)

Warte auf Aktualisierung von Ergebnisdatei (von Ansys)

Einlesen des Ergebnisses für Zielwert aus Ergebnistextdatei

Optimierungsschritt...

Soll der Ein- und Ausleseprozess überhaupt in die function rein? Fehlt nicht irgendwie noch eine Funktion? Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.10.2013, 12:27     Titel:
  Antworten mit Zitat      
Hallo,

nicht ganz. Eher so:
Code:
function zfwert= zielfunktion(x)

p1 = x(1);
p2 = x(2);
...

Auslesen von p1-p7 in Textdatei (für Ansys)

Warte auf Aktualisierung von Ergebnistextdatei (von Ansys)

Einlesen des Ergebnisses für Zielwert aus Ergebnistextdatei


Wenn du keine Nebenbedingungen hast, wäre der Aufruf dann z.B.

Code:
fminunc(@zielfunktion, [Startwert für p1-p7])


Vielleicht hilft es auch, sich erst mal unabhängig von Ansys mit einfacheren Optimierungsproblemen zu beschäftigen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Guardian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2013, 12:42     Titel:
  Antworten mit Zitat      
hallo,
danke soweit, ich hab es zum laufen gebracht.
allerdings gibt es noch probleme.

mit fminsearch funktioniert es, er verändert die startwerte und minimiert den zfwert. aber mit fminsearch kann man keine constraints einfügen. also hab ich es mit fminmax und mit fmincon probiert. dort gibt es aber immer das problem, dass er die startwerte nicht ändert. er startet den optimiervorgang, aber verändert nichts.
die startwerte werden angetastet, was ich in der textdatei an der formatierung sehe:

Zitat:
5.000000e+03
5000
5000
5000
5000
5000

aber eben nicht verändert...

Nach einer Weile stoppt er dann mit der Fehlermeldung
Zitat:
fminimax stopped because the size of the current search direction is less than
twice the default value of the step size tolerance and constraints are
satisfied to within the default value of the constraint tolerance.


bzw. bei fmincon

Zitat:
Optimization completed because at the initial point, the objective function is non-decreasing
in feasible directions to within the default value of the function tolerance, and
constraints are satisfied to within the default value of the constraint tolerance.

was muss ich tun, damit sich da was tut? Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.10.2013, 13:03     Titel:
  Antworten mit Zitat      
Hallo,

das ist aus der Ferne schwer zu diagnostizieren.
Wenn, dann würde ich fminsearch und fmincon vergleichen, bzw. erst mal fminunc verwenden um es mit fminsearch abzugleichen.

Nutzt Ansys die volle Genauigkeit der Parameter bzw. kommen auch wirklich unterschiedliche Ergebnisse heraus, wenn du z.B. 5000 und 5000.0001 als Wert verwendest?
Falls eines von beiden nicht der Fall ist, ist die Zielfunktion damit nicht differenzierbar und man muss sehr dabei aufpassen, ob dann der Einsatz eines gradientenbasierten Verfahrens sinnvoll ist.

Falls du die Global Optimization Toolbox hast, wäre meine Empfehlung, mal patternsearch zu versuchen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Guardian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2013, 10:50     Titel:
  Antworten mit Zitat      
hallo,

ist da überhaupt eine 1 am ende? für mich bleibt der wert da immer bei 5000.
mit fminsearch wird der startvektor aufjedenfall geändert. das erzeugt dann auch bedeutende änderung am zielfunktionswert. und so findet fminsearch den weg zum ziel.
das ist bei fmincon oder fminmax leider nicht so.

fminunc verändert meinen startvektor auch. erst nur sehr geringfügig

Zitat:
5.000610e+03 <-- die änderung reicht übrigens für eine änderung des zfwerts!
5000
5000
5000
5000
5000


und gibt zwischendurch immer mal Warnungen aus:
Warning: Gradient must be provided for trust-region algorithm; using line-search algorithm instead. die änderungen wird nicht größer. nach einer weile beendet es sich dann mit der Meldung:
Zitat:

Initial point is a local minimum.

Optimization completed because the size of the gradient at the initial point
is less than the default value of the function tolerance.



patternsearch kann ich benutzen, er verändert die startwerte nach einer weile auch sehr großzügig. nur hab ich das gefühl, dass er zu grob vorgeht und irgendwann nur zwischen festgefahrenen werten hin und her tauscht, z.b.

Zitat:
9225
9225
13725
13725
13725
13725


dann tauscht er nur die werte untereinander aus und kommt irgendwie nicht weiter.

fminsearch hat mir da am besten gefallen. die frage ist: wenn fminsearch geht, müsste dann nicht auch fmincon oder fminmax gehn?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2013, 14:38     Titel:
  Antworten mit Zitat      
Hallo,

fminsearch und fmincon haben komplett verschiedene Ansätze. Das eine ist ableitungsfrei, das andere nicht.

Bei fmincon kann helfen, die Einstellung von DiffMinChange hochzusetzen.

Ist dein Parameter"vektor" x skalar, also nur eine zu optimierende Variable?
Es macht an sich wenig Sinn, dass fmincon wiederholt genau den selben Wert testet. Ist es möglich, dass das Problem im Schreiben der Datei liegt?

Ohne sich das Problem wirklich ansehen zu können ist das leider ein Stück weit Stochern im Nebel...

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Guardian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2013, 14:37     Titel:
  Antworten mit Zitat      
Hallo Harald,

hier mal meine objective function

Code:
function zfwert = zielfunktion(x)

p1=x(1);
p2=x(2);
p3=x(3);
p4=x(4);
p5=x(5);
p6=x(6);

outfile = fopen('parameterdatei.txt','w');
   
   fprintf(outfile, '%d\n', p1);
   fprintf(outfile, '%d\n', p2);
   fprintf(outfile, '%d\n', p3);
   fprintf(outfile, '%d\n', p4);
   fprintf(outfile, '%d\n', p5);
   fprintf(outfile, '%d\n', p6);


system('"C:\Program Files\ANSYS Inc\v145\Framework\bin\Win64\RunWB2.exe"  -F "C:\data\projekt.wbpj"  -R "C:\code\skript.py"');  %Starten von Ansys+Laden des Projekts+Laden des Pythonskripts zum Ein- und Auslesen

infile = fopen('ergebnisp7.txt', 'r');
 
str7 = fgetl(infile);
measureIndex7 = strfind(str7, ' ');
    if isempty(measureIndex7)
        p7 = str2num(str7);
    else
        p7 = str2num(str7(1:measureIndex7));
    end
   
zfwert = (p7 - 50)^2
   
end

Vielleicht hilft das weiter.
Das Ein- und Auslesen mit den Textdateien funktioniert aufjedenfall. Mit DiffMinChange werde ich mal herumspielen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.10.2013, 19:36     Titel:
  Antworten mit Zitat      
Hallo,

ich würde Dateien nach dem Lesen/Schreiben immer mit fclose schließen.
Gerade wenn mehrfach in einer Datei gelesen/geschrieben wird, kann es sonst Probleme geben.

Du hast ja 6 Parameterwerte. Was davor geschrieben hast, sah immer nach einem skalaren Parameter aus. Wie passt das zusammen?

Lass das ganze im Zweifel auch mal mit 'Display' auf 'Iter' laufen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Guardian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2013, 20:31     Titel:
  Antworten mit Zitat      
Bin gerade verwirrt, oben habe ich ja bereits p1-p7 erwähnt. du hast mir dann auch den nötigen code gepostet. es hat sich seitdem auch nichts verändert. es gibt in dem beispiel 6 inputparameter (p1-p6) und eine zielgröße (p7).
ich werde alle deine vorschläge beherzigen und schauen was passiert. danke aufjedenfall Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.10.2013, 20:53     Titel:
  Antworten mit Zitat      
Hallo,

ich antworte hier auf viele Beiträge und lese dann nicht jeden Thread nochmal komplett durch. Bei meinem Kurzzeitgedächtnis kann es schon mal passieren, dass ich die anfängliche Antwort am Ende nicht mehr berücksichtige.

Mit "davor" meinte ich Dinge wie
5.000610e+03 <-- die änderung reicht übrigens für eine änderung des zfwerts!
5000
5000
5000
5000
5000

oder
9225
9225
13725
13725
13725
13725



Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Guardian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2013, 14:58     Titel:
  Antworten mit Zitat      
hallo harald,
das sind meine 6 startwerte für p1-p6
also
p1=5000
p2=5000
p3=5000
p4=5000
p5=5000
p6=5000

ich hab jetzt fclose eingefügt und eine ausgabe erzeugt und mit fmincon laufen lassen:
Code:
p1 =

        5000


p2 =

        5000


p3 =

        5000


p4 =

        5000


p5 =

        5000


p6 =

        5000


zfwert =

   38.6566


p1 =

   5.0000e+03


p2 =

        5000


p3 =

        5000


p4 =

        5000


p5 =

        5000


p6 =

        5000


zfwert =

   38.6566


p1 =

        5000


p2 =

   5.0000e+03


p3 =

        5000


p4 =

        5000


p5 =

        5000


p6 =

        5000


zfwert =

   38.6566


p1 =

        5000


p2 =

        5000


p3 =

   5.0000e+03


p4 =

        5000


p5 =

        5000


p6 =

        5000


zfwert =

   38.6566


p1 =

        5000


p2 =

        5000


p3 =

        5000


p4 =

   5.0000e+03


p5 =

        5000


p6 =

        5000


zfwert =

   38.6566


p1 =

        5000


p2 =

        5000


p3 =

        5000


p4 =

        5000


p5 =

   5.0000e+03


p6 =

        5000


zfwert =

   38.6566


p1 =

        5000


p2 =

        5000


p3 =

        5000


p4 =

        5000


p5 =

        5000


p6 =

   5.0000e+03


zfwert =

   38.6566

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
    0       7    3.865658e+01    0.000e+00    0.000e+00

Initial point is a local minimum that satisfies the constraints.

Optimization completed because at the initial point, the objective function is non-decreasing
in feasible directions to within the default value of the function tolerance, and
constraints are satisfied to within the default value of the constraint tolerance.

<stopping criteria details>


Optimization completed: The final point is the initial point.
The first-order optimality measure, 0.000000e+00, is less than
options.TolFun = 1.000000e-06, and the maximum constraint
violation, 0.000000e+00, is less than options.TolCon = 1.000000e-06.

Optimization Metric                                         Options
first-order optimality =   0.00e+00                TolFun =   1e-06 (default)
max(constraint violation) =   0.00e+00             TolCon =   1e-06 (default)


viel getan hat sich mit fmincon also nicht. er geht die startwerte für jeden parameter einmal durch ohne sie zu verändern.
soll ich es mal mit diffminchange probieren? wo kann ich denn in der toolbox diffminchange eingeben? dort finde ich die option nicht. geht das nur über optimset?

Ich habe übrigens linear inequalities constraints in der form

A=[-1 1 0 0 0 0;0 0 -1 1 0 0;0 0 0 0 -1 1]

b=[0;0;0]

denke aber das sollte so ok sein. das soll bewirken, dass
p1>p2
p3>p4
p5>p6
ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2013, 18:27     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
geht das nur über optimset?

Genau, wie sämtliche anderen Einstellungen auch.
Ich würde zudem Toleranzen wie TolX und und TolFun verringern.

Wie die Statusmeldung von fmincon besagt, kommt es nicht vom Startpunkt weg. Man könnte auch mal andere Startpunkte testen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Guardian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2013, 11:11     Titel:
  Antworten mit Zitat      
Hallo Smile
wie würde denn der Befehl aussehen?
optimset(..)?
Muss ich nur die Einstellungen angeben, die ich ändern will und der Rest bleibt auf standard?
Mit patternsearch werde ich nämlich nicht glücklich. Crying or Very sad Das legt sich zu schnell auf einen minimal besseren Wert fest und macht dann nicht mehr viel (siehe Bild). Andere Kombinationen werden einfach ausgelassen. Aber wenigstens ändert er die Startwerte! Das möchte ich jetzt auch mit fmincon etc. erreichen.

patternsearch2.jpg
 Beschreibung:

Download
 Dateiname:  patternsearch2.jpg
 Dateigröße:  34.25 KB
 Heruntergeladen:  942 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.