Changeset 1949 for stable


Ignore:
Timestamp:
Apr 20, 2013 11:00:00 AM (7 years ago)
Author:
forrest
Message:

fix for postsolve should be in stable as well

Location:
stable/1.15/Clp/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • stable/1.15/Clp/src/ClpMain.cpp

    r1931 r1949  
    4343#include "ClpSimplexOther.hpp"
    4444#include "ClpSolve.hpp"
     45#include "ClpMessage.hpp"
    4546#include "ClpPackedMatrix.hpp"
    4647#include "ClpPlusMinusOneMatrix.hpp"
     
    5455#include "CbcOrClpParam.hpp"
    5556#include "CoinSignal.hpp"
     57#include "CoinWarmStartBasis.hpp"
    5658#ifdef ABC_INHERIT
    5759#include "AbcSimplex.hpp"
     
    5961#include "AbcDualRowSteepest.hpp"
    6062#include "AbcDualRowDantzig.hpp"
     63#endif
     64//#define COIN_HAS_ASL
     65#ifdef COIN_HAS_ASL
     66#include "Clp_ampl.h"
    6167#endif
    6268#ifdef DMALLOC
     
    263269          int numberGoodCommands = 0;
    264270          bool * goodModels = new bool[1];
     271          goodModels[0] = false;
     272#ifdef COIN_HAS_ASL
     273          ampl_info info;
     274          int usingAmpl=0;
     275          CoinMessageHandler * generalMessageHandler = models->messageHandler();
     276          generalMessageHandler->setPrefix(false);
     277          CoinMessages generalMessages = models->messages();
     278          char generalPrint[10000];
     279          {
     280            bool noPrinting_=false;
     281            memset(&info, 0, sizeof(info));
     282            if (argc > 2 && !strcmp(argv[2], "-AMPL")) {
     283              usingAmpl = 1;
     284              // see if log in list
     285              noPrinting_ = true;
     286              for (int i = 1; i < argc; i++) {
     287                    if (!strncmp(argv[i], "log", 3)) {
     288                        const char * equals = strchr(argv[i], '=');
     289                        if (equals && atoi(equals + 1) > 0) {
     290                            noPrinting_ = false;
     291                            info.logLevel = atoi(equals + 1);
     292                            int log = whichParam(CLP_PARAM_INT_LOGLEVEL, numberParameters, parameters);
     293                            parameters[log].setIntValue(info.logLevel);
     294                            // mark so won't be overWritten
     295                            info.numberRows = -1234567;
     296                            break;
     297                        }
     298                    }
     299                }
     300
     301                union {
     302                    void * voidModel;
     303                    CoinModel * model;
     304                } coinModelStart;
     305                coinModelStart.model = NULL;
     306                int returnCode = readAmpl(&info, argc, const_cast<char **>(argv), & coinModelStart.voidModel);
     307                if (returnCode)
     308                    return returnCode;
     309                CbcOrClpRead_mode = 2; // so will start with parameters
     310                // see if log in list (including environment)
     311                for (int i = 1; i < info.numberArguments; i++) {
     312                    if (!strcmp(info.arguments[i], "log")) {
     313                        if (i < info.numberArguments - 1 && atoi(info.arguments[i+1]) > 0)
     314                            noPrinting_ = false;
     315                        break;
     316                    }
     317                }
     318                if (noPrinting_) {
     319                    models->messageHandler()->setLogLevel(0);
     320                    setCbcOrClpPrinting(false);
     321                }
     322                if (!noPrinting_)
     323                    printf("%d rows, %d columns and %d elements\n",
     324                           info.numberRows, info.numberColumns, info.numberElements);
     325                    models->loadProblem(info.numberColumns, info.numberRows, info.starts,
     326                                        info.rows, info.elements,
     327                                        info.columnLower, info.columnUpper, info.objective,
     328                                        info.rowLower, info.rowUpper);
     329                // If we had a solution use it
     330                if (info.primalSolution) {
     331                    models->setColSolution(info.primalSolution);
     332                }
     333                // status
     334                if (info.rowStatus) {
     335                    unsigned char * statusArray = models->statusArray();
     336                    int i;
     337                    for (i = 0; i < info.numberColumns; i++)
     338                        statusArray[i] = static_cast<unsigned char>(info.columnStatus[i]);
     339                    statusArray += info.numberColumns;
     340                    for (i = 0; i < info.numberRows; i++)
     341                        statusArray[i] = static_cast<unsigned char>(info.rowStatus[i]);
     342                }
     343                freeArrays1(&info);
     344                // modify objective if necessary
     345                models->setOptimizationDirection(info.direction);
     346                models->setObjectiveOffset(info.offset);
     347                if (info.offset) {
     348                    sprintf(generalPrint, "Ampl objective offset is %g",
     349                            info.offset);
     350                    generalMessageHandler->message(CLP_GENERAL, generalMessages)
     351                    << generalPrint
     352                    << CoinMessageEol;
     353                }
     354                goodModels[0] = true;
     355                // change argc etc
     356                argc = info.numberArguments;
     357                argv = const_cast<const char **>(info.arguments);
     358            }
     359        }
     360#endif
    265361
    266362          // Hidden stuff for barrier
     
    273369
    274370          int iModel = 0;
    275           goodModels[0] = false;
    276371          //models[0].scaling(1);
    277372          //models[0].setDualBound(1.0e6);
     
    374469                              verbose &= ~8;
    375470                         }
     471#ifdef COIN_HAS_ASL
     472                         if (verbose < 4 && usingAmpl)
     473                           verbose += 4;
     474#endif
    376475                         if (verbose)
    377476                              maxAcross = 1;
     
    683782                    } else {
    684783                         // action
    685                          if (type == CLP_PARAM_ACTION_EXIT)
    686                               break; // stop all
     784                         if (type == CLP_PARAM_ACTION_EXIT) {
     785#ifdef COIN_HAS_ASL
     786                           if (usingAmpl) {
     787                             writeAmpl(&info);
     788                             freeArrays2(&info);
     789                             freeArgs(&info);
     790                           }
     791#endif
     792                           break; // stop all
     793                         }
    687794                         switch (type) {
    688795                         case CLP_PARAM_ACTION_DUALSIMPLEX:
  • stable/1.15/Clp/src/ClpSimplex.cpp

    r1928 r1949  
    71807180ClpSimplex::readLp(const char *filename, const double epsilon )
    71817181{
    7182      FILE *fp = fopen(filename, "r");
     7182  FILE *fp;
     7183  if (strcmp(filename,"-"))
     7184    fp = fopen(filename, "r");
     7185  else
     7186    fp = stdin;
    71837187
    71847188     if(!fp) {
     
    98739877                      sumDualInfeasibilities_ += fabs(dualValue) - dualTolerance_;
    98749878                         numberDualInfeasibilities_ ++;
    9875                          if (fabs(dualValue) > 1000.0 * dualTolerance)
    9876                            setColumnStatus(iColumn,superBasic);
     9879                         //if (fabs(dualValue) > 1000.0 * dualTolerance)
     9880                         //setColumnStatus(iColumn,superBasic); Maybe on a switch
    98779881                    }
    98789882                    break;
Note: See TracChangeset for help on using the changeset viewer.