% Boyd, Kim, Vandenberghe, and Hassibi, "A Tutorial on Geometric Programming"
% Written for CVX by Almir Mutapcic 02/08/06
% (a figure is generated)
%
% Solves the power control problem in communication systems, where
% we want to minimize the total transmitter power for n transmitters,
% subject to minimum SINR level, and lower and upper bounds on powers.
% This results in a GP:
%
%   minimize   sum(P)
%       s.t.   Pmin <= P <= Pmax
%              SINR >= SINR_min
%
% where variables are transmitter powers P.
% Numerical data for the specific examples was made up.

% problem constants
n = 5;                 % number of transmitters and receivers
sigma = 0.5*ones(n,1); % noise power at the receiver i
Pmin = 0.1*ones(n,1);  % minimum power at the transmitter i
Pmax = 5*ones(n,1);    % maximum power at the transmitter i
SINR_min = 2;          % threshold SINR for each receiver

% path gain matrix
G = [1.0  0.1  0.2  0.1  0.0
     0.1  1.0  0.1  0.1  0.0
     0.2  0.1  2.0  0.2  0.2
     0.1  0.1  0.2  1.0  0.1
     0.0  0.0  0.2  0.1  1.0];

% variables are power levels
cvx_begin gp
  variable P(n)
  % objective function is the total transmitter power
  minimize( sum(P) )
  subject to
    % formulate the inverse SINR at each receiver using vectorize features
    Gdiag = diag(G);          % the main diagonal of G matrix
    Gtilde = G - diag(Gdiag); % G matrix without the main diagonal
    % inverse SINR
    inverseSINR = (sigma + Gtilde*P)./(Gdiag.*P);
    % constraints are power limits and minimum SINR level
    Pmin <= P <= Pmax;
    inverseSINR <= (1/SINR_min);
cvx_end

fprintf(1,'\nThe minimum total transmitter power is %3.2f.\n',cvx_optval);
disp('Optimal power levels are: '), P
 
Successive approximation method to be employed.
   For improved efficiency, sedumi is solving the dual problem.
   sedumi will be called several times to refine the solution.
   Original size: 98 variables, 36 equality constraints
   26 exponentials add 208 variables, 130 equality constraints
-----------------------------------------------------------------
 Cones  |             Errors              |
Mov/Act | Centering  Exp cone   Poly cone | Status
--------+---------------------------------+---------
 21/ 21 | 3.182e+00  3.069e-01  0.000e+00 | Unbounded
 25/ 25 | 3.207e+00  6.778e-01  2.356e-07 | Solved
 26/ 26 | 5.268e-01  1.997e-02  4.381e-08 | Solved
 20/ 26 | 2.964e-02  6.215e-05  4.628e-08 | Solved
  5/ 26 | 2.139e-03  3.770e-07  4.631e-08 | Solved
  0/ 26 | 1.527e-04  4.709e-08  4.630e-08 | Solved
-----------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +17.0014

The minimum total transmitter power is 17.00.
Optimal power levels are: 

P =

    3.6601
    3.1623
    2.9867
    4.1647
    3.0276