Changeset 990 for branches


Ignore:
Timestamp:
Mar 14, 2007 7:55:35 AM (13 years ago)
Author:
forrest
Message:

add lpio and correct tightenbounds

Location:
branches/devel/Clp/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/devel/Clp/src/ClpMain.cpp

    r989 r990  
    794794                fileName = "-";
    795795              } else {
     796                // See if .lp
     797                {
     798                  const char * c_name = field.c_str();
     799                  int length = strlen(c_name);
     800                  if (length>3&&!strncmp(c_name+length-3,".lp",3))
     801                    gmpl=-1; // .lp
     802                }
    796803                bool absolutePath;
    797804                if (dirsep=='/') {
     
    818825                } else {
    819826                  fileName = directory+field;
    820                   // See if gmpl (model & data)
     827                  // See if gmpl (model & data) - or even lp file
    821828                  int length = field.size();
    822829                  int percent = field.find('%');
     
    829836                    printf("GMPL model file %s and data file %s\n",
    830837                           fileName.c_str(),gmplData.c_str());
    831                   }
     838                  }
    832839                }
    833840                std::string name=fileName;
     
    855862                                                 keepImportNames!=0,
    856863                                                 allowImportErrors!=0);
    857                 else
     864                else if (gmpl>0)
    858865                  status= models[iModel].readGMPL(fileName.c_str(),
    859866                                                  (gmpl==2) ? gmplData.c_str() : NULL,
    860867                                                  keepImportNames!=0);
     868                else
     869                  status= models[iModel].readLp(fileName.c_str(),1.0e-12);
    861870                if (!status||(status>0&&allowImportErrors)) {
    862871                  goodModels[iModel]=true;
  • branches/devel/Clp/src/ClpSimplex.cpp

    r989 r990  
    2828#include "ClpHelperFunctions.hpp"
    2929#include "CoinModel.hpp"
     30#include "CoinLpIO.hpp"
    3031#include <cfloat>
    3132
     
    42284229                if (newBound > nowLower + 1.0e-12&&newBound>-large) {
    42294230                  // Tighten the lower bound
    4230                   columnLower_[iColumn] = newBound;
    42314231                  numberChanged++;
    42324232                  // check infeasible (relaxed)
    4233                   if (nowUpper - newBound <
    4234                       -100.0*tolerance) {
    4235                     numberInfeasible++;
     4233                  if (nowUpper < newBound) {
     4234                    if (nowUpper - newBound <
     4235                        -100.0*tolerance)
     4236                      numberInfeasible++;
     4237                    else
     4238                      newBound=nowUpper;
    42364239                  }
     4240                  columnLower_[iColumn] = newBound;
    42374241                  // adjust
    42384242                  double now;
     
    42754279                if (newBound < nowUpper - 1.0e-12&&newBound<large) {
    42764280                  // Tighten the upper bound
    4277                   columnUpper_[iColumn] = newBound;
    42784281                  numberChanged++;
    42794282                  // check infeasible (relaxed)
    4280                   if (newBound - nowLower <
    4281                       -100.0*tolerance) {
    4282                     numberInfeasible++;
     4283                  if (nowLower > newBound) {
     4284                    if (newBound - nowLower <
     4285                        -100.0*tolerance)
     4286                      numberInfeasible++;
     4287                    else
     4288                      newBound=nowLower;
    42834289                  }
     4290                  columnUpper_[iColumn] = newBound;
    42844291                  // adjust
    42854292                  double now;
     
    43244331                if (newBound < nowUpper - 1.0e-12&&newBound<large) {
    43254332                  // Tighten the upper bound
    4326                   columnUpper_[iColumn] = newBound;
    43274333                  numberChanged++;
    43284334                  // check infeasible (relaxed)
    4329                   if (newBound - nowLower <
    4330                       -100.0*tolerance) {
    4331                     numberInfeasible++;
     4335                  if (nowLower > newBound) {
     4336                    if (newBound - nowLower <
     4337                        -100.0*tolerance)
     4338                      numberInfeasible++;
     4339                    else
     4340                      newBound=nowLower;
    43324341                  }
     4342                  columnUpper_[iColumn] = newBound;
    43334343                  // adjust
    43344344                  double now;
     
    43714381                if (newBound > nowLower + 1.0e-12&&newBound>-large) {
    43724382                  // Tighten the lower bound
    4373                   columnLower_[iColumn] = newBound;
    43744383                  numberChanged++;
    43754384                  // check infeasible (relaxed)
    4376                   if (nowUpper - newBound <
    4377                       -100.0*tolerance) {
    4378                     numberInfeasible++;
     4385                  if (nowUpper < newBound) {
     4386                    if (nowUpper - newBound <
     4387                        -100.0*tolerance)
     4388                      numberInfeasible++;
     4389                    else
     4390                      newBound=nowUpper;
    43794391                  }
     4392                  columnLower_[iColumn] = newBound;
    43804393                  // adjust
    43814394                  double now;
     
    60256038  createStatus();
    60266039  return status;
     6040}
     6041// Read file in LP format from file with name filename.
     6042int
     6043ClpSimplex::readLp(const char *filename, const double epsilon )
     6044{
     6045  FILE *fp = fopen(filename, "r");
     6046
     6047  if(!fp) {
     6048    printf("### ERROR: ClpSimplex::readLp():  Unable to open file %s for reading\n",
     6049           filename);
     6050    return(1);
     6051  }
     6052  CoinLpIO m;
     6053  m.readLp(fp, epsilon);
     6054  fclose(fp);
     6055 
     6056  // set problem name
     6057  setStrParam(ClpProbName, m.getProblemName());
     6058 
     6059  // no errors
     6060  loadProblem(*m.getMatrixByRow(), m.getColLower(), m.getColUpper(),
     6061              m.getObjCoefficients(), m.getRowLower(), m.getRowUpper());
     6062 
     6063  if (m.integerColumns()) {
     6064    integerType_ = new char[numberColumns_];
     6065    CoinMemcpyN(m.integerColumns(),numberColumns_,integerType_);
     6066  } else {
     6067    integerType_ = NULL;
     6068  }
     6069  createStatus();
     6070  return 0;
    60276071}
    60286072#endif
  • branches/devel/Clp/src/ClpSimplex.hpp

    r989 r990  
    188188  int readGMPL(const char *filename,const char * dataName,
    189189               bool keepNames=false);
     190  /// Read file in LP format from file with name filename.
     191  /// See class CoinLpIO for description of this format.
     192  int readLp(const char *filename, const double epsilon = 1e-5);
    190193  /** Borrow model.  This is so we dont have to copy large amounts
    191194      of data around.  It assumes a derived class wants to overwrite
Note: See TracChangeset for help on using the changeset viewer.