24 #define MSKCONST const 32 #if defined(_WIN32) || defined(_WIN64) 33 #define snprintf _snprintf 36 #define scipmskobjsen MSKobjsensee 37 #define SENSE2MOSEK(objsen) (((objsen)==SCIP_OBJSEN_MINIMIZE)?(MSK_OBJECTIVE_SENSE_MINIMIZE):(MSK_OBJECTIVE_SENSE_MAXIMIZE)) 39 #define MOSEK_CALL(x) do \ 41 MSKrescodee _restat_; \ 43 if( (_restat_) != MSK_RES_OK && (_restat_ ) != MSK_RES_TRM_MAX_NUM_SETBACKS ) \ 45 SCIPerrorMessage("LP Error: MOSEK returned %d.\n", (int)_restat_); \ 46 return SCIP_LPERROR; \ 52 #define SCIP_ABORT_FALSE(x) do \ 55 if( (_restat_ = (x)) != SCIP_OKAY ) \ 57 SCIPerrorMessage("LP Error: MOSEK returned %d.\n", (int)_restat_); \ 64 #define IS_POSINF(x) ((x) >= SCIP_DEFAULT_INFINITY) 65 #define IS_NEGINF(x) ((x) <= -SCIP_DEFAULT_INFINITY) 81 #define DEBUG_PARAM_SETTING 0 82 #define DEBUG_PRINT_STAT 0 83 #define DEBUG_CHECK_DATA 0 84 #define DEBUG_EASY_REPRODUCE 0 85 #define DEBUG_DO_INTPNT_FEAS_CHECK 0 86 #define DEBUG_CHECK_STATE_TOL 1e-5 88 #define ASSERT_ON_NUMERICAL_TROUBLES 0 89 #define ASSERT_ON_WARNING 0 90 #define FORCE_MOSEK_LOG 0 91 #define FORCE_MOSEK_SUMMARY 0 92 #define FORCE_NO_MAXITER 0 93 #define FORCE_SILENCE 1 94 #define SETBACK_LIMIT 250 95 #define SCIP_CONTROLS_PRICING 1 96 #define SCIP_CONTROLS_TOLERANCES 1 97 #define STRONGBRANCH_PRICING MSK_SIM_SELECTION_SE 98 #define SUPRESS_NAME_ERROR 1 100 #define WRITE_PRIMAL 0 101 #define WRITE_INTPNT 0 102 #define WRITE_ABOVE 0 103 #define DEGEN_LEVEL MSK_SIM_DEGEN_FREE 104 #define ALWAYS_SOLVE_PRIMAL 1 106 #if MSK_VERSION_MAJOR >= 7 113 MSKrescodee MSK_getsolutionstatus(
115 MSKsoltypee whichsol,
122 MOSEK_CALL( MSK_getprosta(task, whichsol, prosta) );
126 MOSEK_CALL( MSK_getsolsta(task, whichsol, solsta) );
150 #define COLS_PER_PACKET SCIP_DUALPACKETSIZE 152 #define ROWS_PER_PACKET SCIP_DUALPACKETSIZE 189 #if SUPRESS_NAME_ERROR && !FORCE_SILENCE 191 snprintf(errstr,32,
"MOSEK Error %d",MSK_RES_ERR_DUP_NAME);
192 if (0 == strncmp(errstr,str,strlen(errstr)))
199 #if DEBUG_CHECK_DATA > 0 203 const char* functionname
219 MOSEK_CALL( MSK_solutiondef(lpi->
task, MSK_SOL_BAS, &gotbasicsol) );
242 for( i = 0; i < numvar; i++ )
244 MOSEK_CALL( MSK_getbound(lpi->
task,MSK_ACC_VAR,i,&tbkx[i],&tblx[i],&tbux[i]) );
247 for( i = 0; i < numcon; i++ )
249 MOSEK_CALL( MSK_getbound(lpi->
task,MSK_ACC_CON,i,&tbkc[i],&tblc[i],&tbuc[i]) );
252 for( i = 0; i < numcon; ++i )
256 if( ( tskc[i] == MSK_SK_FIX && tbkc[i] != MSK_BK_FX ) ||
257 ( tskc[i] == MSK_SK_LOW && !(tbkc[i] == MSK_BK_FX || tbkc[i] == MSK_BK_LO || tbkc[i] == MSK_BK_RA ) ) ||
258 ( tskc[i] == MSK_SK_UPR && !(tbkc[i] == MSK_BK_FX || tbkc[i] == MSK_BK_UP || tbkc[i] == MSK_BK_RA ) ) )
260 SCIPerrorMessage(
"STATUS KEY ERROR i %d bkc %d skc %d %s\n", i, tbkc[i], tskc[i], functionname);
264 if( tbkc[i] == MSK_BK_LO || tbkc[i] == MSK_BK_FX || tbkc[i] == MSK_BK_RA )
272 if( tbkc[i] == MSK_BK_UP || tbkc[i] == MSK_BK_FX || tbkc[i] == MSK_BK_RA )
281 for( i = 0; i < numvar; ++i )
283 if( tbkx[i] == MSK_BK_LO || tbkx[i] == MSK_BK_FX || tbkx[i] == MSK_BK_RA )
291 if( tbkx[i] == MSK_BK_UP || tbkx[i] == MSK_BK_FX || tbkx[i] == MSK_BK_RA )
334 assert(msklb !=
NULL);
335 assert(mskub !=
NULL);
337 for( i = 0; i < n; i++ )
343 msklb[i] = -MSK_INFINITY;
346 mskub[i] = MSK_INFINITY;
360 mskub[i] = MSK_INFINITY;
363 else if (lb[i] == ub[i])
365 assert(lb[i]-ub[i]==0);
366 assert(ub[i]-lb[i]==0);
371 assert(lb[i] < ub[i]);
389 assert(beg !=
NULL || nnonz == 0);
400 for(i = 0; i < n-1; i++)
402 (*aptre)[i] = beg[i+1];
403 assert((*aptre)[i] >= beg[i]);
406 (*aptre)[n-1] = nnonz;
407 assert((*aptre)[n-1] >= beg[n-1]);
411 for( i = 0; i < n; i++ )
428 assert(first <= last);
432 for( i = first; i <= last; i++ )
452 assert(dstat !=
NULL);
455 for( i = 0; i < n; i++ )
471 for( i = 0; i < n; i++ )
490 for( i = 0; i < len; i++ )
508 if (s < 0) *bk = MSK_BK_UP;
512 if (s < 0) *bk = MSK_BK_LO;
617 return "Linear Programming Solver developed by MOSEK Optimization Software (www.mosek.com)";
625 return (
void*) lpi->
task;
635 SCIPerrorMessage(
"SCIPlpiSetIntegralityInformation() has not been implemented yet.\n");
663 #if MSK_VERSION_MAJOR < 7 669 #if MSK_VERSION_MAJOR < 8 684 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_FREE_SIMPLEX) );
686 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_SIM_SWITCH_OPTIMIZER, MSK_ON) );
688 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_SIM_HOTSTART, MSK_SIM_HOTSTART_STATUS_KEYS) );
689 MOSEK_CALL( MSK_puttaskname((*lpi)->task, (
char*) name) );
691 (*lpi)->termcode = MSK_RES_OK;
692 (*lpi)->itercount = 0;
710 assert(*lpi !=
NULL);
778 #if DEBUG_CHECK_DATA > 0 779 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiLoadColLP") );
802 MOSEK_CALL( MSK_inputdata(lpi->
task, nrows, ncols, nrows, ncols, obj, 0.0, beg, aptre, ind, val,
803 bkc, blc, buc, bkx, blx, bux) );
823 #if DEBUG_CHECK_DATA > 0 824 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiLoadColLP") );
844 #if MSK_VERSION_MAJOR < 7 859 assert(nnonz == 0 || beg !=
NULL);
860 assert(nnonz == 0 || ind !=
NULL);
861 assert(nnonz == 0 || val !=
NULL);
867 #if DEBUG_CHECK_DATA > 0 868 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiAddCols") );
881 #if MSK_VERSION_MAJOR < 7 889 MOSEK_CALL( MSK_appendvars(lpi->
task, ncols, obj, aptrb, aptre, ind, val, bkx, blx, bux) );
895 MOSEK_CALL( MSK_putcslice(lpi->
task, oldcols, oldcols+ncols, obj) );
896 MOSEK_CALL( MSK_putvarboundslice(lpi->
task, oldcols, oldcols+ncols, bkx, blx, bux) );
906 for (j = 0; j < nnonz; ++j)
907 assert( 0 <= ind[j] && ind[j] < nrows );
911 MOSEK_CALL( MSK_putacolslice(lpi->
task, oldcols, oldcols+ncols, beg, aptre, ind, val) );
920 #if DEBUG_CHECK_DATA > 0 921 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiAddCols") );
942 #if DEBUG_CHECK_DATA > 0 943 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelCols") );
949 #if MSK_VERSION_MAJOR < 7 950 MOSEK_CALL( MSK_remove(lpi->
task,MSK_ACC_VAR, lastcol-firstcol+1, sub) );
957 #if DEBUG_CHECK_DATA > 0 958 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelCols") );
984 #if DEBUG_CHECK_DATA > 0 985 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelColset") );
994 for( i = 0; i <
ncols; i++)
1010 #if MSK_VERSION_MAJOR < 7 1018 #if DEBUG_CHECK_DATA > 0 1019 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelColset") );
1038 #if MSK_VERSION_MAJOR < 7 1048 assert(lpi !=
NULL);
1053 #if DEBUG_CHECK_DATA > 0 1054 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiAddRows") );
1068 #if MSK_VERSION_MAJOR < 7 1076 MOSEK_CALL( MSK_appendcons(lpi->
task, nrows, aptrb, aptre, ind, val, bkc, blc, buc) );
1082 MOSEK_CALL( MSK_putconboundslice(lpi->
task, oldrows, oldrows+nrows, bkc, blc, buc) );
1092 for (j = 0; j < nnonz; ++j)
1093 assert( 0 <= ind[j] && ind[j] < ncols );
1097 MOSEK_CALL( MSK_putarowslice(lpi->
task, oldrows, oldrows+nrows, beg, aptre, ind, val) );
1106 #if DEBUG_CHECK_DATA > 0 1107 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiAddRows") );
1123 assert(lpi !=
NULL);
1128 #if DEBUG_CHECK_DATA > 0 1129 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelRows") );
1136 #if MSK_VERSION_MAJOR < 7 1137 MOSEK_CALL( MSK_remove(lpi->
task, MSK_ACC_CON, lastrow-firstrow+1, sub) );
1139 MOSEK_CALL( MSK_removecons(lpi->
task, lastrow-firstrow+1, sub) );
1144 #if DEBUG_CHECK_DATA > 0 1145 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelRows") );
1166 assert(lpi !=
NULL);
1171 #if DEBUG_CHECK_DATA > 0 1172 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelRowset") );
1181 for( i = 0; i <
nrows; i++ )
1197 #if MSK_VERSION_MAJOR < 7 1205 #if DEBUG_CHECK_DATA > 0 1206 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelRowset end") );
1221 assert(lpi !=
NULL);
1250 assert(lpi !=
NULL);
1252 assert(ncols == 0 || (ind !=
NULL && lb !=
NULL && ub !=
NULL));
1256 #if DEBUG_CHECK_DATA > 0 1257 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgBounds") );
1265 for (i = 0; i <
ncols; ++i)
1269 SCIPerrorMessage(
"LP Error: fixing lower bound for variable %d to infinity.\n", ind[i]);
1274 SCIPerrorMessage(
"LP Error: fixing upper bound for variable %d to -infinity.\n", ind[i]);
1284 MOSEK_CALL( MSK_putboundlist(lpi->
task, MSK_ACC_VAR, ncols, ind, bkx, blx, bux) );
1290 #if DEBUG_CHECK_DATA > 0 1291 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgBounds") );
1311 assert(lpi !=
NULL);
1316 #if DEBUG_CHECK_DATA > 0 1317 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgSides") );
1328 MOSEK_CALL( MSK_putboundlist(lpi->
task, MSK_ACC_CON, nrows, ind, bkc, blc, buc) );
1334 #if DEBUG_CHECK_DATA > 0 1335 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgSides") );
1350 assert(lpi !=
NULL);
1355 #if DEBUG_CHECK_DATA > 0 1356 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgCoef") );
1361 #if DEBUG_CHECK_DATA > 0 1362 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgCoef") );
1375 assert(lpi !=
NULL);
1394 assert(lpi !=
NULL);
1399 #if DEBUG_CHECK_DATA > 0 1400 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgObj") );
1405 #if DEBUG_CHECK_DATA > 0 1406 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgObj") );
1427 assert(lpi !=
NULL);
1432 #if DEBUG_CHECK_DATA > 0 1433 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiScaleRow") );
1436 assert(scaleval != 0);
1438 #if MSK_VERSION_MAJOR < 7 1439 MOSEK_CALL( MSK_getavecnumnz(lpi->
task, MSK_ACC_CON, row, &nnonz) );
1449 #if MSK_VERSION_MAJOR < 7 1450 MOSEK_CALL( MSK_getavec(lpi->
task, MSK_ACC_CON, row, &nnonz, sub, val) );
1452 MOSEK_CALL( MSK_putavec(lpi->
task, MSK_ACC_CON, row, nnonz, sub, val) );
1463 MOSEK_CALL( MSK_getbound(lpi->
task, MSK_ACC_CON, row, &bkc, &blc, &buc) );
1465 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_CON, row, bkc, blc, buc) );
1467 #if DEBUG_CHECK_DATA > 0 1468 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiScaleRow") );
1490 assert(lpi !=
NULL);
1495 #if DEBUG_CHECK_DATA > 0 1496 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiScaleCol") );
1499 assert(scaleval != 0);
1500 #if MSK_VERSION_MAJOR < 7 1501 MOSEK_CALL( MSK_getavecnumnz(lpi->
task, MSK_ACC_VAR, col, &nnonz) );
1511 #if MSK_VERSION_MAJOR < 7 1512 MOSEK_CALL( MSK_getavec(lpi->
task, MSK_ACC_VAR, col, &nnonz, sub, val) );
1514 MOSEK_CALL( MSK_putavec(lpi->
task, MSK_ACC_VAR, col, nnonz, sub, val) );
1525 MOSEK_CALL( MSK_getbound(lpi->
task, MSK_ACC_VAR, col, &bkx, &blx, &bux) );
1527 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, bkx, blx, bux) );
1532 #if DEBUG_CHECK_DATA > 0 1533 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiScaleCol") );
1552 assert(lpi !=
NULL);
1569 assert(lpi !=
NULL);
1586 assert(lpi !=
NULL);
1611 assert(lpi !=
NULL);
1613 assert(first <= last);
1617 #if DEBUG_CHECK_DATA > 0 1618 SCIP_CALL( scip_checkdata(lpi,
"getASlice") );
1625 assert(beg !=
NULL);
1626 assert(ind !=
NULL);
1627 assert(val !=
NULL);
1631 MOSEK_CALL( MSK_getaslicenumnz(lpi->
task, iscon, first, last+1,nnonz) );
1633 MOSEK_CALL( MSK_getaslice(lpi->
task, iscon, first, last+1, *nnonz, &surplus, beg, aptre, ind, val) );
1635 assert(surplus == 0);
1640 #if DEBUG_CHECK_DATA > 0 1641 SCIP_CALL( scip_checkdata(lpi,
"getASlice") );
1664 assert(lpi !=
NULL);
1692 assert(lpi !=
NULL);
1697 #if DEBUG_CHECK_DATA > 0 1698 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetRows") );
1705 #if DEBUG_CHECK_DATA > 0 1706 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetRows") );
1719 int namestoragesize,
1734 int namestoragesize,
1761 assert(lpi !=
NULL);
1766 MOSEK_CALL( MSK_getcslice(lpi->
task, firstcol, lastcol+1, vals) );
1781 assert(lpi !=
NULL);
1786 #if DEBUG_CHECK_DATA > 0 1787 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetBounds") );
1790 MOSEK_CALL( MSK_getboundslice(lpi->
task, MSK_ACC_VAR, firstcol, lastcol+1,
NULL, lbs, ubs) );
1805 assert(lpi !=
NULL);
1810 #if DEBUG_CHECK_DATA > 0 1811 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetSides") );
1814 MOSEK_CALL( MSK_getboundslice(lpi->
task, MSK_ACC_CON, firstrow, lastrow+1,
NULL, lhss, rhss) );
1816 #if DEBUG_CHECK_DATA > 0 1817 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetSides") );
1832 assert(lpi !=
NULL);
1837 #if DEBUG_CHECK_DATA > 0 1838 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetCoef") );
1843 #if DEBUG_CHECK_DATA > 0 1844 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetCoef") );
1863 assert(lpi !=
NULL);
1866 MOSEK_CALL( MSK_getsolutionstatus ( lpi->
task, MSK_SOL_BAS, prosta, solsta) );
1879 if ( res == MSK_RES_TRM_MAX_ITERATIONS || res == MSK_RES_TRM_MAX_TIME
1880 || res == MSK_RES_TRM_OBJECTIVE_RANGE || res == MSK_RES_TRM_STALL
1882 || res == MSK_RES_TRM_MAX_NUM_SETBACKS
1883 || res == MSK_RES_TRM_NUMERICAL_PROBLEM
1888 if (res == MSK_RES_TRM_MAX_NUM_SETBACKS || res == MSK_RES_TRM_NUMERICAL_PROBLEM)
1892 #if ASSERT_ON_WARNING 1901 *termcode = MSK_RES_OK;
1911 int itercount_primal;
1920 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_PRESOLVE_USE, &presolve) );
1921 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, &maxiter) );
1923 #if DEBUG_EASY_REPRODUCE 1924 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_AUTO_SORT_A_BEFORE_OPT, MSK_ON) );
1925 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_OFF) );
1927 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
1930 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_AUTO_UPDATE_SOL_INFO, MSK_OFF) );
1937 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_LOG_SIM_FREQ, 1) );
1949 MOSEK_CALL( MSK_solutiondef(lpi->
task, MSK_SOL_BAS, &gotbasicsol) );
1953 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_PRESOLVE_USE, MSK_PRESOLVE_MODE_OFF) );
1957 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_PRESOLVE_USE, MSK_PRESOLVE_MODE_ON) );
1960 #if ALWAYS_SOLVE_PRIMAL > 0 1961 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SOLVE_FORM, MSK_SOLVE_PRIMAL) );
1964 #if DEBUG_CHECK_DATA > 0 1965 SCIP_CALL( scip_checkdata(lpi,
"SolveWSimplex") );
1969 assert(lpi !=
NULL);
1972 if( gotbasicsol && maxiter < 20000 )
1975 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_PRIMAL_RESTRICT_SELECTION, 0) );
1980 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, 2000000000) );
1984 #if DEBUG_CHECK_DATA > 0 1985 SCIP_CALL( scip_checkdata(lpi,
"Begin optimize with simplex") );
1988 #if FORCE_MOSEK_SUMMARY > 1 1997 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_LOG_SIM_FREQ, 100) );
2003 if( lpi->
termcode == MSK_RES_TRM_MAX_NUM_SETBACKS )
2005 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SCALING, MSK_SCALING_AGGRESSIVE) );
2010 #if FORCE_MOSEK_SUMMARY 2017 #if DEBUG_CHECK_DATA > 0 2018 SCIP_CALL( scip_checkdata(lpi,
"End optimize with simplex") );
2021 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_PRESOLVE_USE, presolve) );
2022 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, maxiter) );
2024 MOSEK_CALL( MSK_getintinf(lpi->
task, MSK_IINF_SIM_PRIMAL_ITER, &itercount_primal) );
2025 MOSEK_CALL( MSK_getintinf(lpi->
task, MSK_IINF_SIM_DUAL_ITER, &itercount_dual) );
2027 lpi->
itercount = itercount_primal + itercount_dual;
2031 MOSEK_CALL( MSK_getsolutionstatus(lpi->
task, MSK_SOL_BAS, &prosta, &solsta) );
2033 #if DEBUG_PRINT_STAT 2034 SCIPdebugMessage(
"maxiter = %d, termcode = %d, prosta = %d, solsta = %d, objval = %g : %g, iter = %d+%d\n",
2035 maxiter, lpi->
termcode, prosta, solsta, pobj, dobj, itercount_primal, itercount_dual);
2039 "objval = %g : %g, iter = %d+%d\n",
2040 maxiter,lpi->
termcode,prosta,solsta,
2041 pobj,dobj,itercount_primal,itercount_dual);
2046 case MSK_SOL_STA_OPTIMAL:
2047 case MSK_SOL_STA_PRIM_AND_DUAL_FEAS:
2048 case MSK_SOL_STA_PRIM_FEAS:
2049 case MSK_SOL_STA_DUAL_FEAS:
2050 case MSK_SOL_STA_PRIM_INFEAS_CER:
2051 case MSK_SOL_STA_DUAL_INFEAS_CER:
2052 case MSK_SOL_STA_UNKNOWN:
2054 case MSK_SOL_STA_NEAR_OPTIMAL:
2055 case MSK_SOL_STA_NEAR_PRIM_FEAS:
2056 case MSK_SOL_STA_NEAR_DUAL_FEAS:
2057 case MSK_SOL_STA_NEAR_PRIM_AND_DUAL_FEAS:
2058 case MSK_SOL_STA_NEAR_PRIM_INFEAS_CER:
2059 case MSK_SOL_STA_NEAR_DUAL_INFEAS_CER:
2063 lpi->
termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2065 #if ASSERT_ON_WARNING 2069 case MSK_SOL_STA_INTEGER_OPTIMAL:
2070 case MSK_SOL_STA_NEAR_INTEGER_OPTIMAL:
2072 #if SHOW_ERRORS && !FORCE_SILENCE 2076 #if ASSERT_ON_WARNING 2085 case MSK_PRO_STA_PRIM_AND_DUAL_FEAS:
2086 case MSK_PRO_STA_PRIM_FEAS:
2087 case MSK_PRO_STA_DUAL_FEAS:
2088 case MSK_PRO_STA_PRIM_AND_DUAL_INFEAS:
2089 case MSK_PRO_STA_PRIM_INFEAS:
2090 case MSK_PRO_STA_DUAL_INFEAS:
2091 case MSK_PRO_STA_UNKNOWN:
2093 case MSK_PRO_STA_NEAR_PRIM_AND_DUAL_FEAS:
2094 case MSK_PRO_STA_NEAR_PRIM_FEAS:
2095 case MSK_PRO_STA_NEAR_DUAL_FEAS:
2096 case MSK_PRO_STA_ILL_POSED:
2097 case MSK_PRO_STA_PRIM_INFEAS_OR_UNBOUNDED:
2101 lpi->
termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2103 #if ASSERT_ON_WARNING 2108 #if SHOW_ERRORS && !FORCE_SILENCE 2112 #if ASSERT_ON_WARNING 2119 if( solsta == MSK_SOL_STA_OPTIMAL && fabs(dobj)+fabs(dobj) > 1.0e-6 && fabs(pobj-dobj)>0.0001*(fabs(pobj)+fabs(dobj)))
2121 SCIPerrorMessage(
"Simplex[%d] returned optimal solution with different objvals %g != %g reldiff %.2g%%\n",
2122 optimizecount, pobj, dobj, 100*fabs(pobj-dobj)/
MAX(fabs(pobj),fabs(dobj)));
2125 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2127 if(solsta != MSK_SOL_STA_DUAL_FEAS && solsta != MSK_SOL_STA_OPTIMAL && solsta != MSK_SOL_STA_PRIM_AND_DUAL_FEAS)
2140 if (objsen == MSK_OBJECTIVE_SENSE_MINIMIZE)
2142 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_UPPER_OBJ_CUT, &bound) );
2144 if (1.0e-6*(fabs(bound)+fabs(dobj)) < bound-dobj)
2154 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_LOWER_OBJ_CUT, &bound) );
2156 if (1.0e-6*(fabs(bound)+fabs(dobj)) < dobj-bound)
2167 if (maxiter >= 2000000000)
2169 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, maxiter) );
2171 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2180 #if DEBUG_DO_INTPNT_FEAS_CHECK 2181 if (solsta == MSK_SOL_STA_PRIM_INFEAS_CER || solsta == MSK_SOL_STA_DUAL_INFEAS_CER)
2187 MOSEK_CALL(MSK_getsolutionstatus ( lpi->
task, MSK_SOL_BAS, &prosta, &solsta));
2189 if (solsta == MSK_SOL_STA_PRIM_INFEAS_CER || solsta == MSK_SOL_STA_DUAL_INFEAS_CER)
2201 #if DEBUG_PRINT_STAT > 0 2202 SCIPdebugMessage(
"Max iter stat : Count %d branchup = %d branchlo = %d primal %d dual %d\n",
2204 SCIPdebugMessage(
"Objcut iter stat : Count %d branchup = %d branchlo = %d primal %d dual %d\n",
2208 #if DEBUG_CHECK_DATA > 0 2209 SCIP_CALL( scip_checkdata(lpi,
"SolveWSimplex") );
2224 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
2226 #if DEBUG_CHECK_DATA > 0 2227 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiSolvePrimal") );
2230 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_PRIMAL_SIMPLEX) );
2232 #if WRITE_PRIMAL > 0 2239 MSK_writedata(lpi->
task,fname);
2245 if ( lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
2252 if( solsta != MSK_SOL_STA_PRIM_FEAS )
2258 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2261 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2264 #if DEBUG_CHECK_DATA > 0 2265 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiSolvePrimal") );
2281 #if (MSK_VERSION_MAJOR < 8) || (MSK_VERSION_MAJOR == 8 && MSK_VERSION_MINOR == 0) 2282 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_INTEGER, MSK_ON) );
2284 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
2285 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_DUAL_SIMPLEX) );
2293 MSK_writedata(lpi->
task,fname);
2299 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_LOG_SIM_FREQ, 1) );
2304 if ( lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
2310 if( solsta != MSK_SOL_STA_DUAL_FEAS )
2316 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2319 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2332 assert(lpi !=
NULL);
2355 #if DEBUG_CHECK_DATA > 0 2356 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiSolveBarrier") );
2359 MOSEK_CALL( MSK_putintparam(lpi->
task,MSK_IPAR_INTPNT_BASIS, crossover ? MSK_BI_ALWAYS : MSK_BI_NEVER) );
2360 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_INTPNT) );
2363 #if WRITE_INTPNT > 0 2370 MSK_writedata(lpi->
task,fname);
2376 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2386 MOSEK_CALL( MSK_getsolutionstatus ( lpi->
task, MSK_SOL_BAS, &prosta, &solsta) );
2392 #if DEBUG_CHECK_DATA > 0 2393 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiSolveBarrier") );
2433 MSKobjsensee objsen;
2448 assert(lpi !=
NULL);
2453 #if DEBUG_CHECK_DATA > 0 2454 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiStrongbranch") );
2468 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, &olditerlim) );
2469 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_DUAL_SELECTION, &oldselection) );
2470 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART, &oldhotstart) );
2472 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, itlim) );
2475 if (objsen == MSK_OBJECTIVE_SENSE_MINIMIZE)
2477 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_UPPER_OBJ_CUT, &bound) );
2481 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_LOWER_OBJ_CUT, &bound) );
2484 MOSEK_CALL( MSK_getbound(lpi->
task, MSK_ACC_VAR, col, &bkx, &blx, &bux) );
2488 newub =
EPSCEIL(psol-1.0, 1e-06);
2490 if (newub < blx - 0.5)
2501 else if (
EPSEQ(blx,newub,1.0e-6))
2509 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, newbk, blx, newub) );
2550 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2553 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2558 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, bkx, blx, bux) );
2562 if (newlb > bux + 0.5)
2573 else if (
EPSEQ(bux,newlb,1.0e-6))
2581 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, newbk, newlb, bux) );
2619 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2622 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2626 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, bkx, blx, bux) );
2627 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, olditerlim) );
2628 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_DUAL_SELECTION, oldselection) );
2629 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART, oldhotstart) );
2636 #if DEBUG_CHECK_DATA > 0 2637 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiStrongbranch") );
2684 assert( iter !=
NULL );
2685 assert( cols !=
NULL );
2686 assert( psols !=
NULL );
2687 assert( down !=
NULL );
2688 assert( up !=
NULL );
2689 assert( downvalid !=
NULL );
2690 assert( upvalid !=
NULL );
2691 assert( down !=
NULL );
2696 for (j = 0; j <
ncols; ++j)
2743 assert( iter !=
NULL );
2744 assert( cols !=
NULL );
2745 assert( psols !=
NULL );
2746 assert( down !=
NULL );
2747 assert( up !=
NULL );
2748 assert( downvalid !=
NULL );
2749 assert( upvalid !=
NULL );
2750 assert( down !=
NULL );
2755 for (j = 0; j <
ncols; ++j)
2776 #if MSK_VERSION_MAJOR < 7 2781 assert(lpi !=
NULL);
2786 #if MSK_VERSION_MAJOR >= 7 2787 restat = MSK_getsolsta(lpi->
task, MSK_SOL_BAS, &solsta);
2789 restat = MSK_getsolutionstatus(lpi->
task, MSK_SOL_BAS, &prosta, &solsta);
2792 if ( restat != MSK_RES_OK )
2794 return (solsta != MSK_SOL_STA_UNKNOWN);
2809 assert(lpi !=
NULL);
2821 case MSK_SOL_STA_OPTIMAL:
2822 case MSK_SOL_STA_PRIM_AND_DUAL_FEAS:
2826 case MSK_SOL_STA_PRIM_FEAS:
2829 case MSK_SOL_STA_DUAL_FEAS:
2832 case MSK_SOL_STA_UNKNOWN:
2833 case MSK_SOL_STA_NEAR_OPTIMAL:
2834 case MSK_SOL_STA_NEAR_PRIM_FEAS:
2835 case MSK_SOL_STA_NEAR_DUAL_FEAS:
2836 case MSK_SOL_STA_NEAR_PRIM_AND_DUAL_FEAS:
2837 case MSK_SOL_STA_PRIM_INFEAS_CER:
2838 case MSK_SOL_STA_DUAL_INFEAS_CER:
2839 case MSK_SOL_STA_NEAR_PRIM_INFEAS_CER:
2840 case MSK_SOL_STA_NEAR_DUAL_INFEAS_CER:
2841 case MSK_SOL_STA_INTEGER_OPTIMAL:
2842 case MSK_SOL_STA_NEAR_INTEGER_OPTIMAL:
2848 if( primalfeasible !=
NULL )
2849 *primalfeasible = pfeas;
2851 if( dualfeasible !=
NULL )
2852 *dualfeasible = dfeas;
2868 assert(lpi !=
NULL);
2875 return ( solsta == MSK_SOL_STA_DUAL_INFEAS_CER
2876 || prosta == MSK_PRO_STA_DUAL_INFEAS
2877 || prosta == MSK_PRO_STA_PRIM_AND_DUAL_INFEAS);
2890 assert(lpi !=
NULL);
2897 return (solsta == MSK_SOL_STA_DUAL_INFEAS_CER);
2924 assert(lpi !=
NULL);
2931 return (prosta == MSK_PRO_STA_PRIM_FEAS || prosta == MSK_PRO_STA_PRIM_AND_DUAL_FEAS);
2945 assert(lpi !=
NULL);
2952 return ( solsta == MSK_SOL_STA_PRIM_INFEAS_CER
2953 || prosta == MSK_PRO_STA_PRIM_INFEAS
2954 || prosta == MSK_PRO_STA_PRIM_AND_DUAL_INFEAS);
2967 assert(lpi !=
NULL);
2974 return (solsta == MSK_SOL_STA_PRIM_INFEAS_CER);
3001 assert(lpi !=
NULL);
3008 return (prosta == MSK_PRO_STA_DUAL_FEAS || prosta == MSK_PRO_STA_PRIM_AND_DUAL_FEAS);
3020 assert(lpi !=
NULL);
3027 return (solsta == MSK_SOL_STA_OPTIMAL);
3036 assert(lpi !=
NULL);
3039 return ( lpi->
termcode == MSK_RES_OK
3040 || lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS
3041 || lpi->
termcode == MSK_RES_TRM_MAX_TIME
3042 || lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE);
3051 assert(lpi !=
NULL);
3054 return lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE;
3063 assert(lpi !=
NULL);
3066 return lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS;
3075 assert(lpi !=
NULL);
3078 return lpi->
termcode == MSK_RES_TRM_MAX_TIME;
3090 assert(lpi !=
NULL);
3109 assert(lpi !=
NULL);
3126 assert(lpi !=
NULL);
3153 assert(lpi !=
NULL);
3172 for( i = 0; i <
ncols; i++ )
3174 assert(sux !=
NULL);
3175 redcost[i] -= sux[i];
3191 assert(lpi !=
NULL);
3209 assert(lpi !=
NULL);
3214 MOSEK_CALL( MSK_getsolution(lpi->
task, MSK_SOL_BAS,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL, dualfarkas,
3227 assert(lpi !=
NULL);
3248 assert(lpi !=
NULL);
3249 assert(quality !=
NULL);
3264 if (res == MSK_RES_ERR_BASIS_SINGULAR)
3295 for( i = 0; i < n; i++ )
3351 for( i = 0; i < m; i++ )
3398 for( i = 0; i < n; i++ )
3403 resstat[i] = MSK_SK_LOW;
3406 resstat[i] = MSK_SK_BAS;
3409 resstat[i] = MSK_SK_UPR;
3412 resstat[i] = MSK_SK_SUPBAS;
3431 for( i = 0; i < n; i++ )
3436 resstat[i] = MSK_SK_UPR;
3439 resstat[i] = MSK_SK_BAS;
3442 resstat[i] = MSK_SK_LOW;
3445 resstat[i] = MSK_SK_SUPBAS;
3464 assert(lpi !=
NULL);
3498 assert(lpi !=
NULL);
3527 assert(lpi !=
NULL);
3535 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_OFF) );
3541 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
3544 for (i = 0; i <
nrows; i++ )
3546 if (bind[i] < nrows)
3547 bind[i] = -1 - bind[i];
3549 bind[i] = bind[i] -
nrows;
3580 assert(lpi !=
NULL);
3586 MOSEK_CALL( MSK_putnaintparam(lpi->
task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_OFF) );
3589 if ( ninds !=
NULL && inds !=
NULL )
3591 for (i = 0; i <
nrows; ++i)
3598 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, ninds, inds, coef) );
3599 assert( *ninds <= nrows );
3608 for (i = 0; i <
nrows; ++i)
3615 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, &numnz, sub, coef) );
3616 assert( numnz <= nrows );
3620 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
3647 assert(lpi !=
NULL);
3653 MOSEK_CALL( MSK_putnaintparam(lpi->
task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_ON) );
3656 if ( ninds !=
NULL && inds !=
NULL )
3658 for (i = 0; i <
nrows; ++i)
3665 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 1, ninds, inds, coef) );
3666 assert( *ninds <= nrows );
3675 for (i = 0; i <
nrows; ++i)
3682 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 1, &numnz, sub, coef) );
3686 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
3722 assert(lpi !=
NULL);
3735 if( binvrow ==
NULL )
3747 for (i = 0; i <
ncols; ++i)
3751 #if MSK_VERSION_MAJOR < 7 3752 MOSEK_CALL( MSK_getavec(lpi->
task, MSK_ACC_VAR, i, &numnz, csub, cval) );
3758 for (k = 0; k < numnz; ++k)
3759 coef[i] += binv[csub[k]] * cval[k];
3762 if ( ninds !=
NULL )
3794 assert(lpi !=
NULL);
3800 #if MSK_VERSION_MAJOR < 7 3801 MOSEK_CALL( MSK_getavecnumnz(lpi->
task, MSK_ACC_VAR, c, &numnz) );
3808 for (i = 0; i <
nrows; ++i)
3812 if ( ninds !=
NULL && inds !=
NULL )
3814 #if MSK_VERSION_MAJOR < 7 3815 MOSEK_CALL( MSK_getavec(lpi->
task, MSK_ACC_VAR, c, &numnz, inds, val) );
3820 for (i = 0; i < numnz; ++i)
3821 coef[inds[i]] = val[i];
3824 MOSEK_CALL( MSK_putnaintparam(lpi->
task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_OFF) );
3825 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, ninds, inds, coef) );
3826 assert( *ninds <= nrows );
3833 #if MSK_VERSION_MAJOR < 7 3834 MOSEK_CALL( MSK_getavec(lpi->
task, MSK_ACC_VAR, c, &numnz, sub, val) );
3839 for (i = 0; i < numnz; ++i)
3840 coef[sub[i]] = val[i];
3842 if ( ninds !=
NULL )
3844 MOSEK_CALL( MSK_putnaintparam(lpi->
task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_OFF) );
3845 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, &numnz, sub, coef) );
3851 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
3870 assert(lpistate !=
NULL);
3871 assert(blkmem !=
NULL);
3881 lpistate[0]->
solsta = MSK_SOL_STA_UNKNOWN;
3882 lpistate[0]->
num = -1;
3897 assert(blkmem !=
NULL);
3898 assert(lpistate !=
NULL);
3899 assert(*lpistate !=
NULL);
3913 MSKaccmodee accmode,
3920 for( i = 0; i < n; i++ )
3975 int *skxi = (
int *) lpi->
skx;
3976 int *skci = (
int *) lpi->
skc;
3978 assert(
sizeof(
int) ==
sizeof(MSKstakeye));
3997 assert(
sizeof(
int) ==
sizeof(MSKstakeye));
4018 assert(lpi !=
NULL);
4020 assert(lpistate !=
NULL);
4026 MOSEK_CALL( MSK_solutiondef(lpi->
task, MSK_SOL_BAS, &gotbasicsol) );
4072 assert(lpi !=
NULL);
4075 if (lpistate ==
NULL)
4081 if (lpistate->
nrows == 0 || lpistate->
ncols == 0)
4086 assert(lpistate->
nrows <= nrows);
4087 assert(lpistate->
ncols <= ncols);
4095 for (i = lpistate->
ncols; i < ncols; ++i)
4104 lpi->
skx[i] = MSK_SK_SUPBAS;
4106 lpi->
skx[i] = MSK_SK_UPR;
4109 lpi->
skx[i] = MSK_SK_LOW;
4111 for (i = lpistate->
nrows; i < nrows; ++i)
4112 lpi->
skc[i] = MSK_SK_BAS;
4127 assert(lpi !=
NULL);
4143 assert(lpi !=
NULL);
4148 if( *lpistate !=
NULL )
4163 assert(lpi !=
NULL);
4168 return ( lpistate !=
NULL && lpistate->
num >= 0);
4178 assert(lpi !=
NULL);
4195 assert(lpi !=
NULL);
4201 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_SOL_HEAD, MSK_ON) );
4202 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_SOL_VARIABLES, MSK_ON) );
4203 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_SOL_CONSTRAINTS, MSK_ON) );
4229 assert(lpinorms !=
NULL);
4245 assert(lpinorms ==
NULL);
4258 assert(lpinorms ==
NULL);
4272 "SCIP_LPPAR_FROMSCRATCH",
4273 "SCIP_LPPAR_FASTMIP",
4274 "SCIP_LPPAR_SCALING",
4275 "SCIP_LPPAR_PRESOLVING",
4276 "SCIP_LPPAR_PRICING",
4277 "SCIP_LPPAR_LPINFO",
4278 "SCIP_LPPAR_FEASTOL",
4279 "SCIP_LPPAR_DUALFEASTOL",
4280 "SCIP_LPPAR_BARRIERCONVTOL",
4281 "SCIP_LPPAR_LOBJLIM",
4282 "SCIP_LPPAR_UOBJLIM",
4283 "SCIP_LPPAR_LPITLIM",
4284 "SCIP_LPPAR_LPTILIM",
4285 "SCIP_LPPAR_MARKOWITZ",
4286 "SCIP_LPPAR_ROWREPSWITCH",
4288 "SCIP_LPPAR_THREADS" 4326 assert(lpi !=
NULL);
4334 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART, ival) );
4335 *ival = (*ival == MSK_SIM_HOTSTART_NONE);
4340 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_SCALING, ival) );
4341 if( *ival == MSK_SCALING_NONE )
4343 else if( *ival == MSK_SCALING_AGGRESSIVE )
4349 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_PRESOLVE_USE, ival) );
4350 *ival = (*ival != MSK_PRESOLVE_MODE_OFF);
4357 *ival = (*ival == MSK_ON);
4360 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, ival) );
4378 #if SCIP_CONTROLS_PRICING 4382 MSK_SIM_SELECTION_SE,
4383 MSK_SIM_SELECTION_SE,
4384 MSK_SIM_SELECTION_FULL,
4385 MSK_SIM_SELECTION_PARTIAL,
4386 MSK_SIM_SELECTION_SE,
4387 MSK_SIM_SELECTION_ASE,
4388 MSK_SIM_SELECTION_DEVEX,
4401 assert(lpi !=
NULL);
4410 ival ? MSK_SIM_HOTSTART_NONE : MSK_SIM_HOTSTART_STATUS_KEYS ) );
4416 scaling = MSK_SCALING_NONE;
4417 else if( ival == 1 )
4418 scaling = MSK_SCALING_FREE;
4420 scaling = MSK_SCALING_AGGRESSIVE;
4422 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SCALING, scaling) );
4423 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_INTPNT_SCALING, scaling) );
4427 ival ? MSK_PRESOLVE_MODE_FREE : MSK_PRESOLVE_MODE_OFF) );
4467 #if SCIP_CONTROLS_PRICING 4468 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_PRIMAL_SELECTION, pricing[ival]) );
4470 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_DUAL_SELECTION, pricing[ival]) );
4475 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_DUAL_RESTRICT_SELECTION, 0) );
4477 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_PRIMAL_RESTRICT_SELECTION, 0) );
4480 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_PRIMAL_SELECTION, MSK_SIM_SELECTION_FREE) );
4482 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_DUAL_SELECTION, MSK_SIM_SELECTION_FREE) );
4490 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_LOG, ival ? MSK_ON : MSK_OFF) );
4494 #if DEBUG_PARAM_SETTING 4501 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, ival) );
4518 assert(lpi !=
NULL);
4525 #if SCIP_CONTROLS_TOLERANCES 4527 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_BASIS_TOL_X, dval) );
4530 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_BASIS_TOL_S, dval) );
4533 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_INTPNT_TOL_REL_GAP, dval) );
4537 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_LOWER_OBJ_CUT, dval) );
4540 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_UPPER_OBJ_CUT, dval) );
4543 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_OPTIMIZER_MAX_TIME, dval) );
4561 assert(lpi !=
NULL);
4570 #if SCIP_CONTROLS_TOLERANCES 4575 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_BASIS_TOL_X, dval) );
4582 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_BASIS_TOL_S, dval) );
4585 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_INTPNT_TOL_REL_GAP, dval) );
4589 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_LOWER_OBJ_CUT, dval) );
4592 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_UPPER_OBJ_CUT, dval) );
4595 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_OPTIMIZER_MAX_TIME, dval) );
4617 assert(lpi !=
NULL);
4620 return MSK_INFINITY;
4630 assert(lpi !=
NULL);
4651 assert(lpi !=
NULL);
4656 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_READ_DATA_FORMAT, &olddataformat) );
4657 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_READ_DATA_FORMAT, MSK_DATA_FORMAT_LP) );
4659 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_READ_DATA_FORMAT, olddataformat) );
4673 assert(lpi !=
NULL);
4678 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_WRITE_DATA_FORMAT, &olddataformat) );
4679 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_DATA_FORMAT, MSK_DATA_FORMAT_LP) );
4681 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_DATA_FORMAT, olddataformat) );
SCIP_RETCODE SCIPlpiGetRows(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhs, SCIP_Real *rhs, int *nnonz, int *beg, int *ind, SCIP_Real *val)
SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
enum SCIP_LPSolQuality SCIP_LPSOLQUALITY
static MSKrescodee filterTRMrescode(SCIP_MESSAGEHDLR *messagehdlr, MSKrescodee *termcode, MSKrescodee res)
#define ASSERT_ON_NUMERICAL_TROUBLES
static void scale_bound(MSKboundkeye *bk, double *bl, double *bu, double s)
SCIP_Bool SCIPlpiIsObjlimExc(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsIterlimExc(SCIP_LPI *lpi)
#define BMSfreeMemoryArrayNull(ptr)
SCIP_RETCODE SCIPlpiReadLP(SCIP_LPI *lpi, const char *fname)
static void lpistateFree(SCIP_LPISTATE **lpistate, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas)
const char * SCIPlpiGetSolverName(void)
enum SCIP_ObjSen SCIP_OBJSEN
static void lpistateUnpack(const SCIP_LPISTATE *lpistate, MSKstakeye *skx, MSKstakeye *skc)
void SCIPdecodeDualBit(const SCIP_DUALPACKET *inp, int *out, int count)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int row, SCIP_Real *coef, int *inds, int *ninds)
interface methods for specific LP solvers
static void convertstat_scip2mosek(const int *stat, int n, MSKstakeye *resstat)
SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
SCIP_Bool SCIPlpiExistsDualRay(SCIP_LPI *lpi)
static SCIP_RETCODE getEndptrs(int n, const int *beg, int nnonz, int **aptre)
SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss)
enum SCIP_Retcode SCIP_RETCODE
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
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 SCIPlpiStrongbranchInt(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
static SCIP_RETCODE lpistateCreate(SCIP_LPISTATE **lpistate, BMS_BLKMEM *blkmem, int ncols, int nrows)
SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
enum SCIP_LPParam SCIP_LPPARAM
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
#define BMSallocMemoryArray(ptr, num)
static int numstrongbranchobjup
SCIP_RETCODE SCIPlpiSetIntegralityInformation(SCIP_LPI *lpi, int ncols, int *intInfo)
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
static void convertstat_scip2mosek_slack(const int *stat, int n, MSKstakeye *resstat)
SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int row, const SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiClear(SCIP_LPI *lpi)
#define BMSfreeMemory(ptr)
SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, const int *cstat, const int *rstat)
SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
enum SCIP_Pricing SCIP_PRICING
static int numstrongbranchmaxiterdo
SCIP_RETCODE SCIPlpiDelRowset(SCIP_LPI *lpi, int *dstat)
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray)
static SCIP_RETCODE SolveWSimplex(SCIP_LPI *lpi)
static SCIP_RETCODE lpistatePack(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
static SCIP_RETCODE getSolutionStatus(SCIP_LPI *lpi, MSKprostae *prosta, MSKsolstae *solsta)
SCIP_DUALPACKET COLPACKET
SCIP_Bool SCIPlpiIsDualInfeasible(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiWriteState(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals)
SCIP_DUALPACKET COLPACKET
static int numdualmaxiter
static void MSKAPI printstr(void *handle, const char *str)
SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind)
packing single and dual bit values
SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi)
#define BMSfreeMemoryArray(ptr)
SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality)
SCIP_RETCODE SCIPlpiLoadColLP(SCIP_LPI *lpi, SCIP_OBJSEN objsen, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, 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 SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow)
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
static SCIP_RETCODE convertstat_mosek2scip(SCIP_LPI *lpi, MSKaccmodee acc, MSKstakeye *sk, int n, int *stat)
SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval)
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPINORMS *lpinorms)
static SCIP_RETCODE presolve(SCIP *scip, SCIP_Bool *unbounded, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPISTATE *lpistate)
SCIP_DUALPACKET ROWPACKET
SCIP_RETCODE SCIPlpiScaleCol(SCIP_LPI *lpi, int col, SCIP_Real scaleval)
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
static SCIP_RETCODE SCIPlpiStrongbranch(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
static SCIP_RETCODE setbase(SCIP_LPI *lpi)
#define DEBUG_CHECK_STATE_TOL
static SCIP_RETCODE handle_singular(SCIP_LPI *lpi, int *basis, MSKrescodee res)
static SCIP_RETCODE getbase(SCIP_LPI *lpi, int ncols, int nrows)
static SCIP_RETCODE getASlice(SCIP_LPI *lpi, MSKaccmodee iscon, int first, int last, int *nnonz, int *beg, int *ind, double *val)
SCIP_RETCODE SCIPlpiScaleRow(SCIP_LPI *lpi, int row, SCIP_Real scaleval)
void * SCIPlpiGetSolverPointer(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval)
SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
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 SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
static SCIP_RETCODE checkState1(SCIP_LPI *lpi, int n, MSKstakeye *sk, MSKaccmodee accmode, char xc)
void SCIPencodeDualBit(const int *inp, SCIP_DUALPACKET *out, int count)
SCIP_Bool SCIPlpiWasSolved(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
#define BMSfreeBlockMemory(mem, ptr)
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_Bool SCIPlpiHasPrimalRay(SCIP_LPI *lpi)
static int numstrongbranchmaxiterup
unsigned int SCIP_DUALPACKET
SCIP_RETCODE SCIPlpiClearState(SCIP_LPI *lpi)
static void scale_vec(int len, double *vec, double s)
#define SCIP_ABORT_FALSE(x)
static SCIP_RETCODE ensureStateMem(SCIP_LPI *lpi, int ncols, int nrows)
#define BMSallocBlockMemoryArray(mem, ptr, num)
SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val)
static const char * paramty2str(SCIP_LPPARAM type)
SCIP_RETCODE SCIPlpiStrongbranchFrac(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
static const char * paramname[]
SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success)
SCIP_RETCODE SCIPlpiReadState(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
#define BMSfreeBlockMemoryArray(mem, ptr, num)
SCIP_RETCODE SCIPlpiDelColset(SCIP_LPI *lpi, int *dstat)
SCIP_RETCODE SCIPlpiStrongbranchesInt(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
SCIP_Bool SCIPlpiIsDualUnbounded(SCIP_LPI *lpi)
static SCIP_RETCODE getIndicesFromDense(int *dstat, int n, int *count, int **sub)
SCIP_RETCODE SCIPlpiGetObjsen(SCIP_LPI *lpi, SCIP_OBJSEN *objsen)
SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
SCIP_RETCODE SCIPlpiGetCols(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lb, SCIP_Real *ub, int *nnonz, int *beg, int *ind, SCIP_Real *val)
SCIP_RETCODE SCIPlpiGetNNonz(SCIP_LPI *lpi, int *nnonz)
SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiStrongbranchesFrac(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
static SCIP_RETCODE checkState(SCIP_LPI *lpi, int ncols, int nrows)
SCIP_RETCODE SCIPlpiChgObjsen(SCIP_LPI *lpi, SCIP_OBJSEN objsen)
static int rowpacketNum(int nrows)
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
static int numstrongbranchobjdo
SCIP_Bool SCIPlpiHasDualRay(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
#define STRONGBRANCH_PRICING
SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
SCIP_DUALPACKET ROWPACKET
SCIP_RETCODE SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
static void generateMskBounds(int n, const double *lb, const double *ub, MSKboundkeye *bk, double *msklb, double *mskub)
static int colpacketNum(int ncols)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
#define BMSallocMemory(ptr)
#define BMSreallocMemoryArray(ptr, num)
static SCIP_RETCODE convertstat_mosek2scip_slack(SCIP_LPI *lpi, MSKaccmodee acc, MSKstakeye *sk, int m, int *stat)
static SCIP_RETCODE getIndicesRange(int first, int last, int **sub)
SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival)
SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi)
SCIP_MESSAGEHDLR * messagehdlr
static int numprimalmaxiter
SCIP_RETCODE SCIPlpiGetRowNames(SCIP_LPI *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft)
SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
#define BMSallocBlockMemory(mem, ptr)
#define SENSE2MOSEK(objsen)
SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover)
struct BMS_BlkMem BMS_BLKMEM
SCIP_RETCODE SCIPlpiGetColNames(SCIP_LPI *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft)
SCIP_Bool SCIPlpiIsTimelimExc(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol)
const char * SCIPlpiGetSolverDesc(void)
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)