Reference to non-existent field 'penbmi'.

198 views
Skip to first unread message

Roberto

unread,
Dec 3, 2014, 4:54:04 AM12/3/14
to yal...@googlegroups.com
I just installed PENBMI and PENSDP, the TOMLAB version to be more specific. I wish I could install the regular version but the guys at Penopt don't answer to my emails... anyway, I can't use such solvers with Yalmip.
First of all, here is a snippet of the output of ver:
MATLAB Version: 8.4.0.150421 (R2014b)
Operating System: Microsoft Windows 8.1 Version 6.3 (Build 9600)
I have the 64-bit versions. Tomlab is 64-bit, too. I can tell because the mex files have .mexw64 extensions. The output of yalmip('version') instead is 20141127.
If i run yalmiptest I can see that both PENBMI and PENSDP are found by yalmip. Unfortunately the Bilinear SDP test fails and I get the following error:
Unknown problem in solver (try using 'debug'-flag in sdpsettings) (Reference to non-existent field 'penbmi'.)
I also tryed to run the examples in http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Tutorials.GlobalOptimization in which PENMBI and PENSDP are used as upper solver and lower solver respectively for BMIBNB but once again I get the "non-existent field" error. What can i do? I have no clue. Thanks in advance.

Johan Löfberg

unread,
Dec 3, 2014, 4:55:52 AM12/3/14
to yal...@googlegroups.com
TOMLAB version not supported.

Johan Löfberg

unread,
Dec 3, 2014, 4:59:48 AM12/3/14
to yal...@googlegroups.com
Install PENLAB, the free version of PENXXX

Roberto

unread,
Dec 3, 2014, 5:08:01 AM12/3/14
to yal...@googlegroups.com
I wish I could! PENLAB comes only with .mexw32 mex-files. I tried to recompile for 64-bit but I failed (I will keep on trying, anyway).
Moreover, the performance of PENLAB should be greatly outclassed by PENXXX, as far as I know.
I think I will have to install a 32-bit version of matlab + penlab :-/
Thanks for your super-fast reply!

Johan Löfberg

unread,
Dec 3, 2014, 5:12:12 AM12/3/14
to yal...@googlegroups.com
I've emailed you win64 binaries

Johan Löfberg

unread,
Dec 3, 2014, 5:13:47 AM12/3/14
to yal...@googlegroups.com
Or perhaps not. The email you used to register does not work. Email me and I'll hook you up with win64 binaries

Roberto

unread,
Dec 3, 2014, 7:35:45 AM12/3/14
to yal...@googlegroups.com
Thanks for the binaries but actually you sent me a distribution which I already have.
In fact the mex files located in penlab/source come in four flavours (.mexw32, .mexa64, .mexw64 and .mexmaci) but the others is /penlab/utilites are .mexw32 only. This is the output I get from penlabtest
Checking if all components are present...
 
Checking if all mex files are compiled & work...
mexsumsparse is ok
mextrcolumn is ok
mextrdsdsmat is ok
Warning: amplf is not compiled.
... AMPL-NLP interface will not work
... please consult manual how to compile mex
... some of the tests will be skipped.
 
Checking if readsdpa() work...
 
Running sample LMI, BMI and PMI problems...
control1            : ok
theta1              : ok
truss1              : ok
mcp100              : ok
bmi_example         : ok
bmi_f4e             : ok
pmi_example         : ok
pmi_AC1             : ok
pmi_NN4             : ok
 
SKIPPING sample NLP problems from AMPL
 

ans =

    -1
For some reasons I thought that AMPL interface was the issue but now I realize that I don't care about NLP problems. Sorry that I bothered you!
My penlab is still not working, so I'll do some other tests and I will update this thread as soon as I can.

Johan Löfberg

unread,
Dec 3, 2014, 7:46:29 AM12/3/14
to yal...@googlegroups.com
Ouch, just discovered this has nothing to do with binaries. The options in sdpsettings is not setup correctly (I refactored that code recently, and never tested penlab)

Add the following to, e.g.,  line 103 sdpsettings
    options.penbmi = setup_penbmi_options;
   
Names = appendOptionNames(Names,options.penbmi,'penbmi');
   
    options
.penlab = setup_penlab_options;
   
Names = appendOptionNames(Names,options.penlab,'penlab');



Johan Löfberg

unread,
Dec 3, 2014, 7:50:54 AM12/3/14
to yal...@googlegroups.com
and change the definition of setup_penlab_options to

function ops = setup_penlab_options
try
    ops
= penlab.defopts(1);
catch
    ops
= [];
end


Roberto

unread,
Dec 3, 2014, 8:24:03 AM12/3/14
to yal...@googlegroups.com
Apparently it works now!
I run yalmiptest and the first time Bilinear SDP failed due to numerical problems but PENBMI/TOMLAB has been chosen as solver. I removed Tomlab from the path and then Penlab started but I've got many messages like
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate.
RCOND =  very small numbers, ~ 10^-20
> In penlab.solve_chol at 86
  In penlab.unconstr_min at 52
  In penlab.solve at 197
  In callpenlabbmi at 31
  In solvesdp at 352
  In yalmiptest>bmitest at 742
  In yalmiptest at 226 
Matlab has been Busy for some minutes then I CTRL+Ced it.


Johan Löfberg

unread,
Dec 3, 2014, 9:21:31 AM12/3/14
to yal...@googlegroups.com
Then things work as expected. The stall in one of the tests has been reported to the developers

Roberto

unread,
Dec 3, 2014, 9:32:39 AM12/3/14
to yal...@googlegroups.com
Ok, very good.
I also tried to run the examples in http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Tutorials.GlobalOptimization and bmibnb works with sdpt3 but not with mosek (as lower solver). I know that I'm off-topic now but let me paste the error messages, in case you are interested
Index exceeds matrix dimensions.

Error in etime (line 40)
t = 86400*(datenummx(t1(:,1:3)) - datenummx(t0(:,1:3))) + ...

Error in callmosek>call_mosek_sdp (line 351)
solvertime = etime(clock,solvertime);

Error in callmosek>call_mosek_lpqpsocpsdp (line 91)
    [x,D_struc,problem,r,res,solvertime,prob] = call_mosek_sdp(model);

Error in callmosek (line 50)
    [x,D_struc,problem,r,res,solvertime,prob] = call_mosek_lpqpsocpsdp(model);
   
Error in root_node_tighten (line 40)
            output = feval(lowersolver,removenonlinearity(p));

Error in bmibnb (line 259)
p = root_node_tighten(p,upper);

Error in solvesdp (line 349)
    eval(['output = ' solver.call '(interfacedata);']);

Error in optimize (line 31)
varargout{:} = solvesdp(varargin{:});

Roberto

unread,
Dec 3, 2014, 9:41:06 AM12/3/14
to yal...@googlegroups.com
Just one question about the Bilinear SDP test. Why don't you consider adding the constraint [-1e8 <= P(:) <= 1e8] to the test, as suggested in https://groups.google.com/d/msg/yalmip/DQqpTN8UYnw/OSuA7jfDbt0J ?

Johan Löfberg

unread,
Dec 3, 2014, 11:02:13 AM12/3/14
to yal...@googlegroups.com
Yikes. Remove line 351 in callmosek.m

Johan Löfberg

unread,
Dec 3, 2014, 11:06:17 AM12/3/14
to yal...@googlegroups.com
Adding those bounds (which I never would recommend as it easily destroys numerics with huge numbers like that) is something Sermsak adds to perturb the solution path in penbmi. One could nudge penbmi in various directions in a gazillions ways. BMIs are intractable in general, there is no guaranteed way to ensure it will perform well.

Roberto

unread,
Dec 3, 2014, 11:42:02 AM12/3/14
to yal...@googlegroups.com
Now Mosek works fine, too.
About the Bilinears SDP test, thanks for your answer, but why don't you completely change the test-case, instead? Perhaps the one that you implemented is a very classical BMI minimization problem, I don't know, but as a loyal yalmip user :) I would like a yalmiptest.m that actually displays an output (which you don't get hitting ctrl+c). A workaround is to remove penlab from the path before running yamiptest, but I'm sure that there are many BMI minimization problems out there that penlab can solve fine.
I would like to make clear that I don't want to criticize your great work, which I appreciate very much (that's why I'm always glad to give my extra-small contribution by reporting bugs, in the rare chance that I run into one).

Johan Löfberg

unread,
Dec 3, 2014, 11:45:27 AM12/3/14
to yal...@googlegroups.com
Sure, I could do that, never really bothered about this. The test-cases have discovered a large amount of solver bugs (as the problems typically are too simple) and normally the developers have fixed these bugs after reporting them. Not in this case though...
Reply all
Reply to author
Forward
0 new messages