optimization, fmincon. Help

19 ビュー (過去 30 日間)
niket shah
niket shah 2018 年 11 月 4 日
編集済み: Stephan 2018 年 11 月 4 日
Can anyone help me, how to extract value of fval at each loop cycle of objective function. Thank You.

採用された回答

Stephan
Stephan 2018 年 11 月 4 日
編集済み: Stephan 2018 年 11 月 4 日
Hi,
the usage of global variables is not recommended. You missed to define the function handles Fcost1_4 ... Fcost3_4 in Fcompanies_4.m - try this instead:
clc, clear all
global M H a1 a2 a3 b1 b2 b3 Lh umh u1h u2h u3h u4h Ch a4 Ge Ip
M=4;
H=24;
a1(1:7,1)=0.004;
a1(8:24,1)=0.00084;
a2(1:7,1)=0.0006;
a2(8:24,1)=0.00078;
a3(1:7,1)=0.0005;
a3(8:24,1)=0.00080;
b1(1:7,1)=0.064;
b1(8:24,1)=0.064;
b2(1:7,1)=0.046;
b2(8:24,1)=0.063;
b3(1:7,1)=0.044;
b3(8:24,1)=0.065;
r=0.09;
Ns=20;
a4= r/[1-(1+r)^-Ns];
Ge=1.6;
Ip=5000;
dv=H;
Lh=rand(1,H);
umh_i=rand(1,H*M);
u1h=umh_i(1,1:24);
u2h=umh_i(1,25:48);
u3h=umh_i(1,49:72);
u4h=umh_i(1,73:96);
current_m=1;
x0 = u1h;
ub = ones(dv,1);
lb = zeros(dv,1);
Fcost1_4 = @(x)globalfun(x);
Fcost2_4 = @(x)globalfun(x);
Fcost3_4 = @(x)globalfun(x);
options = optimoptions('fmincon','Algorithm','interior-point','Display','iter');
[x,fval] =fmincon(Fcost1_4,x0,[],[],[],[],lb,ub,[],options);
if(x~=u1h)
u1h=x;
end
current_m=2;
x0=u2h;
ub=1-(u1h);
lb=zeros(dv,1);
options = optimoptions('fmincon','Algorithm','interior-point','Display','iter');
[x,fval] =fmincon(Fcost2_4,x0,[],[],[],[],lb,ub,[],options);
if(x~=u2h)
u2h=x;
end
current_m=3;
x0=u3h;
ub=1-(u1h+u2h);
lb=zeros(dv,1);
options = optimoptions('fmincon','Algorithm','interior-point','Display','iter');
[x,fval] =fmincon(Fcost3_4,x0,[],[],[],[],lb,ub,[],options);
if(x~=u3h)
u3h=x;
end
current_m=4;
u4h=1-(u1h+u2h+u3h);
[C]=F_final();
Ch=C;
umh=u1h+u2h+u3h+u4h;
In Fcost1.m your output is a function handle - try this instead:
function y = globalfun(x)
global M H a1 a2 a3 b1 b2 b3 Lh umh u1h u2h u3h
for h=1:H
y = (a1(h)*(Lh(h)*x(h)).^2 + b1(h)*(Lh(h)*x(h)) + a2(h)*(Lh(h)*u2h(h)).^2 + b2(h)*(Lh(h)*u2h(h)) + a3(h)*(Lh(h)*u3h(h)).^2 + b3(h)*(Lh(h)*u3h(h)));
end
end
These changes fix the code to run up to the last three lines:
[C]=F_final();
F_final is not defined - you should fix this and it should work. But you wil not get a price for clean coding... ;-)
In your globalfun you overwrite the result of y in every single run of your loop - i guess this is not what you want. Check the results - they may be not the expected ones, due to coding errros i cant identify, becaus of no insight to the problem.
Best regards
Stephan

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSolver Outputs and Iterative Display についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by