How to convert a maximize function to a minimize function

I need to convert an objective function, Maximize log2(1+S/N)
to minimize - Log2(1+S/N)
-log(x)=1/log(x)

Hence, can it be Minimize [ log 1/(1+S/N) ].
Can the log be removed to incorporate it in CVX
Can the objective function be reduced to Minimize (1+S/N)^-1
Can a log function be directly given as an objective function in CVX?
eg:-Maximize log2(1+S/N)
How can it be framed as a CVX objective function

You haven’t said what the optimization variables are. My answer is predicated on the assumption that S is an optimization variable, and N is input data.

You can directly maximize that in CVX
maximize(log(1+S/N)/log(2))

If that is the only term in the objective function, you need not divide by log(2) and in fact, you need not have log at all, you can use 1+S/N, or even S/N,or even S`;

Thanks a lot for your valuable feedback.
Please find the CVX program that I modified based on your feedback.

In this optimization problem, I want to maximize [log2(1+ P(i)*h(i).^2*(d(i).^-alpha))]
subject to 4 constraints.Here h(i) and d(i) are unique to each user, i. and alpha ia a constant.Rs ,Rt and TP are also constants(but can be varied for different set of simulations.
Please comment on my code. Is it correct? Any modification required
I want to optimize the variable P(i)

cvx_begin 
variable P(1,N)
for i = 1:N
    Plegit(i) =(1+ P(i)*h(i).^2*(d(i).^-alpha));    
end
for i = 1:N
    Peve(i) = (1+ P(i)*h(N+1).^2*(d(i).^-alpha));
end
maximize sum_power(Plegit)
% Trying to maximize sum rate taking path loss into account
subject to
    for i=1:N              
        P(i)>=0;
        sum(P)<=TP;%  total power constraint.
        Plegit(i)>=2.^Rt;%Data Rate Constraint        
        Plegit(i)>= Peve(i)*(2.^(2*Rs));%Secrecy Rate Constraint
    end
cvx_end
cvx_optval
P
function [ farg ] = sum_power(X)
farg = sum(pow_p(X,1));
end
1 Like

This looks totally unrelated to your original question, because I don’t see log, exp, or any such function hidden behind the scenes with use of another function, such as entr.

Your use of pow_p seems rather strange, because the 2nd argument is 1, so your objective winds up being sum(Plegit) Is that really what you want? Perhaps you intended the 2nd argument of pow_p not be 1?

The bottom line is that you seem to have entered a Linear Programming problem, which CVX can handle, but I suspect is not the problem you want to solve.

Also, I don’t think

for i = 1:N
    Plegit(i) =(1+ P(i)*h(i).^2*(d(i).^-alpha));    
end
for i = 1:N
    Peve(i) = (1+ P(i)*h(N+1).^2*(d(i).^-alpha));
end

will work correctly, These are expression assignments to elements of an array. You need to declare Plegit and Peve as expression arrays (holders) as described in http://cvxr.com/cvx/doc/basics.html#assignment-and-expression-holders ,

cvx_begin 
variable P(1,N)
expression Plegit(N)
expression Peve(N)
for i = 1:N
    Plegit(i) =(1+ P(i)*h(i).^2*(d(i).^-alpha));    
end
for i = 1:N
    Peve(i) = (1+ P(i)*h(N+1).^2*(d(i).^-alpha));
end
...

The objective function you say you want has log2, which you have not used in your program. Also, I presume you intend to sum that over the i You ought to be able to enter that objective function in CVX.

So, bottom line, you need to more clearly specify the optimization problem yiu are trying to solve, including how something involving i gets converted into a scalar objective function, whether by summation over i, o otherwise.