values of equation in last iteration in fmincon

2 vues (au cours des 30 derniers jours)
Takis Tsoukalas
Takis Tsoukalas le 14 Avr 2019
Modifié(e) : Matt J le 15 Avr 2019
I optimize a problem maximizing EU1 with the fmincon solver..the code below is the objective function i insert in fmincon instruction ...
can i somehow get the value of xw1 equation in last itteration??
function EU1 = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X)
EU1=0;
xw1=0;
for i=1:1:length(rc)
if (LLand(rc(i)))
xw1=xw1+LG_obs(rc(i))*X(i);
end
end
xw1=LW_ini+xw1;
% xw1
% class(xw1)
for i=1:1:length(rc)
for j=1:1:length(rc)
EU1=EU1+LVmat(i,j)*X(i)*X(j);
end
end
EU1=xw1-0.5*EU1/xw1;
%EU1=-EU1;
xw1;

Réponse acceptée

A. Sawas
A. Sawas le 14 Avr 2019
After the fmincon is run and you got the solution vector, make a call to the objective function using the solution vector but in this time add/enable the code in the objective function to display the values you want.
For example assuming you called fmincon like this:
eq_obj = @(x)eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,x);
[x] = fmincon(eq_obj,x0,A,b);
Edit the objective function to display the value of xw1; then call the objective function:
eq_obj(x);
  3 commentaires
Catalytic
Catalytic le 14 Avr 2019
Instead of displaying xw1, provide the option of returning it
function [EU1,xw1] = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X)
A. Sawas
A. Sawas le 15 Avr 2019
Modifié(e) : A. Sawas le 15 Avr 2019
Catalytic : I agree that will be a better workaround.

Connectez-vous pour commenter.

Plus de réponses (1)

Matt J
Matt J le 14 Avr 2019
Modifié(e) : Matt J le 14 Avr 2019
The computation of xw1 is a trivial one-liner. Just compute it separately from the optimal X given to you by fmincon,
xw1=sum( LG_obs(rc).*LLand(rc).*Xoptimal) + LW_ini
  3 commentaires
A. Sawas
A. Sawas le 15 Avr 2019
The only drawback I guess of computing the value of xw1 outside the objective fuction will be the need to edit two locations if the equation has changed.
Matt J
Matt J le 15 Avr 2019
Modifié(e) : Matt J le 15 Avr 2019
Then create a dedicated function to compute xw1 and call that function in the objective as well as everywhere else xw1 is needed,
function xw1=getxw1(LW_ini,LG_obs,LVmat,LLand,rc,X);
xw1=sum( LG_obs(rc).*LLand(rc).*X) + LW_ini;
end
function EU1 = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X)
xw1=getxw1(LW_ini,LG_obs,LVmat,LLand,rc,X);
EU1=xw1-0.5*(X(:).'*LVmat*X(:))/xw1;
end

Connectez-vous pour commenter.

Catégories

En savoir plus sur Quadratic Programming and Cone Programming dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by