[SCIP] MPS Read and Write and Structure Detection

"Büsing, Henrik" h.buesing at fz-juelich.de
Tue Jun 18 10:51:04 CEST 2019


Von: Gregor Hendel [mailto:hendel at zib.de] 
Gesendet: Dienstag, 18. Juni 2019 10:38
An: Büsing, Henrik <h.buesing at fz-juelich.de>; scip at zib.de
Betreff: Re: [SCIP] MPS Read and Write and Structure Detection

 

Good morning Henrik,

may I introduce you to SCIPprintSol()
<https://scip.zib.de/doc/html/group__PublicSolutionMethods.php#ga3bd6c0f66c0
179c77cf4c708ee2bef45> , a reliable little helper in such situations.

[Büsing, Henrik] Great! Thank you!

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 <mailto: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/576ef4e3/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 7628 bytes
Desc: not available
URL: <http://listserv.zib.de/pipermail/scip/attachments/20190618/576ef4e3/attachment.p7s>


More information about the Scip mailing list