53#include "tinycthread/tinycthread.h"
57#define snprintf _snprintf
60#if ( MSK_VERSION_MAJOR < 7 )
61#error "The MOSEK interface only works for MOSEK versions 7.0.0.0 and newer"
64#define scipmskobjsen MSKobjsensee
65#define SENSE2MOSEK(objsen) (((objsen)==SCIP_OBJSEN_MINIMIZE)?(MSK_OBJECTIVE_SENSE_MINIMIZE):(MSK_OBJECTIVE_SENSE_MAXIMIZE))
69#define MOSEK_CALL(x) do \
71 MSKrescodee _restat_; \
73 if( (_restat_) != MSK_RES_OK && (_restat_ ) != MSK_RES_TRM_MAX_NUM_SETBACKS ) \
75 SCIPerrorMessage("LP Error: MOSEK returned %d.\n", (int)_restat_); \
76 return SCIP_LPERROR; \
82#define SCIP_ABORT_FALSE(x) do \
84 SCIP_RETCODE _restat_; \
85 if( (_restat_ = (x)) != SCIP_OKAY ) \
87 SCIPerrorMessage("LP Error: MOSEK returned %d.\n", (int)_restat_); \
94#define IS_POSINF(x) ((x) >= MSK_INFINITY)
95#define IS_NEGINF(x) ((x) <= -MSK_INFINITY)
96#define MOSEK_relDiff(val1, val2) ( ((val1)-(val2))/(MAX3(1.0,REALABS(val1),REALABS(val2))) )
99 #if defined(_Thread_local)
102 static _Thread_local
int numlp = 0;
103 #define SCIP_REUSEENV
109 #define SCIP_REUSEENV
112#if MSK_VERSION_MAJOR >= 9
113#define NEAR_REL_TOLERANCE 1.0
115#define DEBUG_PRINT_STAT 0
116#define DEBUG_PARAM_SETTING 0
117#define DEBUG_CHECK_DATA 0
118#define DEBUG_EASY_REPRODUCE 0
119#define DEBUG_DO_INTPNT_FEAS_CHECK 0
120#define DEBUG_CHECK_STATE_TOL 1e-5
122#define SHOW_RELATIVE_OPTIMAL_GAP 0
123#define ASSERT_ON_NUMERICAL_TROUBLES 0
124#define ASSERT_ON_WARNING 0
125#define FORCE_MOSEK_LOG 0
126#define FORCE_MOSEK_SUMMARY 0
127#define FORCE_NO_MAXITER 0
128#define SETBACK_LIMIT 250
129#define STRONGBRANCH_PRICING MSK_SIM_SELECTION_SE
130#define SUPRESS_NAME_ERROR 1
132#define WRITE_PRIMAL 0
133#define WRITE_INTPNT 0
134#if WRITE_DUAL > 0 || WRITE_PRIMAL > 0 || WRITE_INTPNT > 0 || FORCE_MOSEK_LOG > 0 || FORCE_MOSEK_SUMMARY > 0
137#define DEGEN_LEVEL MSK_SIM_DEGEN_FREE
138#define ALWAYS_SOLVE_PRIMAL_FORM 1
139#if DEBUG_PRINT_STAT > 0
140static int numstrongbranchmaxiterup = 0;
141static int numstrongbranchmaxiterdo = 0;
142static int numprimalmaxiter = 0;
143static int numdualmaxiter = 0;
144static int numstrongbranchobjup = 0;
145static int numstrongbranchobjdo = 0;
146static int numprimalobj = 0;
147static int numdualobj = 0;
150#if DEBUG_PRINT_STAT > 0
151static int numstrongbranchmaxiterup = 0;
152static int numstrongbranchmaxiterdo = 0;
153static int numprimalmaxiter = 0;
154static int numdualmaxiter = 0;
155static int numstrongbranchobjup = 0;
156static int numstrongbranchobjdo = 0;
157static int numprimalobj = 0;
158static int numdualobj = 0;
198#define COLS_PER_PACKET SCIP_DUALPACKETSIZE
200#define ROWS_PER_PACKET SCIP_DUALPACKETSIZE
225 MSKsoltypee whichsol,
234 res = MSK_getprosta(task, whichsol, prosta);
235 if ( res != MSK_RES_OK )
240 res = MSK_getsolsta(task, whichsol, solsta);
241 if ( res != MSK_RES_OK )
269 MSKuserhandle_t handle,
273#if SUPRESS_NAME_ERROR
275 (void) snprintf(errstr, 32,
"MOSEK Error %d", MSK_RES_ERR_DUP_NAME);
276 if (0 == strncmp(errstr, str, strlen(errstr)))
280 if ( handle ==
NULL )
281 printf(
"MOSEK: %s", str);
286#if DEBUG_CHECK_DATA > 0
291 const char* functionname
311 MOSEK_CALL( MSK_solutiondef(lpi->
task, MSK_SOL_BAS, &gotbasicsol) );
334 for(
i = 0;
i < numvar;
i++ )
339 for(
i = 0;
i < numcon;
i++ )
344 for(
i = 0;
i < numcon; ++
i )
348 if( ( tskc[
i] == MSK_SK_FIX && tbkc[
i] != MSK_BK_FX ) ||
349 ( tskc[
i] == MSK_SK_LOW && !(tbkc[
i] == MSK_BK_FX || tbkc[
i] == MSK_BK_LO || tbkc[
i] == MSK_BK_RA ) ) ||
350 ( tskc[
i] == MSK_SK_UPR && !(tbkc[
i] == MSK_BK_FX || tbkc[
i] == MSK_BK_UP || tbkc[
i] == MSK_BK_RA ) ) )
352 SCIPerrorMessage(
"STATUS KEY ERROR i %d bkc %d skc %d %s\n",
i, tbkc[
i], tskc[
i], functionname);
356 if( tbkc[
i] == MSK_BK_LO || tbkc[
i] == MSK_BK_FX || tbkc[
i] == MSK_BK_RA )
364 if( tbkc[
i] == MSK_BK_UP || tbkc[
i] == MSK_BK_FX || tbkc[
i] == MSK_BK_RA )
373 for(
i = 0;
i < numvar; ++
i )
375 if( tbkx[
i] == MSK_BK_LO || tbkx[
i] == MSK_BK_FX || tbkx[
i] == MSK_BK_RA )
383 if( tbkx[
i] == MSK_BK_UP || tbkx[
i] == MSK_BK_FX || tbkx[
i] == MSK_BK_RA )
489 for(
i = 0;
i < n;
i++ )
510 else if (lb[
i] == ub[
i])
541 for(
i = 0;
i < n-1;
i++)
548 assert(aptre[n-1] >= beg[n-1]);
552 for(
i = 0;
i < n;
i++ )
573 for(
i = first;
i <= last;
i++ )
597 for(
i = 0;
i < n;
i++ )
613 for(
i = 0;
i < n;
i++ )
633 for(
i = 0;
i < len;
i++ )
753#define STR_HELPER(x) #x
754#define STR(x) STR_HELPER(x)
756#if MSK_VERSION_MAJOR < 9
757 #define mskname "MOSEK " STR(MSK_VERSION_MAJOR) "." STR(MSK_VERSION_MINOR) "." STR(MSK_VERSION_BUILD) "." STR(MSK_VERSION_REVISION)
759 #define mskname "MOSEK " STR(MSK_VERSION_MAJOR) "." STR(MSK_VERSION_MINOR) "." STR(MSK_VERSION_REVISION)
778 return "Linear Programming Solver developed by MOSEK Optimization Software (www.mosek.com)";
790 return (
void*) lpi->
task;
804 SCIPerrorMessage(
"SCIPlpiSetIntegralityInformation() has not been implemented yet.\n");
863#if MSK_VERSION_MAJOR < 8
868 (*lpi)->lpid =
numlp++;
871 (*lpi)->numlp = &
numlp;
877 MOSEK_CALL( MSK_linkfunctoenvstream((*lpi)->mosekenv, MSK_STREAM_LOG, (MSKuserhandle_t) messagehdlr,
printstr) );
878#if MSK_VERSION_MAJOR < 8
883 MOSEK_CALL( MSK_makeemptytask((*lpi)->mosekenv, &((*lpi)->task)) );
885 MOSEK_CALL( MSK_linkfunctotaskstream((*lpi)->task, MSK_STREAM_LOG, (MSKuserhandle_t) messagehdlr,
printstr) );
889 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_FREE_SIMPLEX) );
891 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_SIM_SWITCH_OPTIMIZER, MSK_ON) );
892 MOSEK_CALL( MSK_puttaskname((*lpi)->task, (
char*) name) );
893 MOSEK_CALL( MSK_putobjname((*lpi)->task,
"obj") );
896 MOSEK_CALL( MSK_putdouparam((*lpi)->task, MSK_DPAR_DATA_TOL_AIJ_HUGE, MSK_INFINITY * 2));
897 MOSEK_CALL( MSK_putdouparam((*lpi)->task, MSK_DPAR_DATA_TOL_C_HUGE, MSK_INFINITY));
900 MOSEK_CALL( MSK_putdouparam((*lpi)->task, MSK_DPAR_DATA_TOL_AIJ_LARGE, MSK_INFINITY * 2));
901 MOSEK_CALL( MSK_putdouparam((*lpi)->task, MSK_DPAR_DATA_TOL_CJ_LARGE, MSK_INFINITY));
904 MOSEK_CALL( MSK_putdouparam((*lpi)->task, MSK_DPAR_DATA_TOL_BOUND_WRN, MSK_INFINITY));
906 (*lpi)->optimizecount = 0;
907 (*lpi)->termcode = MSK_RES_OK;
908 (*lpi)->itercount = 0;
911 (*lpi)->lastalgo = MSK_OPTIMIZER_FREE;
916 (*lpi)->aptre =
NULL;
921 (*lpi)->aptresize = 0;
922 (*lpi)->lastsolvetype = (MSKsoltypee) -1;
923 (*lpi)->lpinfo =
FALSE;
924 (*lpi)->restrictselectdef = 50;
925 (*lpi)->fromscratch =
FALSE;
926 (*lpi)->clearstate =
FALSE;
927 (*lpi)->messagehdlr = messagehdlr;
931 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_LOG, MSK_OFF) );
932 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_LOG_SIM, MSK_OFF) );
957 assert(*(*lpi)->numlp > 0);
960 if( *(*lpi)->numlp == 0 )
963 MOSEK_CALL( MSK_deleteenv((*lpi)->reusemosekenv) );
964 *(*lpi)->reusemosekenv =
NULL;
967 MOSEK_CALL( MSK_deleteenv(&(*lpi)->mosekenv) );
1002 for( j = 0; j < nnonz; j++ )
1023#if DEBUG_CHECK_DATA > 0
1024 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiLoadColLP") );
1042 MOSEK_CALL( MSK_inputdata(lpi->
task, nrows, ncols, nrows, ncols,
obj, 0.0, beg, lpi->
aptre, ind, val,
1043 lpi->
bkc, lhs, rhs, lpi->
bkx, lb, ub) );
1047 if( colnames !=
NULL )
1051 for(
c = 0;
c < ncols;
c++ )
1057 if( rownames !=
NULL )
1061 for(
r = 0;
r < nrows;
r++ )
1067#if DEBUG_CHECK_DATA > 0
1068 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiLoadColLP") );
1088#if MSK_VERSION_MAJOR < 7
1110#if DEBUG_CHECK_DATA > 0
1111 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiAddCols") );
1124 MOSEK_CALL( MSK_putvarboundslice(lpi->
task, oldcols, oldcols+ncols, lpi->
bkx, lb, ub) );
1134 for (j = 0; j < nnonz; ++j)
1136 assert( 0 <= ind[j] && ind[j] < nrows );
1143 MOSEK_CALL( MSK_putacolslice(lpi->
task, oldcols, oldcols+ncols, beg, lpi->
aptre, ind, val) );
1146 if( colnames !=
NULL )
1150 for(
c = 0;
c < ncols;
c++ )
1156#if DEBUG_CHECK_DATA > 0
1157 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiAddCols") );
1176 assert(firstcol <= lastcol + 1);
1188 if( firstcol > lastcol )
1193#if DEBUG_CHECK_DATA > 0
1194 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelCols") );
1199 MOSEK_CALL( MSK_removevars(lpi->
task, lastcol-firstcol+1, sub) );
1203#if DEBUG_CHECK_DATA > 0
1204 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelCols") );
1233#if DEBUG_CHECK_DATA > 0
1234 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelColset") );
1242 for(
i = 0;
i < ncols;
i++)
1262#if DEBUG_CHECK_DATA > 0
1263 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelColset") );
1295#if DEBUG_CHECK_DATA > 0
1296 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiAddRows") );
1309 MOSEK_CALL( MSK_putconboundslice(lpi->
task, oldrows, oldrows+nrows, lpi->
bkc, lhs, rhs) );
1319 for (j = 0; j < nnonz; ++j)
1322 assert( 0 <= ind[j] && ind[j] < ncols );
1328 MOSEK_CALL( MSK_putarowslice(lpi->
task, oldrows, oldrows+nrows, beg, lpi->
aptre, ind, val) );
1331 if( rownames !=
NULL )
1335 for(
r = 0;
r < nrows;
r++ )
1341#if DEBUG_CHECK_DATA > 0
1342 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiAddRows") );
1361 assert(firstrow <= lastrow + 1);
1373 if( firstrow > lastrow )
1378#if DEBUG_CHECK_DATA > 0
1379 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelRows") );
1386 MOSEK_CALL( MSK_removecons(lpi->
task, lastrow-firstrow+1, sub) );
1390#if DEBUG_CHECK_DATA > 0
1391 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelRows") );
1419#if DEBUG_CHECK_DATA > 0
1420 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelRowset") );
1429 for(
i = 0;
i < nrows;
i++ )
1449#if DEBUG_CHECK_DATA > 0
1450 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiDelRowset end") );
1503#if DEBUG_CHECK_DATA > 0
1504 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgBounds") );
1509 for (
i = 0;
i < ncols; ++
i)
1513 SCIPerrorMessage(
"LP Error: fixing lower bound for variable %d to infinity.\n", ind[
i]);
1518 SCIPerrorMessage(
"LP Error: fixing upper bound for variable %d to -infinity.\n", ind[
i]);
1526#if MSK_VERSION_MAJOR < 9
1527 MOSEK_CALL( MSK_putboundlist(lpi->
task, MSK_ACC_VAR, ncols, ind, lpi->
bkx, lb, ub) );
1532#if DEBUG_CHECK_DATA > 0
1533 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgBounds") );
1560#if DEBUG_CHECK_DATA > 0
1561 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgSides") );
1567#if MSK_VERSION_MAJOR < 9
1568 MOSEK_CALL( MSK_putboundlist(lpi->
task, MSK_ACC_CON, nrows, ind, lpi->
bkc, lhs, rhs) );
1573#if DEBUG_CHECK_DATA > 0
1574 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgSides") );
1596#if DEBUG_CHECK_DATA > 0
1597 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgCoef") );
1602#if DEBUG_CHECK_DATA > 0
1603 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgCoef") );
1646#if DEBUG_CHECK_DATA > 0
1647 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgObj") );
1652#if DEBUG_CHECK_DATA > 0
1653 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiChgObj") );
1681#if DEBUG_CHECK_DATA > 0
1682 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiScaleRow") );
1702#if MSK_VERSION_MAJOR < 9
1703 MOSEK_CALL( MSK_getbound(lpi->
task, MSK_ACC_CON, row, &bkc, &blc, &buc) );
1705 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_CON, row, bkc, blc, buc) );
1712#if DEBUG_CHECK_DATA > 0
1713 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiScaleRow") );
1742#if DEBUG_CHECK_DATA > 0
1743 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiScaleCol") );
1762#if MSK_VERSION_MAJOR < 9
1763 MOSEK_CALL( MSK_getbound(lpi->
task, MSK_ACC_VAR, col, &bkx, &blx, &bux) );
1765 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, bkx, blx, bux) );
1775#if DEBUG_CHECK_DATA > 0
1776 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiScaleCol") );
1862#if DEBUG_CHECK_DATA > 0
1863 SCIP_CALL( scip_checkdata(lpi,
"getASlice") );
1868#if MSK_VERSION_MAJOR <= 9
1878#if MSK_VERSION_MAJOR < 9
1879 MOSEK_CALL( MSK_getaslicenumnz(lpi->
task, iscon ? MSK_ACC_CON : MSK_ACC_VAR, first, last+1, nnonz) );
1881 MOSEK_CALL( MSK_getaslice(lpi->
task, iscon ? MSK_ACC_CON : MSK_ACC_VAR, first, last+1, *nnonz, &surplus, beg, lpi->
aptre, ind, val) );
1886 MOSEK_CALL( MSK_getarowslicenumnz(lpi->
task, first, last+1, nnonz) );
1887#if MSK_VERSION_MAJOR == 9
1889 MOSEK_CALL( MSK_getarowslice(lpi->
task, first, last+1, *nnonz, &surplus, beg, lpi->
aptre, ind, val) );
1892 MOSEK_CALL( MSK_getarowslice(lpi->
task, first, last+1, *nnonz, beg, lpi->
aptre, ind, val) );
1897 MOSEK_CALL( MSK_getacolslicenumnz(lpi->
task, first, last+1, nnonz) );
1898#if MSK_VERSION_MAJOR == 9
1900 MOSEK_CALL( MSK_getacolslice(lpi->
task, first, last+1, *nnonz, &surplus, beg, lpi->
aptre, ind, val) );
1903 MOSEK_CALL( MSK_getacolslice(lpi->
task, first, last+1, *nnonz, beg, lpi->
aptre, ind, val) );
1909#if DEBUG_CHECK_DATA > 0
1910 SCIP_CALL( scip_checkdata(lpi,
"getASlice") );
1938 assert(firstcol <= lastcol + 1);
1977 assert(firstrow <= lastrow + 1);
1988#if DEBUG_CHECK_DATA > 0
1989 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetRows") );
1995#if DEBUG_CHECK_DATA > 0
1996 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetRows") );
2009 int namestoragesize,
2016 assert(colnames !=
NULL || namestoragesize == 0);
2017 assert(namestorage !=
NULL || namestoragesize == 0);
2018 assert(namestoragesize >= 0);
2021 assert(firstcol <= lastcol + 1);
2042 int namestoragesize,
2049 assert(rownames !=
NULL || namestoragesize == 0);
2050 assert(namestorage !=
NULL || namestoragesize == 0);
2051 assert(namestoragesize >= 0);
2054 assert(firstrow <= lastrow + 1);
2074 MSKobjsensee mskobjsen;
2102 assert(firstcol <= lastcol + 1);
2113 MOSEK_CALL( MSK_getcslice(lpi->
task, firstcol, lastcol+1, vals) );
2131 assert(firstcol <= lastcol + 1);
2142#if DEBUG_CHECK_DATA > 0
2143 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetBounds") );
2146#if MSK_VERSION_MAJOR < 9
2147 MOSEK_CALL( MSK_getboundslice(lpi->
task, MSK_ACC_VAR, firstcol, lastcol+1,
NULL, lbs, ubs) );
2168 assert(firstrow <= lastrow + 1);
2179#if DEBUG_CHECK_DATA > 0
2180 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetSides") );
2183#if MSK_VERSION_MAJOR < 9
2184 MOSEK_CALL( MSK_getboundslice(lpi->
task, MSK_ACC_CON, firstrow, lastrow+1,
NULL, lhss, rhss) );
2186 MOSEK_CALL( MSK_getconboundslice(lpi->
task, firstrow, lastrow+1,
NULL, lhss, rhss) );
2189#if DEBUG_CHECK_DATA > 0
2190 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetSides") );
2211#if DEBUG_CHECK_DATA > 0
2212 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetCoef") );
2217#if DEBUG_CHECK_DATA > 0
2218 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiGetCoef") );
2250 MSKrescodee* termcode,
2256#if ASSERT_ON_NUMERICAL_TROUBLES > 0
2257 if ( res == MSK_RES_TRM_MAX_NUM_SETBACKS || res == MSK_RES_TRM_NUMERICAL_PROBLEM )
2268 if ( res == MSK_RES_TRM_MAX_ITERATIONS || res == MSK_RES_TRM_MAX_TIME
2269 || res == MSK_RES_TRM_OBJECTIVE_RANGE || res == MSK_RES_TRM_STALL )
2275 *termcode = MSK_RES_OK;
2286 int itercount_primal;
2304 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, &maxiter) );
2307#if DEBUG_EASY_REPRODUCE
2308 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_AUTO_SORT_A_BEFORE_OPT, MSK_ON) );
2309 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_OFF) );
2311 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
2314 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_AUTO_UPDATE_SOL_INFO, MSK_OFF) );
2320 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_LOG_SIM_FREQ, 1) );
2328 MOSEK_CALL( MSK_solutiondef(lpi->
task, MSK_SOL_BAS, &gotbasicsol) );
2332 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_PRESOLVE_USE, MSK_PRESOLVE_MODE_OFF) );
2336 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_PRESOLVE_USE, MSK_PRESOLVE_MODE_ON) );
2339#if ALWAYS_SOLVE_PRIMAL_FORM > 0
2341 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SOLVE_FORM, MSK_SOLVE_PRIMAL) );
2344#if DEBUG_CHECK_DATA > 0
2345 SCIP_CALL( scip_checkdata(lpi,
"SolveWSimplex") );
2348 if( gotbasicsol && maxiter < 20000 )
2351 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_DUAL_RESTRICT_SELECTION, 0) );
2352 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_PRIMAL_RESTRICT_SELECTION, 0) );
2361#if FORCE_NO_MAXITER > 0
2362 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, 2000000000) );
2365#if DEBUG_CHECK_DATA > 0
2366 SCIP_CALL( scip_checkdata(lpi,
"Begin optimize with simplex") );
2369#if FORCE_MOSEK_SUMMARY > 1
2379#if MSK_VERSION_MAJOR < 10
2381 if( lpi->
termcode == MSK_RES_TRM_MAX_NUM_SETBACKS )
2385 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_SCALING, &scaling) );
2386 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SCALING, MSK_SCALING_AGGRESSIVE) );
2388 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SCALING, scaling) );
2392#if FORCE_MOSEK_SUMMARY
2404#if DEBUG_CHECK_DATA > 0
2405 SCIP_CALL( scip_checkdata(lpi,
"End optimize with simplex") );
2410 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, maxiter) );
2413 MOSEK_CALL( MSK_getintinf(lpi->
task, MSK_IINF_SIM_PRIMAL_ITER, &itercount_primal) );
2414 MOSEK_CALL( MSK_getintinf(lpi->
task, MSK_IINF_SIM_DUAL_ITER, &itercount_dual) );
2416 lpi->
itercount = itercount_primal + itercount_dual;
2424 SCIPdebugMessage(
"maxiter = %d, termcode = %d, prosta = %d, solsta = %d, objval = %g : %g, iter = %d+%d\n",
2425 maxiter, lpi->
termcode, prosta, solsta, pobj, dobj, itercount_primal, itercount_dual);
2429 case MSK_SOL_STA_OPTIMAL:
2430 case MSK_SOL_STA_PRIM_AND_DUAL_FEAS:
2431 case MSK_SOL_STA_PRIM_FEAS:
2432 case MSK_SOL_STA_DUAL_FEAS:
2433 case MSK_SOL_STA_PRIM_INFEAS_CER:
2434 case MSK_SOL_STA_DUAL_INFEAS_CER:
2439 case MSK_SOL_STA_UNKNOWN:
2442 lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE || lpi->
termcode == MSK_RES_TRM_STALL ||
2445 if ( lpi->
termcode != MSK_RES_TRM_MAX_ITERATIONS && lpi->
termcode != MSK_RES_TRM_MAX_TIME &&
2446 lpi->
termcode != MSK_RES_TRM_OBJECTIVE_RANGE )
2449 lpi->
termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2450#if ASSERT_ON_WARNING
2456#if MSK_VERSION_MAJOR < 9
2457 case MSK_SOL_STA_NEAR_OPTIMAL:
2458 case MSK_SOL_STA_NEAR_PRIM_FEAS:
2459 case MSK_SOL_STA_NEAR_DUAL_FEAS:
2460 case MSK_SOL_STA_NEAR_PRIM_AND_DUAL_FEAS:
2461 case MSK_SOL_STA_NEAR_PRIM_INFEAS_CER:
2462 case MSK_SOL_STA_NEAR_DUAL_INFEAS_CER:
2467 lpi->
termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2468#if ASSERT_ON_WARNING
2474 case MSK_SOL_STA_INTEGER_OPTIMAL:
2475#if MSK_VERSION_MAJOR < 9
2476 case MSK_SOL_STA_NEAR_INTEGER_OPTIMAL:
2483#if ASSERT_ON_WARNING
2493 case MSK_PRO_STA_PRIM_AND_DUAL_FEAS:
2494 case MSK_PRO_STA_PRIM_FEAS:
2495 case MSK_PRO_STA_DUAL_FEAS:
2496 case MSK_PRO_STA_PRIM_AND_DUAL_INFEAS:
2497 case MSK_PRO_STA_PRIM_INFEAS:
2498 case MSK_PRO_STA_DUAL_INFEAS:
2499 case MSK_PRO_STA_UNKNOWN:
2502#if MSK_VERSION_MAJOR < 9
2503 case MSK_PRO_STA_NEAR_PRIM_AND_DUAL_FEAS:
2504 case MSK_PRO_STA_NEAR_PRIM_FEAS:
2505 case MSK_PRO_STA_NEAR_DUAL_FEAS:
2507 case MSK_PRO_STA_ILL_POSED:
2508 case MSK_PRO_STA_PRIM_INFEAS_OR_UNBOUNDED:
2512 lpi->
termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2514#if ASSERT_ON_WARNING
2524#if ASSERT_ON_WARNING
2532#if SHOW_RELATIVE_OPTIMAL_GAP
2533 if ( solsta == MSK_SOL_STA_OPTIMAL && fabs(pobj) + fabs(dobj) > 1.0e-6 && fabs(pobj-dobj) > 0.0001*(fabs(pobj) + fabs(dobj)))
2535 SCIPerrorMessage(
"Simplex[%d] returned optimal solution with different objvals %g != %g reldiff %.2g%%\n",
2536 lpi->
optimizecount, pobj, dobj, 100.0 * fabs(pobj-dobj)/
MAX(fabs(pobj), fabs(dobj)));
2541 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2543 if (solsta != MSK_SOL_STA_DUAL_FEAS && solsta != MSK_SOL_STA_OPTIMAL && solsta != MSK_SOL_STA_PRIM_AND_DUAL_FEAS)
2553 if (maxiter >= 2000000000)
2555 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, maxiter) );
2557 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2566#if DEBUG_DO_INTPNT_FEAS_CHECK
2567 if (solsta == MSK_SOL_STA_PRIM_INFEAS_CER || solsta == MSK_SOL_STA_DUAL_INFEAS_CER)
2575 if (solsta == MSK_SOL_STA_PRIM_INFEAS_CER || solsta == MSK_SOL_STA_DUAL_INFEAS_CER)
2586#if DEBUG_PRINT_STAT > 0
2587 SCIPdebugMessage(
"Max iter stat : Count %d branchup = %d branchlo = %d primal %d dual %d\n",
2588 lpi->
optimizecount, numstrongbranchmaxiterup, numstrongbranchmaxiterdo, numprimalmaxiter, numdualmaxiter);
2589 SCIPdebugMessage(
"Objcut iter stat : Count %d branchup = %d branchlo = %d primal %d dual %d\n",
2590 lpi->
optimizecount, numstrongbranchobjup, numstrongbranchobjdo, numprimalobj, numdualobj);
2593#if DEBUG_CHECK_DATA > 0
2594 SCIP_CALL( scip_checkdata(lpi,
"SolveWSimplex") );
2613 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
2617 MSK_SIM_HOTSTART_NONE : MSK_SIM_HOTSTART_STATUS_KEYS) );
2620#if DEBUG_CHECK_DATA > 0
2621 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiSolvePrimal") );
2624 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_PRIMAL_SIMPLEX) );
2625 lpi->
lastalgo = MSK_OPTIMIZER_PRIMAL_SIMPLEX;
2634 MSK_writedata(lpi->
task, fname);
2640#ifdef SCIP_DISABLED_CODE
2642 if ( lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
2648 if( solsta != MSK_SOL_STA_PRIM_FEAS )
2655#if DEBUG_PRINT_STAT > 0
2656 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2660#if DEBUG_PRINT_STAT > 0
2661 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2665#if DEBUG_CHECK_DATA > 0
2666 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiSolvePrimal") );
2686#if (MSK_VERSION_MAJOR < 8) || (MSK_VERSION_MAJOR == 8 && MSK_VERSION_MINOR == 0)
2687 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_INTEGER, MSK_ON) );
2689 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
2693 MSK_SIM_HOTSTART_NONE : MSK_SIM_HOTSTART_STATUS_KEYS) );
2696 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_DUAL_SIMPLEX) );
2697 lpi->
lastalgo = MSK_OPTIMIZER_DUAL_SIMPLEX;
2705 MSK_writedata(lpi->
task, fname);
2711#ifdef SCIP_DISABLED_CODE
2713 if ( lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
2719 if( solsta != MSK_SOL_STA_DUAL_FEAS )
2726#if DEBUG_PRINT_STAT > 0
2727 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2731#if DEBUG_PRINT_STAT > 0
2732 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2770#if DEBUG_CHECK_DATA > 0
2771 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiSolveBarrier") );
2774#ifdef SCIP_DISABLED_CODE
2777 MSK_SIM_HOTSTART_NONE : MSK_INTPNT_HOTSTART_PRIMAL_DUAL) );
2781 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_INTPNT_BASIS, crossover ? MSK_BI_ALWAYS : MSK_BI_NEVER) );
2782 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_INTPNT) );
2783 lpi->
lastalgo = MSK_OPTIMIZER_INTPNT;
2785#if MSK_VERSION_MAJOR >= 9
2786 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_INTPNT_CO_TOL_NEAR_REL, NEAR_REL_TOLERANCE) );
2796 MSK_writedata(lpi->
task, fname);
2802#if DEBUG_PRINT_STAT > 0
2803 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
2815 case MSK_SOL_STA_OPTIMAL:
2816 case MSK_SOL_STA_PRIM_AND_DUAL_FEAS:
2817 case MSK_SOL_STA_PRIM_FEAS:
2818 case MSK_SOL_STA_DUAL_FEAS:
2819 case MSK_SOL_STA_PRIM_INFEAS_CER:
2820 case MSK_SOL_STA_DUAL_INFEAS_CER:
2824 case MSK_SOL_STA_UNKNOWN:
2825#if MSK_VERSION_MAJOR < 9
2826 case MSK_SOL_STA_NEAR_OPTIMAL:
2827 case MSK_SOL_STA_NEAR_PRIM_FEAS:
2828 case MSK_SOL_STA_NEAR_DUAL_FEAS:
2829 case MSK_SOL_STA_NEAR_PRIM_AND_DUAL_FEAS:
2830 case MSK_SOL_STA_NEAR_PRIM_INFEAS_CER:
2831 case MSK_SOL_STA_NEAR_DUAL_INFEAS_CER:
2836 lpi->
termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2838#if ASSERT_ON_WARNING
2842 case MSK_SOL_STA_INTEGER_OPTIMAL:
2843#if MSK_VERSION_MAJOR < 9
2844 case MSK_SOL_STA_NEAR_INTEGER_OPTIMAL:
2851#if ASSERT_ON_WARNING
2860 case MSK_PRO_STA_PRIM_AND_DUAL_FEAS:
2861 case MSK_PRO_STA_PRIM_FEAS:
2862 case MSK_PRO_STA_DUAL_FEAS:
2863 case MSK_PRO_STA_PRIM_AND_DUAL_INFEAS:
2864 case MSK_PRO_STA_PRIM_INFEAS:
2865 case MSK_PRO_STA_DUAL_INFEAS:
2867 case MSK_PRO_STA_UNKNOWN:
2868#if MSK_VERSION_MAJOR < 9
2869 case MSK_PRO_STA_NEAR_PRIM_AND_DUAL_FEAS:
2870 case MSK_PRO_STA_NEAR_PRIM_FEAS:
2871 case MSK_PRO_STA_NEAR_DUAL_FEAS:
2873 case MSK_PRO_STA_ILL_POSED:
2874 case MSK_PRO_STA_PRIM_INFEAS_OR_UNBOUNDED:
2878 lpi->
termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2882#if ASSERT_ON_WARNING
2891#if ASSERT_ON_WARNING
2898#if DEBUG_CHECK_DATA > 0
2899 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiSolveBarrier") );
2950 MSKobjsensee objsen;
2970#if DEBUG_CHECK_DATA > 0
2971 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiStrongbranch") );
2985 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, &olditerlim) );
2986 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_DUAL_SELECTION, &oldselection) );
2987 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART, &oldhotstart) );
2989 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, itlim) );
2992 if (objsen == MSK_OBJECTIVE_SENSE_MINIMIZE)
3001#if MSK_VERSION_MAJOR < 9
3002 MOSEK_CALL( MSK_getbound(lpi->
task, MSK_ACC_VAR, col, &bkx, &blx, &bux) );
3009 newub =
EPSCEIL(psol-1.0, 1e-06);
3011 if (newub < blx - 0.5)
3022 else if (
EPSEQ(blx, newub,1.0e-6))
3030#if MSK_VERSION_MAJOR < 9
3031 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, newbk, blx, newub) );
3033 MOSEK_CALL( MSK_putvarbound(lpi->
task, col, newbk, blx, newub) );
3076#if DEBUG_PRINT_STAT > 0
3077 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
3078 ++numstrongbranchobjup;
3080 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
3081 ++numstrongbranchmaxiterup;
3086#if MSK_VERSION_MAJOR < 9
3087 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, bkx, blx, bux) );
3094 if (newlb > bux + 0.5)
3105 else if (
EPSEQ(bux, newlb,1.0e-6))
3113#if MSK_VERSION_MAJOR < 9
3114 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, newbk, newlb, bux) );
3116 MOSEK_CALL( MSK_putvarbound(lpi->
task, col, newbk, newlb, bux) );
3156#if DEBUG_PRINT_STAT > 0
3157 if (lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
3158 ++numstrongbranchobjdo;
3160 if (lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS)
3161 ++numstrongbranchmaxiterdo;
3165#if MSK_VERSION_MAJOR < 9
3166 MOSEK_CALL( MSK_putbound(lpi->
task, MSK_ACC_VAR, col, bkx, blx, bux) );
3170 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, olditerlim) );
3171 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_DUAL_SELECTION, oldselection) );
3172 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART, oldhotstart) );
3181#if DEBUG_CHECK_DATA > 0
3182 SCIP_CALL( scip_checkdata(lpi,
"SCIPlpiStrongbranch") );
3246 for (j = 0; j < ncols; ++j)
3310 for (j = 0; j < ncols; ++j)
3364 case MSK_PRO_STA_PRIM_AND_DUAL_FEAS:
3365 *primalfeasible =
TRUE;
3366 *dualfeasible =
TRUE;
3368 case MSK_PRO_STA_PRIM_FEAS:
3369 *primalfeasible =
TRUE;
3370 *dualfeasible =
FALSE;
3372 case MSK_PRO_STA_DUAL_FEAS:
3373 *primalfeasible =
FALSE;
3374 *dualfeasible =
TRUE;
3376 case MSK_PRO_STA_DUAL_INFEAS:
3378 *primalfeasible = (lpi->
lastalgo == MSK_OPTIMIZER_PRIMAL_SIMPLEX);
3379 *dualfeasible =
FALSE;
3381 case MSK_PRO_STA_UNKNOWN:
3382 case MSK_PRO_STA_PRIM_INFEAS:
3383 case MSK_PRO_STA_PRIM_AND_DUAL_INFEAS:
3384 case MSK_PRO_STA_ILL_POSED:
3385#if MSK_VERSION_MAJOR < 9
3386 case MSK_PRO_STA_NEAR_PRIM_AND_DUAL_FEAS:
3387 case MSK_PRO_STA_NEAR_PRIM_FEAS:
3388 case MSK_PRO_STA_NEAR_DUAL_FEAS:
3390 case MSK_PRO_STA_PRIM_INFEAS_OR_UNBOUNDED:
3391 *primalfeasible =
FALSE;
3392 *dualfeasible =
FALSE;
3419 return ( solsta == MSK_SOL_STA_DUAL_INFEAS_CER
3420 || prosta == MSK_PRO_STA_DUAL_INFEAS
3421 || prosta == MSK_PRO_STA_PRIM_AND_DUAL_INFEAS );
3441 return (solsta == MSK_SOL_STA_DUAL_INFEAS_CER);
3458 return (solsta == MSK_SOL_STA_DUAL_INFEAS_CER && lpi->
lastalgo == MSK_OPTIMIZER_PRIMAL_SIMPLEX);
3488 return (prosta == MSK_PRO_STA_PRIM_FEAS || prosta == MSK_PRO_STA_PRIM_AND_DUAL_FEAS || (prosta == MSK_PRO_STA_DUAL_INFEAS && lpi->
lastalgo == MSK_OPTIMIZER_PRIMAL_SIMPLEX));
3509 return ( solsta == MSK_SOL_STA_PRIM_INFEAS_CER
3510 || prosta == MSK_PRO_STA_PRIM_INFEAS
3511 || prosta == MSK_PRO_STA_PRIM_AND_DUAL_INFEAS );
3531 return (solsta == MSK_SOL_STA_PRIM_INFEAS_CER);
3573 return (prosta == MSK_PRO_STA_DUAL_FEAS || prosta == MSK_PRO_STA_PRIM_AND_DUAL_FEAS);
3591 return (solsta == MSK_SOL_STA_OPTIMAL);
3613 MSKobjsensee objsen;
3618 res = MSK_getobjsense(lpi->
task, &objsen);
3619 if ( res != MSK_RES_OK )
3622 if ( objsen == MSK_OBJECTIVE_SENSE_MINIMIZE )
3624 res = MSK_getdouparam(lpi->
task, MSK_DPAR_UPPER_OBJ_CUT, &objlimit);
3628 res = MSK_getdouparam(lpi->
task, MSK_DPAR_LOWER_OBJ_CUT, &objlimit);
3630 if ( res != MSK_RES_OK )
3633 if ( lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
3636 res = MSK_getdouparam(lpi->
task, MSK_DPAR_UPPER_OBJ_CUT, &objvalue);
3643 if ( res != MSK_RES_OK )
3646 if ( objsen == MSK_OBJECTIVE_SENSE_MAXIMIZE )
3655 return ( lpi->
termcode == MSK_RES_OK
3656 || lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS
3657 || lpi->
termcode == MSK_RES_TRM_MAX_TIME
3658 || lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE );
3670 return ( lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE );
3682 return ( lpi->
termcode == MSK_RES_TRM_MAX_ITERATIONS );
3694 return ( lpi->
termcode == MSK_RES_TRM_MAX_TIME );
3715 return (
int) solsta;
3751 if ( lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
3792 if ( lpi->
termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
3816 if ( solsta == MSK_SOL_STA_DUAL_INFEAS_CER )
3825 for (j = 0; j < ncols; ++j)
3865 for(
i = 0;
i < ncols;
i++ )
3868 redcost[
i] -= sux[
i];
3908 MOSEK_CALL( MSK_getsolution(lpi->
task, lpi->
lastsolvetype,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL, dualfarkas,
3962 if (res == MSK_RES_ERR_BASIS_SINGULAR)
3998 for(
i = 0;
i < n;
i++ )
4012#if MSK_VERSION_MAJOR < 9
4044#if MSK_VERSION_MAJOR < 10
4074 for(
i = 0;
i < m;
i++ )
4087#if MSK_VERSION_MAJOR < 9
4115#if MSK_VERSION_MAJOR < 10
4136 for(
i = 0;
i < n;
i++ )
4141 resstat[
i] = MSK_SK_LOW;
4144 resstat[
i] = MSK_SK_BAS;
4147 resstat[
i] = MSK_SK_UPR;
4150 resstat[
i] = MSK_SK_SUPBAS;
4169 for(
i = 0;
i < n;
i++ )
4174 resstat[
i] = MSK_SK_UPR;
4177 resstat[
i] = MSK_SK_BAS;
4180 resstat[
i] = MSK_SK_LOW;
4183 resstat[
i] = MSK_SK_SUPBAS;
4283 for (
i = 0;
i < nrows;
i++ )
4285 if (bind[
i] < nrows)
4286 bind[
i] = -1 - bind[
i];
4288 bind[
i] = bind[
i] - nrows;
4326 MOSEK_CALL( MSK_putnaintparam(lpi->
task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_ON) );
4332 for (
i = 0;
i < nrows; ++
i)
4337 if ( ninds !=
NULL && inds !=
NULL )
4343#if MSK_VERSION_MAJOR < 10
4344 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 1, ninds, inds, coef) );
4346 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 1, *ninds, inds, coef, ninds) );
4348 assert( *ninds <= nrows );
4361#if MSK_VERSION_MAJOR < 10
4362 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 1, &numnz, sub, coef) );
4364 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 1, numnz, sub, coef, &numnz) );
4366 assert( numnz <= nrows );
4370 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
4413 MOSEK_CALL( MSK_putnaintparam(lpi->
task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_ON) );
4419 for (
i = 0;
i < nrows; ++
i)
4424 if ( ninds !=
NULL && inds !=
NULL )
4429#if MSK_VERSION_MAJOR < 10
4430 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, ninds, inds, coef) );
4432 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, *ninds, inds, coef, ninds) );
4434 assert( *ninds <= nrows );
4446#if MSK_VERSION_MAJOR < 10
4447 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, &numnz, sub, coef) );
4449 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, numnz, sub, coef, &numnz) );
4451 assert( numnz <= nrows );
4455 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
4499 if ( ninds !=
NULL )
4508 if( binvrow ==
NULL )
4520 for (
i = 0;
i < ncols; ++
i)
4526 for (k = 0; k < numnz; ++k)
4528 assert( 0 <= csub[k] && csub[k] < nrows );
4529 coef[
i] += binv[csub[k]] * cval[k];
4575 MOSEK_CALL( MSK_putnaintparam(lpi->
task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_ON) );
4581 for (
i = 0;
i < nrows; ++
i)
4585 if ( ninds !=
NULL && inds !=
NULL )
4589 for (
i = 0;
i < numnz; ++
i)
4591 assert( 0 <= inds[
i] && inds[
i] < nrows );
4592 coef[inds[
i]] = val[
i];
4597#if MSK_VERSION_MAJOR < 10
4598 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, ninds, inds, coef) );
4600 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, *ninds, inds, coef, ninds) );
4602 assert( *ninds <= nrows );
4611 for (
i = 0;
i < numnz; ++
i)
4613 assert( 0 <= sub[
i] && sub[
i] < nrows );
4614 coef[sub[
i]] = val[
i];
4617#if MSK_VERSION_MAJOR < 10
4618 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, &numnz, sub, coef) );
4620 MOSEK_CALL( MSK_solvewithbasis(lpi->
task, 0, numnz, sub, coef, &numnz) );
4623 if ( ninds !=
NULL )
4630 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
4658 (*lpistate)->solsta = MSK_SOL_STA_UNKNOWN;
4659 (*lpistate)->num = -1;
4660 (*lpistate)->ncols = ncols;
4661 (*lpistate)->nrows = nrows;
4709 for(
i = 0;
i < n;
i++ )
4720#if MSK_VERSION_MAJOR < 9
4789 int *skxi = (
int *) lpi->
skx;
4790 int *skci = (
int *) lpi->
skc;
4792 assert(
sizeof(
int) ==
sizeof(MSKstakeye));
4814 assert(
sizeof(
int) ==
sizeof(MSKstakeye));
4848 MOSEK_CALL( MSK_solutiondef(lpi->
task, MSK_SOL_BAS, &gotbasicsol) );
4897#ifdef SCIP_DISABLED_CODE
4901 if (lpistate ==
NULL)
4907 if (lpistate->
nrows == 0 || lpistate->
ncols == 0)
4917#ifdef SCIP_DISABLED_CODE
4924 for (
i = lpistate->
ncols;
i < ncols; ++
i)
4928#if MSK_VERSION_MAJOR < 9
4937 lpi->
skx[
i] = MSK_SK_SUPBAS;
4939 lpi->
skx[
i] = MSK_SK_UPR;
4942 lpi->
skx[
i] = MSK_SK_LOW;
4944 for (
i = lpistate->
nrows;
i < nrows; ++
i)
4945 lpi->
skc[
i] = MSK_SK_BAS;
4986 if( *lpistate !=
NULL )
5006 return ( lpistate !=
NULL && lpistate->
num >= 0);
5055 SCIPdebugMessage(
"No LP state written, since it was cleared after the last solve \n");
5064 for( v = 0; v <
nvars; v++ )
5067 if( strcmp(name,
"") == 0 )
5076 for(
c = 0;
c < nconss;
c++ )
5079 if( strcmp(name,
"") == 0 )
5090 " names instead. Note that this state cannot be read back in later!\n",
5091 v <
nvars ?
"variable" :
"constraint", v <
nvars ? v :
c);
5095 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_SOL_HEAD, MSK_ON) );
5096 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_SOL_VARIABLES, MSK_ON) );
5097 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_SOL_CONSTRAINTS, MSK_ON) );
5173 "SCIP_LPPAR_FROMSCRATCH",
5174 "SCIP_LPPAR_FASTMIP",
5175 "SCIP_LPPAR_SCALING",
5176 "SCIP_LPPAR_PRESOLVING",
5177 "SCIP_LPPAR_PRICING",
5178 "SCIP_LPPAR_LPINFO",
5179 "SCIP_LPPAR_FEASTOL",
5180 "SCIP_LPPAR_DUALFEASTOL",
5181 "SCIP_LPPAR_BARRIERCONVTOL",
5182 "SCIP_LPPAR_OBJLIM",
5183 "SCIP_LPPAR_LPITLIM",
5184 "SCIP_LPPAR_LPTILIM",
5185 "SCIP_LPPAR_MARKOWITZ",
5186 "SCIP_LPPAR_ROWREPSWITCH",
5188 "SCIP_LPPAR_THREADS",
5189 "SCIP_LPPAR_CONDITIONLIMIT",
5190 "SCIP_LPPAR_TIMING",
5191 "SCIP_LPPAR_RANDOMSEED",
5192 "SCIP_LPPAR_POLISHING",
5193 "SCIP_LPPAR_REFACTOR"
5253 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_PRESOLVE_USE, ival) );
5254 *ival = (*ival != MSK_PRESOLVE_MODE_OFF);
5260 *ival = (int) lpi->
lpinfo;
5263 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, ival) );
5266 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_NUM_THREADS, ival) );
5269 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_SIM_REFACTOR_FREQ, ival) );
5285 static int pricing[7] =
5287 (int)MSK_SIM_SELECTION_SE,
5288 (
int)MSK_SIM_SELECTION_FREE,
5289 (int)MSK_SIM_SELECTION_FULL,
5290 (
int)MSK_SIM_SELECTION_PARTIAL,
5291 (int)MSK_SIM_SELECTION_SE,
5292 (
int)MSK_SIM_SELECTION_ASE,
5293 (int)MSK_SIM_SELECTION_DEVEX,
5319 assert( ival >= 0 && ival <= 2 );
5323 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SCALING, MSK_SCALING_NONE) );
5324 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_INTPNT_SCALING, MSK_SCALING_NONE) );
5326#if MSK_VERSION_MAJOR < 10
5327 else if( ival == 1 )
5329 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SCALING, MSK_SCALING_FREE) );
5330 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_INTPNT_SCALING, MSK_SCALING_FREE) );
5334 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SCALING, MSK_SCALING_AGGRESSIVE) );
5335 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_INTPNT_SCALING, MSK_SCALING_AGGRESSIVE) );
5340 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_SCALING, MSK_SCALING_FREE) );
5341 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_INTPNT_SCALING, MSK_SCALING_FREE) );
5348 ival ? MSK_PRESOLVE_MODE_FREE : MSK_PRESOLVE_MODE_OFF) );
5354 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_PRIMAL_SELECTION, pricing[ival]) );
5355 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_DUAL_SELECTION, pricing[ival]) );
5369 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_LOG, ival ? 4 : MSK_OFF) );
5370 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_LOG_SIM, ival ? 4 : MSK_OFF) );
5375#if DEBUG_PARAM_SETTING
5383 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_MAX_ITERATIONS, ival) );
5387 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_NUM_THREADS, ival) );
5391 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_SIM_REFACTOR_FREQ, ival) );
5417 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_BASIS_TOL_X, dval) );
5420 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_BASIS_TOL_S, dval) );
5423 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_INTPNT_TOL_REL_GAP, dval) );
5427 MSKobjsensee objsen;
5429 if (objsen == MSK_OBJECTIVE_SENSE_MINIMIZE)
5431 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_UPPER_OBJ_CUT, dval) );
5435 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_LOWER_OBJ_CUT, dval) );
5440 MOSEK_CALL( MSK_getdouparam(lpi->
task, MSK_DPAR_OPTIMIZER_MAX_TIME, dval) );
5473 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_BASIS_TOL_X, dval) );
5481 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_BASIS_TOL_S, dval) );
5489 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_INTPNT_TOL_REL_GAP, dval) );
5494 MSKobjsensee objsen;
5496 if (objsen == MSK_OBJECTIVE_SENSE_MINIMIZE)
5498 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_UPPER_OBJ_CUT, dval) );
5502 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_LOWER_OBJ_CUT, dval) );
5512 MOSEK_CALL( MSK_putdouparam(lpi->
task, MSK_DPAR_OPTIMIZER_MAX_TIME, dval) );
5549 return MSK_INFINITY;
5577#if MSK_VERSION_MAJOR < 9
5588#if MSK_VERSION_MAJOR < 9
5589 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_READ_DATA_FORMAT, &olddataformat) );
5590 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_READ_DATA_FORMAT, MSK_DATA_FORMAT_LP) );
5592 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_READ_DATA_FORMAT, olddataformat) );
5594 MOSEK_CALL( MSK_readdataformat(lpi->
task, fname, MSK_DATA_FORMAT_LP, MSK_COMPRESS_FREE) );
5606#if MSK_VERSION_MAJOR < 9
5614#if MSK_VERSION_MAJOR >= 9
5621#if MSK_VERSION_MAJOR < 9
5622 MOSEK_CALL( MSK_getintparam(lpi->
task, MSK_IPAR_WRITE_DATA_FORMAT, &olddataformat) );
5623 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_DATA_FORMAT, MSK_DATA_FORMAT_LP) );
5625 MOSEK_CALL( MSK_putintparam(lpi->
task, MSK_IPAR_WRITE_DATA_FORMAT, olddataformat) );
void SCIPdecodeDualBit(const SCIP_DUALPACKET *inp, int *out, int count)
void SCIPencodeDualBit(const int *inp, SCIP_DUALPACKET *out, int count)
packing single and dual bit values
unsigned int SCIP_DUALPACKET
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
static SCIP_RETCODE convertstat_mosek2scip_slack(SCIP_LPI *lpi, SCIP_Bool iscon, MSKstakeye *sk, int m, int *stat)
SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsObjlimExc(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiChgObjsen(SCIP_LPI *lpi, SCIP_OBJSEN objsen)
static void lpistateUnpack(const SCIP_LPISTATE *lpistate, MSKstakeye *skx, MSKstakeye *skc)
SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
SCIP_RETCODE SCIPlpiClear(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiClearState(SCIP_LPI *lpi)
static SCIP_RETCODE getSolutionStatus(SCIP_LPI *lpi, MSKprostae *prosta, MSKsolstae *solsta)
SCIP_Bool SCIPlpiExistsDualRay(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
SCIP_RETCODE SCIPlpiReadState(SCIP_LPI *lpi, const char *fname)
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)
static MSKrescodee filterTRMrescode(SCIP_MESSAGEHDLR *messagehdlr, MSKrescodee *termcode, MSKrescodee res)
SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray)
SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival)
SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPlpiSetIntegralityInformation(SCIP_LPI *lpi, int ncols, int *intInfo)
SCIP_Bool SCIPlpiIsDualInfeasible(SCIP_LPI *lpi)
static SCIP_RETCODE checkState1(SCIP_LPI *lpi, int n, MSKstakeye *sk, SCIP_Bool isrow)
static SCIP_RETCODE lpistatePack(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
static SCIP_RETCODE SolveWSimplex(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
static SCIP_RETCODE checkState(SCIP_LPI *lpi, int ncols, int nrows)
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)
SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPINORMS *lpinorms)
SCIP_RETCODE SCIPlpiGetNNonz(SCIP_LPI *lpi, int *nnonz)
SCIP_Bool SCIPlpiHasPrimalSolve(void)
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)
SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
SCIP_Bool SCIPlpiHasBarrierSolve(void)
SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas)
SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval)
SCIP_RETCODE SCIPlpiScaleCol(SCIP_LPI *lpi, int col, SCIP_Real scaleval)
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
static void lpistateFree(SCIP_LPISTATE **lpistate, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
static SCIP_RETCODE getASlice(SCIP_LPI *lpi, SCIP_Bool iscon, int first, int last, int *nnonz, int *beg, int *ind, double *val)
SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
SCIP_Bool SCIPlpiIsIterlimExc(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 SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success)
SCIP_RETCODE SCIPlpiWriteState(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
static SCIP_RETCODE handle_singular(SCIP_LPI *lpi, int *basis, MSKrescodee res)
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)
SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val)
SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiReadLP(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality)
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
SCIP_Bool SCIPlpiIsTimelimExc(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
const char * SCIPlpiGetSolverName(void)
SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, const int *cstat, const int *rstat)
SCIP_Bool SCIPlpiHasPrimalRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int r, SCIP_Real *coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow)
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)
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 SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiGetColNames(SCIP_LPI *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft)
SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int r, const SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds)
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_Bool SCIPlpiWasSolved(SCIP_LPI *lpi)
const char * SCIPlpiGetSolverDesc(void)
SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover)
static void convertstat_scip2mosek(const int *stat, int n, MSKstakeye *resstat)
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetRowNames(SCIP_LPI *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft)
SCIP_Bool SCIPlpiHasDualSolve(void)
SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss)
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_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
SCIP_Bool SCIPlpiHasDualRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiDelColset(SCIP_LPI *lpi, int *dstat)
SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals)
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
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)
static SCIP_RETCODE lpistateCreate(SCIP_LPISTATE **lpistate, BMS_BLKMEM *blkmem, int ncols, int nrows)
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
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_Bool SCIPlpiIsDualUnbounded(SCIP_LPI *lpi)
static SCIP_RETCODE convertstat_mosek2scip(SCIP_LPI *lpi, SCIP_Bool iscon, MSKstakeye *sk, int n, int *stat)
SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind)
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
static void convertstat_scip2mosek_slack(const int *stat, int n, MSKstakeye *resstat)
void * SCIPlpiGetSolverPointer(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
SCIP_RETCODE SCIPlpiGetObjsen(SCIP_LPI *lpi, SCIP_OBJSEN *objsen)
SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
SCIP_RETCODE SCIPlpiInterrupt(SCIP_LPI *lpi, SCIP_Bool interrupt)
SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol)
SCIP_RETCODE SCIPlpiDelRowset(SCIP_LPI *lpi, int *dstat)
SCIP_RETCODE SCIPlpiScaleRow(SCIP_LPI *lpi, int row, SCIP_Real scaleval)
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval)
assert(minobj< SCIPgetCutoffbound(scip))
interface methods for specific LP solvers
static int rowpacketNum(int nrows)
SCIP_DUALPACKET ROWPACKET
SCIP_DUALPACKET COLPACKET
static int colpacketNum(int ncols)
static SCIP_RETCODE getIndicesRange(int first, int last, int **sub)
static void MSKAPI printstr(MSKuserhandle_t handle, const char *str)
static SCIP_RETCODE getEndptrs(int n, const int *beg, int nnonz, MSKint32t *aptre)
#define MOSEK_relDiff(val1, val2)
static SCIP_RETCODE setbase(SCIP_LPI *lpi)
static void generateMskBoundkeys(int n, const double *lb, const double *ub, MSKboundkeye *bk)
static int rowpacketNum(int nrows)
static const char * paramname[]
static SCIP_RETCODE getbase(SCIP_LPI *lpi, int ncols, int nrows)
static SCIP_RETCODE ensureBkxMem(SCIP_LPI *lpi, int ncols)
#define DEBUG_CHECK_STATE_TOL
static MSKenv_t reusemosekenv
static void scale_bound(MSKboundkeye *bk, double *bl, double *bu, double s)
static SCIP_RETCODE ensureAptreMem(SCIP_LPI *lpi, int n)
#define SCIP_ABORT_FALSE(x)
enum MSKoptimizertype_enum MSKoptimizertype
static SCIP_RETCODE getIndicesFromDense(int *dstat, int n, int *count, int **sub)
#define SENSE2MOSEK(objsen)
static void scale_vec(int len, double *vec, double s)
static int colpacketNum(int ncols)
static const char * paramty2str(SCIP_LPPARAM type)
#define STRONGBRANCH_PRICING
static SCIP_RETCODE ensureStateMem(SCIP_LPI *lpi, int ncols, int nrows)
static MSKrescodee MSK_getsolutionstatus(MSKtask_t task, MSKsoltypee whichsol, MSKprostae *prosta, MSKsolstae *solsta)
static SCIP_RETCODE ensureBkcMem(SCIP_LPI *lpi, int nrows)
static void invalidateSolution(SCIP_LPI *lpi)
#define BMSfreeMemory(ptr)
#define BMSfreeBlockMemory(mem, ptr)
#define BMSallocBlockMemory(mem, ptr)
#define BMSreallocMemoryArray(ptr, num)
#define BMSallocMemoryArray(ptr, num)
#define BMSfreeMemoryArray(ptr)
#define BMSallocBlockMemoryArray(mem, ptr, num)
#define BMSfreeBlockMemoryArray(mem, ptr, num)
struct BMS_BlkMem BMS_BLKMEM
#define BMSfreeMemoryArrayNull(ptr)
#define BMSallocMemory(ptr)
void SCIPmessagePrintInfo(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
public methods for message output
static SCIP_RETCODE presolve(SCIP *scip, SCIP_Bool *unbounded, SCIP_Bool *infeasible, SCIP_Bool *vanished)
MSKoptimizertype lastalgo
MSKsoltypee lastsolvetype
SCIP_MESSAGEHDLR * messagehdlr
@ SCIP_PRICING_STEEPQSTART
@ SCIP_PRICING_LPIDEFAULT
enum SCIP_Pricing SCIP_PRICING
enum SCIP_LPParam SCIP_LPPARAM
struct SCIP_LPiState SCIP_LPISTATE
struct SCIP_LPiNorms SCIP_LPINORMS
@ SCIP_LPPAR_BARRIERCONVTOL
@ SCIP_LPPAR_CONDITIONLIMIT
@ SCIP_LPPAR_ROWREPSWITCH
enum SCIP_LPSolQuality SCIP_LPSOLQUALITY
enum SCIP_ObjSen SCIP_OBJSEN
struct SCIP_Messagehdlr SCIP_MESSAGEHDLR
enum SCIP_Retcode SCIP_RETCODE