Detailed Description
BLK file reader for structure information.
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
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 |
issues an error message and marks the BLK data to have errors
- Parameters
-
scip SCIP data structure blkinput BLK reading data msg error 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 |
returns whether a syntax error was detected
- Parameters
-
blkinput BLK reading data
Definition at line 170 of file reader_blk.cpp.
References BlkInput::haserror.
Referenced by readBLKFile().
◆ isDelimChar()
|
static |
returns whether the given character is a token delimiter
- Parameters
-
c input character
Definition at line 181 of file reader_blk.cpp.
References delimchars.
Referenced by getNextToken().
◆ isTokenChar()
|
static |
returns whether the given character is a single token
- Parameters
-
c input character
Definition at line 190 of file reader_blk.cpp.
References tokenchars.
Referenced by getNextToken().
◆ isValueChar()
|
static |
returns whether the current character is member of a value string
- Parameters
-
c input character nextc next input character firstchar is the given character the first char of the token? hasdot pointer to update the dot flag exptype pointer 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 |
reads the next line from the input file into the line buffer; skips comments; returns whether a line could be read
- Parameters
-
blkinput BLK 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 |
swaps the addresses of two pointers
- Parameters
-
pointer1 first pointer pointer2 second pointer
Definition at line 287 of file reader_blk.cpp.
Referenced by getNextToken(), pushToken(), and swapTokenBuffer().
◆ getNextToken()
|
static |
reads the next token from the input file into the token buffer; returns whether a token was read
- Parameters
-
blkinput BLK 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 |
puts the current token on the token stack, such that it is read at the next call to getNextToken()
- Parameters
-
blkinput BLK 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 |
swaps the current token with the token buffer
- Parameters
-
blkinput BLK reading data
Definition at line 413 of file reader_blk.cpp.
References swapPointers(), BlkInput::token, and BlkInput::tokenbuf.
Referenced by isNewSection().
◆ isInt()
|
static |
returns whether the current token is a value
- Parameters
-
scip SCIP data structure blkinput BLK reading data value pointer 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 |
checks whether the current token is a section identifier, and if yes, switches to the corresponding section
- Parameters
-
scip SCIP data structure blkinput BLK 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 |
reads the header of the file
- Parameters
-
scip SCIP data structure blkinput BLK reading data
Definition at line 542 of file reader_blk.cpp.
References getNextToken(), and isNewSection().
Referenced by readBLKFile().
◆ readPresolved()
|
static |
reads the presolved section
- Parameters
-
scip SCIP data structure blkinput DEC 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 |
reads the nblocks section
- Parameters
-
scip SCIP data structure partialdec partialdec to edit blkinput BLK 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 |
reads a block section
- Parameters
-
scip SCIP data structure blkinput BLK reading data partialdec partialdec to edit readerdata reader 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 |
reads the masterconss section
- Parameters
-
scip SCIP data structure blkinput BLK reading data partialdec PARTIALDECOMP to edit readerdata reader 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 |
fills the whole Decomp struct after the blk file has been read
- Parameters
-
scip SCIP data structure blkinput blk reading data decomp DEC_DECOMP structure to fill partialdec partialdec to fill for internal handling readerdata reader 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 |
reads an BLK file
- Parameters
-
scip SCIP data structure reader reader data structure blkinput BLK reading data filename name of the input file
Definition at line 915 of file reader_blk.cpp.
References BLK_BLOCK, BLK_END, BLK_MASTERCONSS, BLK_NBLOCKS, BLK_PRESOLVED, BLK_START, gcg::COMPLETED_CONSTOMASTER, DECdecompCreate(), DECdecompFree(), BlkInput::file, fillDecompStruct(), GCGconshdlrDecompAddPreexisitingPartialDec(), hasError(), BlkInput::haspresolvesection, BlkInput::nblocks, NOVALUE, BlkInput::presolved, readBlock(), readMasterconss(), readNBlocks(), readPresolved(), readStart(), BlkInput::section, and gcg::PARTIALDECOMP::setUsergiven().
Referenced by SCIPreadBlk().
◆ SCIP_DECL_READERFREE()
|
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 |
problem reading method of reader
Definition at line 1116 of file reader_blk.cpp.
References SCIPreadBlk().
◆ SCIP_DECL_READERWRITE()
|
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
-
scip SCIP 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
-
scip SCIP data structure filename full path and name of file to read, or NULL if stdin should be used result pointer 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
|
static |
Definition at line 127 of file reader_blk.cpp.
Referenced by fillDecompStruct(), readBLKFile(), readBlock(), readMasterconss(), and readNBlocks().
◆ LINKINGVALUE
|
static |
Definition at line 128 of file reader_blk.cpp.
Referenced by fillDecompStruct(), and readBlock().
◆ delimchars
|
static |
Definition at line 129 of file reader_blk.cpp.
Referenced by isDelimChar().
◆ tokenchars
|
static |
Definition at line 130 of file reader_blk.cpp.
Referenced by isTokenChar().
◆ commentchars
|
static |
Definition at line 131 of file reader_blk.cpp.
Referenced by getNextLine().