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

Fmincon verbund mit For-Loop

 

MCKareem

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2018, 13:12     Titel: Fmincon verbund mit For-Loop
  Antworten mit Zitat      
Hallo zusammen, ich bin dabei einen Code zu schreiben, der mir meine Investitionen (i) über die Zeit (z) optimiert. Ich habe Nebenbedingungen und eine Zielwert (Barwert bzw. present_value), der maximal sein soll. Meine Frage lautet, was muss ich am Code ändern, dass für jedes Jahr das Investment optimiert wird (Details dann im Code selbst) und nicht wie bisher lediglich für ein Jahr?

Mein Code besteht aus 3 Teilen
1. Optimierung
2. Objektfunktion
3. Nebenbedingung


Hier der Code der Optimierung:
Code:
%% Formulate and solve NLP
a=2; %Age of oldest machine

i0=1; %initial guess (starting point for iterations)
for z=1:1:a
LB = [0]; %vector with lower bounds
UB = []; %vector with upper bounds



A = []; % No linear inequality constraints
B = [];
Aeq = []; %No linear equality contraints
Beq = [];

b=2; %investment factor, should be bigger than 1
k=0.8; %cost factor
r=0.1; %interest rate
t=a;

options = optimoptions('fmincon','Algorithm','sqp', 'Display','iter-detailed',...
'MaxFunctionEvaluations',100000,'MaxIterations',2000,'FunctionTolerance', 1e-1000);    

    setappdata(0,'avalue',a); %transfer of the variable a//Age of oldest machine
    setappdata(0,'bvalue',b); %transfer of the variable b//investment factor, should be bigger than 1
    setappdata(0,'kvalue',k); %transfer of the variable k//cost factor
    setappdata(0,'rvalue',r); %transfer of the variable r//interest rate  
    setappdata(0,'tvalue',t); %initial guess (starting point for iterations)
   

    setappdata(0,'zvalue',z);
    [i, present_value(z)]=fmincon(@(i) obj_function_Diss(i), i0, A, B, Aeq, Beq, LB, UB, @(i) nonlcon_Diss(i), options)
   
    while (z<a)
                      i0 = [i,i0];
                      setappdata(0,'i0value',i0);
                    break
    end
   

end
present_value(z)


Dann hier die Objektfunktion:
Code:
function present_value = obj_function_Diss(i)

a = getappdata(0,'avalue');
b = getappdata(0,'bvalue');
k = getappdata(0,'kvalue');
r = getappdata(0,'rvalue');
z = getappdata(0,'zvalue');
t = getappdata(0,'tvalue');

cum_present_value=0; %variable to cummulate the present value

y=b*i(z);
c=(i(z)+k*(t-z)*b*i(z))/(b*i(z));

present_value(z) = -((y-c)*exp(t*r*(-1)));

cum_present_value=cum_present_value+present_value(z);

present_value=cum_present_value;


Und zu guter Letzt die Nebenbedingungen:
Code:
function [cc, ceq] = nonlcon_Diss(i)

a = getappdata(0,'avalue');
z = getappdata(0,'zvalue');
b = getappdata(0,'bvalue');
k = getappdata(0,'kvalue');
t = getappdata(0,'tvalue');

y=b*i(z);
c = i(z)+k*(t-z)*b*i(z)/y;

ceq(1)=i(z)-c+k*(t-z)*b*i(z)/y;
ceq(2)=b*i(z)-y;


cc=[];


Ausgeworfen wird zum Ende, dass in einem Jahr (z=1) nichts investiert wird (1.0e+19 *0.0000) und im anderen Jahr (z=2) kommt tatsächlich ein Wert heraus (7.6250). An sich sollte man meinen, dass in jedem Jahr investiert wird, so dass dadurch der Barwert steigt. Danke für deine Hilfe vorab!


MCKareem
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 29.03.18
Wohnort: Hamburg
Version: 2017a
     Beitrag Verfasst am: 29.03.2018, 14:48     Titel: Angemeldeter Account
  Antworten mit Zitat      
Ich antworte hier kurz, dass ich Neuigkeiten zu dem Thema bekomme Very Happy
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 - 2025 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.