Scippy

GCG

Branch-and-Price & Column Generation for Everyone

reader_blk.cpp File Reference

Detailed Description

BLK file reader for structure information.

Author
Gerald Gamrath
Martin Bergner
Christian Puchert

This reader reads in a blk-file that defines the structur to be used for the decomposition. The structure is defined variable-wise, i.e., the number of blocks and the variables belonging to each block are defined. Afterwards, each constraint that has only variables of one block is added to that block, constraints having variables of more than one block go into the master. If needed, constraints can also be forced into the master, even if they could be transferred to one block.

The keywords are:

  • Presolved: to be followed by either 0 or 1 indicating that the decomposition is for the presolved or unpresolved problem
  • NBlocks: to be followed by a line giving the number of blocks
  • Block i with 1 <= i <= nblocks: to be followed by the names of the variables belonging to block i, one per line.
  • Masterconss: to be followed by names of constraints, one per line, that should go into the master, even if they only contain variables of one block and could thus be added to this block.

Definition in file reader_blk.cpp.

#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <strings.h>
#include <ctype.h>
#include "reader_blk.h"
#include "relax_gcg.h"
#include "pub_gcgvar.h"
#include "pub_decomp.h"
#include "cons_decomp.h"
#include "cons_decomp.hpp"
#include "scip_misc.h"
#include "class_partialdecomp.h"

Go to the source code of this file.

Data Structures

struct  BlkInput
 
struct  SCIP_ReaderData
 

Macros

#define READER_NAME   "blkreader"
 
#define READER_DESC   "file reader for structures in blk format"
 
#define READER_EXTENSION   "blk"
 
#define BLK_MAX_LINELEN   65536
 
#define BLK_MAX_PUSHEDTOKENS   2
 

Typedefs

typedef enum BlkSection BLKSECTION
 
typedef enum BlkExpType BLKEXPTYPE
 
typedef struct BlkInput BLKINPUT
 

Enumerations

enum  BlkSection {
  BLK_START,
  BLK_PRESOLVED,
  BLK_NBLOCKS,
  BLK_BLOCK,
  BLK_MASTERCONSS,
  BLK_END
}
 
enum  BlkExpType {
  BLK_EXP_NONE,
  BLK_EXP_UNSIGNED,
  BLK_EXP_SIGNED
}
 

Functions

static void syntaxError (SCIP *scip, BLKINPUT *blkinput, const char *msg)
 
static SCIP_Bool hasError (BLKINPUT *blkinput)
 
static SCIP_Bool isDelimChar (char c)
 
static SCIP_Bool isTokenChar (char c)
 
static SCIP_Bool isValueChar (char c, char nextc, SCIP_Bool firstchar, SCIP_Bool *hasdot, BLKEXPTYPE *exptype)
 
static SCIP_Bool getNextLine (BLKINPUT *blkinput)
 
static void swapPointers (char **pointer1, char **pointer2)
 
static SCIP_Bool getNextToken (BLKINPUT *blkinput)
 
static void pushToken (BLKINPUT *blkinput)
 
static void swapTokenBuffer (BLKINPUT *blkinput)
 
static SCIP_Bool isInt (SCIP *scip, BLKINPUT *blkinput, int *value)
 
static SCIP_Bool isNewSection (SCIP *scip, BLKINPUT *blkinput)
 
static SCIP_RETCODE readStart (SCIP *scip, BLKINPUT *blkinput)
 
static SCIP_RETCODE readPresolved (SCIP *scip, BLKINPUT *blkinput)
 
static SCIP_RETCODE readNBlocks (SCIP *scip, gcg::PARTIALDECOMP *partialdec, BLKINPUT *blkinput)
 
static SCIP_RETCODE readBlock (SCIP *scip, BLKINPUT *blkinput, gcg::PARTIALDECOMP *partialdec, SCIP_READERDATA *readerdata)
 
static SCIP_RETCODE readMasterconss (SCIP *scip, BLKINPUT *blkinput, gcg::PARTIALDECOMP *partialdec, SCIP_READERDATA *readerdata)
 
static SCIP_RETCODE fillDecompStruct (SCIP *scip, BLKINPUT *blkinput, DEC_DECOMP *decomp, gcg::PARTIALDECOMP *partialdec, SCIP_READERDATA *readerdata)
 
static SCIP_RETCODE readBLKFile (SCIP *scip, SCIP_READER *reader, BLKINPUT *blkinput, const char *filename)
 
static SCIP_DECL_READERFREE (readerFreeBlk)
 
static SCIP_DECL_READERREAD (readerReadBlk)
 
static SCIP_DECL_READERWRITE (readerWriteBlk)
 
SCIP_RETCODE SCIPincludeReaderBlk (SCIP *scip)
 
SCIP_RETCODE SCIPreadBlk (SCIP *scip, const char *filename, SCIP_RESULT *result)
 

Variables

static const int NOVALUE = -1
 
static const int LINKINGVALUE = -2
 
static const char delimchars [] = " \f\n\r\t\v"
 
static const char tokenchars [] = "-+:<>="
 
static const char commentchars [] = "\\"
 

Macro Definition Documentation

◆ READER_NAME

#define READER_NAME   "blkreader"

Definition at line 68 of file reader_blk.cpp.

◆ READER_DESC

#define READER_DESC   "file reader for structures in blk format"

Definition at line 69 of file reader_blk.cpp.

◆ READER_EXTENSION

#define READER_EXTENSION   "blk"

Definition at line 70 of file reader_blk.cpp.

◆ BLK_MAX_LINELEN

#define BLK_MAX_LINELEN   65536

Definition at line 75 of file reader_blk.cpp.

◆ BLK_MAX_PUSHEDTOKENS

#define BLK_MAX_PUSHEDTOKENS   2

Definition at line 76 of file reader_blk.cpp.

Typedef Documentation

◆ BLKSECTION

typedef enum BlkSection BLKSECTION

Definition at line 83 of file reader_blk.cpp.

◆ BLKEXPTYPE

typedef enum BlkExpType BLKEXPTYPE

Definition at line 90 of file reader_blk.cpp.

◆ BLKINPUT

typedef struct BlkInput BLKINPUT

Definition at line 111 of file reader_blk.cpp.

Enumeration Type Documentation

◆ BlkSection

enum BlkSection

section in BLK File

Enumerator
BLK_START 
BLK_PRESOLVED 
BLK_NBLOCKS 
BLK_BLOCK 
BLK_MASTERCONSS 
BLK_END 

Definition at line 79 of file reader_blk.cpp.

◆ BlkExpType

enum BlkExpType

exponent indicator of the a value

Enumerator
BLK_EXP_NONE 
BLK_EXP_UNSIGNED 
BLK_EXP_SIGNED 

Definition at line 86 of file reader_blk.cpp.

Function Documentation

◆ syntaxError()

static void syntaxError ( SCIP *  scip,
BLKINPUT blkinput,
const char *  msg 
)
static

issues an error message and marks the BLK data to have errors

Parameters
scipSCIP data structure
blkinputBLK reading data
msgerror message

Definition at line 142 of file reader_blk.cpp.

References BLK_END, BlkInput::haserror, BlkInput::linebuf, BlkInput::linenumber, BlkInput::linepos, BlkInput::section, and BlkInput::token.

Referenced by isNewSection(), readBlock(), readMasterconss(), readNBlocks(), and readPresolved().

◆ hasError()

static SCIP_Bool hasError ( BLKINPUT blkinput)
static

returns whether a syntax error was detected

Parameters
blkinputBLK reading data

Definition at line 170 of file reader_blk.cpp.

References BlkInput::haserror.

Referenced by readBLKFile().

◆ isDelimChar()

static SCIP_Bool isDelimChar ( char  c)
static

returns whether the given character is a token delimiter

Parameters
cinput character

Definition at line 181 of file reader_blk.cpp.

References delimchars.

Referenced by getNextToken().

◆ isTokenChar()

static SCIP_Bool isTokenChar ( char  c)
static

returns whether the given character is a single token

Parameters
cinput character

Definition at line 190 of file reader_blk.cpp.

References tokenchars.

Referenced by getNextToken().

◆ isValueChar()

static SCIP_Bool isValueChar ( char  c,
char  nextc,
SCIP_Bool  firstchar,
SCIP_Bool *  hasdot,
BLKEXPTYPE exptype 
)
static

returns whether the current character is member of a value string

Parameters
cinput character
nextcnext input character
firstcharis the given character the first char of the token?
hasdotpointer to update the dot flag
exptypepointer to update the exponent type

Definition at line 199 of file reader_blk.cpp.

References BLK_EXP_NONE, BLK_EXP_SIGNED, and BLK_EXP_UNSIGNED.

Referenced by getNextToken().

◆ getNextLine()

static SCIP_Bool getNextLine ( BLKINPUT blkinput)
static

reads the next line from the input file into the line buffer; skips comments; returns whether a line could be read

Parameters
blkinputBLK reading data

Definition at line 243 of file reader_blk.cpp.

References BLK_MAX_LINELEN, commentchars, BlkInput::file, BlkInput::haserror, BlkInput::linebuf, BlkInput::linenumber, and BlkInput::linepos.

Referenced by getNextToken().

◆ swapPointers()

static void swapPointers ( char **  pointer1,
char **  pointer2 
)
static

swaps the addresses of two pointers

Parameters
pointer1first pointer
pointer2second pointer

Definition at line 287 of file reader_blk.cpp.

Referenced by getNextToken(), pushToken(), and swapTokenBuffer().

◆ getNextToken()

static SCIP_Bool getNextToken ( BLKINPUT blkinput)
static

reads the next token from the input file into the token buffer; returns whether a token was read

Parameters
blkinputBLK reading data

Definition at line 301 of file reader_blk.cpp.

References BLK_END, BLK_EXP_NONE, BLK_MAX_LINELEN, getNextLine(), isDelimChar(), isTokenChar(), isValueChar(), BlkInput::linebuf, BlkInput::linenumber, BlkInput::linepos, BlkInput::npushedtokens, BlkInput::pushedtokens, BlkInput::section, swapPointers(), and BlkInput::token.

Referenced by isNewSection(), readBlock(), readMasterconss(), readNBlocks(), readPresolved(), and readStart().

◆ pushToken()

static void pushToken ( BLKINPUT blkinput)
static

puts the current token on the token stack, such that it is read at the next call to getNextToken()

Parameters
blkinputBLK reading data

Definition at line 400 of file reader_blk.cpp.

References BLK_MAX_PUSHEDTOKENS, BlkInput::npushedtokens, BlkInput::pushedtokens, swapPointers(), and BlkInput::token.

Referenced by isNewSection().

◆ swapTokenBuffer()

static void swapTokenBuffer ( BLKINPUT blkinput)
static

swaps the current token with the token buffer

Parameters
blkinputBLK reading data

Definition at line 413 of file reader_blk.cpp.

References swapPointers(), BlkInput::token, and BlkInput::tokenbuf.

Referenced by isNewSection().

◆ isInt()

static SCIP_Bool isInt ( SCIP *  scip,
BLKINPUT blkinput,
int *  value 
)
static

returns whether the current token is a value

Parameters
scipSCIP data structure
blkinputBLK reading data
valuepointer to store the value (unchanged, if token is no value)

Definition at line 424 of file reader_blk.cpp.

References BlkInput::token.

Referenced by isNewSection(), readNBlocks(), and readPresolved().

◆ isNewSection()

static SCIP_Bool isNewSection ( SCIP *  scip,
BLKINPUT blkinput 
)
static

checks whether the current token is a section identifier, and if yes, switches to the corresponding section

Parameters
scipSCIP data structure
blkinputBLK reading data

Definition at line 452 of file reader_blk.cpp.

References BLK_BLOCK, BLK_END, BLK_MASTERCONSS, BLK_NBLOCKS, BLK_PRESOLVED, BlkInput::blocknr, getNextToken(), isInt(), BlkInput::linenumber, pushToken(), BlkInput::section, swapTokenBuffer(), syntaxError(), and BlkInput::token.

Referenced by readBlock(), readMasterconss(), readNBlocks(), readPresolved(), and readStart().

◆ readStart()

static SCIP_RETCODE readStart ( SCIP *  scip,
BLKINPUT blkinput 
)
static

reads the header of the file

Parameters
scipSCIP data structure
blkinputBLK reading data

Definition at line 542 of file reader_blk.cpp.

References getNextToken(), and isNewSection().

Referenced by readBLKFile().

◆ readPresolved()

static SCIP_RETCODE readPresolved ( SCIP *  scip,
BLKINPUT blkinput 
)
static

reads the presolved section

Parameters
scipSCIP data structure
blkinputDEC reading data

Definition at line 563 of file reader_blk.cpp.

References getNextToken(), BlkInput::haspresolvesection, isInt(), isNewSection(), BlkInput::presolved, and syntaxError().

Referenced by readBLKFile().

◆ readNBlocks()

static SCIP_RETCODE readNBlocks ( SCIP *  scip,
gcg::PARTIALDECOMP partialdec,
BLKINPUT blkinput 
)
static

reads the nblocks section

Parameters
scipSCIP data structure
partialdecpartialdec to edit
blkinputBLK reading data

Definition at line 599 of file reader_blk.cpp.

References getNextToken(), isInt(), isNewSection(), BlkInput::nblocks, NOVALUE, gcg::PARTIALDECOMP::setNBlocks(), and syntaxError().

Referenced by readBLKFile().

◆ readBlock()

static SCIP_RETCODE readBlock ( SCIP *  scip,
BLKINPUT blkinput,
gcg::PARTIALDECOMP partialdec,
SCIP_READERDATA *  readerdata 
)
static

reads a block section

Parameters
scipSCIP data structure
blkinputBLK reading data
partialdecpartialdec to edit
readerdatareader data

Definition at line 641 of file reader_blk.cpp.

References BlkInput::blocknr, gcg::PARTIALDECOMP::fixVarToBlockByName(), gcg::PARTIALDECOMP::fixVarToLinkingByName(), getNextToken(), isNewSection(), LINKINGVALUE, NOVALUE, syntaxError(), and BlkInput::token.

Referenced by readBLKFile().

◆ readMasterconss()

static SCIP_RETCODE readMasterconss ( SCIP *  scip,
BLKINPUT blkinput,
gcg::PARTIALDECOMP partialdec,
SCIP_READERDATA *  readerdata 
)
static

reads the masterconss section

Parameters
scipSCIP data structure
blkinputBLK reading data
partialdecPARTIALDECOMP to edit
readerdatareader data

Definition at line 722 of file reader_blk.cpp.

References gcg::PARTIALDECOMP::fixConsToMasterByName(), getNextToken(), isNewSection(), BlkInput::nblocks, NOVALUE, syntaxError(), and BlkInput::token.

Referenced by readBLKFile().

◆ fillDecompStruct()

static SCIP_RETCODE fillDecompStruct ( SCIP *  scip,
BLKINPUT blkinput,
DEC_DECOMP decomp,
gcg::PARTIALDECOMP partialdec,
SCIP_READERDATA *  readerdata 
)
static

fills the whole Decomp struct after the blk file has been read

Parameters
scipSCIP data structure
blkinputblk reading data
decompDEC_DECOMP structure to fill
partialdecpartialdec to fill for internal handling
readerdatareader data

Definition at line 760 of file reader_blk.cpp.

References DEC_DECTYPE_ARROWHEAD, DECdecompSetDetector(), DECdecompSetNBlocks(), DECdecompSetPresolved(), DECdecompSetType(), DECfilloutDecompFromConstoblock(), gcg::PARTIALDECOMP::fixConsToBlockByName(), gcg::PARTIALDECOMP::fixConsToMasterByName(), gcg::PARTIALDECOMP::fixVarToMasterByName(), GCGconsGetNVars(), GCGconsGetVars(), LINKINGVALUE, BlkInput::nblocks, NOVALUE, and BlkInput::presolved.

Referenced by readBLKFile().

◆ readBLKFile()

static SCIP_RETCODE readBLKFile ( SCIP *  scip,
SCIP_READER *  reader,
BLKINPUT blkinput,
const char *  filename 
)
static

◆ SCIP_DECL_READERFREE()

static SCIP_DECL_READERFREE ( readerFreeBlk  )
static

destructor of reader to free user data (called when SCIP is exiting)

Definition at line 1101 of file reader_blk.cpp.

◆ SCIP_DECL_READERREAD()

static SCIP_DECL_READERREAD ( readerReadBlk  )
static

problem reading method of reader

Definition at line 1116 of file reader_blk.cpp.

References SCIPreadBlk().

◆ SCIP_DECL_READERWRITE()

static SCIP_DECL_READERWRITE ( readerWriteBlk  )
static

problem writing method of reader

Definition at line 1132 of file reader_blk.cpp.

◆ SCIPincludeReaderBlk()

SCIP_RETCODE SCIPincludeReaderBlk ( SCIP *  scip)

includes the blk file reader in SCIP

Parameters
scipSCIP data structure

Definition at line 1142 of file reader_blk.cpp.

References READER_DESC, READER_EXTENSION, and READER_NAME.

Referenced by SCIPincludeGcgPlugins().

◆ SCIPreadBlk()

SCIP_RETCODE SCIPreadBlk ( SCIP *  scip,
const char *  filename,
SCIP_RESULT *  result 
)
Parameters
scipSCIP data structure
filenamefull path and name of file to read, or NULL if stdin should be used
resultpointer to store the result of the file reading call

Definition at line 1160 of file reader_blk.cpp.

References BLK_MAX_LINELEN, BLK_MAX_PUSHEDTOKENS, BLK_START, BlkInput::blocknr, BlkInput::file, BlkInput::haserror, BlkInput::haspresolvesection, BlkInput::linebuf, BlkInput::linenumber, BlkInput::linepos, BlkInput::nblocks, BlkInput::npushedtokens, BlkInput::presolved, BlkInput::pushedtokens, readBLKFile(), READER_NAME, BlkInput::section, BlkInput::token, and BlkInput::tokenbuf.

Referenced by SCIP_DECL_READERREAD().

Variable Documentation

◆ NOVALUE

const int NOVALUE = -1
static

◆ LINKINGVALUE

const int LINKINGVALUE = -2
static

Definition at line 128 of file reader_blk.cpp.

Referenced by fillDecompStruct(), and readBlock().

◆ delimchars

const char delimchars[] = " \f\n\r\t\v"
static

Definition at line 129 of file reader_blk.cpp.

Referenced by isDelimChar().

◆ tokenchars

const char tokenchars[] = "-+:<>="
static

Definition at line 130 of file reader_blk.cpp.

Referenced by isTokenChar().

◆ commentchars

const char commentchars[] = "\\"
static

Definition at line 131 of file reader_blk.cpp.

Referenced by getNextLine().