<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Vorformatiert Zchn";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
span.HTMLVorformatiertZchn
        {mso-style-name:"HTML Vorformatiert Zchn";
        mso-style-priority:99;
        mso-style-link:"HTML Vorformatiert";
        font-family:Consolas;
        color:black;}
span.E-MailFormatvorlage20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.E-MailFormatvorlage21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.E-MailFormatvorlage22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.E-MailFormatvorlage23
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=DE link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><b><span style='color:windowtext;mso-fareast-language:DE'>Von:</span></b><span style='color:windowtext;mso-fareast-language:DE'> Gregor Hendel [mailto:hendel@zib.de] <br><b>Gesendet:</b> Dienstag, 18. Juni 2019 10:38<br><b>An:</b> Büsing, Henrik <h.buesing@fz-juelich.de>; scip@zib.de<br><b>Betreff:</b> Re: [SCIP] MPS Read and Write and Structure Detection<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'>Good morning Henrik,<br><br>may I introduce you to <a href="https://scip.zib.de/doc/html/group__PublicSolutionMethods.php#ga3bd6c0f66c0179c77cf4c708ee2bef45">SCIPprintSol()</a>, a reliable little helper in such situations.<span style='color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal style='margin-bottom:12.0pt'><b><i><span lang=EN-US style='color:#1F497D'>[Büsing, Henrik] Great! Thank you!</span></i></b><span lang=EN-US><br><br>The SCIP documentation is in general a good place to search for information. </span>You should make yourself familiar with the <a href="https://scip.zib.de/doc/html/group__PublicSolutionMethods.php">methods available</a> for  the SCIP_SOL* structure.<br><br>Happy printing,<br>Gregor<span style='font-size:12.0pt;mso-fareast-language:DE'><o:p></o:p></span></p><div><p class=MsoNormal>Am 18.06.19 um 09:12 schrieb "Büsing, Henrik":<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span style='color:#1F497D'>Dear Gregor, </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>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. </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>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. </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'><br>Best, <br>Henrik</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>[1]</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>   SCIP_VAR** vars;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>   vars  = SCIPgetVars(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>   SCIP_SOL* sol;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>   sol = SCIPgetBestSol(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>   for (int i=0; i<3; ++i)</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>   {</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>     cout << "Solution: " << SCIPgetSolVal(scip, sol, vars[i]) << endl;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>   }</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'> </span><o:p></o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='color:windowtext;mso-fareast-language:DE'>Von:</span></b><span style='color:windowtext;mso-fareast-language:DE'> Scip [<a href="mailto:scip-bounces@zib.de">mailto:scip-bounces@zib.de</a>] <b>Im Auftrag von </b>Gregor Hendel<br><b>Gesendet:</b> Montag, 17. Juni 2019 12:44<br><b>An:</b> <a href="mailto:scip@zib.de">scip@zib.de</a><br><b>Betreff:</b> Re: [SCIP] MPS Read and Write and Structure Detection</span><o:p></o:p></p></div></div><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'>Hi Henrik,<br><br>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):<o:p></o:p></p><pre>      /** @brief one binary variable for each field (i,j) on the chess bord<o:p></o:p></pre><pre>       *<o:p></o:p></pre><pre>       * To access variable information (objective value, bounds,<o:p></o:p></pre><pre>       * etc.) use the SCIP_VAR * pointer. Since we want to know the<o:p></o:p></pre><pre>       * value of each variable in the solution, we have to store<o:p></o:p></pre><pre>       * these pointers.<o:p></o:p></pre><pre>       */<o:p></o:p></pre><pre>      std::vector<std::vector<SCIP_VAR *> > _vars;<o:p></o:p></pre><p class=MsoNormal style='margin-bottom:12.0pt'><br>The result of SCIPgetVars() is a 1D-Array, which you should indeed **not** access by a 2D-index.<o:p></o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US>Regarding your question about detection: The mps-format does not preserve decomposition label information. </span>A detected arrowhead structure will be lost. SCIP in its current version does not support reading decompositions.<br>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.<br><br>Cheers,<br>Gregor<br><br><br><br><o:p></o:p></p><div><p class=MsoNormal>Am 17.06.19 um 11:01 schrieb "Büsing, Henrik":<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal>Dear SCIP users, <o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span lang=EN-US>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].</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Could you point out what I am doing wrong while trying to write the MPS-file? <br>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. </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Finally, is there an example on how to use the structure detection of GCG? </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Thank you very much for your help! <br><br>Best, <br>Henrik</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>[1]</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Program received signal SIGSEGV, Segmentation fault.</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>SCIPreaderGetData (reader=reader@entry=0x0)</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>    at /home/henrik/Code/scipoptsuite-6.0.1/scip/src/scip/reader.c:488</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>488            return reader->readerdata;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>[2]</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>// Derived from Queens example by Cornelius Schwarz</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>#include <scip/scip.h></span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>#include <scip/scipdefplugins.h></span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>#include "scip_exception.hpp"</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>#include <iostream></span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>using namespace std;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>/** main function **/</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>int</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>main()</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>{</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   // Define scip pointer and filename</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP* scip;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_READER* reader;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   const char* filename="/home/henrik/JSC/FINE_exampleMpsFiles/toy.MPS";</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   cout << filename  << endl;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_RESULT* result;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   result = new SCIP_RESULT[3];</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   // Create scip environment</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_CALL_EXC(SCIPcreate(& scip));</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   // Load desired plugins</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_CALL_EXC(SCIPincludeDefaultPlugins(scip));</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   // disable scip output to stdout</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIPmessagehdlrSetQuiet(SCIPgetMessagehdlr(scip), TRUE);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   // Read in *.MPS file</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIPreadMps(scip, reader, filename, result, </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>               </span>NULL,NULL,<o:p></o:p></p><p class=MsoNormal>                NULL,NULL, <o:p></o:p></p><p class=MsoNormal>               NULL,NULL<o:p></o:p></p><p class=MsoNormal>                      <span lang=EN-US>);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   // Solve</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_CALL_EXC(SCIPsolve(scip));</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   // Display solution</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_VAR** vars;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   vars  = SCIPgetVars(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_SOL* sol;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   sol = SCIPgetBestSol(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   for (int i=0; i<3; ++i)</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>     for (int j=0; j<3; ++j)</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   {</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>     cout << "Solution: " << SCIPgetSolVal(scip, sol, &vars[i][j]) << endl;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   }</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   int nvars = SCIPgetNVars(scip); </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   int nbinvars = SCIPgetNBinVars(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   int nintvars = SCIPgetNIntVars(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   int nimplvars = SCIPgetNImplVars(scip); </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   int ncontvars =  SCIPgetNContVars(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_Real objscale = 1.0;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_Real objoffset = 0.0;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_VAR** fixedvars = SCIPgetFixedVars(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   int nfixedvars =  SCIPgetNFixedVars(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIP_CONS** conss = SCIPgetConss(scip);</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   int nconss = SCIPgetNConss(scip); </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   const char* name="Toy"; </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   SCIPwriteMps(scip, reader, NULL, name, FALSE, SCIP_OBJSENSE_MINIMIZE,</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>                               objscale, objoffset, vars, nvars, nbinvars, nintvars,</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>                               nimplvars, ncontvars, fixedvars, nfixedvars, conss,</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>                               nconss, result</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>                );</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>   return EXIT_SUCCESS;</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>}</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>-- </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Dipl.-Math. Henrik Büsing</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Jülich Supercomputing Centre</span><o:p></o:p></p><p class=MsoNormal>Institute for Advanced Simulation<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Forschungszentrum Jülich<o:p></o:p></p><p class=MsoNormal>Wilhelm-Johnen-Straße<o:p></o:p></p><p class=MsoNormal><span lang=EN-US>52425 Jülich, Germany</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Phone:  +49-2461-61-9884</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Fax:    +49-2461-61-6656</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>E-Mail: <a href="mailto:H.Buesing@fz-juelich.de">H.Buesing@fz-juelich.de</a></span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>WWW:    <a href="http://www.fz-juelich.de/ias/jsc">http://www.fz-juelich.de/ias/jsc</a></span><o:p></o:p></p><p class=MsoNormal>-------------------------------------------------------------------------------------<o:p></o:p></p><p class=MsoNormal>-------------------------------------------------------------------------------------<o:p></o:p></p><p class=MsoNormal>Forschungszentrum Juelich GmbH<o:p></o:p></p><p class=MsoNormal>52425 Juelich<o:p></o:p></p><p class=MsoNormal>Sitz der Gesellschaft: Juelich<o:p></o:p></p><p class=MsoNormal>Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498<o:p></o:p></p><p class=MsoNormal>Vorsitzender des Aufsichtsrats: MinDir Volker Rieke<o:p></o:p></p><p class=MsoNormal>Geschaeftsfuehrung: Prof. Dr.-Ing. Wolfgang Marquardt (Vorsitzender),<o:p></o:p></p><p class=MsoNormal>Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt,<o:p></o:p></p><p class=MsoNormal>Prof. Dr. Sebastian M. Schmidt<o:p></o:p></p><p class=MsoNormal>-------------------------------------------------------------------------------------<o:p></o:p></p><p class=MsoNormal>-------------------------------------------------------------------------------------<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='font-size:12.0pt'><br><br><br></span><o:p></o:p></p><pre>_______________________________________________<o:p></o:p></pre><pre>Scip mailing list<o:p></o:p></pre><pre><a href="mailto:Scip@zib.de">Scip@zib.de</a><o:p></o:p></pre><pre><a href="https://listserv.zib.de/mailman/listinfo/scip">https://listserv.zib.de/mailman/listinfo/scip</a><o:p></o:p></pre></blockquote><p class=MsoNormal><span style='font-size:12.0pt'> </span><o:p></o:p></p></blockquote><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman",serif;mso-fareast-language:DE'><o:p> </o:p></span></p></div></body></html>