Hi,
I'm having trouble implementing a cheap solver for a simple BMI problem as described in Cogill's paper on Quadratic Approximated Value Functions.
It's a very dirty approach and I'm looking into PENBMI, but I haven't obtained it yet. If there's a better to do this with Yalmip / Sedumi / SDPT3, let me know.
Anyhow, this is what I'm doing:
The bilinearity is limited to a scalar in [0,1], so I'm discretizing this interval and solving an LMI for every point as in the code snippet below.
I'm checking the diagnostics afterwards and set infeasible problems to a very large value to invalidate them when I pick the best result from my results vector.
The problem is that sometimes, Yalmip will throw an error when the constraints aren't really a constraint, but just straight out infeasible or always valid. For example, let A1 = 2; A2 = 0; and rho = 0.75
Then the constraint is essentially:
Y >= Q + Y
which is always true (with the non-variable Qs I'm using).
| Code: |
for(rho_idx = 1:length(0:hstep:1))
obj = trace(WVar * Y) + rho*lambda;
constr = [Y>=0];
constr = [constr, Y>=Q+(1-rho)*A1'*Y*A1+rho*A2'*Y*A2];
diagnostics = solvesdp(constr,obj,sdpsettings('solver','sdpt3','verbose',0));
end
|
I get the following error for this example:
| Code: |
??? Undefined function or method 'is' for input arguments of type 'double'.
Error in ==> lmi.lmi at 142
if is(Fi{1},'sos')
Error in ==> constraint.set at 52
F = lmi(varargin{1});
Error in ==> constraint.horzcat at 14
F=F+set(varargin{i});
Error in ==> ETC_Cog_YSearchTh1 at 23
constr = [constr, Y>=Q+(1-rho)*A1'*Y*A1+rho*A2'*Y*A2];
Error in ==> mk_test_1D_overall at 24
[CogQuadEst_thresh,Y_out,rho_out] = ETC_Cog_YSearchTh1(A1,A2,G, lambda, WVar);
|