dinkelbach algorithm with fmincon for maximization problem

5 visualizaciones (últimos 30 días)
Meriame H
Meriame H el 11 de En. de 2016
Comentada: Samaneh Bidabadi el 19 de Ag. de 2021
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
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
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

Iniciar sesión para comentar.

Respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by