bmibnb without PenBMI

388 views
Skip to first unread message

Slash

unread,
Oct 31, 2013, 2:35:22 AM10/31/13
to yal...@googlegroups.com
Hi

I am trying to solve a type of BMI problem, but I do not have PenBMI installed. Based on the instructions (at the end of http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Examples.DecayRate), I set an option 'bmibnb.upper' to 'none' so that the upper bound is generated using heuristics. However, my code keeps crashing. I have a small example to illustrate the problem:

yalmip('clear')
v = sdpvar(1);
t = sdpvar(1);
A = [-1 2;-3 -4]*v + [-1 0;0 1]*(1-v);
B = [-1 0;0 1]*v +[0 0;0 -1]*(1-v);
Q = sdpvar(2,2);
Y = sdpvar(2,2,'full');
F = [Q>eye(2), 10*eye(2)>Q, A*Q+Q*A'+B*Y+Y'*B' <= -t*eye(2), 100 >= t >= 0, 1>=v>=0];
solvesdp(F,-t,sdpsettings('solver','bmibnb','bmibnb.upper','none'));

I know a solution exists (set v = 1 and the problem is an LMI). Other code (such as the second Nonconvex semidefinite programming example at http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Tutorials.GlobalOptimization) seems to run fine (once I remove the solver settings are set bmibnb.upper to none).

However, when I run the code, I get the following error (yalmip error code 9): Unknown problem in solver (try using 'debug'-flag in sdpsettings) (Reference to non-existent field 'dinf'.). When I run the code with the debug flag, I get the following dump in Matlab:

??? Reference to non-existent field 'dinf'.

Error in ==> callsedumi at 82
pinf = info.dinf;

Error in ==> root_node_tighten at 40
            output = feval(lowersolver,removenonlinearity(p));

Error in ==> bmibnb at 229
p = root_node_tighten(p,upper);

Error in ==> solvesdp at 355
    eval(['output = ' solver.call '(interfacedata);']);

Also, if I remove the variable v from the unknowns (I set v = 1 and solve the problem), I get a solution if I use the command "solvesdp(F,-t)". However, if I use the bmibnb solver, it crashes with the same error (even though it is just solving an LMI).

If I remove the setting 'bmibnb.upper','none', I get the expected 'No suitable solver' error code. Does anyone have any suggestions on what is going wrong and how I can fix it? My yalmip version is 20130322.

Thank you
Slash

Johan Löfberg

unread,
Oct 31, 2013, 2:54:48 AM10/31/13
to yal...@googlegroups.com
SeDuMi returns a messed up solution structure during bmibnbs presolve phase (when trying to derive bounds on involved variables). This causes the crash.

Both SDPT3 and Mosek work fine though. However, the bound t<=100 turns out to be tight, so it should be relaxed (since I guess it is a simple bound introduced to ensure bounded domain). Note that you have to add bounds on Y, as it currently is unbounded in Y which enters the model nonlinearly, hence it requires bounds for the lifting to work. Problem is solved in root-node (i.e., the trivial relaxation is tight)
F = [Q>=eye(2), 10*eye(2)>=Q, A*Q+Q*A'+B*Y+Y'*B' <= -t*eye(2), 1000 >= t >= 0, 1>=v>=0];
solvesdp([F,100>=Y(:)>=-100],-t,sdpsettings('solver','bmibnb','bmibnb.upper','none'));
* Starting YALMIP global branch & bound.
* Branch-variables : 8
* Upper solver     : none
* Lower solver     : SeDuMi
* LP solver        : GUROBI
 Node       Upper      Gap(%)       Lower    Open
    1 :   -2.278E+02     0.00     -2.278E+02   2  Improved solution  
* Finished.  Cost: -227.8306 Gap: 4.3695e-11

However, the bound on Y turns out to be tight, thus constraining optimality. When I start increasing the bounds, the optimal value increases. Is this problem really well-posed. Looks as if an arbitrarily good solution is possible

solvesdp([F,200>=Y(:)>=-200],-t,sdpsettings('solver','bmibnb','bmibnb.upper','none')); 
* Finished.  Cost: -427.8306 Gap: 2.3316e-11
solvesdp([F,400>=Y(:)>=-400],-t,sdpsettings('solver','bmibnb','bmibnb.upper','none'));
* Finished.  Cost: -827.8306 Gap: 1.2071e-11 
solvesdp([F,2000>=Y(:)>=-2000],-t,sdpsettings('solver','bmibnb','bmibnb.upper','none'));
* Finished.  Cost: -1000 Gap: 1.0051e-11




Slash

unread,
Nov 1, 2013, 10:39:07 AM11/1/13
to yal...@googlegroups.com
Hi

Thank you for the quick response. After I added all the constraints, it seems to have solved that error. It seems I am getting another error, but I shall post that under a separate thread in case I am stuck.

And the example problem I gave above is not well posed. I just tried to get a minimal example to show the problem.

Thanks again
Slash
Reply all
Reply to author
Forward
0 new messages