# Error in MM algorithm：no feasible solution

Hi, everyone. Here is my problem. I have used a Taylor expansion in （22） to obtain the lower bound of the original problem. Thus, I first find a feasible solution of problem (21), and then I solved the problem（23） via CVX. However, CVX does not return any feasible solution. It seems that the original solution of problem (21) is also the solution of problem (23). Is there anyone can solve my problem? I have leaved my Matlab code here. If there is anything I can do to make the question clearly, please tell me. Thanks a lot.

function [W]=calW(barHbsue,Pbs,G,Phi,A,d,e,M,K,epsilon,W_t,J_t,B,D,E)
S=Phi’APhiG;
T=Phi
G;
barHbsue=barHbsue1e4;
d=d
1e8;
S=S1e3;
T=T
1e3;
e=e1e6;
%check feasible
(norm(W_t,‘fro’))^2<=Pbs
((norm(S
W_t,‘fro’)))^2+((norm(T*W_t,‘fro’)))^2<=e
for k=1:K
(1+1/epsilon)2real(barHbsue(:,k)‘W_t(:,k+M)(W_t(:,k+M)’*barHbsue(:,k)))…
-(1+1/epsilon)*real(barHbsue(:,k)‘W_t(:,k+M)W_t(:,k+M)'barHbsue(:,k))>=((norm(barHbsue(:,k)'W_t)))^2+d(k)
end
cvx_clear;
cvx_begin
variable W(M,M+K)
%maximize
%real(trace(W_t’B’/J_tB
W))-(square_pos(norm(W_t’B’/J_tE
W,‘fro’)))
subject to
square_pos(norm(W,‘fro’))<=Pbs;
(square_pos(norm(S
W,‘fro’)))+(square_pos(norm(T
W,‘fro’)))<=e;
for k=1:K
(1+1/epsilon)2real(barHbsue(:,k)‘W_t(:,k+M)(W(:,k+M)’*barHbsue(:,k)))…
-(1+1/epsilon)*real(barHbsue(:,k)’*W_t(:,k+M)*W_t(:,k+M)’*barHbsue(:,k))>=square_pos((norm(barHbsue(:,k)’*W)))+d(k)
end
cvx_end
end

Have you tried evaluating the constraints with what you claim in solution, and verified that all constraints are satisfied?

Thanks for your reply. I have tried to verify the constraint in the code above called check feasible and the solution follows all the constraints. I have tried to use the methods in https://yalmip.github.io/debugginginfeasible according to your previous advice but I am not sure where to type the command “assign(x,claimedfeasible) ;
check(Constraints)” in CVX. I tried to remove one of the constraints but there is still no feasible solution unless two constraints (23d) and (24e) are removed together.

%check feasible
(norm(W_t,‘fro’))^2<=Pbs
((norm(SW_t,‘fro’)))^2+((norm(TW_t,‘fro’)))^2<=e
for k=1:K
(1+1/epsilon)2real(barHbsue(:,k)‘W_t(:,k+M)(W_t(:,k+M)’*barHbsue(:,k)))…
-(1+1/epsilon)*real(barHbsue(:,k)’*W_t(:,k+M)*W_t(:,k+M)’*barHbsue(:,k))>=((norm(barHbsue(:,k)’*W_t)))^2+d(k)
end

`assign` and `check` are YALMIP commands which have no counterpart in CVX.

Outside of `cvx_begin ... cvx_end`, you should set MATLAB double precision values for all the variables. Then execute the LGS and RHS of the constraints and see what the values are.

Thanks a lot, I executed all the inequalities, respectively. It shows that the LGS of (23b) is equal to 25.5527 and the RHS is 25.5264, which means W_t is a feasible solution. (Actually, I obtained the solution W_t by solving a feasible problem via CVX as well)

Your program has a lot of constraints. They all have to be satisfied (within solver feasibility tolerance).

The description of what you have done isn’t clear. Did you solve your CVX problem as a feasibility problem by removing the objective, and it was reported feasible, but with the objective, it was reported infeasible? if so, there may be very bad problem scaling with the input data.

Sorry about that. No matter whether I solved my problem as a feasibility problem or not, it was reported infeasible. I have checked the scaling, and it seems that there is no scaling problem.

Perhaps you can copy and paste a complete MATLAB session in which you show how you evaluated that the supposedly feasible point is feasible.

Thanks for your advice, here is my Matlab code, you can paste it and execute it.

barHbsue=[-15.2174645380424 - 18.8733301634668i,-1.76895024717979 + 1.19398914212856i;18.4847551707592 - 34.5786768813144i,-1.19522702596894 + 7.56670685365799i;-4.80370271471480 - 35.0279345547879i,5.80745710458398 - 3.89853082832883i;21.9777810948346 + 12.1219168271426i,1.79334684324964 + 2.51887115162203i];
W_t=[0.104311787500713 + 0.00000000000000i,0.00000000000000 + 0.00000000000000i,0.00000000000000 + 0.00000000000000i,0.00000000000000 + 0.00000000000000i,-0.0127039580358461 - 0.00378446020994449i,-0.000947684394877046 + 0.00816091992417669i;-0.0520252044277827 - 0.0124637483078639i,0.0204492305576963 + 0.00000000000000i,0.00000000000000 + 0.00000000000000i,0.00000000000000 + 0.00000000000000i,-0.0152866176981142 - 0.0500668514947260i,-0.0882188689377447 + 0.109024871697935i;-0.00262659692575377 - 0.0401430791265187i,0.0144084453468061 + 0.0381827054836426i,0.0226510704048038 + 0.00000000000000i,0.00000000000000 + 0.00000000000000i,-0.0240263548061695 - 0.0481113284873462i,0.0282271650406266 - 0.0793802159197318i;0.0250273188509394 + 0.0120842158209258i,0.0536850242308141 - 0.0145168349159100i,0.0169428791965378 - 0.0281920776894594i,0.0118910241596934 + 0.00000000000000i,0.0100864515006405 + 0.107790171893235i,0.103827096955770 + 0.0493868181682753i];
d=[3.98235100739741e-09,4.28274125274171e-09];
Pbs=1;
S=[0.105629720858704 - 0.115415041265869i,0.0688220810004474 - 0.110942324274026i,0.0160544621122914 - 0.120692759290004i,-0.0652579356350039 - 0.0875433609209728i;0.0355799992921744 + 0.152355942875422i,0.0526788156886424 + 0.119455516934955i,0.0905293051502463 + 0.0814182584422157i,0.109101015989501 - 0.00440528259488095i;-0.00343543726500087 - 0.156417605946032i,-0.0269442941797303 - 0.127744601293798i,-0.0718179109375359 - 0.0983192532890581i,-0.107668955485044 - 0.0181613388669896i;0.156301268642895 + 0.00694140473618748i,0.129249794070618 - 0.0184165382539231i,0.102863950461998 - 0.0651421184342474i,0.0252590124640333 - 0.106228153019921i;-0.151603719960913 - 0.0386598211726733i,-0.130289917094421 - 0.00831959446632531i,-0.113983856974035 + 0.0428038345019748i,-0.0463846428196689 + 0.0988478786579346i;0.136428648507209 + 0.0765865102063439i,0.123695271266454 + 0.0417631178777829i,0.121178924820338 - 0.0118387532340504i,0.0703915460127592 - 0.0834713630810928i;0.0364622408708580 - 0.152147213808750i,0.00643357665119311 - 0.130396653484775i,-0.0444485705980969 - 0.113352602398603i,-0.0995086643433975 - 0.0449495709131362i;-0.130460924485484 - 0.0863609683912981i,-0.120308959390008 - 0.0506994323345819i,-0.121720282562352 + 0.00294290871266995i,-0.0763088228966415 + 0.0780986667799842i];
T=[5.43483756727566 - 0.398083894836996i,3.02790923989638 - 6.37739031093814i,0.422524887547480 - 6.42156282988656i,-1.10717360540875 - 4.53349162249173i;-1.93621548889973 + 0.601699717194930i,-1.80377657687148 + 6.63382093933157i,4.54136647966746 + 9.36010739767463i,1.08744870018498 + 5.34099166821744i;4.67592424660565 - 4.82092817986360i,-5.26093026628224 + 0.344429806552078i,-4.38676795879312 - 1.03630460436823i,-6.62438613734156 + 6.86467986348354i;3.12917618591888 + 11.2592290436981i,2.10436337615150 + 7.37871225574171i,4.88870298354460 + 3.59090134932865i,4.74427671129484 - 3.42497454437202i;-7.34130339434060 - 1.94624890130086i,-1.40432851436804 + 5.26078382544589i,-1.13188817546642 + 6.26354921053859i,0.890503664905047 - 1.92261804509053i;4.40903654116341 - 0.00830577296592966i,-0.445797096508372 - 2.44349578012228i,-6.88413225431745 - 1.79161416572819i,-2.06794339900847 + 0.955273583033920i;4.14717105783429 - 6.50076842559825i,1.13024728359420 - 8.44184508174000i,-2.30110498610663 - 7.65857718228696i,-4.61212117734302 - 6.11354719341353i;4.05151459672400 - 3.62703456738129i,2.26572474584007 - 1.65057569866252i,0.169166701189581 - 4.34285515298843i,0.666504722867654 - 7.20384555868843i];
e=10;
%check feasible
(norm(W_t,‘fro’))^2<=Pbs
((norm(SW_t,‘fro’)))^2+((norm(TW_t,‘fro’)))^2<=e
for k=1:K
(1+1/epsilon)2real(barHbsue(:,k)‘W_t(:,k+M)(W_t(:,k+M)’*barHbsue(:,k)))…
-(1+1/epsilon)*real(barHbsue(:,k)‘W_t(:,k+M)W_t(:,k+M)'barHbsue(:,k))>=((norm(barHbsue(:,k)'W_t)))^2+d(k)
end
cvx_clear;
cvx_begin
variable W(M,M+K)
% maximize real(trace(W_t’B’/J_tB
W))-(square_pos(norm(W_t’B’/J_tE
W,‘fro’)))
subject to
square_pos(norm(W,‘fro’))<=Pbs;
(square_pos(norm(S
W,‘fro’)))+(square_pos(norm(T
W,‘fro’)))<=e;
for k=1:K
(1+1/epsilon)2real(barHbsue(:,k)‘W_t(:,k+M)(W(:,k+M)’*barHbsue(:,k)))…
-(1+1/epsilon)*real(barHbsue(:,k)’*W_t(:,k+M)*W_t(:,k+M)’*barHbsue(:,k))>=square_pos((norm(barHbsue(:,k)’*W)))+d(k)
end
cvx_end

What I want you to do is to show us your MATLAB session which verifies that the solution you claim is feasible satisfies all the constraints.

Sorry I do not understand your idea. In this section, if Matlab outputs “ans=1”, it means it satisfies the constraint. Consequently, if you see four “ans=1”, respectively, it means the solution satisfies all the constraints.
%check feasible
(norm(W_t,‘fro’))^2<=Pbs
((norm(SW_t,‘fro’)))^2+((norm(TW_t,‘fro’)))^2<=e
for k=1:K
(1+1/epsilon)2real(barHbsue(:,k)‘W_t(:,k+M)(W_t(:,k+M)’*barHbsue(:,k)))…
-(1+1/epsilon)*real(barHbsue(:,k)‘W_t(:,k+M)W_t(:,k+M)'barHbsue(:,k))>=((norm(barHbsue(:,k)'W_t)))^2+d(k)
end

Evaluate
LHS - RHS
Then you an see how close the y are to being satisfied. Solves may actually allow a vey slightly infeasible solution be considered to be feasible.

Here is the result. I have also changed my Matlab code as follows so that all the results are negative.

%check feasible
(norm(W_t,‘fro’))^2-Pbs
((norm(SW_t,‘fro’)))^2+((norm(TW_t,‘fro’)))^2-e
for k=1:K
((norm(barHbsue(:,k)’*W_t)))^2+d(k)- (1+1/epsilon)2real(barHbsue(:,k)‘W_t(:,k+M)(W_t(:,k+M)’*barHbsue(:,k)))…
+(1+1/epsilon)*real(barHbsue(:,k)’*W_t(:,k+M)*W_t(:,k+M)’*barHbsue(:,k))
end

`W == .[3.14159 2.71828 0.577215]; or whatever the actual values are constrain ``W` to have the value you claim is feasible, and see what happens.