Hi,
I am doing an Information Theoretic optimization. Here’s my code (inside a loop), and here’s the error I get.
Specially this
“Illegal operation: log_sum_exp( {mixed concave/constant} ).”
is bothering me. What is it?
Any help would be appreciated.
(Everything is converted to log format, for finite precision limitations. Otherwise, I get NaN.)
function [I_min_general, P_min_general]=i_min_general_cvx(q,D,epsilon,n,C_n_4,Cnk)
cvx_clear
cvx_begin
variables P(n+1,n+1,n+1)
P <= 0
I=log(0);
prob=log(0);
P_sum=log(0);
for n0=0:n
n1=n-n0;
P_sum=log(0);
for n00=0:n0
n01=n0-n00;
for n10=0:n1
n11= n1-n10;
P_sum = log_sum_exp ([P_sum , Cnk(n0+1,n00+2)+Cnk(n1+1,n10+2)+P(n00+1,n01+1,n10+1)]);
%% calculating I
p_x= log(q)*(n00+n01) + log(1-q)*(n10+n11);
p_joint=p_x + P(n00+1,n01+1,n10+1);
p_x_hat=log(0);
for a=0:n00+n10
for b=0:n01+n11
p_x_hat= log_sum_exp([p_x_hat ,(Cnk(n00+n10+1,a+2)+Cnk(n01+n11+1,b+2)+ (log(q)*(a+b)+log(1-q)*(n-a-b)) + P(a+1,b+1,n00+n10-a+1))]);
end
end
p_x
p_joint
p_x_hat
entrp_log = p_joint + log(p_joint - p_x - p_x_hat)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Here is the problem
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I= log_sum_exp([I , C_n_4(n+1,n00+2,n01+2,n10+2)+ entrp_log]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% calculating tail probability
if((n01+n10)/n>D)
prob= log_sum_exp ([prob , C_n_4(n+1,n00+2,n01+2,n10+2) + p_joint]);
end
end
end
P_sum==log(1);
end
I=I-log(n);
prob<=log(epsilon)
minimize(I)
cvx_end
I_min_general=cvx_optval;
P_min_general=P;
cvx_status
cvx_clear
end
p_x_hat =
-Inf
p_x =
-1.3863
p_joint =
cvx real affine expression (scalar)
p_x_hat =
cvx convex expression (scalar)
entrp_log =
cvx concave expression (scalar)
Error using cvx/log_sum_exp (line 90)
Disciplined convex programming error:
Illegal operation: log_sum_exp( {mixed
concave/constant} ).
Error in i_min_general_cvx (line 49)
I= log_sum_exp([I ,
C_n_4(n+1,n00+2,n01+2,n10+2)+
entrp_log]);
Error in R_n_q_d_e (line 26)
[I_min_general(d,e),
P_min_general]=i_min_general_cvx(q,D(d),epsilon(e),n,C_n_4,Cnk);
Error in run2_calculate (line 34)
[I_min_iid(i_n,i_q,:,:) ,
I_min_general(i_n,i_q,:,:)]=R_n_q_d_e(n(i_n),q(i_q),d,epsilon,C_n_4,Cnk);