1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 /* */ 3 /* This file is part of the program and library */ 4 /* SCIP --- Solving Constraint Integer Programs */ 5 /* */ 6 /* Copyright (c) 2002-2023 Zuse Institute Berlin (ZIB) */ 7 /* */ 8 /* Licensed under the Apache License, Version 2.0 (the "License"); */ 9 /* you may not use this file except in compliance with the License. */ 10 /* You may obtain a copy of the License at */ 11 /* */ 12 /* http://www.apache.org/licenses/LICENSE-2.0 */ 13 /* */ 14 /* Unless required by applicable law or agreed to in writing, software */ 15 /* distributed under the License is distributed on an "AS IS" BASIS, */ 16 /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ 17 /* See the License for the specific language governing permissions and */ 18 /* limitations under the License. */ 19 /* */ 20 /* You should have received a copy of the Apache-2.0 license */ 21 /* along with SCIP; see the file LICENSE. If not visit scipopt.org. */ 22 /* */ 23 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 24 25 /**@file reader_rlp.c 26 * @ingroup DEFPLUGINS_READER 27 * @brief RLP file reader (LP format with generic variables and row names) 28 * @author Stefan Heinz 29 */ 30 31 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 32 33 #include "scip/pub_message.h" 34 #include "scip/pub_reader.h" 35 #include "scip/reader_lp.h" 36 #include "scip/reader_rlp.h" 37 #include "scip/scip_message.h" 38 #include "scip/scip_reader.h" 39 #include "scip/scip_solvingstats.h" 40 #include <string.h> 41 42 #define READER_NAME "rlpreader" 43 #define READER_DESC "file reader for MIPs in IBM CPLEX's RLP file format" 44 #define READER_EXTENSION "rlp" 45 46 47 /* 48 * Callback methods of reader 49 */ 50 51 /** copy method for reader plugins (called when SCIP copies plugins) */ 52 static 53 SCIP_DECL_READERCOPY(readerCopyRlp) 54 { /*lint --e{715}*/ 55 assert(scip != NULL); 56 assert(reader != NULL); 57 assert(strcmp(SCIPreaderGetName(reader), READER_NAME) == 0); 58 59 /* call inclusion method of reader */ 60 SCIP_CALL( SCIPincludeReaderRlp(scip) ); 61 62 return SCIP_OKAY; 63 } 64 65 66 /** problem reading method of reader */ 67 static 68 SCIP_DECL_READERREAD(readerReadRlp) 69 { /*lint --e{715}*/ 70 71 SCIP_CALL( SCIPreadLp(scip, reader, filename, result) ); 72 73 return SCIP_OKAY; 74 } 75 76 77 /** problem writing method of reader */ 78 static 79 SCIP_DECL_READERWRITE(readerWriteRlp) 80 { /*lint --e{715}*/ 81 if( genericnames ) 82 { 83 SCIP_CALL( SCIPwriteLp(scip, file, name, transformed, objsense, objscale, objoffset, vars, 84 nvars, nbinvars, nintvars, nimplvars, ncontvars, conss, nconss, result) ); 85 } 86 else 87 { 88 SCIPwarningMessage(scip, "RLP format is LP format with generic variable and constraint names\n"); 89 90 if( transformed ) 91 { 92 SCIPwarningMessage(scip, "write transformed problem with generic variable and constraint names\n"); 93 SCIP_CALL( SCIPprintTransProblem(scip, file, "rlp", TRUE) ); 94 } 95 else 96 { 97 SCIPwarningMessage(scip, "write original problem with generic variable and constraint names\n"); 98 SCIP_CALL( SCIPprintOrigProblem(scip, file, "rlp", TRUE) ); 99 } 100 *result = SCIP_SUCCESS; 101 } 102 return SCIP_OKAY; 103 } 104 105 106 /* 107 * reader specific interface methods 108 */ 109 110 /** includes the rlp file reader in SCIP */ 111 SCIP_RETCODE SCIPincludeReaderRlp( 112 SCIP* scip /**< SCIP data structure */ 113 ) 114 { 115 SCIP_READER* reader; 116 117 /* include reader */ 118 SCIP_CALL( SCIPincludeReaderBasic(scip, &reader, READER_NAME, READER_DESC, READER_EXTENSION, NULL) ); 119 120 assert(reader != NULL); 121 122 /* set non fundamental callbacks via setter functions */ 123 SCIP_CALL( SCIPsetReaderCopy(scip, reader, readerCopyRlp) ); 124 SCIP_CALL( SCIPsetReaderRead(scip, reader, readerReadRlp) ); 125 SCIP_CALL( SCIPsetReaderWrite(scip, reader, readerWriteRlp) ); 126 127 return SCIP_OKAY; 128 } 129