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

Anzahl positiver Elemente in Optimierung beschränken

 

antom123
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2016, 12:01     Titel: Anzahl positiver Elemente in Optimierung beschränken
  Antworten mit Zitat      
Hallo alle zusammen,

der Code den ich geschrieben habe führt eine Optimierung unter Beachtung zahlreicher Nebenbedingungen (linear und nichtlinear) durch. Bisher funktioniert alles bestens, allerdings möchte ich nun eine zusätzliche nichtlineare Nebenbedingung einfügen.
Sie soll einfach nur die Anzahl der Elemente des Schlussvektors, die grösser als 0.002 sind, auf 35 beschränken:

Code:
function [c,ceq] = MinSize(x)
ceq = [];
[N,~] = size(x);

TEMP=0;
for k=1:N
    if x(k)>=0.002                    
        TEMP=TEMP+1;
    end    
end

c=TEMP-35;



Allerdings gibt MATLAB nun die Meldung "no feasible point found" aus, und das obwohl ich weiss dass es mehrere x gibt, für die auch diese Bedingung zusätzlich erfüllt ist. Ich gehe davon aus, dass es nicht klappt weil Patternsearch nicht mit der Bedingung umgehen kann, da es sich um eine (nichtglatte) Treppenfunktion handelt. Hat vielleicht jemand eine Ahnung, wie man diese NB anders formulieren könnte?

Ich hoffe jemand kann mir dabei weiterhelfen! Smile

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

für patternsearch muss die Funktion nicht glatt sein. Der Solver ist ja nicht gradientenbasiert.
Es sollte hier doch kein Problem sein, einen Startvektor zu wählen, der die Nebenbedingung erfüllt? Damit wäre zumindest dieses Problem gelöst.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2016, 13:52     Titel:
  Antworten mit Zitat      
Hallo Harald,

erst einmal danke für die schnelle Antwort!
Deine Erklärung macht natürlich Sinn. Wo das Problem dann liegt weiss ich auch nicht so genau..

Meinst du damit, dass der Startvektor alle anderen Nebenbedingungen und zusätzlich diese erfüllen soll oder lediglich diese erfüllen soll? Letzteres wäre ja durchaus machbar.
Heisst das etwa, dass wenn eine bestimmte Bedingung bereits vom Startvektor erfüllt ist, dass Patternsearch sicher dafür sorgt, dass auch alle anderen möglichen Vektoren diese erfüllen?

Vielen Dank!

antom123
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Wo das Problem dann liegt weiss ich auch nicht so genau..

Stell dir vor, du wüsstest nicht, wo der Mt. Everest ist, und jemand sagt zu dir: finde den höchsten Punkt der Erde - von Deutschland aus. Ähnliche Probleme hat patternsearch hier wohl.

Zitat:
Meinst du damit, dass der Startvektor alle anderen Nebenbedingungen und zusätzlich diese erfüllen soll oder lediglich diese erfüllen soll? Letzteres wäre ja durchaus machbar.

Je mehr Bedingungen der Startvektor erfüllt bzw. je näher er zumindest dran ist, desto besser.

Zitat:
Heisst das etwa, dass wenn eine bestimmte Bedingung bereits vom Startvektor erfüllt ist, dass Patternsearch sicher dafür sorgt, dass auch alle anderen möglichen Vektoren diese erfüllen?

Davon würde ich ausgehen, ja. Patternsearch sucht ja nach besseren Punkten. Ein Punkt, der die Nebenbedingungen nicht erfüllt, ist aber nicht besser.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2016, 16:50     Titel:
  Antworten mit Zitat      
Hallo,

ich habe den Startvektor jetzt so gewählt, dass alle nichtlinearen und manche der linearen Bedingungen erfüllt sind (insbesondere hat der Vektor nur 24 Elemente die grösser sind als 0.002).
Dennoch wird die gleiche Meldung wieder ausgegeben ("no feasible point found").

Ich habe anschliessend den Befehl
Code:
eingefügt, so dass mir bei jeder Iteration angezeigt wieviel Elemente grösser als 0.002 sind.

Erstaunlich ist, dass TEMP ab der ersten Iteration den Wert 59 hat, und diesen für alle weiteren (in etwa 300) Iterationen beibehält, bis MATLAB dann die Meldung ausgibt.

Kann es sein, dass das von dir angesprochene Prinzip nur für lineare NB und Bounds gilt?

Vielen Dank!

antom123
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

für einen feasible point müssen ja alle NB erfüllt sein. Ich kann mir durchaus vorstellen, dass im Laufe des Algorithmus mal andere NB als zuvor verletzt werden, und der Algorithmus versucht, sich "davon zu erholen".
Sobald einmal ein feasible point gefunden wurde, sollte es allerdings keine derartigen Probleme mehr geben.

Ohne die komplette Anwendung ist es schwierig, das Problem nachzuvollziehen und zu lösen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2016, 15:33     Titel:
  Antworten mit Zitat      
Hallo Harald,

das Problem besteht darin dass es 130 Variablen in der Optimierung gibt und einige der Nebenbedingungen nicht besonders intuitiv sind. Es wird dementsprechend schwierig, einen initial vector zu finden, der alle NB erfüllt.

Trotzdem werde ich mich daran versuchen und mich anschließend noch einmal melden.

Vielen Dank schonmal für die Hilfe!

antom123
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.