Hi , I want to write this objective function but I have a problem with writing d as it should be a vector from 1 to S and q is the vector I optimize
This is the expression and q represent m/n

\sum^S_{d=1} \sum^N_{j=1} \gamma_d * P_j *(1 - q)^d
The optimization variable is q = m_j / n and all the other variables are inputs
M = 100 ; N = 5 ; S = 10; P_j = [ .5 , .1 , .2 , .3 , .4 ] , gammad = [.1 : .1: 1]
cvx_begin
variable q(N)
minimize(sum(sum(gammad'*P_j* (1 - q)^(1:S))))
subject to
sum(q) == M ;
0 <= q <= 100;
cvx_end
minimize(sum(sum(gammad’ * Pj.*(1 - q).^d)))
I tried to use this minimize(sum(sum(gammad’Pj (bsxfun(@power , (1 - q), (1:S))’)))) but still give error
You haven’t told us what are decision (optimization) variables vs. input data.
Nevertheless, have you tried pow_p
? Its first argument can be a vector or matrix, to which the power is applied elementwise.
Try using pow_p
with a fixed value of d, and use a for loop to sum over the values of d I’ll let you work out the details. Or I believe you can just use ^
in this manner instead of pow_p
.
N = 5
M = 100
S = 10
P_j = [ .5 , .1 , .2 , .3 , .4 ] ,
\gamma_d = [.1 : .1: 1]
cvx_begin
variable q(N)
for i = 1 : S
Total(1:length(q),i) = (pow_p( (1 - q ) , i ))' ;
end
minimize (sum(sum ((P_j'*\gamma_d)*Total)))
subject to
sum(q) == M ;
0 <= q <= 1;
cvx_end
I tried to write it in this form but the output is NaN and I cannot figure out where is the problem. Can you please help.
Please show clean MATLAB/CVX code not a bastardized mix of MATLAB/CVX and Latex/Mathjax which makes it impossible to know what you ran. Presuming your code \gamma_d
is really gamma_d
, your objective function is not even dimensionally consistent.
Thanks so much for your response. I wrote the matlab code below. The issue now is that the optimized value q is NaN
N = 5
M = 100;
S = 10;
P = [ .1 .2 .3 .4 .6]
gammad = [.1:.1:1]
cvx_begin
variable q(N)
for i = 1 : S
Total(1:length(q),i) = (pow_p( (1 - q ) , i ))' ;
end
minimize (sum(sum ((P'*gammad)*Total')))
subject to
sum(q) == M ;
0 <= q <= 1;
cvx_end
The problem is infeasible.
q
has 5 elements. Given that each element of q <= 1, the maximum possible value of sum(q) is 5, thereby rendering sum(q) == 100 impossible to achieve,
Okay . Thanks I got where is the error. Thanks so much. I worked it out now