Changeset 1681


Ignore:
Timestamp:
Feb 10, 2011 11:36:02 AM (9 years ago)
Author:
forrest
Message:

allow gmpl report

Location:
trunk/Clp/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Clp/src/CbcOrClpParam.cpp

    r1680 r1681  
    15481548     parameters[numberParameters-1].append("on");
    15491549     parameters[numberParameters-1].append("so!low_halim");
    1550      parameters[numberParameters-1].append("ha!lim_solow(JJF mods)");
     1550     parameters[numberParameters-1].append("lots");
    15511551     //  parameters[numberParameters-1].append("4");
    15521552     //  parameters[numberParameters-1].append("5");
  • trunk/Clp/src/ClpMain.cpp

    r1665 r1681  
    2525#include "CoinMpsIO.hpp"
    2626#include "CoinFileIO.hpp"
     27#ifdef COIN_HAS_GLPK
     28#include "glpk.h"
     29extern glp_tran* cbc_glp_tran;
     30extern glp_prob* cbc_glp_prob;
     31#endif
    2732
    2833#include "ClpFactorization.hpp"
     
    647652                                   ClpSolve::PresolveType presolveType;
    648653                                   ClpSimplex * model2 = models + iModel;
     654                                   ClpSolve solveOptions;
     655                                   if (dualize==4) {
     656                                     solveOptions.setSpecialOption(4, 77);
     657                                     dualize=0;
     658                                   }
    649659                                   if (dualize) {
    650660                                        bool tryIt = true;
     
    671681                                                  model2 = models + iModel;
    672682                                                  dualize = 0;
    673                                              }
     683                                             }
    674684                                        } else {
    675685                                             dualize = 0;
    676686                                        }
    677687                                   }
    678                                    ClpSolve solveOptions;
     688                                   if (preSolveFile)
     689                                        presolveOptions |= 0x40000000;
    679690                                   solveOptions.setPresolveActions(presolveOptions);
    680691                                   solveOptions.setSubstitution(substitution);
     
    722733                                   }
    723734                                   solveOptions.setSolveType(method);
    724                                    if (preSolveFile)
    725                                         presolveOptions |= 0x40000000;
    726                                    solveOptions.setSpecialOption(4, presolveOptions);
    727735                                   solveOptions.setSpecialOption(5, printOptions & 1);
    728736                                   if (doVector) {
     
    961969                                   if (absolutePath) {
    962970                                        fileName = field;
     971                                        int length = field.size();
     972                                        int percent = field.find('%');
     973                                        if (percent < length && percent > 0) {
     974                                             gmpl = 1;
     975                                             fileName = field.substr(0, percent);
     976                                             gmplData = field.substr(percent + 1);
     977                                             if (percent < length - 1)
     978                                                  gmpl = 2; // two files
     979                                             printf("GMPL model file %s and data file %s\n",
     980                                                    fileName.c_str(), gmplData.c_str());
     981                                        }
    963982                                   } else if (field[0] == '~') {
    964983                                        char * environVar = getenv("HOME");
     
    17561775                              break;
    17571776                         case CLP_PARAM_ACTION_SOLUTION:
     1777                         case CLP_PARAM_ACTION_GMPL_SOLUTION:
    17581778                              if (goodModels[iModel]) {
    17591779                                   // get next field
     
    18031823                                   }
    18041824                                   if (fp) {
     1825                                     // See if Glpk
     1826                                     if (type == CLP_PARAM_ACTION_GMPL_SOLUTION) {
     1827                                       int numberRows = models[iModel].getNumRows();
     1828                                       int numberColumns = models[iModel].getNumCols();
     1829                                       int numberGlpkRows=numberRows+1;
     1830                                       if (cbc_glp_prob) {
     1831                                         // from gmpl
     1832                                         numberGlpkRows=glp_get_num_rows(cbc_glp_prob);
     1833                                         if (numberGlpkRows!=numberRows)
     1834                                           printf("Mismatch - cbc %d rows, glpk %d\n",
     1835                                                  numberRows,numberGlpkRows);
     1836                                       }
     1837                                       fprintf(fp,"%d %d\n",numberGlpkRows,
     1838                                               numberColumns);
     1839                                       int iStat = models[iModel].status();
     1840                                       int iStat2 = GLP_UNDEF;
     1841                                       if (iStat == 0) {
     1842                                         // optimal
     1843                                         iStat2 = GLP_FEAS;
     1844                                       } else if (iStat == 1) {
     1845                                         // infeasible
     1846                                         iStat2 = GLP_NOFEAS;
     1847                                       } else if (iStat == 2) {
     1848                                         // unbounded
     1849                                         // leave as 1
     1850                                       } else if (iStat >= 3 && iStat <= 5) {
     1851                                         iStat2 = GLP_FEAS;
     1852                                       }
     1853                                       double objValue = models[iModel].getObjValue()
     1854                                         * models[iModel].getObjSense();
     1855                                       fprintf(fp,"%d 2 %g\n",iStat2,objValue);
     1856                                       if (numberGlpkRows > numberRows) {
     1857                                         // objective as row
     1858                                         fprintf(fp,"4 %g 1.0\n",objValue);
     1859                                       }
     1860                                       int lookup[6]=
     1861                                         {4,1,3,2,4,5};
     1862                                       const double * primalRowSolution =
     1863                                         models[iModel].primalRowSolution();
     1864                                       const double * dualRowSolution =
     1865                                         models[iModel].dualRowSolution();
     1866                                       for (int i=0;i<numberRows;i++) {
     1867                                         fprintf(fp,"%d %g %g\n",lookup[models[iModel].getRowStatus(i)],
     1868                                                 primalRowSolution[i],dualRowSolution[i]);
     1869                                       }
     1870                                       const double * primalColumnSolution =
     1871                                         models[iModel].primalColumnSolution();
     1872                                       const double * dualColumnSolution =
     1873                                         models[iModel].dualColumnSolution();
     1874                                       for (int i=0;i<numberColumns;i++) {
     1875                                         fprintf(fp,"%d %g %g\n",lookup[models[iModel].getColumnStatus(i)],
     1876                                                 primalColumnSolution[i],dualColumnSolution[i]);
     1877                                       }
     1878                                       fclose(fp);
     1879#ifdef COIN_HAS_GLPK
     1880                                       if (cbc_glp_prob) {
     1881                                         glp_read_sol(cbc_glp_prob,fileName.c_str());
     1882                                         glp_mpl_postsolve(cbc_glp_tran,
     1883                                                           cbc_glp_prob,
     1884                                                           GLP_SOL);
     1885                                         // free up as much as possible
     1886                                         glp_free(cbc_glp_prob);
     1887                                         glp_mpl_free_wksp(cbc_glp_tran);
     1888                                         //gmp_free_mem();
     1889                                         /* check that no memory blocks are still allocated */
     1890                                         glp_free_env();
     1891                                       }
     1892#endif
     1893                                       break;
     1894                                     }
    18051895                                        // Write solution header (suggested by Luigi Poderico)
    18061896                                        double objValue = models[iModel].getObjValue() * models[iModel].getObjSense();
Note: See TracChangeset for help on using the changeset viewer.