Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

(extended) MPS file reader

Author
Thorsten Koch
Tobias Achterberg
Marc Pfetsch
Stefan Heinz
Stefan Vigerske
Michael Winkler

This reader/writer handles MPS files in extended MPS format, as it is used by CPLEX. In the extended format the limits on variable name lengths and coefficients are considerably relaxed. The columns in the format are then separated by whitespaces.

Definition in file reader_mps.c.

#include "blockmemshell/memory.h"
#include <ctype.h>
#include "scip/cons_and.h"
#include "scip/cons_bounddisjunction.h"
#include "scip/cons_nonlinear.h"
#include "scip/cons_indicator.h"
#include "scip/cons_knapsack.h"
#include "scip/cons_linear.h"
#include "scip/cons_logicor.h"
#include "scip/cons_setppc.h"
#include "scip/cons_sos1.h"
#include "scip/cons_sos2.h"
#include "scip/cons_varbound.h"
#include "scip/pub_cons.h"
#include "scip/pub_fileio.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/pub_misc_sort.h"
#include "scip/pub_reader.h"
#include "scip/pub_var.h"
#include "scip/reader_mps.h"
#include "scip/scip_cons.h"
#include "scip/scip_mem.h"
#include "scip/scip_message.h"
#include "scip/scip_numerics.h"
#include "scip/scip_param.h"
#include "scip/scip_prob.h"
#include "scip/scip_reader.h"
#include "scip/scip_solvingstats.h"
#include "scip/scip_var.h"
#include <stdlib.h>
#include <string.h>

Go to the source code of this file.

Data Structures

struct  ConsNameFreq
 

Macros

#define READER_NAME   "mpsreader"
 
#define READER_DESC   "file reader for MIQPs in IBM's Mathematical Programming System format"
 
#define READER_EXTENSION   "mps"
 
#define DEFAULT_LINEARIZE_ANDS   TRUE
 
#define DEFAULT_AGGRLINEARIZATION_ANDS   TRUE
 
#define MPS_MAX_LINELEN   1024
 
#define MPS_MAX_NAMELEN   256
 
#define MPS_MAX_VALUELEN   26
 
#define MPS_MAX_FIELDLEN   20
 
#define PATCH_CHAR   '_'
 
#define BLANK   ' '
 

Typedefs

typedef enum MpsSection MPSSECTION
 
typedef struct MpsInput MPSINPUT
 
typedef struct SparseMatrix SPARSEMATRIX
 
typedef struct ConsNameFreq CONSNAMEFREQ
 

Enumerations

enum  MpsSection {
  MPS_NAME,
  MPS_OBJSEN,
  MPS_OBJNAME,
  MPS_ROWS,
  MPS_USERCUTS,
  MPS_LAZYCONS,
  MPS_COLUMNS,
  MPS_RHS,
  MPS_RANGES,
  MPS_BOUNDS,
  MPS_SOS,
  MPS_QUADOBJ,
  MPS_QMATRIX,
  MPS_QCMATRIX,
  MPS_INDICATORS,
  MPS_ENDATA
}
 

Functions

static SCIP_RETCODE mpsinputCreate (SCIP *scip, MPSINPUT **mpsi, SCIP_FILE *fp)
 
static void mpsinputFree (SCIP *scip, MPSINPUT **mpsi)
 
static MPSSECTION mpsinputSection (const MPSINPUT *mpsi)
 
static const char * mpsinputField0 (const MPSINPUT *mpsi)
 
static const char * mpsinputField1 (const MPSINPUT *mpsi)
 
static const char * mpsinputField2 (const MPSINPUT *mpsi)
 
static const char * mpsinputField3 (const MPSINPUT *mpsi)
 
static const char * mpsinputField4 (const MPSINPUT *mpsi)
 
static const char * mpsinputField5 (const MPSINPUT *mpsi)
 
static const char * mpsinputObjname (const MPSINPUT *mpsi)
 
static SCIP_OBJSENSE mpsinputObjsense (const MPSINPUT *mpsi)
 
static SCIP_Bool mpsinputHasError (const MPSINPUT *mpsi)
 
static SCIP_Bool mpsinputIsInteger (const MPSINPUT *mpsi)
 
static void mpsinputSetSection (MPSINPUT *mpsi, MPSSECTION section)
 
static void mpsinputSetProbname (MPSINPUT *mpsi, const char *probname)
 
static void mpsinputSetObjname (MPSINPUT *mpsi, const char *objname)
 
static void mpsinputSetObjsense (MPSINPUT *mpsi, SCIP_OBJSENSE sense)
 
static void mpsinputSyntaxerror (MPSINPUT *mpsi)
 
static void mpsinputEntryIgnored (SCIP *scip, MPSINPUT *mpsi, const char *what, const char *what_name, const char *entity, const char *entity_name, SCIP_VERBLEVEL verblevel)
 
static void clearFrom (char *buf, unsigned int pos)
 
static void patchField (char *buf, int beg, int end)
 
static SCIP_Bool mpsinputReadLine (MPSINPUT *mpsi)
 
static void mpsinputInsertField4 (MPSINPUT *mpsi, const char *str)
 
static void mpsinputInsertName (MPSINPUT *mpsi, const char *name, SCIP_Bool second)
 
static SCIP_RETCODE addVarNameToStorage (SCIP *scip, const char ***varnames, int *varnamessize, int *nvars, const char *colname)
 
static SCIP_RETCODE addConsNameToStorage (SCIP *scip, const char ***consnames, int *consnamessize, int *ncons, const char *rowname)
 
static SCIP_RETCODE readName (SCIP *scip, MPSINPUT *mpsi)
 
static SCIP_RETCODE readObjsen (SCIP *scip, MPSINPUT *mpsi)
 
static SCIP_RETCODE readObjname (SCIP *scip, MPSINPUT *mpsi)
 
static SCIP_RETCODE readRows (MPSINPUT *mpsi, SCIP *scip, const char ***consnames, int *consnamessize, int *nconsnames)
 
static SCIP_RETCODE readCols (MPSINPUT *mpsi, SCIP *scip, const char ***varnames, int *varnamessize, int *nvarnames)
 
static SCIP_RETCODE readRhs (MPSINPUT *mpsi, SCIP *scip)
 
static SCIP_RETCODE readRanges (MPSINPUT *mpsi, SCIP *scip)
 
static SCIP_RETCODE readBounds (MPSINPUT *mpsi, SCIP *scip)
 
static SCIP_RETCODE readSOS (MPSINPUT *mpsi, SCIP *scip)
 
static SCIP_RETCODE readQMatrix (MPSINPUT *mpsi, SCIP_Bool isQuadObj, SCIP *scip)
 
static SCIP_RETCODE readQCMatrix (MPSINPUT *mpsi, SCIP *scip)
 
static SCIP_RETCODE readIndicators (MPSINPUT *mpsi, SCIP *scip)
 
static SCIP_RETCODE readMps (SCIP *scip, const char *filename, const char ***varnames, const char ***consnames, int *varnamessize, int *consnamessize, int *nvarnames, int *nconsnames)
 
static SCIP_DECL_HASHGETKEY (hashGetKeyNamefreq)
 
static SCIP_DECL_HASHKEYEQ (hashKeyEqString)
 
static SCIP_DECL_HASHGETKEY (hashGetKeyVar)
 
static SCIP_DECL_HASHKEYEQ (hashKeyEqVar)
 
static SCIP_DECL_HASHKEYVAL (hashKeyValVar)
 
static unsigned int computeFieldWidth (unsigned int width)
 
static void printRecord (SCIP *scip, FILE *file, const char *col1, const char *col2, unsigned int maxnamelen)
 
static void printStart (SCIP *scip, FILE *file, const char *col1, const char *col2, int maxnamelen)
 
static void printEntry (SCIP *scip, FILE *file, const char *varname, const char *consname, SCIP_Real value, int *recordcnt, unsigned int maxnamelen)
 
static void printRowType (SCIP *scip, FILE *file, SCIP_Real lhs, SCIP_Real rhs, const char *name)
 
static SCIP_RETCODE initializeMatrix (SCIP *scip, SPARSEMATRIX **matrix, int slots)
 
static SCIP_RETCODE checkSparseMatrixCapacity (SCIP *scip, SPARSEMATRIX *matrix, int capacity)
 
static void freeMatrix (SCIP *scip, SPARSEMATRIX *matrix)
 
static SCIP_RETCODE getLinearCoeffs (SCIP *scip, const char *consname, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Bool transformed, SPARSEMATRIX *matrix, SCIP_Real *rhs)
 
static SCIP_RETCODE collectAggregatedVars (SCIP *scip, SCIP_VAR **vars, int nvars, SCIP_VAR ***aggvars, int *naggvars, int *saggvars, SCIP_HASHTABLE *varAggregated)
 
static SCIP_RETCODE checkVarnames (SCIP *scip, SCIP_VAR **vars, int nvars, unsigned int *maxnamelen, const char ***varnames, SCIP_HASHMAP **varnameHashmap)
 
static SCIP_RETCODE checkConsnames (SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool transformed, unsigned int *maxnamelen, const char ***consnames, SCIP_Bool *error)
 
static void printColumnSection (SCIP *scip, FILE *file, SPARSEMATRIX *matrix, SCIP_HASHMAP *varnameHashmap, SCIP_HASHTABLE *indicatorSlackHash, unsigned int maxnamelen)
 
static void printRhsSection (SCIP *scip, FILE *file, int nconss, const char **consnames, SCIP_Real *rhss, unsigned int maxnamelen, SCIP_Real objoffset)
 
static void printRangeSection (SCIP *scip, FILE *file, SCIP_CONS **conss, int nconss, const char **consnames, SCIP_Bool transformed, unsigned int maxnamelen)
 
static void printBoundSectionName (SCIP *scip, FILE *file)
 
static void printBoundSection (SCIP *scip, FILE *file, SCIP_VAR **vars, int nvars, SCIP_VAR **aggvars, int naggvars, SCIP_VAR **fixvars, int nfixvars, SCIP_Bool transformed, const char **varnames, SCIP_HASHTABLE *indicatorSlackHash, unsigned int maxnamelen)
 
static SCIP_DECL_READERCOPY (readerCopyMps)
 
static SCIP_DECL_READERFREE (readerFreeMps)
 
static SCIP_DECL_READERREAD (readerReadMps)
 
static SCIP_DECL_READERWRITE (readerWriteMps)
 
SCIP_RETCODE SCIPincludeReaderMps (SCIP *scip)
 
SCIP_RETCODE SCIPreadMps (SCIP *scip, SCIP_READER *reader, const char *filename, SCIP_RESULT *result, const char ***varnames, const char ***consnames, int *varnamessize, int *consnamessize, int *nvarnames, int *nconsnames)
 
SCIP_RETCODE SCIPwriteMps (SCIP *scip, SCIP_READER *reader, FILE *file, const char *name, SCIP_Bool transformed, SCIP_OBJSENSE objsense, SCIP_Real objscale, SCIP_Real objoffset, SCIP_VAR **vars, int nvars, int nbinvars, int nintvars, int nimplvars, int ncontvars, SCIP_VAR **fixedvars, int nfixedvars, SCIP_CONS **conss, int nconss, SCIP_RESULT *result)
 

Macro Definition Documentation

◆ READER_NAME

#define READER_NAME   "mpsreader"

◆ READER_DESC

#define READER_DESC   "file reader for MIQPs in IBM's Mathematical Programming System format"

Definition at line 79 of file reader_mps.c.

Referenced by SCIPincludeReaderMps().

◆ READER_EXTENSION

#define READER_EXTENSION   "mps"

Definition at line 80 of file reader_mps.c.

Referenced by SCIPincludeReaderMps().

◆ DEFAULT_LINEARIZE_ANDS

#define DEFAULT_LINEARIZE_ANDS   TRUE

should possible "and" constraint be linearized when writing the mps file?

Definition at line 82 of file reader_mps.c.

Referenced by SCIPincludeReaderMps().

◆ DEFAULT_AGGRLINEARIZATION_ANDS

#define DEFAULT_AGGRLINEARIZATION_ANDS   TRUE

should an aggregated linearization for and constraints be used?

Definition at line 83 of file reader_mps.c.

Referenced by SCIPincludeReaderMps().

◆ MPS_MAX_LINELEN

#define MPS_MAX_LINELEN   1024

Definition at line 89 of file reader_mps.c.

Referenced by mpsinputReadLine().

◆ MPS_MAX_NAMELEN

◆ MPS_MAX_VALUELEN

#define MPS_MAX_VALUELEN   26

Definition at line 91 of file reader_mps.c.

Referenced by printBoundSection(), printEntry(), printRecord(), and SCIPwriteMps().

◆ MPS_MAX_FIELDLEN

#define MPS_MAX_FIELDLEN   20

Definition at line 92 of file reader_mps.c.

Referenced by computeFieldWidth().

◆ PATCH_CHAR

#define PATCH_CHAR   '_'

Definition at line 94 of file reader_mps.c.

Referenced by patchField().

◆ BLANK

#define BLANK   ' '

Definition at line 95 of file reader_mps.c.

Referenced by clearFrom(), mpsinputReadLine(), and patchField().

Typedef Documentation

◆ MPSSECTION

typedef enum MpsSection MPSSECTION

Definition at line 124 of file reader_mps.c.

◆ MPSINPUT

typedef struct MpsInput MPSINPUT

Definition at line 150 of file reader_mps.c.

◆ SPARSEMATRIX

typedef struct SparseMatrix SPARSEMATRIX

Definition at line 161 of file reader_mps.c.

◆ CONSNAMEFREQ

typedef struct ConsNameFreq CONSNAMEFREQ

Definition at line 169 of file reader_mps.c.

Enumeration Type Documentation

◆ MpsSection

enum MpsSection

enum containing all mps sections

Enumerator
MPS_NAME 
MPS_OBJSEN 
MPS_OBJNAME 
MPS_ROWS 
MPS_USERCUTS 
MPS_LAZYCONS 
MPS_COLUMNS 
MPS_RHS 
MPS_RANGES 
MPS_BOUNDS 
MPS_SOS 
MPS_QUADOBJ 
MPS_QMATRIX 
MPS_QCMATRIX 
MPS_INDICATORS 
MPS_ENDATA 

Definition at line 105 of file reader_mps.c.

Function Documentation

◆ mpsinputCreate()

static SCIP_RETCODE mpsinputCreate ( SCIP scip,
MPSINPUT **  mpsi,
SCIP_FILE fp 
)
static

creates the mps input structure

Parameters
scipSCIP data structure
mpsimps input structure
fpfile object for the input file

Definition at line 173 of file reader_mps.c.

References FALSE, MPS_NAME, NULL, SCIP_CALL, SCIP_OBJSENSE_MINIMIZE, SCIP_OKAY, SCIPallocBlockMemory, and SCIPgetBoolParam().

Referenced by readMps().

◆ mpsinputFree()

static void mpsinputFree ( SCIP scip,
MPSINPUT **  mpsi 
)
static

free the mps input structure

Parameters
scipSCIP data structure
mpsimps input structure

Definition at line 211 of file reader_mps.c.

References SCIPfreeBlockMemory.

Referenced by readMps().

◆ mpsinputSection()

static MPSSECTION mpsinputSection ( const MPSINPUT mpsi)
static

returns the current section

Parameters
mpsimps input structure

Definition at line 221 of file reader_mps.c.

References NULL.

Referenced by readMps(), and readRows().

◆ mpsinputField0()

static const char* mpsinputField0 ( const MPSINPUT mpsi)
static

return the current value of field 0

Parameters
mpsimps input structure

Definition at line 232 of file reader_mps.c.

References NULL.

Referenced by readBounds(), readCols(), readIndicators(), readName(), readObjname(), readObjsen(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), readRows(), and readSOS().

◆ mpsinputField1()

static const char* mpsinputField1 ( const MPSINPUT mpsi)
static

return the current value of field 1

Parameters
mpsimps input structure

Definition at line 243 of file reader_mps.c.

References NULL.

Referenced by readBounds(), readCols(), readIndicators(), readName(), readObjname(), readObjsen(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), readRows(), and readSOS().

◆ mpsinputField2()

static const char* mpsinputField2 ( const MPSINPUT mpsi)
static

return the current value of field 2

Parameters
mpsimps input structure

Definition at line 254 of file reader_mps.c.

References NULL.

Referenced by readBounds(), readCols(), readIndicators(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), readRows(), and readSOS().

◆ mpsinputField3()

static const char* mpsinputField3 ( const MPSINPUT mpsi)
static

return the current value of field 3

Parameters
mpsimps input structure

Definition at line 265 of file reader_mps.c.

References NULL.

Referenced by readBounds(), readCols(), readIndicators(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), and readSOS().

◆ mpsinputField4()

static const char* mpsinputField4 ( const MPSINPUT mpsi)
static

return the current value of field 4

Parameters
mpsimps input structure

Definition at line 276 of file reader_mps.c.

References NULL.

Referenced by readBounds(), readCols(), readIndicators(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), and readSOS().

◆ mpsinputField5()

static const char* mpsinputField5 ( const MPSINPUT mpsi)
static

return the current value of field 5

Parameters
mpsimps input structure

Definition at line 287 of file reader_mps.c.

References NULL.

Referenced by readCols(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), and readSOS().

◆ mpsinputObjname()

static const char* mpsinputObjname ( const MPSINPUT mpsi)
static

returns the objective name

Parameters
mpsimps input structure

Definition at line 298 of file reader_mps.c.

References NULL.

Referenced by readCols(), readRhs(), and readRows().

◆ mpsinputObjsense()

static SCIP_OBJSENSE mpsinputObjsense ( const MPSINPUT mpsi)
static

returns the objective sense

Parameters
mpsimps input structure

Definition at line 309 of file reader_mps.c.

References NULL.

Referenced by readMps(), and readQMatrix().

◆ mpsinputHasError()

static SCIP_Bool mpsinputHasError ( const MPSINPUT mpsi)
static

returns if an error was detected

Parameters
mpsimps input structure

Definition at line 320 of file reader_mps.c.

References NULL.

Referenced by readMps().

◆ mpsinputIsInteger()

static SCIP_Bool mpsinputIsInteger ( const MPSINPUT mpsi)
static

returns the value of the Bool "is integer" in the mps input

Parameters
mpsimps input structure

Definition at line 331 of file reader_mps.c.

References NULL.

Referenced by readCols().

◆ mpsinputSetSection()

static void mpsinputSetSection ( MPSINPUT mpsi,
MPSSECTION  section 
)
static

set the section in the mps input structure to given section

Parameters
mpsimps input structure
sectionsection that is set

Definition at line 342 of file reader_mps.c.

References NULL.

Referenced by readBounds(), readCols(), readIndicators(), readName(), readObjname(), readObjsen(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), readRows(), and readSOS().

◆ mpsinputSetProbname()

static void mpsinputSetProbname ( MPSINPUT mpsi,
const char *  probname 
)
static

set the problem name in the mps input structure to given problem name

Parameters
mpsimps input structure
probnamename of the problem to set

Definition at line 354 of file reader_mps.c.

References MPS_MAX_NAMELEN, NULL, and SCIPmemccpy().

Referenced by readName().

◆ mpsinputSetObjname()

static void mpsinputSetObjname ( MPSINPUT mpsi,
const char *  objname 
)
static

set the objective name in the mps input structure to given objective name

Parameters
mpsimps input structure
objnamename of the objective function to set

Definition at line 368 of file reader_mps.c.

References MPS_MAX_NAMELEN, NULL, and SCIPmemccpy().

Referenced by readObjname(), and readRows().

◆ mpsinputSetObjsense()

static void mpsinputSetObjsense ( MPSINPUT mpsi,
SCIP_OBJSENSE  sense 
)
static

set the objective sense in the mps input structure to given objective sense

Parameters
mpsimps input structure
sensesense of the objective function

Definition at line 382 of file reader_mps.c.

References NULL.

Referenced by readObjsen().

◆ mpsinputSyntaxerror()

static void mpsinputSyntaxerror ( MPSINPUT mpsi)
static
Parameters
mpsimps input structure

Definition at line 393 of file reader_mps.c.

References MPS_ENDATA, NULL, SCIPerrorMessage, and TRUE.

Referenced by readBounds(), readCols(), readIndicators(), readMps(), readName(), readObjname(), readObjsen(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), readRows(), and readSOS().

◆ mpsinputEntryIgnored()

static void mpsinputEntryIgnored ( SCIP scip,
MPSINPUT mpsi,
const char *  what,
const char *  what_name,
const char *  entity,
const char *  entity_name,
SCIP_VERBLEVEL  verblevel 
)
static

method post a ignore message

Parameters
scipSCIP data structure
mpsimps input structure
whatwhat get ignored
what_namename of that object
entityentity
entity_nameentity name
verblevelSCIP verblevel for this message

Definition at line 406 of file reader_mps.c.

References NULL, and SCIPverbMessage().

Referenced by readBounds(), readCols(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), readRows(), and readSOS().

◆ clearFrom()

static void clearFrom ( char *  buf,
unsigned int  pos 
)
static

fill the line from pos up to column 80 with blanks.

Parameters
bufbuffer to clear
posposition to start the clearing process

Definition at line 428 of file reader_mps.c.

References BLANK.

Referenced by mpsinputReadLine().

◆ patchField()

static void patchField ( char *  buf,
int  beg,
int  end 
)
static

change all blanks inside a field to PATCH_CHAR.

Parameters
bufbuffer to patch
begposition to begin
endposition to end

Definition at line 442 of file reader_mps.c.

References BLANK, and PATCH_CHAR.

Referenced by mpsinputReadLine().

◆ mpsinputReadLine()

static SCIP_Bool mpsinputReadLine ( MPSINPUT mpsi)
static

read a mps format data line and parse the fields.

Parameters
mpsimps input structure

Definition at line 463 of file reader_mps.c.

References BLANK, clearFrom(), FALSE, MPS_BOUNDS, MPS_COLUMNS, MPS_MAX_LINELEN, MPS_RANGES, MPS_RHS, NULL, number, patchField(), SCIP_Bool, SCIPdebugMessage, SCIPfgets(), SCIPstrtok(), and TRUE.

Referenced by readBounds(), readCols(), readIndicators(), readName(), readObjname(), readObjsen(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), readRows(), and readSOS().

◆ mpsinputInsertField4()

static void mpsinputInsertField4 ( MPSINPUT mpsi,
const char *  str 
)
static

Insert str as field 4 and shift all other fields up.

Parameters
mpsimps input structure
strstr to insert

Definition at line 639 of file reader_mps.c.

References NULL.

Referenced by readBounds().

◆ mpsinputInsertName()

static void mpsinputInsertName ( MPSINPUT mpsi,
const char *  name,
SCIP_Bool  second 
)
static

Insert name as field 1 or 2 and shift all other fields up.

Parameters
mpsimps input structure
namename to insert
secondinsert as second field?

Definition at line 653 of file reader_mps.c.

References NULL.

Referenced by readBounds(), readRanges(), and readRhs().

◆ addVarNameToStorage()

static SCIP_RETCODE addVarNameToStorage ( SCIP scip,
const char ***  varnames,
int *  varnamessize,
int *  nvars,
const char *  colname 
)
static

Add variable name to storage

Parameters
scipSCIP data structure
varnamesthe variable name storage
varnamessizethe size of the variable names storage
nvarsthe number of variables
colnamethe name of the variable

Definition at line 677 of file reader_mps.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPduplicateBlockMemoryArray, and SCIPensureBlockMemoryArray.

Referenced by readCols().

◆ addConsNameToStorage()

static SCIP_RETCODE addConsNameToStorage ( SCIP scip,
const char ***  consnames,
int *  consnamessize,
int *  ncons,
const char *  rowname 
)
static

Add constraint name to storage

Parameters
scipSCIP data structure
consnamesthe constraint name storage
consnamessizethe size of the constraint names storage
nconsthe number of constraint
rownamethe name of the constraint

Definition at line 699 of file reader_mps.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPduplicateBlockMemoryArray, and SCIPensureBlockMemoryArray.

Referenced by readRows().

◆ readName()

static SCIP_RETCODE readName ( SCIP scip,
MPSINPUT mpsi 
)
static

Process NAME section.

Parameters
scipSCIP data structure
mpsimps input structure

Definition at line 721 of file reader_mps.c.

References MPS_LAZYCONS, MPS_OBJNAME, MPS_OBJSEN, MPS_ROWS, MPS_USERCUTS, mpsinputField0(), mpsinputField1(), mpsinputReadLine(), mpsinputSetProbname(), mpsinputSetSection(), mpsinputSyntaxerror(), NULL, SCIP_OKAY, and SCIPdebugMsg.

Referenced by readMps().

◆ readObjsen()

static SCIP_RETCODE readObjsen ( SCIP scip,
MPSINPUT mpsi 
)
static

Process OBJSEN section. This Section is a CPLEX extension.

Parameters
scipSCIP data structure
mpsimps input structure

Definition at line 769 of file reader_mps.c.

References MPS_LAZYCONS, MPS_OBJNAME, MPS_ROWS, MPS_USERCUTS, mpsinputField0(), mpsinputField1(), mpsinputReadLine(), mpsinputSetObjsense(), mpsinputSetSection(), mpsinputSyntaxerror(), NULL, SCIP_OBJSENSE_MAXIMIZE, SCIP_OBJSENSE_MINIMIZE, SCIP_OKAY, and SCIPdebugMsg.

Referenced by readMps().

◆ readObjname()

static SCIP_RETCODE readObjname ( SCIP scip,
MPSINPUT mpsi 
)
static

Process OBJNAME section. This Section is a CPLEX extension.

Parameters
scipSCIP data structure
mpsimps input structure

Definition at line 828 of file reader_mps.c.

References MPS_LAZYCONS, MPS_ROWS, MPS_USERCUTS, mpsinputField0(), mpsinputField1(), mpsinputReadLine(), mpsinputSetObjname(), mpsinputSetSection(), mpsinputSyntaxerror(), NULL, SCIP_OKAY, and SCIPdebugMsg.

Referenced by readMps().

◆ readRows()

static SCIP_RETCODE readRows ( MPSINPUT mpsi,
SCIP scip,
const char ***  consnames,
int *  consnamessize,
int *  nconsnames 
)
static

Process ROWS, USERCUTS, or LAZYCONS section.

Parameters
mpsimps input structure
scipSCIP data structure
consnamesstorage for the constraint names, or NULL
consnamessizethe size of the constraint names storage, or NULL
nconsnamesthe number of stored constraint names, or NULL

Definition at line 867 of file reader_mps.c.

References addConsNameToStorage(), FALSE, MPS_COLUMNS, MPS_LAZYCONS, MPS_ROWS, MPS_USERCUTS, mpsinputEntryIgnored(), mpsinputField0(), mpsinputField1(), mpsinputField2(), mpsinputObjname(), mpsinputReadLine(), mpsinputSection(), mpsinputSetObjname(), mpsinputSetSection(), mpsinputSyntaxerror(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VERBLEVEL_NORMAL, SCIPaddCons(), SCIPcreateConsLinear(), SCIPdebugMsg, SCIPfindCons(), SCIPinfinity(), SCIPreleaseCons(), and TRUE.

Referenced by readMps().

◆ readCols()

static SCIP_RETCODE readCols ( MPSINPUT mpsi,
SCIP scip,
const char ***  varnames,
int *  varnamessize,
int *  nvarnames 
)
static

◆ readRhs()

◆ readRanges()

◆ readBounds()

◆ readSOS()

static SCIP_RETCODE readSOS ( MPSINPUT mpsi,
SCIP scip 
)
static

◆ readQMatrix()

static SCIP_RETCODE readQMatrix ( MPSINPUT mpsi,
SCIP_Bool  isQuadObj,
SCIP scip 
)
static

Process QMATRIX or QUADOBJ section.

  • We read the QMATRIX or QUADOBJ section, which is a nonstandard section introduced by CPLEX.
  • We create a quadratic constraint for this matrix and add a variable to the objective to represent the value of the QMATRIX.
  • For a QMATRIX, we expect that both lower and upper diagonal elements are given and every coefficient has to be divided by 2.0.
  • For a QUADOBJ, we expect that only the upper diagonal elements are given and thus only coefficients on the diagonal have to be divided by 2.0.
Parameters
mpsimps input structure
isQuadObjwhether we actually read a QUADOBJ section
scipSCIP data structure

Definition at line 1950 of file reader_mps.c.

References FALSE, MPS_ENDATA, MPS_INDICATORS, MPS_QCMATRIX, mpsinputEntryIgnored(), mpsinputField0(), mpsinputField1(), mpsinputField2(), mpsinputField3(), mpsinputField4(), mpsinputField5(), mpsinputObjsense(), mpsinputReadLine(), mpsinputSetSection(), mpsinputSyntaxerror(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OBJSENSE_MINIMIZE, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIP_VERBLEVEL_NORMAL, SCIPaddCons(), SCIPaddVar(), SCIPallocBufferArray, SCIPcalcMemGrowSize(), SCIPconsGetName(), SCIPcreateConsQuadraticNonlinear(), SCIPcreateVar(), SCIPdebugMsg, SCIPdebugPrintCons, SCIPerrorMessage, SCIPfindVar(), SCIPfreeBufferArray, SCIPinfinity(), SCIPreallocBufferArray, SCIPreleaseCons(), SCIPreleaseVar(), SCIPvarGetName(), SCIPwarningMessage(), and TRUE.

Referenced by readMps().

◆ readQCMatrix()

◆ readIndicators()

static SCIP_RETCODE readIndicators ( MPSINPUT mpsi,
SCIP scip 
)
static

◆ readMps()

static SCIP_RETCODE readMps ( SCIP scip,
const char *  filename,
const char ***  varnames,
const char ***  consnames,
int *  varnamessize,
int *  consnamessize,
int *  nvarnames,
int *  nconsnames 
)
static

Read LP in "MPS File Format".

A specification of the MPS format can be found at

http://plato.asu.edu/ftp/mps_format.txt, ftp://ftp.caam.rice.edu/pub/people/bixby/miplib/mps_format,

and in the

CPLEX Reference Manual

This routine should read all valid MPS format files. What it will not do, is to find all cases where a file is ill formed. If this happens it may complain and read nothing or read "something".

Parameters
scipSCIP data structure
filenamename of the input file
varnamesstorage for the variable names, or NULL
consnamesstorage for the constraint names, or NULL
varnamessizethe size of the variable names storage, or NULL
consnamessizethe size of the constraint names storage, or NULL
nvarnamesthe number of stored variable names, or NULL
nconsnamesthe number of stored constraint names, or NULL

Definition at line 2584 of file reader_mps.c.

References FALSE, MPS_BOUNDS, MPS_COLUMNS, MPS_ENDATA, MPS_INDICATORS, MPS_LAZYCONS, MPS_OBJNAME, MPS_OBJSEN, MPS_QCMATRIX, MPS_QMATRIX, MPS_QUADOBJ, MPS_RANGES, MPS_RHS, MPS_ROWS, MPS_SOS, MPS_USERCUTS, mpsinputCreate(), mpsinputFree(), mpsinputHasError(), mpsinputObjsense(), mpsinputSection(), mpsinputSyntaxerror(), NULL, readBounds(), readCols(), readIndicators(), readName(), readObjname(), readObjsen(), readQCMatrix(), readQMatrix(), readRanges(), readRhs(), readRows(), readSOS(), SCIP_Bool, SCIP_CALL, SCIP_CALL_TERMINATE, SCIP_NOFILE, SCIP_OKAY, SCIP_READERROR, SCIPcreateProb(), SCIPerrorMessage, SCIPfclose(), SCIPfopen(), SCIPprintSysError(), SCIPsetObjsense(), and TRUE.

Referenced by SCIPreadMps().

◆ SCIP_DECL_HASHGETKEY() [1/2]

static SCIP_DECL_HASHGETKEY ( hashGetKeyNamefreq  )
static

gets the key (i.e. the name) of the given namefreq

Definition at line 2698 of file reader_mps.c.

References ConsNameFreq::consname, and NULL.

◆ SCIP_DECL_HASHKEYEQ() [1/2]

static SCIP_DECL_HASHKEYEQ ( hashKeyEqString  )
static

returns TRUE iff both keys (i.e. strings) are equal up to max length

Definition at line 2710 of file reader_mps.c.

References MPS_MAX_NAMELEN.

◆ SCIP_DECL_HASHGETKEY() [2/2]

static SCIP_DECL_HASHGETKEY ( hashGetKeyVar  )
static

hash key retrieval function for variables

Definition at line 2720 of file reader_mps.c.

◆ SCIP_DECL_HASHKEYEQ() [2/2]

static SCIP_DECL_HASHKEYEQ ( hashKeyEqVar  )
static

returns TRUE iff the indices of both variables are equal

Definition at line 2727 of file reader_mps.c.

References FALSE, and TRUE.

◆ SCIP_DECL_HASHKEYVAL()

static SCIP_DECL_HASHKEYVAL ( hashKeyValVar  )
static

returns the hash value of the key

Definition at line 2736 of file reader_mps.c.

References SCIPvarGetIndex().

◆ computeFieldWidth()

static unsigned int computeFieldWidth ( unsigned int  width)
static

computes the field width such that the output file is nicely arranged

Parameters
widthrequired width

Definition at line 2745 of file reader_mps.c.

References MAX, and MPS_MAX_FIELDLEN.

Referenced by printRecord(), and printStart().

◆ printRecord()

static void printRecord ( SCIP scip,
FILE *  file,
const char *  col1,
const char *  col2,
unsigned int  maxnamelen 
)
static

output two strings in columns 1 and 2 with computed widths

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
col1column 1
col2column 2
maxnamelenmaximum name length

Definition at line 2756 of file reader_mps.c.

References computeFieldWidth(), MPS_MAX_NAMELEN, MPS_MAX_VALUELEN, NULL, SCIPinfoMessage(), and SCIPsnprintf().

Referenced by printBoundSection(), printColumnSection(), printEntry(), and SCIPwriteMps().

◆ printStart()

static void printStart ( SCIP scip,
FILE *  file,
const char *  col1,
const char *  col2,
int  maxnamelen 
)
static

output two strings in columns 1 (width 2) and 2 (width 8)

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
col1column 1
col2column 2
maxnamelenmaximum name length (-1 if irrelevant)

Definition at line 2782 of file reader_mps.c.

References computeFieldWidth(), MPS_MAX_NAMELEN, NULL, SCIPinfoMessage(), and SCIPsnprintf().

Referenced by printBoundSection(), printColumnSection(), printEntry(), printRowType(), and SCIPwriteMps().

◆ printEntry()

static void printEntry ( SCIP scip,
FILE *  file,
const char *  varname,
const char *  consname,
SCIP_Real  value,
int *  recordcnt,
unsigned int  maxnamelen 
)
static

prints the given data as column entry

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
varnamevariable name
consnameconstraint name
valuevalue to display
recordcntpointer to store the number of records per line
maxnamelenmaximum name length

Definition at line 2816 of file reader_mps.c.

References MPS_MAX_VALUELEN, NULL, printRecord(), printStart(), SCIPinfoMessage(), and SCIPsnprintf().

Referenced by printColumnSection(), printRangeSection(), and printRhsSection().

◆ printRowType()

static void printRowType ( SCIP scip,
FILE *  file,
SCIP_Real  lhs,
SCIP_Real  rhs,
const char *  name 
)
static

prints the constraint type to file stream

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
lhsleft hand side
rhsright hand side
nameconstraint name

Definition at line 2854 of file reader_mps.c.

References NULL, printStart(), SCIPinfoMessage(), SCIPisEQ(), SCIPisGT(), SCIPisInfinity(), and SCIPsnprintf().

Referenced by SCIPwriteMps().

◆ initializeMatrix()

static SCIP_RETCODE initializeMatrix ( SCIP scip,
SPARSEMATRIX **  matrix,
int  slots 
)
static

initializes the sparse matrix

Parameters
scipSCIP data structure
matrixpointer to sparse matrix containing the entries
slotsnumber of slots

Definition at line 2892 of file reader_mps.c.

References SCIP_CALL, SCIP_OKAY, SCIPallocBuffer, and SCIPallocBufferArray.

Referenced by SCIPwriteMps().

◆ checkSparseMatrixCapacity()

static SCIP_RETCODE checkSparseMatrixCapacity ( SCIP scip,
SPARSEMATRIX matrix,
int  capacity 
)
static

this method takes care that the required capacity is available in the sparse matrix

Parameters
scipSCIP data structure
matrixsparse matrix for storing the coefficient
capacityneeded capacity

Definition at line 2910 of file reader_mps.c.

References SCIP_CALL, SCIP_OKAY, and SCIPreallocBufferArray.

Referenced by getLinearCoeffs(), and SCIPwriteMps().

◆ freeMatrix()

static void freeMatrix ( SCIP scip,
SPARSEMATRIX matrix 
)
static

frees the sparse matrix

Parameters
scipSCIP data structure
matrixsparse matrix to free

Definition at line 2928 of file reader_mps.c.

References SCIPfreeBuffer, and SCIPfreeBufferArray.

Referenced by SCIPwriteMps().

◆ getLinearCoeffs()

static SCIP_RETCODE getLinearCoeffs ( SCIP scip,
const char *  consname,
SCIP_VAR **  vars,
SCIP_Real vals,
int  nvars,
SCIP_Bool  transformed,
SPARSEMATRIX matrix,
SCIP_Real rhs 
)
static

computes the coefficient for the given variables and linear constraint information

Parameters
scipSCIP data structure
consnamename of the constraint
varsarray of variables
valsarray of coefficients values (or NULL if all coefficient values are 1)
nvarsnumber of variables
transformedtransformed constraint?
matrixsparse matrix for storing the coefficient
rhspointer to right hand side

Definition at line 2943 of file reader_mps.c.

References checkSparseMatrixCapacity(), ConsNameFreq::consname, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_NEGATED, SCIPallocBufferArray, SCIPduplicateBufferArray, SCIPfreeBufferArray, SCIPgetProbvarLinearSum(), SCIPisInfinity(), SCIPreallocBufferArray, SCIPvarGetNegatedVar(), SCIPvarGetOrigvarSum(), SCIPvarGetStatus(), and TRUE.

Referenced by SCIPwriteMps().

◆ collectAggregatedVars()

static SCIP_RETCODE collectAggregatedVars ( SCIP scip,
SCIP_VAR **  vars,
int  nvars,
SCIP_VAR ***  aggvars,
int *  naggvars,
int *  saggvars,
SCIP_HASHTABLE varAggregated 
)
static

check whether given variables are aggregated and put them into an array without duplication

Parameters
scipSCIP data structure
varsvariable array
nvarsnumber of active variables in the problem
aggvarspointer to array storing the aggregated variables on output
naggvarspointer to number of aggregated variables on output
saggvarspointer to number of slots in aggvars array
varAggregatedhashtable for checking duplicates

Definition at line 3046 of file reader_mps.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_AGGREGATED, SCIP_VARSTATUS_MULTAGGR, SCIP_VARSTATUS_NEGATED, SCIPcalcMemGrowSize(), SCIPhashtableExists(), SCIPhashtableInsert(), SCIPreallocBlockMemoryArray, and SCIPvarGetStatus().

Referenced by SCIPwriteMps().

◆ checkVarnames()

static SCIP_RETCODE checkVarnames ( SCIP scip,
SCIP_VAR **  vars,
int  nvars,
unsigned int *  maxnamelen,
const char ***  varnames,
SCIP_HASHMAP **  varnameHashmap 
)
static

method check if the variable names are not longer than MPS_MAX_NAMELEN - 1

Parameters
scipSCIP data structure
varsarray of variables
nvarsnumber of variables
maxnamelenpointer to store the maximum name length
varnamespointer to array of variable names
varnameHashmappointer to hash map storing variable, variable name mapping

Definition at line 3103 of file reader_mps.c.

References MAX, MPS_MAX_NAMELEN, NULL, SCIP_CALL, SCIP_OKAY, SCIPallocBufferArray, SCIPblkmem(), SCIPhashmapCreate(), SCIPhashmapExists(), SCIPhashmapInsert(), SCIPsnprintf(), SCIPvarGetName(), and SCIPwarningMessage().

Referenced by SCIPwriteMps().

◆ checkConsnames()

static SCIP_RETCODE checkConsnames ( SCIP scip,
SCIP_CONS **  conss,
int  nconss,
SCIP_Bool  transformed,
unsigned int *  maxnamelen,
const char ***  consnames,
SCIP_Bool error 
)
static

method check if the constraint names are not longer than MPS_MAX_NAMELEN - 1

Parameters
scipSCIP data structure
conssarray of all constraints
nconssnumber of all constraints
transformedTRUE iff problem is the transformed problem
maxnamelenpointer to store the maximum name length
consnamespointer to array of constraint names
errorpointer to store whether all constraint names exist

Definition at line 3167 of file reader_mps.c.

References ConsNameFreq::consname, FALSE, ConsNameFreq::freq, MAX, MPS_MAX_NAMELEN, NULL, SCIP_CALL, SCIP_HASHSIZE_NAMES, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPblkmem(), SCIPconsGetName(), SCIPconsIsEnabled(), SCIPfreeBufferArray, SCIPhashtableCreate(), SCIPhashtableFree(), SCIPhashtableInsert(), SCIPhashtableRetrieve(), SCIPsnprintf(), SCIPwarningMessage(), and TRUE.

Referenced by SCIPwriteMps().

◆ printColumnSection()

static void printColumnSection ( SCIP scip,
FILE *  file,
SPARSEMATRIX matrix,
SCIP_HASHMAP varnameHashmap,
SCIP_HASHTABLE indicatorSlackHash,
unsigned int  maxnamelen 
)
static

outputs the COLUMNS section of the MPS format

Parameters
scipSCIP data structure
fileoutput file, or NULL if standard output should be used
matrixsparse matrix containing the entries
varnameHashmapmap from SCIP_VAR* to variable name
indicatorSlackHashhashtable containing slack variables from indicators (or NULL)
maxnamelenmaximum name length

Definition at line 3273 of file reader_mps.c.

References FALSE, NULL, printEntry(), printRecord(), printStart(), SCIP_Bool, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPdebugMsg, SCIPhashmapExists(), SCIPhashmapGetImage(), SCIPhashtableExists(), SCIPinfoMessage(), SCIPsortPtrPtrReal(), SCIPvarGetName(), SCIPvarGetType(), and TRUE.

Referenced by SCIPwriteMps().

◆ printRhsSection()

static void printRhsSection ( SCIP scip,
FILE *  file,
int  nconss,
const char **  consnames,
SCIP_Real rhss,
unsigned int  maxnamelen,
SCIP_Real  objoffset 
)
static

outputs the right hand side section

Parameters
scipSCIP data structure
fileoutput file, or NULL if standard output should be used
nconssnumber of constraints
consnamesconstraint names
rhssright hand side array
maxnamelenmaximum name length
objoffsetobjective offset

Definition at line 3365 of file reader_mps.c.

References NULL, printEntry(), SCIPdebugMsg, SCIPinfoMessage(), SCIPisInfinity(), and SCIPisZero().

Referenced by SCIPwriteMps().

◆ printRangeSection()

static void printRangeSection ( SCIP scip,
FILE *  file,
SCIP_CONS **  conss,
int  nconss,
const char **  consnames,
SCIP_Bool  transformed,
unsigned int  maxnamelen 
)
static

outputs the range section

Parameters
scipSCIP data structure
fileoutput file, or NULL if standard output should be used
conssconstraint array
nconssnumber of constraints
consnamesconstraint names
transformedTRUE iff problem is the transformed problem
maxnamelenmaximum name length

Definition at line 3408 of file reader_mps.c.

References NULL, printEntry(), SCIP_Real, SCIPconsGetHdlr(), SCIPconshdlrGetName(), SCIPconsIsEnabled(), SCIPdebugMsg, SCIPgetLhsLinear(), SCIPgetLhsVarbound(), SCIPgetRhsLinear(), SCIPgetRhsVarbound(), SCIPinfoMessage(), SCIPisEQ(), SCIPisGT(), and SCIPisInfinity().

Referenced by SCIPwriteMps().

◆ printBoundSectionName()

static void printBoundSectionName ( SCIP scip,
FILE *  file 
)
static

print bound section name

Parameters
scipSCIP data structure
fileoutput file, or NULL if standard output should be used

Definition at line 3473 of file reader_mps.c.

References SCIPdebugMsg, and SCIPinfoMessage().

Referenced by printBoundSection().

◆ printBoundSection()

static void printBoundSection ( SCIP scip,
FILE *  file,
SCIP_VAR **  vars,
int  nvars,
SCIP_VAR **  aggvars,
int  naggvars,
SCIP_VAR **  fixvars,
int  nfixvars,
SCIP_Bool  transformed,
const char **  varnames,
SCIP_HASHTABLE indicatorSlackHash,
unsigned int  maxnamelen 
)
static

output bound section

Parameters
scipSCIP data structure
fileoutput file, or NULL if standard output should be used
varsactive variables
nvarsnumber of active variables
aggvarsneeded aggregated variables
naggvarsnumber of aggregated variables
fixvarsall fixed variables (or NULL if nfixvars is 0)
nfixvarsnumber of fixed variables
transformedTRUE iff problem is the transformed problem
varnamesarray with variable names
indicatorSlackHashhashtable containing slack variables from indicators (or NULL)
maxnamelenmaximum name length

Definition at line 3484 of file reader_mps.c.

References FALSE, MPS_MAX_VALUELEN, NULL, printBoundSectionName(), printRecord(), printStart(), SCIP_Bool, SCIP_Real, SCIP_VARSTATUS_FIXED, SCIP_VARTYPE_BINARY, SCIPhashtableExists(), SCIPinfoMessage(), SCIPisEQ(), SCIPisFeasEQ(), SCIPisFeasZero(), SCIPisInfinity(), SCIPisZero(), SCIPsnprintf(), SCIPvarGetLbLocal(), SCIPvarGetLbOriginal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetType(), SCIPvarGetUbLocal(), SCIPvarGetUbOriginal(), and TRUE.

Referenced by SCIPwriteMps().

◆ SCIP_DECL_READERCOPY()

static SCIP_DECL_READERCOPY ( readerCopyMps  )
static

copy method for reader plugins (called when SCIP copies plugins) ! [SnippetReaderCopyMps]

Definition at line 3747 of file reader_mps.c.

References NULL, READER_NAME, SCIP_CALL, SCIP_OKAY, SCIPincludeReaderMps(), and SCIPreaderGetName().

◆ SCIP_DECL_READERFREE()

static SCIP_DECL_READERFREE ( readerFreeMps  )
static

! [SnippetReaderCopyMps] destructor of reader to free user data (called when SCIP is exiting) ! [SnippetReaderFreeMps]

Definition at line 3763 of file reader_mps.c.

References NULL, READER_NAME, SCIP_OKAY, SCIPfreeBlockMemory, SCIPreaderGetData(), and SCIPreaderGetName().

◆ SCIP_DECL_READERREAD()

static SCIP_DECL_READERREAD ( readerReadMps  )
static

! [SnippetReaderFreeMps] problem reading method of reader

Definition at line 3778 of file reader_mps.c.

References NULL, READER_NAME, SCIP_CALL, SCIP_OKAY, SCIPreaderGetName(), and SCIPreadMps().

◆ SCIP_DECL_READERWRITE()

static SCIP_DECL_READERWRITE ( readerWriteMps  )
static

problem writing method of reader

Definition at line 3791 of file reader_mps.c.

References NULL, READER_NAME, SCIP_CALL, SCIP_OKAY, SCIPreaderGetName(), and SCIPwriteMps().