Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

GAMS file writer.

Author
Ambros Gleixner
Stefan Vigerske

Definition in file reader_gms.c.

#include "blockmemshell/memory.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_message.h"
#include "scip/pub_misc.h"
#include "scip/pub_reader.h"
#include "scip/pub_var.h"
#include "scip/reader_gms.h"
#include "scip/scip_cons.h"
#include "scip/scip_general.h"
#include "scip/scip_mem.h"
#include "scip/scip_message.h"
#include "scip/scip_numerics.h"
#include "scip/scip_param.h"
#include "scip/scip_reader.h"
#include "scip/scip_var.h"
#include "scip/expr_abs.h"
#include <string.h>

Go to the source code of this file.

Macros

#define READER_NAME   "gmsreader"
 
#define READER_DESC   "file writer for (MI)(N)LPs in GAMS file format"
 
#define READER_EXTENSION   "gms"
 
#define GMS_MAX_LINELEN   256
 
#define GMS_MAX_PRINTLEN   256
 
#define GMS_MAX_NAMELEN   64
 
#define GMS_PRINTLEN   100
 
#define GMS_DEFAULT_BIGM   1e+6
 
#define GMS_DEFAULT_INDICATORREFORM   's'
 
#define GMS_DEFAULT_SIGNPOWER   FALSE
 

Functions

static SCIP_RETCODE getActiveVariables (SCIP *scip, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, int *varssize, SCIP_Real *constant, SCIP_Bool transformed)
 
static void clearLine (char *linebuffer, int *linecnt)
 
static void endLine (SCIP *scip, FILE *file, char *linebuffer, int *linecnt)
 
static void endLineNoNewline (SCIP *scip, FILE *file, char *linebuffer, int *linecnt)
 
static void appendLine (SCIP *scip, FILE *file, char *linebuffer, int *linecnt, const char *extension)
 
static void conformName (char *name)
 
static SCIP_RETCODE printConformName (SCIP *scip, char *t, int len, const char *name)
 
static SCIP_RETCODE printActiveVariables (SCIP *scip, FILE *file, char *linebuffer, int *linecnt, const char *prefix, const char *suffix, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Bool transformed)
 
static SCIP_RETCODE printLinearRow (SCIP *scip, FILE *file, const char *rowname, const char *rownameextension, const char *type, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs)
 
static SCIP_RETCODE printLinearCons (SCIP *scip, FILE *file, const char *rowname, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool transformed)
 
static SCIP_RETCODE printIndicatorCons (SCIP *scip, FILE *file, const char *rowname, SCIP_VAR *z, SCIP_VAR *s, SCIP_Bool *sossetdeclr, SCIP_Bool transformed)
 
static SCIP_RETCODE printSOSCons (SCIP *scip, FILE *file, const char *rowname, int nvars, SCIP_VAR **vars, int sostype, SCIP_Bool transformed)
 
static SCIP_RETCODE printExpr (SCIP *scip, FILE *file, char *linebuffer, int *linecnt, SCIP_Bool *nsmooth, SCIP_Bool *nqcons, SCIP_Bool transformed, SCIP_EXPR *expr)
 
static SCIP_RETCODE printNonlinearRow (SCIP *scip, FILE *file, const char *rowname, const char *rownameextension, const char *type, SCIP_EXPR *expr, SCIP_Real rhs, SCIP_Bool transformed, SCIP_Bool *nsmooth, SCIP_Bool *nqcons)
 
static SCIP_RETCODE printNonlinearCons (SCIP *scip, FILE *file, const char *rowname, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool transformed, SCIP_Bool *nsmooth, SCIP_Bool *nqcons)
 
static SCIP_RETCODE checkVarnames (SCIP *scip, SCIP_VAR **vars, int nvars)
 
static SCIP_RETCODE checkConsnames (SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool transformed)
 
static SCIP_DECL_READERCOPY (readerCopyGms)
 
static SCIP_DECL_READERWRITE (readerWriteGms)
 
SCIP_RETCODE SCIPincludeReaderGms (SCIP *scip)
 
SCIP_RETCODE SCIPwriteGms (SCIP *scip, 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_CONS **conss, int nconss, SCIP_RESULT *result)
 

Variables

static const char badchars [] = "#*+/-@$[](){}"
 

Macro Definition Documentation

◆ READER_NAME

#define READER_NAME   "gmsreader"

Definition at line 64 of file reader_gms.c.

Referenced by SCIP_DECL_READERCOPY(), and SCIPincludeReaderGms().

◆ READER_DESC

#define READER_DESC   "file writer for (MI)(N)LPs in GAMS file format"

Definition at line 65 of file reader_gms.c.

Referenced by SCIPincludeReaderGms().

◆ READER_EXTENSION

#define READER_EXTENSION   "gms"

Definition at line 66 of file reader_gms.c.

Referenced by SCIPincludeReaderGms().

◆ GMS_MAX_LINELEN

#define GMS_MAX_LINELEN   256

Definition at line 69 of file reader_gms.c.

Referenced by endLine(), endLineNoNewline(), and SCIPwriteGms().

◆ GMS_MAX_PRINTLEN

#define GMS_MAX_PRINTLEN   256

the maximum length of any line is 255 + '\0' = 256

Definition at line 70 of file reader_gms.c.

Referenced by appendLine(), printActiveVariables(), printIndicatorCons(), printLinearRow(), printNonlinearRow(), printSOSCons(), and SCIPwriteGms().

◆ GMS_MAX_NAMELEN

#define GMS_MAX_NAMELEN   64

the maximum length for any name is 63 + '\0' = 64

Definition at line 71 of file reader_gms.c.

Referenced by checkConsnames(), checkVarnames(), printActiveVariables(), printExpr(), printIndicatorCons(), printLinearRow(), printNonlinearRow(), printSOSCons(), and SCIPwriteGms().

◆ GMS_PRINTLEN

#define GMS_PRINTLEN   100

Definition at line 72 of file reader_gms.c.

Referenced by appendLine(), and printExpr().

◆ GMS_DEFAULT_BIGM

#define GMS_DEFAULT_BIGM   1e+6

Definition at line 73 of file reader_gms.c.

Referenced by SCIPincludeReaderGms().

◆ GMS_DEFAULT_INDICATORREFORM

#define GMS_DEFAULT_INDICATORREFORM   's'

Definition at line 74 of file reader_gms.c.

Referenced by SCIPincludeReaderGms().

◆ GMS_DEFAULT_SIGNPOWER

#define GMS_DEFAULT_SIGNPOWER   FALSE

Definition at line 75 of file reader_gms.c.

Referenced by SCIPincludeReaderGms().

Function Documentation

◆ getActiveVariables()

static SCIP_RETCODE getActiveVariables ( SCIP scip,
SCIP_VAR ***  vars,
SCIP_Real **  scalars,
int *  nvars,
int *  varssize,
SCIP_Real constant,
SCIP_Bool  transformed 
)
static

transforms given variables, scalars, and constant to the corresponding active variables, scalars, and constant

Parameters
scipSCIP data structure
varspointer to vars array to get active variables for
scalarspointer to scalars a_1, ..., a_n in linear sum a_1*x_1 + ... + a_n*x_n + c
nvarspointer to number of variables and values in vars and vals array
varssizepointer to length of vars and scalars array
constantpointer to constant c in linear sum a_1*x_1 + ... + a_n*x_n + c
transformedtransformed constraint?

Definition at line 85 of file reader_gms.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPcalcMemGrowSize(), SCIPgetProbvarLinearSum(), SCIPreallocBufferArray, SCIPvarGetOrigvarSum(), and TRUE.

Referenced by printActiveVariables(), printExpr(), and printLinearCons().

◆ clearLine()

static void clearLine ( char *  linebuffer,
int *  linecnt 
)
static

clears the given line buffer

Parameters
linebufferline
linecntnumber of characters in line

Definition at line 135 of file reader_gms.c.

References NULL.

Referenced by endLine(), endLineNoNewline(), printIndicatorCons(), printLinearRow(), printNonlinearRow(), printSOSCons(), and SCIPwriteGms().

◆ endLine()

static void endLine ( SCIP scip,
FILE *  file,
char *  linebuffer,
int *  linecnt 
)
static

ends the given line with '\0' and prints it to the given file stream, with a newline at the end

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
linebufferline
linecntnumber of characters in line

Definition at line 149 of file reader_gms.c.

References clearLine(), GMS_MAX_LINELEN, NULL, and SCIPinfoMessage().

Referenced by appendLine(), printIndicatorCons(), printLinearRow(), printNonlinearRow(), printSOSCons(), and SCIPwriteGms().

◆ endLineNoNewline()

static void endLineNoNewline ( SCIP scip,
FILE *  file,
char *  linebuffer,
int *  linecnt 
)
static

ends the given line with '\0' and prints it to the given file stream, without a newline at the end

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
linebufferline
linecntnumber of characters in line

Definition at line 171 of file reader_gms.c.

References clearLine(), GMS_MAX_LINELEN, NULL, and SCIPinfoMessage().

Referenced by printExpr().

◆ appendLine()

static void appendLine ( SCIP scip,
FILE *  file,
char *  linebuffer,
int *  linecnt,
const char *  extension 
)
static

appends extension to line and prints it to the give file stream if the line exceeded the length given in the define GMS_PRINTLEN

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
linebufferline
linecntnumber of characters in line
extensionstring to extend the line

Definition at line 194 of file reader_gms.c.

References endLine(), GMS_MAX_PRINTLEN, GMS_PRINTLEN, NULL, and SCIPdebugMsg.

Referenced by printActiveVariables(), printExpr(), printIndicatorCons(), printLinearRow(), printNonlinearRow(), printSOSCons(), and SCIPwriteGms().

◆ conformName()

static void conformName ( char *  name)
static

checks string for occurences of bad symbols and replace those by '_'

Parameters
namestring to adjust

Definition at line 226 of file reader_gms.c.

References badchars, and NULL.

Referenced by printConformName().

◆ printConformName()

static SCIP_RETCODE printConformName ( SCIP scip,
char *  t,
int  len,
const char *  name 
)
static
Parameters
scipSCIP data structure
ttarget string
lenlength of t
namesource string or format string

Definition at line 250 of file reader_gms.c.

References conformName(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPgetBoolParam(), and SCIPsnprintf().

Referenced by printActiveVariables(), printExpr(), printIndicatorCons(), printLinearRow(), printNonlinearRow(), printSOSCons(), and SCIPwriteGms().

◆ printActiveVariables()

static SCIP_RETCODE printActiveVariables ( SCIP scip,
FILE *  file,
char *  linebuffer,
int *  linecnt,
const char *  prefix,
const char *  suffix,
int  nvars,
SCIP_VAR **  vars,
SCIP_Real vals,
SCIP_Bool  transformed 
)
static
Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
linebufferline
linecntnumber of characters in line
prefixprefix (maybe NULL)
suffixsuffix (maybe NULL)
nvarsnumber of variables
varsarray of variables
valsarray of values (or NULL if all ones)
transformedtransformed constraint?

Definition at line 275 of file reader_gms.c.

References appendLine(), getActiveVariables(), GMS_MAX_NAMELEN, GMS_MAX_PRINTLEN, NULL, printConformName(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPduplicateBufferArray, SCIPfreeBufferArray, SCIPisEQ(), SCIPisZero(), SCIPsnprintf(), and SCIPvarGetName().

Referenced by printIndicatorCons(), printSOSCons(), and SCIPwriteGms().

◆ printLinearRow()

static SCIP_RETCODE printLinearRow ( SCIP scip,
FILE *  file,
const char *  rowname,
const char *  rownameextension,
const char *  type,
int  nvars,
SCIP_VAR **  vars,
SCIP_Real vals,
SCIP_Real  rhs 
)
static
Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
rownamerow name
rownameextensionrow name extension
typerow type ("=e=", "=l=", or "=g=")
nvarsnumber of variables
varsarray of variables
valsarray of values
rhsright hand side

Definition at line 431 of file reader_gms.c.

References appendLine(), clearLine(), endLine(), GMS_MAX_NAMELEN, GMS_MAX_PRINTLEN, NULL, printConformName(), SCIP_CALL, SCIP_OKAY, SCIPisZero(), SCIPsnprintf(), and SCIPvarGetName().

Referenced by printLinearCons().

◆ printLinearCons()

static SCIP_RETCODE printLinearCons ( SCIP scip,
FILE *  file,
const char *  rowname,
int  nvars,
SCIP_VAR **  vars,
SCIP_Real vals,
SCIP_Real  lhs,
SCIP_Real  rhs,
SCIP_Bool  transformed 
)
static

prints given linear constraint information in GAMS format to file stream

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
rownamename of the row
nvarsnumber of variables
varsarray of variables
valsarray of coefficients values (or NULL if all coefficient values are 1)
lhsleft hand side
rhsright hand side
transformedtransformed constraint?

Definition at line 518 of file reader_gms.c.

References getActiveVariables(), NULL, printLinearRow(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPduplicateBufferArray, SCIPfreeBufferArray, SCIPisEQ(), and SCIPisInfinity().

Referenced by SCIPwriteGms().

◆ printIndicatorCons()

static SCIP_RETCODE printIndicatorCons ( SCIP scip,
FILE *  file,
const char *  rowname,
SCIP_VAR z,
SCIP_VAR s,
SCIP_Bool sossetdeclr,
SCIP_Bool  transformed 
)
static
Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
rownamerow name
zindicating variable (binary)
sslack variable
sossetdeclrbuffer to store whether we declared the SOS set for indicator reform
transformedtransformed constraint?

Definition at line 613 of file reader_gms.c.

References appendLine(), clearLine(), endLine(), GMS_MAX_NAMELEN, GMS_MAX_PRINTLEN, NULL, printActiveVariables(), printConformName(), SCIP_CALL, SCIP_ERROR, SCIP_OKAY, SCIP_Real, SCIPerrorMessage, SCIPgetCharParam(), SCIPgetNegatedVar(), SCIPgetRealParam(), SCIPinfoMessage(), SCIPisInfinity(), SCIPsnprintf(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarIsBinary(), SCIPvarIsNegated(), SCIPwarningMessage(), and TRUE.

Referenced by SCIPwriteGms().

◆ printSOSCons()

static SCIP_RETCODE printSOSCons ( SCIP scip,
FILE *  file,
const char *  rowname,
int  nvars,
SCIP_VAR **  vars,
int  sostype,
SCIP_Bool  transformed 
)
static
Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
rownamerow name
nvarsnumber of variables in SOS
varsvariables in SOS
sostypetype of SOS: 1 or 2
transformedtransformed constraint?

Definition at line 741 of file reader_gms.c.

References appendLine(), clearLine(), endLine(), GMS_MAX_NAMELEN, GMS_MAX_PRINTLEN, NULL, printActiveVariables(), printConformName(), SCIP_CALL, SCIP_OKAY, SCIP_Real, and SCIPsnprintf().

Referenced by SCIPwriteGms().

◆ printExpr()

static SCIP_RETCODE printExpr ( SCIP scip,
FILE *  file,
char *  linebuffer,
int *  linecnt,
SCIP_Bool nsmooth,
SCIP_Bool nqcons,
SCIP_Bool  transformed,
SCIP_EXPR expr 
)
static

prints expression in GAMS format to file stream

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
linebufferline buffer of length GMS_MAX_PRINTLEN
linecntnumber of characters in line so far
nsmoothbuffer to store whether we printed a nonsmooth function
nqconsbuffer to update whether we are still quadratic
transformedexpression belongs to transformed constraint?
exprexpression to print

Definition at line 798 of file reader_gms.c.

References appendLine(), endLineNoNewline(), EPSISINT, FALSE, getActiveVariables(), GMS_MAX_NAMELEN, GMS_PRINTLEN, NULL, printConformName(), REALABS, SCIP_Bool, SCIP_CALL, SCIP_EXPRITER_ALLSTAGES, SCIP_EXPRITER_DFS, SCIP_EXPRITER_ENTEREXPR, SCIP_EXPRITER_LEAVEEXPR, SCIP_EXPRITER_VISITEDCHILD, SCIP_EXPRITER_VISITINGCHILD, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPcreateExpriter(), SCIPexprGetHdlr(), SCIPexprhdlrGetPrecedence(), SCIPexpriterGetChildIdxDFS(), SCIPexpriterGetNext(), SCIPexpriterGetParentDFS(), SCIPexpriterGetStageDFS(), SCIPexpriterInit(), SCIPexpriterIsEnd(), SCIPexpriterSetStagesDFS(), SCIPfreeBufferArray, SCIPfreeExpriter(), SCIPgetExponentExprPow(), SCIPgetExprhdlrSum(), SCIPgetVarExprVar(), SCIPinfoMessage(), SCIPisExprAbs(), SCIPisExprPower(), SCIPisExprProduct(), SCIPisExprSum(), SCIPisExprValue(), SCIPisExprVar(), SCIPvarGetName(), and TRUE.

Referenced by printNonlinearRow().

◆ printNonlinearRow()

static SCIP_RETCODE printNonlinearRow ( SCIP scip,
FILE *  file,
const char *  rowname,
const char *  rownameextension,
const char *  type,
SCIP_EXPR expr,
SCIP_Real  rhs,
SCIP_Bool  transformed,
SCIP_Bool nsmooth,
SCIP_Bool nqcons 
)
static

print nonlinear row in GAMS format to file stream

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
rownamerow name
rownameextensionrow name extension
typerow type ("=e=", "=l=", or "=g=")
exprexpression
rhsright hand side
transformedtransformed constraint?
nsmoothbuffer to store whether we printed a nonsmooth function
nqconsbuffer to update whether we are still quadratic

Definition at line 1015 of file reader_gms.c.

References appendLine(), clearLine(), endLine(), GMS_MAX_NAMELEN, GMS_MAX_PRINTLEN, NULL, printConformName(), printExpr(), SCIP_CALL, SCIP_OKAY, and SCIPsnprintf().

Referenced by printNonlinearCons().

◆ printNonlinearCons()

static SCIP_RETCODE printNonlinearCons ( SCIP scip,
FILE *  file,
const char *  rowname,
SCIP_EXPR expr,
SCIP_Real  lhs,
SCIP_Real  rhs,
SCIP_Bool  transformed,
SCIP_Bool nsmooth,
SCIP_Bool nqcons 
)
static

print nonlinear row in GAMS format to file stream (performing retransformation to active linear variables)

Parameters
scipSCIP data structure
fileoutput file (or NULL for standard output)
rownamerow name
exprexpression
lhsleft hand side
rhsright hand side
transformedtransformed constraint?
nsmoothbuffer to store whether we printed a nonsmooth function
nqconsbuffer to update whether we are still quadratic

Definition at line 1060 of file reader_gms.c.

References NULL, printNonlinearRow(), SCIP_CALL, SCIP_OKAY, SCIPcheckExprQuadratic(), SCIPexprAreQuadraticExprsVariables(), SCIPisEQ(), and SCIPisInfinity().

Referenced by SCIPwriteGms().

◆ checkVarnames()

static SCIP_RETCODE checkVarnames ( SCIP scip,
SCIP_VAR **  vars,
int  nvars 
)
static

method check if the variable names are not longer than GMS_MAX_NAMELEN

Parameters
scipSCIP data structure
varsarray of variables
nvarsnumber of variables

Definition at line 1110 of file reader_gms.c.

References badchars, GMS_MAX_NAMELEN, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPgetBoolParam(), SCIPinfoMessage(), SCIPvarGetName(), and SCIPwarningMessage().

Referenced by SCIPwriteGms().

◆ checkConsnames()

static SCIP_RETCODE checkConsnames ( SCIP scip,
SCIP_CONS **  conss,
int  nconss,
SCIP_Bool  transformed 
)
static

method check if the constraint names are not longer than GMS_MAX_NAMELEN

Parameters
scipSCIP data structure
conssarray of constraints
nconssnumber of constraints
transformedTRUE iff problem is the transformed problem

Definition at line 1169 of file reader_gms.c.

References badchars, GMS_MAX_NAMELEN, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPconsIsEnabled(), SCIPconsIsTransformed(), SCIPgetBoolParam(), SCIPgetLhsLinear(), SCIPgetLhsNonlinear(), SCIPgetRhsNonlinear(), SCIPinfoMessage(), SCIPisEQ(), and SCIPwarningMessage().

Referenced by SCIPwriteGms().

◆ SCIP_DECL_READERCOPY()

static SCIP_DECL_READERCOPY ( readerCopyGms  )
static

copy method for reader plugins (called when SCIP copies plugins)

Definition at line 1262 of file reader_gms.c.

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

◆ SCIP_DECL_READERWRITE()

static SCIP_DECL_READERWRITE ( readerWriteGms  )
static

problem writing method of reader

Definition at line 1277 of file reader_gms.c.

References SCIP_CALL, SCIP_OKAY, and SCIPwriteGms().

Variable Documentation

◆ badchars

const char badchars[] = "#*+/-@$[](){}"
static

Definition at line 81 of file reader_gms.c.

Referenced by checkConsnames(), checkVarnames(), and conformName().