, __FILE__, __LINE__, _restat_); \
96 int* indices =
NULL;
100assert( masterscip !=
NULL);
102assert( lp !=
NULL);
109 for(j = 0; j < nmastervars; ++j)
144 int* indices =
NULL;
148assert( masterscip !=
NULL);
150assert( lp !=
NULL);
157 for(j = 0; j < nmastervars; ++j)
202assert( masterscip !=
NULL);
203assert( lp !=
NULL);
204assert( infeasible !=
NULL);
205assert( error !=
NULL);
257 SCIPwarningMessage(masterscip,
"The dual simplex produced a primal ray. Retrying with primal ...\n");
299*infeasible =
FALSE;
335assert( masterscip !=
NULL);
336assert( data !=
NULL);
337assert( mastersolution !=
NULL);
338assert( ncuts !=
NULL);
339assert( status !=
NULL);
340assert( data->lp !=
NULL);
341assert( data->m == nmastervars );
350assert( nmastervars <= ncols );
354 for(j = 0; j < nmastervars; ++j)
357 if( mastersolution[j] > 0.5 )
400 SCIPdebugMessage(
" size: %4d produced possible cover with objective value %f.\n", size, value);
408 for(j = 0; j < nmastervars; ++j)
432assert( candidate >= 0 );
433assert( ! S[candidate] );
434assert( sizeIIS > 0 );
436 SCIPdebugMessage(
" size: %4d add %4d with objective value %6g and alt-LP solution value %-8.4g (IIS size: %4d).\n",
437size, candidate, candobj, primsol[candidate], sizeIIS);
440S[candidate] =
TRUE;
447 for(j = 0; j < nmastervars; ++j)
451vars[cnt++] = mastervars[j];
453assert( cnt == sizeIIS );
457 SCIP_CALL(
SCIPcreateConsLogicor(masterscip, &cons, name, cnt, vars,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,
FALSE) );
459 SCIP_CALL(
SCIPcreateConsLogicor(masterscip, &cons,
"", cnt, vars,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,
FALSE) );
480 while(step < nmastervars);
512assert( origscip !=
NULL);
513assert( vars !=
NULL);
514assert( vals !=
NULL);
515assert(
SCIPisEQ(origscip, sign, 1.0) ||
SCIPisEQ(origscip, sign, -1.0) );
528matval[cnt++] = sign * rhscoef;
532 for(v = 0; v < nvars; ++v)
534assert( vars[v] !=
NULL);
536matval[cnt] = vals[v] * sign;
566assert( origscip !=
NULL);
567assert( lp !=
NULL);
572 for(c = 0; c < norigconss; ++c)
574 const char* origconshdlrname;
580origcons = origconss[c];
581assert( origcons !=
NULL);
584assert( origconshdlr !=
NULL);
587 if( strcmp(origconshdlrname,
"linear") == 0 )
595 else if( strcmp(origconshdlrname,
"setppc") == 0 )
614 else if( strcmp(origconshdlrname,
"logicor") == 0 )
621 else if( strcmp(origconshdlrname,
"knapsack") == 0 )
633 for( v = 0; v < norigconsvars; ++v )
634consvals[v] = (
SCIP_Real) origweights[v];
640 else if( strcmp(origconshdlrname,
"varbound") == 0 )
656 SCIPwarningMessage(origscip,
"Cannot handle constraints of type <%s>.\n", origconshdlrname);
671 while( isspace(**s) )
676 while( (**s != 0) && (! isspace(**s)) )
692assert( idx !=
NULL);
693assert( val !=
NULL);
696 while( isspace(**s) )
699status = sscanf(*s,
"%d:%lf", idx, val);
704 while( (**s != 0) && (! isspace(**s)) )
719 const char* filename,
734 intclass1 = INT_MAX;
735 intclass2 = INT_MAX;
740assert( nclass1 !=
NULL);
741assert( nclass2 !=
NULL);
746file = fopen(filename,
"r");
759 for(j = 0; j < nmaxvars; ++j)
767 SCIP_CALL(
SCIPcreateVar(
scip, &rhsvar,
"b", -
SCIPinfinity(
scip),
SCIPinfinity(
scip), 0.0,
SCIP_VARTYPE_CONTINUOUS,
TRUE,
FALSE,
NULL,
NULL,
NULL,
NULL,
NULL) );
771 if( boundsonclassifier )
775 while( ! feof(file) )
792 if( class1 == INT_MAX )
798 else if(
class!= class1 && class2 == INT_MAX )
806 if(
class!= class1 &&
class!= class2 )
808 SCIPerrorMessage(
"Invalid class value: %d (valid: %d, %d).\n",
class, class1, class2);
811 if(
class== class1 )
818assert(
class== class2 );
834 if( idx >= nmaxvars )
838newsize = 2 * nmaxvars;
843 for(j = nmaxvars; j < newsize; ++j)
851 if( vars[idx-1] ==
NULL)
854 if( boundsonclassifier )
856 SCIP_CALL(
SCIPcreateVar(
scip, &vars[idx-1], name, -1.0, 1.0, 0.0,
SCIP_VARTYPE_CONTINUOUS,
TRUE,
FALSE,
NULL,
NULL,
NULL,
NULL,
NULL) );
860 SCIP_CALL(
SCIPcreateVar(
scip, &vars[idx-1], name, -
SCIPinfinity(
scip),
SCIPinfinity(
scip), 0.0,
SCIP_VARTYPE_CONTINUOUS,
TRUE,
FALSE,
NULL,
NULL,
NULL,
NULL,
NULL) );
864assert( vars[idx-1] !=
NULL);
866consvars[cnt] = vars[idx-1];
867consvals[cnt++] = ((
SCIP_Real)
class) * val;
868assert( cnt <= nmaxvars );
873consvars[cnt] = rhsvar;
874consvals[cnt++] = -1.0 * ((
SCIP_Real)
class);
885 for(j = 0; j < nmaxvars; ++j)
887 if( vars[j] !=
NULL)
906 const char* filename,
907 const char* settingsname,
945 SCIPerrorMessage(
"Cannot extract problem name for filename <%s>.\n", filename);
951 SCIPinfoMessage(masterscip,
NULL,
"Finding a linear classifier minimizing the number misclassifications using a Benders approach.\n");
959 "miniisc/solvemasterapprox",
960 "Solve master problem approximately?",
964 "miniisc/mastergaplimit",
965 "gap bound for approximately solving the master problem",
969 "miniisc/masterstallnodes",
970 "stall nodes for the master problem",
974 "miniisc/reoptimization",
975 "Use reoptimization to solve master problem?",
979 "miniisc/boundsonclassifier",
980 "Add unit bounds on the classifier?",
984 if( settingsname !=
NULL)
988 SCIPinfoMessage(masterscip,
NULL,
"\nreading user parameter file <%s> ...\n\n", settingsname);
994 SCIPwarningMessage(masterscip,
NULL,
"\nparameter file <%s> not found - using default parameters.\n", settingsname);
1003 if( boundsonclassifier )
1021 SCIPinfoMessage(masterscip,
NULL,
"Number of data point in class 2: %d.\n\n", nclass2);
1023 if( boundsonclassifier )
1027 SCIPinfoMessage(masterscip,
NULL,
"Writing infeasible classification model to file: %s.\n", name);
1033 SCIPinfoMessage(masterscip,
NULL,
"ERROR: input file contains integer variables. The code only works for LPs.\n");
1057 for(v = 0; v < norigvars; ++v)
1071 for(v = 0; v < norigvars; ++v)
1081assert( var !=
NULL);
1091matval[cnt++] = -val;
1094matval[cnt++] = -1.0;
1106matval[cnt++] = val;
1109matval[cnt++] = 1.0;
1123 for(v = 0; v < m; ++v)
1128 SCIP_CALL(
SCIPcreateVar(masterscip, &var, name, 0.0, 1.0, 1.0,
SCIP_VARTYPE_BINARY,
TRUE,
FALSE,
NULL,
NULL,
NULL,
NULL,
NULL) );
1136 SCIP_CALL(
runBenders(masterscip, cutoracle, &data, timelimit, memlimit, dispfreq, reoptimization, solvemasterapprox,
1157 const char* filename;
1158 const char* settingsname;
1164retcode =
readArguments(argc, argv, &filename, &settingsname, &timelimit, &memlimit, &nodelimit, &dispfreq);
1167assert( filename !=
NULL);
SCIP_RETCODE runBenders(SCIP *masterscip, BENDERS_CUTORACLE((*Oracle)), BENDERS_DATA *data, SCIP_Real timelimit, SCIP_Real memlimit, int dispfreq, SCIP_Bool usereopt, SCIP_Bool solvemasterapprox, SCIP_Longint masterstallnodes, SCIP_Real mastergaplimit, SCIP_VERBLEVEL verblevel, SCIP_STATUS *status)
@ BENDERS_STATUS_ADDEDCUT
#define SCIP_CALL_PARAM(x)
static BENDERS_CUTORACLE(cutoracle)
#define DEFAULT_MASTERSTALLNODES
int main(int argc, char **argv)
static SCIP_RETCODE solveClassification(const char *filename, const char *settingsname, SCIP_Real timelimit, SCIP_Real memlimit, int dispfreq)
static int getNextInt(char **s)
#define DEFAULT_BOUNDSONCLASSIFIER
static SCIP_RETCODE fixAltLPVariables(SCIP *masterscip, int nmastervars, SCIP_Bool *S, SCIP_LPI *lp)
static SCIP_RETCODE readLIBSVM(SCIP *scip, const char *filename, SCIP_Bool boundsonclassifier, int *nclass1, int *nclass2)
static SCIP_RETCODE createAltLPColumn(SCIP *origscip, SCIP_LPI *lp, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhscoef, SCIP_Real sign)
static SCIP_RETCODE fixAltLPVariable(SCIP_LPI *lp, int ind)
#define DEFAULT_REOPTIMIZATION
static SCIP_Bool getNextPair(char **s, int *idx, SCIP_Real *val)
#define DEFAULT_SOLVEMASTERAPPROX
static SCIP_RETCODE createAltLP(SCIP *origscip, SCIP_LPI *lp)
static SCIP_RETCODE unfixAltLPVariables(SCIP *masterscip, int nmastervars, SCIP_Bool *S, SCIP_LPI *lp)
static SCIP_RETCODE checkAltLPInfeasible(SCIP *masterscip, SCIP_LPI *lp, SCIP_Bool primal, SCIP_Bool *infeasible, SCIP_Bool *error)
#define DEFAULT_MASTERGAPLIMIT
int SCIPgetNVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetVbdcoefVarbound(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR * SCIPgetVbdvarVarbound(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
SCIP_VAR ** SCIPgetVarsSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR * SCIPgetVarVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_Longint * SCIPgetWeightsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Longint SCIPgetCapacityKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetLhsVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_SETPPCTYPE SCIPgetTypeSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetRhsVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsLogicor(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
@ SCIP_SETPPCTYPE_PARTITIONING
@ SCIP_SETPPCTYPE_COVERING
@ SCIP_SETPPCTYPE_PACKING
SCIP_Bool SCIPfileExists(const char *filename)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreate(SCIP **scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPwriteOrigProblem(SCIP *scip, const char *filename, const char *extension, SCIP_Bool genericnames)
int SCIPgetNOrigBinVars(SCIP *scip)
SCIP_VAR ** SCIPgetOrigVars(SCIP *scip)
int SCIPgetNOrigIntVars(SCIP *scip)
SCIP_CONS ** SCIPgetConss(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNConss(SCIP *scip)
int SCIPgetNOrigVars(SCIP *scip)
SCIP_RETCODE SCIPsetObjsense(SCIP *scip, SCIP_OBJSENSE objsense)
SCIP_RETCODE SCIPcreateProbBasic(SCIP *scip, const char *name)
SCIP_RETCODE SCIPcreateProb(SCIP *scip, const char *name, SCIP_DECL_PROBDELORIG((*probdelorig)), SCIP_DECL_PROBTRANS((*probtrans)), SCIP_DECL_PROBDELTRANS((*probdeltrans)), SCIP_DECL_PROBINITSOL((*probinitsol)), SCIP_DECL_PROBEXITSOL((*probexitsol)), SCIP_DECL_PROBCOPY((*probcopy)), SCIP_PROBDATA *probdata)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
void SCIPprintError(SCIP_RETCODE retcode)
void SCIPprintVersion(SCIP *scip, FILE *file)
SCIP_RETCODE SCIPaddLongintParam(SCIP *scip, const char *name, const char *desc, SCIP_Longint *valueptr, SCIP_Bool isadvanced, SCIP_Longint defaultvalue, SCIP_Longint minvalue, SCIP_Longint maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPreadParams(SCIP *scip, const char *filename)
SCIP_RETCODE SCIPwriteParams(SCIP *scip, const char *filename, SCIP_Bool comments, SCIP_Bool onlychanged)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
#define SCIPallocClearBufferArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeastol(SCIP *scip)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetIndex(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
int SCIPsnprintf(char *t, int len, const char *s,...)
void SCIPprintSysError(const char *message)
interface methods for specific LP solvers
#define BMScheckEmptyMemory()
SCIP_RETCODE readArguments(int argc, char **argv, const char **filename, const char **settingsname, SCIP_Real *timelimit, SCIP_Real *memlimit, SCIP_Longint *nodelimit, int *dispfreq)
int getProblemName(const char *filename, char *probname, int maxsize)
read comand line arguments
SCIP_RETCODE SCIPincludeDefaultPlugins(SCIP *scip)
internal methods for Benders' decomposition
enum SCIP_Retcode SCIP_RETCODE
enum SCIP_Status SCIP_STATUS
@ SCIP_VARTYPE_CONTINUOUS
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4