[SCIP] MPS Read and Write and Structure Detection
Gregor Hendel
hendel at zib.de
Tue Jun 18 10:37:47 CEST 2019
Good morning Henrik,
may I introduce you to SCIPprintSol()
<https://scip.zib.de/doc/html/group__PublicSolutionMethods.php#ga3bd6c0f66c0179c77cf4c708ee2bef45>,
a reliable little helper in such situations.
The SCIP documentation is in general a good place to search for
information. You should make yourself familiar with the methods
available
<https://scip.zib.de/doc/html/group__PublicSolutionMethods.php> for the
SCIP_SOL* structure.
Happy printing,
Gregor
Am 18.06.19 um 09:12 schrieb "Büsing, Henrik":
>
> Dear Gregor,
>
> Thank you for your answer! I am still unsure how to display the
> solution correctly. I am using the code [1], but this only gives the
> first value of the solution three times.
>
> Regarding what we would like to do: Our aim is to use hardware with
> distributed memory to solve LPs and MIPs. I have problems in
> MPS-format and would like to detect a block-structure automatically to
> solve the different blocks in parallel.
>
>
> Best,
> Henrik
>
> [1]
>
> SCIP_VAR** vars;
>
> vars = SCIPgetVars(scip);
>
> SCIP_SOL* sol;
>
> sol = SCIPgetBestSol(scip);
>
> for (int i=0; i<3; ++i)
>
> {
>
> cout << "Solution: " << SCIPgetSolVal(scip, sol, vars[i]) << endl;
>
> }
>
> *Von:*Scip [mailto:scip-bounces at zib.de] *Im Auftrag von *Gregor Hendel
> *Gesendet:* Montag, 17. Juni 2019 12:44
> *An:* scip at zib.de
> *Betreff:* Re: [SCIP] MPS Read and Write and Structure Detection
>
> Hi Henrik,
>
> the queens example (introd)uses a data structure "QueensSolver" that
> stores variables in a 2D array, which is a very intuitive
> representation of an n-by-n checkers board. Make sure you read the
> comments when you start working with an example (queens.hpp):
>
> /** @brief one binary variable for each field (i,j) on the chess bord
> *
> * To access variable information (objective value, bounds,
> * etc.) use the SCIP_VAR * pointer. Since we want to know the
> * value of each variable in the solution, we have to store
> * these pointers.
> */
> std::vector<std::vector<SCIP_VAR *> > _vars;
>
>
> The result of SCIPgetVars() is a 1D-Array, which you should indeed
> **not** access by a 2D-index.
>
> Regarding your question about detection: The mps-format does not
> preserve decomposition label information. A detected arrowhead
> structure will be lost. SCIP in its current version does not support
> reading decompositions.
> It would be good if you could elaborate a little bit more on what you
> are trying to achieve, so that the SCIP and GCG team can give you a
> better suggestion how to pursue that.
>
> Cheers,
> Gregor
>
>
> Am 17.06.19 um 11:01 schrieb "Büsing, Henrik":
>
> Dear SCIP users,
>
> I would like to read in an MPS-file, detect a possible arrowhead
> structure via dec_hcgpartition.cpp and then write the MPS-file
> with the new structure. I was able to read in an MPS-file and
> solve it, but I get a segmentation fault while writing the
> MPS-file (see [2] for the code). When running in debugger I get
> error [1].
>
> Could you point out what I am doing wrong while trying to write
> the MPS-file?
> Additionally, why is vars two-dimensional? Should this not be just
> a long array with all the variables in it? How do I print the
> solution in a correct way? A nested loop over i and j does not
> honor the sparse structure of the constraint matrix A.
>
> Finally, is there an example on how to use the structure detection
> of GCG?
>
> Thank you very much for your help!
>
> Best,
> Henrik
>
> [1]
>
> Program received signal SIGSEGV, Segmentation fault.
>
> SCIPreaderGetData (reader=reader at entry=0x0)
>
> at /home/henrik/Code/scipoptsuite-6.0.1/scip/src/scip/reader.c:488
>
> 488 return reader->readerdata;
>
> [2]
>
> // Derived from Queens example by Cornelius Schwarz
>
> #include <scip/scip.h>
>
> #include <scip/scipdefplugins.h>
>
> #include "scip_exception.hpp"
>
> #include <iostream>
>
> using namespace std;
>
> /** main function **/
>
> int
>
> main()
>
> {
>
> // Define scip pointer and filename
>
> SCIP* scip;
>
> SCIP_READER* reader;
>
> const char*
> filename="/home/henrik/JSC/FINE_exampleMpsFiles/toy.MPS";
>
> cout << filename << endl;
>
> SCIP_RESULT* result;
>
> result = new SCIP_RESULT[3];
>
> // Create scip environment
>
> SCIP_CALL_EXC(SCIPcreate(& scip));
>
> // Load desired plugins
>
> SCIP_CALL_EXC(SCIPincludeDefaultPlugins(scip));
>
> // disable scip output to stdout
>
> SCIPmessagehdlrSetQuiet(SCIPgetMessagehdlr(scip), TRUE);
>
> // Read in *.MPS file
>
> SCIPreadMps(scip, reader, filename, result,
>
> NULL,NULL,
>
> NULL,NULL,
>
> NULL,NULL
>
> );
>
> // Solve
>
> SCIP_CALL_EXC(SCIPsolve(scip));
>
> // Display solution
>
> SCIP_VAR** vars;
>
> vars = SCIPgetVars(scip);
>
> SCIP_SOL* sol;
>
> sol = SCIPgetBestSol(scip);
>
> for (int i=0; i<3; ++i)
>
> for (int j=0; j<3; ++j)
>
> {
>
> cout << "Solution: " << SCIPgetSolVal(scip, sol, &vars[i][j])
> << endl;
>
> }
>
> int nvars = SCIPgetNVars(scip);
>
> int nbinvars = SCIPgetNBinVars(scip);
>
> int nintvars = SCIPgetNIntVars(scip);
>
> int nimplvars = SCIPgetNImplVars(scip);
>
> int ncontvars = SCIPgetNContVars(scip);
>
> SCIP_Real objscale = 1.0;
>
> SCIP_Real objoffset = 0.0;
>
> SCIP_VAR** fixedvars = SCIPgetFixedVars(scip);
>
> int nfixedvars = SCIPgetNFixedVars(scip);
>
> SCIP_CONS** conss = SCIPgetConss(scip);
>
> int nconss = SCIPgetNConss(scip);
>
> const char* name="Toy";
>
> SCIPwriteMps(scip, reader, NULL, name, FALSE,
> SCIP_OBJSENSE_MINIMIZE,
>
> objscale, objoffset, vars, nvars, nbinvars, nintvars,
>
> nimplvars, ncontvars, fixedvars, nfixedvars, conss,
>
> nconss, result
>
> );
>
> return EXIT_SUCCESS;
>
> }
>
> --
>
> Dipl.-Math. Henrik Büsing
>
> Jülich Supercomputing Centre
>
> Institute for Advanced Simulation
>
> Forschungszentrum Jülich
>
> Wilhelm-Johnen-Straße
>
> 52425 Jülich, Germany
>
> Phone: +49-2461-61-9884
>
> Fax: +49-2461-61-6656
>
> E-Mail: H.Buesing at fz-juelich.de <mailto:H.Buesing at fz-juelich.de>
>
> WWW: http://www.fz-juelich.de/ias/jsc
>
> -------------------------------------------------------------------------------------
>
> -------------------------------------------------------------------------------------
>
> Forschungszentrum Juelich GmbH
>
> 52425 Juelich
>
> Sitz der Gesellschaft: Juelich
>
> Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
>
> Vorsitzender des Aufsichtsrats: MinDir Volker Rieke
>
> Geschaeftsfuehrung: Prof. Dr.-Ing. Wolfgang Marquardt (Vorsitzender),
>
> Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt,
>
> Prof. Dr. Sebastian M. Schmidt
>
> -------------------------------------------------------------------------------------
>
> -------------------------------------------------------------------------------------
>
>
>
> _______________________________________________
>
> Scip mailing list
>
> Scip at zib.de <mailto:Scip at zib.de>
>
> https://listserv.zib.de/mailman/listinfo/scip
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20190618/6f0c977b/attachment.html>
More information about the Scip
mailing list