how to include a loop and stopping criteria in fmincon

조회 수: 1 (최근 30일)
Rose WABUTI
Rose WABUTI 2018년 10월 24일
편집: Torsten 2018년 10월 24일
I am using fmincon to slove a two stage optimization - the stackelberg leader follower type, by backward induction. The code below works but its too manual, the value of x calculated in the first stage is taken as the limit in the next stage and vise versa, I need to refine the code to include a stopping criteria such that when fval is non changing from the previous value and to not manually keeb changing the variable x as seen in the code I have changed the variable from b,c, z,d,. I need to include a loop but I don't know how, any idea?
fun =@(b)(-1)*( b(2)*( a - 2*(b(1) + b(2)) - (5 - b(2) + b(2)^2)) );
x0 = [0,1];
A = [];
B = [];
Aeq= [];
beq= [];
lb=[0,0];
ub=[1,1];
[b,fval(1)] = fmincon(fun,x0,[],[],Aeq,beq,lb,ub);
% leader observing followers responce choses the val
% fun =@(c)(-1)*( c(1)*( a - 2*(c(1) + c(2)) - (4 - c(1))) );
fun =@(c)(-1)*( c(1)*( a - 2*(c(1) + c(2)) - (4 - c(1) + c(1)^2)) );
lb=[0,b(2)];
ub=[1,b(2)];
[c,fval(2)] = fmincon(fun,x0,[],[],Aeq,beq,lb,ub);
%follower choses value in reaction to leaders
fun=@(z)(z(2)*( a - 2*(z(1) + z(2)) - (5 - z(2) + z(2)^2))*(-1));
x0 = [0,1];
A = [];
B = [];
Aeq= [];
beq= [];
lb=[c(1),0];
ub=[c(1),1];
[z,fval(3)] = fmincon(fun,x0,[],[],Aeq,beq,lb,ub);
%leader chooses value in reaction
% fun =@(d)(-1)*( d(1)*( a - 2*(d(1) + d(2)) - (4 - d(1))));
fun =@(d)(-1)*( d(1)*( a - 2*(d(1) + d(2)) - (4 - d(1) + d(1)^2)) );
lb=[0,z(2)];
ub=[1,z(2)];
[d,fval(4)] = fmincon(fun,x0,[],[],Aeq,beq,lb,ub);
% follower chooses value
fun=@(e)(e(2)*( a - 2*(e(1) + e(2)) - (5 - e(2) + e(2)^2))*(-1));
x0 = [0,1];
A = [];
B = [];
Aeq= [];
beq= [];
lb=[d(1),0];
ub=[d(1),1];
[e,fval(5)] = fmincon(fun,x0,[],[],Aeq,beq,lb,ub);

답변 (0개)

카테고리

Help CenterFile Exchange에서 Linear Least Squares에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by