 # Problem with scaling of the variable

Hi All
I am new to this tool. While solve a simple maximizing problem
cvx_begin
cvx_solver sedumi
cvx_quiet(true);
variable g;
maximize (log(1+g)/log(2))
subject to
g <= Gmax
cvx_end
where g is the variable to be determined.
I am getting an answer g=36180789.8355423 where Gmax =6015.10448126006

Remove the statement `cvx_quiet(true);`. Then re-run it and you will see the solver 9actually, CVX successive approximation method) output. I ran it with a stock CVX 2.2 (ii.e., no CVXQUAD) and sedumi as solver. The optimal solution has g = 6.014989425672330e+03, which is correct to within a sloppy tolerance. Running it with Mosek as solver using its native exponential cone capability, produced optimal g within 0.001 of the true optimum, which is within tolerance.

So I don’t know how you got the result you did. And neither will you until you run it without `cvx_quiet(true)`. I will note that you did not show us a complete reproducible problem. Perhaps Gmax wasn’t really your intended value at the time the program was run?

1 Like

Hi Mark, Thank you very much for the response. This is the code i was using

``````clc
clear all
close all
w=2*10^7;
No=10^(-19.9);
N=No*w;
n=5; % number of points that you want
center = [0 ,1]; % center coordinates of the circle [x0,y0]
angle = 2*pi*rand(n,1);
ho=1.42*10^-4;
X = r.*cos(angle)+ center(1);
Y = r.*sin(angle)+ center(2);
%  plot(X,Y,'.k')
D=[X';Y'];
w=sqrt(D(1,1:n).^2+D(2,1:n).^2);
w=sort(w,'descend');
hmax=300;
hmin=10;
pmax=10^-2;
pmin=0;
Gmin=((pmax/n)*ho)./(w.^2+hmax.^2);
Gmax=((pmax/n)*ho)./(w.^2+hmin.^2);
Gmin=Gmin./N;
Gmax=Gmax./N;
for count=1:n
[g(count),uto(count)]=utopia(Gmax(count),Gmin(count))
end
function [g,u] = utopia(Gmax,Gmin)
cvx_begin
cvx_solver sedumi
cvx_quiet(true);

variable g;

maximize (log(1+g)/log(2))
subject to
g <= Gmax;
cvx_end
u=cvx_optval;
end``````

I skipped

`````` for count=1:n
[g(count),uto(count)]=utopia(Gmax(count),Gmin(count))
end
function [g,u] = utopia(Gmax,Gmin)
``````

and Gmax was a 1 by 5 vector. The`g` prior to `variable g` (i…e, the value returned by utopia) will be ignored and have no consequence to CVX. CVX solved the problem correctly, based on using that first element (which is the MATLAB default behavior) of the Gmax vector. However, you should provide a scalar for Gmax. And turn off quiet and look at the output.

Now i rerun the same code and i am getting the correct result. Since I am new to this tool, could you please give some tips regarding the scaling of variable in the optimization. I am telecommunication researcher, usually my variables to be optimized takes value of the order of 10^-6.

Try to get everything (other than numbers which are exactly zero) as close as you can to 1 in magnitude.1e-3 to 1e3 would be good, if possible.

Thank you very much for the tips and quick response