dinkelbach algorithm with fmincon for maximization problem

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

If you increase the value rj, the set of feasible solutions becomes smaller. This means that the value of the objective function returned from fmincon must increase (or the negative value must decrease, since you are maximizing).
Best wishes
Torsten.
First, thank you very much for your replay. Indeed the negative value decrease. However, is it normal to increase in some cases and then decrease again?. Also, normally fmincon will give me back X0 and fval. X0 shall give me a higher value for rate each time I increase rj but also they decrease. Is that the same as what happen to fval and how can I look to those result from maximization prospective?
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.
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

댓글을 달려면 로그인하십시오.

답변 (0개)

질문:

2016년 1월 11일

댓글:

2021년 8월 19일

Community Treasure Hunt

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

Start Hunting!

Translated by