dinkelbach algorithm with fmincon for maximization problem
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello,
I am working on a fractional programming optimization problem and I used dinkelbach algorithm to solve it. I implemented dinkelbach with fmincon to solve the maximization problem. I have nonlinear constraints in form of log(1+Y)>=rj to define the minimum values. The problem is that each time I raise the minimum value I got lower results than the previous execution (normally the opposite shall happen).
Any help or advices will be helpful.
4 comentarios
Torsten
el 11 de En. de 2016
Does your problem only have one optimal solution (i.e. local maximum = global maximum) ? If not, this could explain the unsystemaic solution behaviour.
Best wishes
Torsten.
Samaneh Bidabadi
el 19 de Ag. de 2021
Hello,
I also have almost the similar problem. The optimal solution (x and fval) and also the value of lambda for Dinkelbach's algorithm do not chage in every iteration. Any suggestions would be greatly appreciated. Please consider the attached files.
The written matlab code is as follows:
function [EE,p,B,p_F,B_F] = Dinkelbachalgorithm(F,H,G,q,w,Phi,d,Beta,c,a)
M=1e8;
Delta=(B_max*log(1+(P_max*abs(F)^2)/(B_max*N0))-d/Beta)/M;
for m=1:M
y_bar(m)=d/Beta+(m-1)*Delta;
%%%%start solving EE problem(31) using Dinkelbach's algorithm
eps=1e-5;
lambda=[];
n=1;
lambda(n)=0;
x=[];
F=1e-4;
while F>eps
%%%%%%Solve EE Problem using fmincon%%%%%%%
A=[1 0 1];
b=P_max;
lb=[0 0 0];%lower bound for B
ub=[Inf B_max Inf];%upper bound for B
if n==1
x0 =[4 1e3 1];%starting point
else
x0=xf';
end
objfun2=@(x)-((Beta-d/y_bar(m))*x(2)*log(1+x(1)*c/x(2))-lambda(n)*(Beta*mu*x(1)+P_c+d*(mu_F*x(3)-mu*x(1))/y_bar(m)));
[xf,fval,exitflag,output] = fmincon(objfun2,x0,A,b,[],[],lb,ub,@confun2);
x(n,:)=xf';
EE=-fval;
%%%%%%%%%%%%%%%%%%%%%%%%%
F=EE;
lambda(n+1)=((Beta-d/y_bar(m))*x(1,2)*log(1+x(1,1)*c/x(1,2)))/(Beta*mu*x(1,1)+P_c+d*(mu_F*x(1,3)-mu*x(1,1))/y_bar(m));
n=n+1;
end
EE(m)=F;
% xx(m,:)=x(n,:);
end
[Y,I] = max(EE);
% p(m)=x(I,1);
% B(m)=x(I,2);
% p_F(m)=x(I,3);
% B_F(m)=B_max-B;
% EE=Y;
function [c,ceq] = confun2(x)
c1=(B_max-x(2))*log(1+((x(3)*abs(F)^2)/((B_max-x(2))*N0)))-y_bar(m);
c=-c1;
ceq=[];
end
end
Respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!