when I use cvx to solving a easy optimization problem, the correct solution can be obtained. However, using cvx with coordinate desent algorithm, I can’t get a solution.
I have two optimization variables, and after fixing one variable to find the optimal solution, I fix the other variable to find the optimal solution. However, after optimizing once, the following variables will not change, and the optimal solution will not change. The code I wrote in matlab is roughly as follows:
ed = 1e-3;
eh = 20;
pe = 6;
M = 25;
N = 20;
iterations = 100;
HbPre = rand(M, N, "like",1i);
HbMeasured = rand(M, N, "like",1i);
Hd = rand(M, N, "like",1i);
pdB = rand(M, 1, "like",1i);
for i = 1:iterations
cvx_begin quiet
variable wCur(N) complex
minimize(norm(HbPre * wCur - pdB))
subject to
norm(Hd * wCur) <= sqrt(ed);
norm(wCur) <= sqrt(eh);
cvx_end
cvx_begin quiet
variable HbCur(M, N) complex
minimize(norm(HbCur * wCur - pdB))
subject to
norm(reshape(HbCur - HbMeasured, M * N, 1)) <= pe;
cvx_end
HbPre = HbCur;
end
That is, no matter how many iterations, HbCur will never change, so am I writing the coordinate descent algorithm wrong?