|
Go to the documentation of this file.
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 ABORT_FALSE(x) { int _restat_; \
53 if( (_restat_ = (x)) != 0 ) \
55 SCIPerrorMessage("LP Error: MOSEK returned %d\n", (int)_restat_); \
62 #define IS_POSINF(x) ((x) >= SCIP_DEFAULT_INFINITY)
63 #define IS_NEGINF(x) ((x) <= -SCIP_DEFAULT_INFINITY)
79 #define DEBUG_PARAM_SETTING 0
80 #define DEBUG_PRINT_STAT 0
81 #define DEBUG_CHECK_DATA 0
82 #define DEBUG_EASY_REPRODUCE 0
83 #define DEBUG_DO_INTPNT_FEAS_CHECK 0
84 #define DEBUG_CHECK_STATE_TOL 1e-5
86 #define ASSERT_ON_NUMERICAL_TROUBLES 0
87 #define ASSERT_ON_WARNING 0
88 #define FORCE_MOSEK_LOG 0
89 #define FORCE_MOSEK_SUMMARY 0
90 #define FORCE_NO_MAXITER 0
91 #define FORCE_SILENCE 1
92 #define SETBACK_LIMIT 250
93 #define SCIP_CONTROLS_PRICING 1
94 #define SCIP_CONTROLS_TOLERANCES 1
95 #define STRONGBRANCH_PRICING MSK_SIM_SELECTION_SE
96 #define SUPRESS_NAME_ERROR 1
98 #define WRITE_PRIMAL 0
99 #define WRITE_INTPNT 0
100 #define WRITE_ABOVE 0
101 #define DEGEN_LEVEL MSK_SIM_DEGEN_FREE
102 #define ALWAYS_SOLVE_PRIMAL 1
104 #if MSK_VERSION_MAJOR >= 7
111 MSKrescodee MSK_getsolutionstatus(
113 MSKsoltypee whichsol,
120 MOSEK_CALL( MSK_getprosta(task, whichsol, prosta) );
124 MOSEK_CALL( MSK_getsolsta(task, whichsol, solsta) );
148 #define COLS_PER_PACKET SCIP_DUALPACKETSIZE
150 #define ROWS_PER_PACKET SCIP_DUALPACKETSIZE
187 #if SUPRESS_NAME_ERROR && !FORCE_SILENCE
189 snprintf(errstr,32, "MOSEK Error %d",MSK_RES_ERR_DUP_NAME);
190 if (0 == strncmp(errstr,str,strlen(errstr)))
197 #if DEBUG_CHECK_DATA > 0
201 const char* functionname
217 MOSEK_CALL( MSK_solutiondef(lpi-> task, MSK_SOL_BAS, &gotbasicsol) );
240 for( i = 0; i < numvar; i++ )
242 MOSEK_CALL( MSK_getbound(lpi-> task,MSK_ACC_VAR,i,&tbkx[i],&tblx[i],&tbux[i]) );
245 for( i = 0; i < numcon; i++ )
247 MOSEK_CALL( MSK_getbound(lpi-> task,MSK_ACC_CON,i,&tbkc[i],&tblc[i],&tbuc[i]) );
250 for( i = 0; i < numcon; ++i )
254 if( ( tskc[i] == MSK_SK_FIX && tbkc[i] != MSK_BK_FX ) ||
255 ( tskc[i] == MSK_SK_LOW && !(tbkc[i] == MSK_BK_FX || tbkc[i] == MSK_BK_LO || tbkc[i] == MSK_BK_RA ) ) ||
256 ( tskc[i] == MSK_SK_UPR && !(tbkc[i] == MSK_BK_FX || tbkc[i] == MSK_BK_UP || tbkc[i] == MSK_BK_RA ) ) )
258 SCIPerrorMessage( "STATUS KEY ERROR i %d bkc %d skc %d %s\n", i, tbkc[i], tskc[i], functionname);
262 if( tbkc[i] == MSK_BK_LO || tbkc[i] == MSK_BK_FX || tbkc[i] == MSK_BK_RA )
270 if( tbkc[i] == MSK_BK_UP || tbkc[i] == MSK_BK_FX || tbkc[i] == MSK_BK_RA )
279 for( i = 0; i < numvar; ++i )
281 if( tbkx[i] == MSK_BK_LO || tbkx[i] == MSK_BK_FX || tbkx[i] == MSK_BK_RA )
289 if( tbkx[i] == MSK_BK_UP || tbkx[i] == MSK_BK_FX || tbkx[i] == MSK_BK_RA )
332 assert(msklb != NULL);
333 assert(mskub != NULL);
335 for( i = 0; i < n; i++ )
341 msklb[i] = -MSK_INFINITY;
344 mskub[i] = MSK_INFINITY;
358 mskub[i] = MSK_INFINITY;
361 else if (lb[i] == ub[i])
363 assert(lb[i]-ub[i]==0);
364 assert(ub[i]-lb[i]==0);
369 assert(lb[i] < ub[i]);
387 assert(beg != NULL || nnonz == 0);
398 for(i = 0; i < n-1; i++)
400 (*aptre)[i] = beg[i+1];
401 assert((*aptre)[i] >= beg[i]);
404 (*aptre)[n-1] = nnonz;
405 assert((*aptre)[n-1] >= beg[n-1]);
409 for( i = 0; i < n; i++ )
426 assert(first <= last);
430 for( i = first; i <= last; i++ )
450 assert(dstat != NULL);
453 for( i = 0; i < n; i++ )
469 for( i = 0; i < n; i++ )
488 for( i = 0; i < len; i++ )
506 if (s < 0) *bk = MSK_BK_UP;
510 if (s < 0) *bk = MSK_BK_LO;
606 sprintf(mskname, "MOSEK %.2f", ( SCIP_Real)MSK_VERSION_MAJOR);
615 return "Linear Programming Solver developed by MOSEK Optimization Software (www.mosek.com)";
623 return ( void*) lpi-> task;
649 #if MSK_VERSION_MAJOR < 7
668 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_FREE_SIMPLEX) );
670 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_SIM_SWITCH_OPTIMIZER, MSK_ON) );
672 MOSEK_CALL( MSK_putintparam((*lpi)->task, MSK_IPAR_SIM_HOTSTART, MSK_SIM_HOTSTART_STATUS_KEYS) );
673 MOSEK_CALL( MSK_puttaskname((*lpi)->task, ( char*) name) );
675 (*lpi)->termcode = MSK_RES_OK;
676 (*lpi)->itercount = 0;
683 (*lpi)->messagehdlr = messagehdlr;
694 assert(*lpi != NULL);
762 #if DEBUG_CHECK_DATA > 0
763 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiLoadColLP") );
786 MOSEK_CALL( MSK_inputdata(lpi-> task, nrows, ncols, nrows, ncols, obj, 0.0, beg, aptre, ind, val,
787 bkc, blc, buc, bkx, blx, bux) );
807 #if DEBUG_CHECK_DATA > 0
808 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiLoadColLP") );
828 #if MSK_VERSION_MAJOR < 7
843 #if DEBUG_CHECK_DATA > 0
844 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiAddCols") );
857 #if MSK_VERSION_MAJOR < 7
865 MOSEK_CALL( MSK_appendvars(lpi-> task, ncols, obj, aptrb, aptre, ind, val, bkx, blx, bux) );
871 MOSEK_CALL( MSK_putcslice(lpi-> task, oldcols, oldcols+ncols, obj) );
872 MOSEK_CALL( MSK_putvarboundslice(lpi-> task, oldcols, oldcols+ncols, bkx, blx, bux) );
877 MOSEK_CALL( MSK_putacolslice(lpi-> task, oldcols, oldcols+ncols, beg, aptre, ind, val) );
886 #if DEBUG_CHECK_DATA > 0
887 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiAddCols") );
908 #if DEBUG_CHECK_DATA > 0
909 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiDelCols") );
915 #if MSK_VERSION_MAJOR < 7
916 MOSEK_CALL( MSK_remove(lpi-> task,MSK_ACC_VAR, lastcol-firstcol+1, sub) );
923 #if DEBUG_CHECK_DATA > 0
924 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiDelCols") );
950 #if DEBUG_CHECK_DATA > 0
951 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiDelColset") );
960 for( i = 0; i < ncols; i++)
976 #if MSK_VERSION_MAJOR < 7
984 #if DEBUG_CHECK_DATA > 0
985 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiDelColset") );
1004 #if MSK_VERSION_MAJOR < 7
1014 assert(lpi != NULL);
1019 #if DEBUG_CHECK_DATA > 0
1020 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiAddRows") );
1034 #if MSK_VERSION_MAJOR < 7
1042 MOSEK_CALL( MSK_appendcons(lpi-> task, nrows, aptrb, aptre, ind, val, bkc, blc, buc) );
1048 MOSEK_CALL( MSK_putconboundslice(lpi-> task, oldrows, oldrows+nrows, bkc, blc, buc) );
1053 MOSEK_CALL( MSK_putarowslice(lpi-> task, oldrows, oldrows+nrows, beg, aptre, ind, val) );
1062 #if DEBUG_CHECK_DATA > 0
1063 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiAddRows") );
1079 assert(lpi != NULL);
1084 #if DEBUG_CHECK_DATA > 0
1085 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiDelRows") );
1092 #if MSK_VERSION_MAJOR < 7
1093 MOSEK_CALL( MSK_remove(lpi-> task, MSK_ACC_CON, lastrow-firstrow+1, sub) );
1095 MOSEK_CALL( MSK_removecons(lpi-> task, lastrow-firstrow+1, sub) );
1100 #if DEBUG_CHECK_DATA > 0
1101 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiDelRows") );
1122 assert(lpi != NULL);
1127 #if DEBUG_CHECK_DATA > 0
1128 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiDelRowset") );
1137 for( i = 0; i < nrows; i++ )
1153 #if MSK_VERSION_MAJOR < 7
1161 #if DEBUG_CHECK_DATA > 0
1162 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiDelRowset end") );
1177 assert(lpi != NULL);
1205 assert(lpi != NULL);
1210 #if DEBUG_CHECK_DATA > 0
1211 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiChgBounds") );
1222 MOSEK_CALL( MSK_putboundlist(lpi-> task, MSK_ACC_VAR, ncols, ind, bkx, blx, bux) );
1228 #if DEBUG_CHECK_DATA > 0
1229 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiChgBounds") );
1249 assert(lpi != NULL);
1254 #if DEBUG_CHECK_DATA > 0
1255 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiChgSides") );
1266 MOSEK_CALL( MSK_putboundlist(lpi-> task, MSK_ACC_CON, nrows, ind, bkc, blc, buc) );
1272 #if DEBUG_CHECK_DATA > 0
1273 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiChgSides") );
1288 assert(lpi != NULL);
1293 #if DEBUG_CHECK_DATA > 0
1294 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiChgCoef") );
1299 #if DEBUG_CHECK_DATA > 0
1300 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiChgCoef") );
1313 assert(lpi != NULL);
1332 assert(lpi != NULL);
1337 #if DEBUG_CHECK_DATA > 0
1338 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiChgObj") );
1343 #if DEBUG_CHECK_DATA > 0
1344 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiChgObj") );
1365 assert(lpi != NULL);
1370 #if DEBUG_CHECK_DATA > 0
1371 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiScaleRow") );
1374 assert(scaleval != 0);
1376 #if MSK_VERSION_MAJOR < 7
1377 MOSEK_CALL( MSK_getavecnumnz(lpi-> task, MSK_ACC_CON, row, &nnonz) );
1387 #if MSK_VERSION_MAJOR < 7
1388 MOSEK_CALL( MSK_getavec(lpi-> task, MSK_ACC_CON, row, &nnonz, sub, val) );
1390 MOSEK_CALL( MSK_putavec(lpi-> task, MSK_ACC_CON, row, nnonz, sub, val) );
1401 MOSEK_CALL( MSK_getbound(lpi-> task, MSK_ACC_CON, row, &bkc, &blc, &buc) );
1403 MOSEK_CALL( MSK_putbound(lpi-> task, MSK_ACC_CON, row, bkc, blc, buc) );
1405 #if DEBUG_CHECK_DATA > 0
1406 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiScaleRow") );
1428 assert(lpi != NULL);
1433 #if DEBUG_CHECK_DATA > 0
1434 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiScaleCol") );
1437 assert(scaleval != 0);
1438 #if MSK_VERSION_MAJOR < 7
1439 MOSEK_CALL( MSK_getavecnumnz(lpi-> task, MSK_ACC_VAR, col, &nnonz) );
1449 #if MSK_VERSION_MAJOR < 7
1450 MOSEK_CALL( MSK_getavec(lpi-> task, MSK_ACC_VAR, col, &nnonz, sub, val) );
1452 MOSEK_CALL( MSK_putavec(lpi-> task, MSK_ACC_VAR, col, nnonz, sub, val) );
1463 MOSEK_CALL( MSK_getbound(lpi-> task, MSK_ACC_VAR, col, &bkx, &blx, &bux) );
1465 MOSEK_CALL( MSK_putbound(lpi-> task, MSK_ACC_VAR, col, bkx, blx, bux) );
1470 #if DEBUG_CHECK_DATA > 0
1471 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiScaleCol") );
1490 assert(lpi != NULL);
1507 assert(lpi != NULL);
1524 assert(lpi != NULL);
1549 assert(lpi != NULL);
1551 assert(first <= last);
1555 #if DEBUG_CHECK_DATA > 0
1556 SCIP_CALL( scip_checkdata(lpi, "getASlice") );
1563 assert(beg != NULL);
1564 assert(ind != NULL);
1565 assert(val != NULL);
1569 MOSEK_CALL( MSK_getaslicenumnz(lpi-> task, iscon, first, last+1,nnonz) );
1571 MOSEK_CALL( MSK_getaslice(lpi-> task, iscon, first, last+1, *nnonz, &surplus, beg, aptre, ind, val) );
1573 assert(surplus == 0);
1578 #if DEBUG_CHECK_DATA > 0
1579 SCIP_CALL( scip_checkdata(lpi, "getASlice") );
1602 assert(lpi != NULL);
1630 assert(lpi != NULL);
1635 #if DEBUG_CHECK_DATA > 0
1636 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiGetRows") );
1643 #if DEBUG_CHECK_DATA > 0
1644 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiGetRows") );
1657 int namestoragesize,
1672 int namestoragesize,
1699 assert(lpi != NULL);
1704 MOSEK_CALL( MSK_getcslice(lpi-> task, firstcol, lastcol+1, vals) );
1719 assert(lpi != NULL);
1724 #if DEBUG_CHECK_DATA > 0
1725 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiGetBounds") );
1728 MOSEK_CALL( MSK_getboundslice(lpi-> task, MSK_ACC_VAR, firstcol, lastcol+1, NULL, lbs, ubs) );
1743 assert(lpi != NULL);
1748 #if DEBUG_CHECK_DATA > 0
1749 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiGetSides") );
1752 MOSEK_CALL( MSK_getboundslice(lpi-> task, MSK_ACC_CON, firstrow, lastrow+1, NULL, lhss, rhss) );
1754 #if DEBUG_CHECK_DATA > 0
1755 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiGetSides") );
1770 assert(lpi != NULL);
1775 #if DEBUG_CHECK_DATA > 0
1776 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiGetCoef") );
1781 #if DEBUG_CHECK_DATA > 0
1782 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiGetCoef") );
1801 assert(lpi != NULL);
1804 MOSEK_CALL( MSK_getsolutionstatus ( lpi-> task, MSK_SOL_BAS, prosta, solsta) );
1813 MSKrescodee* termcode,
1817 if ( res == MSK_RES_TRM_MAX_ITERATIONS || res == MSK_RES_TRM_MAX_TIME
1818 || res == MSK_RES_TRM_OBJECTIVE_RANGE || res == MSK_RES_TRM_STALL
1820 || res == MSK_RES_TRM_MAX_NUM_SETBACKS
1821 || res == MSK_RES_TRM_NUMERICAL_PROBLEM
1826 if (res == MSK_RES_TRM_MAX_NUM_SETBACKS || res == MSK_RES_TRM_NUMERICAL_PROBLEM)
1830 #if ASSERT_ON_WARNING
1839 *termcode = MSK_RES_OK;
1849 int itercount_primal;
1858 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_PRESOLVE_USE, &presolve) );
1859 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, &maxiter) );
1861 #if DEBUG_EASY_REPRODUCE
1862 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_AUTO_SORT_A_BEFORE_OPT, MSK_ON) );
1863 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART_LU, MSK_OFF) );
1865 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
1868 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_AUTO_UPDATE_SOL_INFO, MSK_OFF) );
1875 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_LOG_SIM_FREQ, 1) );
1887 MOSEK_CALL( MSK_solutiondef(lpi-> task, MSK_SOL_BAS, &gotbasicsol) );
1891 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_PRESOLVE_USE, MSK_PRESOLVE_MODE_OFF) );
1895 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_PRESOLVE_USE, MSK_PRESOLVE_MODE_ON) );
1898 #if ALWAYS_SOLVE_PRIMAL > 0
1899 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_SOLVE_FORM, MSK_SOLVE_PRIMAL) );
1902 #if DEBUG_CHECK_DATA > 0
1903 SCIP_CALL( scip_checkdata(lpi, "SolveWSimplex") );
1907 assert(lpi != NULL);
1910 if( gotbasicsol && maxiter < 20000 )
1913 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_PRIMAL_RESTRICT_SELECTION, 0) );
1918 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, 2000000000) );
1922 #if DEBUG_CHECK_DATA > 0
1923 SCIP_CALL( scip_checkdata(lpi, "Begin optimize with simplex") );
1926 #if FORCE_MOSEK_SUMMARY > 1
1935 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_LOG_SIM_FREQ, 100) );
1941 if( lpi-> termcode == MSK_RES_TRM_MAX_NUM_SETBACKS )
1943 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_SCALING, MSK_SCALING_AGGRESSIVE) );
1948 #if FORCE_MOSEK_SUMMARY
1955 #if DEBUG_CHECK_DATA > 0
1956 SCIP_CALL( scip_checkdata(lpi, "End optimize with simplex") );
1959 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_PRESOLVE_USE, presolve) );
1960 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, maxiter) );
1962 MOSEK_CALL( MSK_getintinf(lpi-> task, MSK_IINF_SIM_PRIMAL_ITER, &itercount_primal) );
1963 MOSEK_CALL( MSK_getintinf(lpi-> task, MSK_IINF_SIM_DUAL_ITER, &itercount_dual) );
1965 lpi-> itercount = itercount_primal + itercount_dual;
1969 MOSEK_CALL( MSK_getsolutionstatus(lpi-> task, MSK_SOL_BAS, &prosta, &solsta) );
1971 #if DEBUG_PRINT_STAT
1972 SCIPdebugMessage( "maxiter = %d, termcode = %d, prosta = %d, solsta = %d, objval = %g : %g, iter = %d+%d\n",
1973 maxiter, lpi-> termcode, prosta, solsta, pobj, dobj, itercount_primal, itercount_dual);
1977 "objval = %g : %g, iter = %d+%d\n",
1978 maxiter,lpi-> termcode,prosta,solsta,
1979 pobj,dobj,itercount_primal,itercount_dual);
1984 case MSK_SOL_STA_OPTIMAL:
1985 case MSK_SOL_STA_PRIM_AND_DUAL_FEAS:
1986 case MSK_SOL_STA_PRIM_FEAS:
1987 case MSK_SOL_STA_DUAL_FEAS:
1988 case MSK_SOL_STA_PRIM_INFEAS_CER:
1989 case MSK_SOL_STA_DUAL_INFEAS_CER:
1990 case MSK_SOL_STA_UNKNOWN:
1992 case MSK_SOL_STA_NEAR_OPTIMAL:
1993 case MSK_SOL_STA_NEAR_PRIM_FEAS:
1994 case MSK_SOL_STA_NEAR_DUAL_FEAS:
1995 case MSK_SOL_STA_NEAR_PRIM_AND_DUAL_FEAS:
1996 case MSK_SOL_STA_NEAR_PRIM_INFEAS_CER:
1997 case MSK_SOL_STA_NEAR_DUAL_INFEAS_CER:
2001 lpi-> termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2003 #if ASSERT_ON_WARNING
2007 case MSK_SOL_STA_INTEGER_OPTIMAL:
2008 case MSK_SOL_STA_NEAR_INTEGER_OPTIMAL:
2010 #if SHOW_ERRORS && !FORCE_SILENCE
2014 #if ASSERT_ON_WARNING
2023 case MSK_PRO_STA_PRIM_AND_DUAL_FEAS:
2024 case MSK_PRO_STA_PRIM_FEAS:
2025 case MSK_PRO_STA_DUAL_FEAS:
2026 case MSK_PRO_STA_PRIM_AND_DUAL_INFEAS:
2027 case MSK_PRO_STA_PRIM_INFEAS:
2028 case MSK_PRO_STA_DUAL_INFEAS:
2029 case MSK_PRO_STA_UNKNOWN:
2031 case MSK_PRO_STA_NEAR_PRIM_AND_DUAL_FEAS:
2032 case MSK_PRO_STA_NEAR_PRIM_FEAS:
2033 case MSK_PRO_STA_NEAR_DUAL_FEAS:
2034 case MSK_PRO_STA_ILL_POSED:
2035 case MSK_PRO_STA_PRIM_INFEAS_OR_UNBOUNDED:
2039 lpi-> termcode = MSK_RES_TRM_NUMERICAL_PROBLEM;
2041 #if ASSERT_ON_WARNING
2046 #if SHOW_ERRORS && !FORCE_SILENCE
2050 #if ASSERT_ON_WARNING
2057 if( solsta == MSK_SOL_STA_OPTIMAL && fabs(dobj)+fabs(dobj) > 1.0e-6 && fabs(pobj-dobj)>0.0001*(fabs(pobj)+fabs(dobj)))
2059 SCIPerrorMessage( "Simplex[%d] returned optimal solution with different objvals %g != %g reldiff %.2g%%\n",
2060 optimizecount, pobj, dobj, 100*fabs(pobj-dobj)/ MAX(fabs(pobj),fabs(dobj)));
2063 if (lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2065 if(solsta != MSK_SOL_STA_DUAL_FEAS && solsta != MSK_SOL_STA_OPTIMAL && solsta != MSK_SOL_STA_PRIM_AND_DUAL_FEAS)
2078 if (objsen == MSK_OBJECTIVE_SENSE_MINIMIZE)
2080 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_UPPER_OBJ_CUT, &bound) );
2082 if (1.0e-6*(fabs(bound)+fabs(dobj)) < bound-dobj)
2092 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_LOWER_OBJ_CUT, &bound) );
2094 if (1.0e-6*(fabs(bound)+fabs(dobj)) < dobj-bound)
2105 if (maxiter >= 2000000000)
2107 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, maxiter) );
2109 if (lpi-> termcode == MSK_RES_TRM_MAX_ITERATIONS)
2118 #if DEBUG_DO_INTPNT_FEAS_CHECK
2119 if (solsta == MSK_SOL_STA_PRIM_INFEAS_CER || solsta == MSK_SOL_STA_DUAL_INFEAS_CER)
2125 MOSEK_CALL(MSK_getsolutionstatus ( lpi-> task, MSK_SOL_BAS, &prosta, &solsta));
2127 if (solsta == MSK_SOL_STA_PRIM_INFEAS_CER || solsta == MSK_SOL_STA_DUAL_INFEAS_CER)
2139 #if DEBUG_PRINT_STAT > 0
2140 SCIPdebugMessage( "Max iter stat : Count %d branchup = %d branchlo = %d primal %d dual %d\n",
2142 SCIPdebugMessage( "Objcut iter stat : Count %d branchup = %d branchlo = %d primal %d dual %d\n",
2146 #if DEBUG_CHECK_DATA > 0
2147 SCIP_CALL( scip_checkdata(lpi, "SolveWSimplex") );
2162 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
2164 #if DEBUG_CHECK_DATA > 0
2165 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiSolvePrimal") );
2168 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_PRIMAL_SIMPLEX) );
2170 #if WRITE_PRIMAL > 0
2177 MSK_writedata(lpi-> task,fname);
2183 if ( lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
2190 if( solsta != MSK_SOL_STA_PRIM_FEAS )
2196 if (lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2199 if (lpi-> termcode == MSK_RES_TRM_MAX_ITERATIONS)
2202 #if DEBUG_CHECK_DATA > 0
2203 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiSolvePrimal") );
2219 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_INTEGER, MSK_ON) );
2220 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
2221 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_DUAL_SIMPLEX) );
2229 MSK_writedata(lpi-> task,fname);
2235 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_LOG_SIM_FREQ, 1) );
2240 if ( lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE )
2246 if( solsta != MSK_SOL_STA_DUAL_FEAS )
2252 if (lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2255 if (lpi-> termcode == MSK_RES_TRM_MAX_ITERATIONS)
2268 assert(lpi != NULL);
2291 #if DEBUG_CHECK_DATA > 0
2292 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiSolveBarrier") );
2295 MOSEK_CALL( MSK_putintparam(lpi-> task,MSK_IPAR_INTPNT_BASIS, crossover ? MSK_BI_ALWAYS : MSK_BI_NEVER) );
2296 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_INTPNT) );
2299 #if WRITE_INTPNT > 0
2306 MSK_writedata(lpi-> task,fname);
2312 if (lpi-> termcode == MSK_RES_TRM_MAX_ITERATIONS)
2322 MOSEK_CALL( MSK_getsolutionstatus ( lpi-> task, MSK_SOL_BAS, &prosta, &solsta) );
2328 #if DEBUG_CHECK_DATA > 0
2329 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiSolveBarrier") );
2369 MSKobjsensee objsen;
2385 #if DEBUG_CHECK_DATA > 0
2386 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiStrongbranch") );
2390 assert(lpi != NULL);
2404 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, &olditerlim) );
2405 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_SIM_DUAL_SELECTION, &oldselection) );
2406 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART, &oldhotstart) );
2408 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, itlim) );
2411 if (objsen == MSK_OBJECTIVE_SENSE_MINIMIZE)
2413 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_UPPER_OBJ_CUT, &bound) );
2417 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_LOWER_OBJ_CUT, &bound) );
2420 MOSEK_CALL( MSK_getbound(lpi-> task, MSK_ACC_VAR, col, &bkx, &blx, &bux) );
2424 newub = EPSCEIL(psol-1.0, 1e-06);
2426 if (newub < blx - 0.5)
2437 else if ( EPSEQ(blx,newub,1.0e-6))
2445 MOSEK_CALL( MSK_putbound(lpi-> task, MSK_ACC_VAR, col, newbk, blx, newub) );
2486 if (lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2489 if (lpi-> termcode == MSK_RES_TRM_MAX_ITERATIONS)
2494 MOSEK_CALL( MSK_putbound(lpi-> task, MSK_ACC_VAR, col, bkx, blx, bux) );
2498 if (newlb > bux + 0.5)
2509 else if ( EPSEQ(bux,newlb,1.0e-6))
2517 MOSEK_CALL( MSK_putbound(lpi-> task, MSK_ACC_VAR, col, newbk, newlb, bux) );
2555 if (lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE)
2558 if (lpi-> termcode == MSK_RES_TRM_MAX_ITERATIONS)
2562 MOSEK_CALL( MSK_putbound(lpi-> task, MSK_ACC_VAR, col, bkx, blx, bux) );
2563 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, olditerlim) );
2564 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_DUAL_SELECTION, oldselection) );
2565 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART, oldhotstart) );
2572 #if DEBUG_CHECK_DATA > 0
2573 SCIP_CALL( scip_checkdata(lpi, "SCIPlpiStrongbranch") );
2620 assert( iter != NULL );
2621 assert( cols != NULL );
2622 assert( psols != NULL );
2623 assert( down != NULL );
2624 assert( up != NULL );
2625 assert( downvalid != NULL );
2626 assert( upvalid != NULL );
2627 assert( down != NULL );
2632 for (j = 0; j < ncols; ++j)
2679 assert( iter != NULL );
2680 assert( cols != NULL );
2681 assert( psols != NULL );
2682 assert( down != NULL );
2683 assert( up != NULL );
2684 assert( downvalid != NULL );
2685 assert( upvalid != NULL );
2686 assert( down != NULL );
2691 for (j = 0; j < ncols; ++j)
2714 assert(lpi != NULL);
2721 return (solsta == MSK_SOL_STA_OPTIMAL);
2736 assert(lpi != NULL);
2748 case MSK_SOL_STA_OPTIMAL:
2749 case MSK_SOL_STA_PRIM_AND_DUAL_FEAS:
2753 case MSK_SOL_STA_PRIM_FEAS:
2756 case MSK_SOL_STA_DUAL_FEAS:
2759 case MSK_SOL_STA_UNKNOWN:
2760 case MSK_SOL_STA_NEAR_OPTIMAL:
2761 case MSK_SOL_STA_NEAR_PRIM_FEAS:
2762 case MSK_SOL_STA_NEAR_DUAL_FEAS:
2763 case MSK_SOL_STA_NEAR_PRIM_AND_DUAL_FEAS:
2764 case MSK_SOL_STA_PRIM_INFEAS_CER:
2765 case MSK_SOL_STA_DUAL_INFEAS_CER:
2766 case MSK_SOL_STA_NEAR_PRIM_INFEAS_CER:
2767 case MSK_SOL_STA_NEAR_DUAL_INFEAS_CER:
2768 case MSK_SOL_STA_INTEGER_OPTIMAL:
2769 case MSK_SOL_STA_NEAR_INTEGER_OPTIMAL:
2775 if( primalfeasible != NULL )
2776 *primalfeasible = pfeas;
2778 if( dualfeasible != NULL )
2779 *dualfeasible = dfeas;
2795 assert(lpi != NULL);
2802 return ( solsta == MSK_SOL_STA_DUAL_INFEAS_CER
2803 || prosta == MSK_PRO_STA_DUAL_INFEAS
2804 || prosta == MSK_PRO_STA_PRIM_AND_DUAL_INFEAS);
2817 assert(lpi != NULL);
2824 return (solsta == MSK_SOL_STA_DUAL_INFEAS_CER);
2851 assert(lpi != NULL);
2858 return (prosta == MSK_PRO_STA_PRIM_FEAS || prosta == MSK_PRO_STA_PRIM_AND_DUAL_FEAS);
2872 assert(lpi != NULL);
2879 return ( solsta == MSK_SOL_STA_PRIM_INFEAS_CER
2880 || prosta == MSK_PRO_STA_PRIM_INFEAS
2881 || prosta == MSK_PRO_STA_PRIM_AND_DUAL_INFEAS);
2894 assert(lpi != NULL);
2901 return (solsta == MSK_SOL_STA_PRIM_INFEAS_CER);
2928 assert(lpi != NULL);
2935 return (prosta == MSK_PRO_STA_DUAL_FEAS || prosta == MSK_PRO_STA_PRIM_AND_DUAL_FEAS);
2947 assert(lpi != NULL);
2954 return (solsta == MSK_SOL_STA_OPTIMAL);
2963 assert(lpi != NULL);
2966 return ( lpi-> termcode == MSK_RES_OK
2967 || lpi-> termcode == MSK_RES_TRM_MAX_ITERATIONS
2968 || lpi-> termcode == MSK_RES_TRM_MAX_TIME
2969 || lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE);
2978 assert(lpi != NULL);
2981 return lpi-> termcode == MSK_RES_TRM_OBJECTIVE_RANGE;
2990 assert(lpi != NULL);
2993 return lpi-> termcode == MSK_RES_TRM_MAX_ITERATIONS;
3002 assert(lpi != NULL);
3005 return lpi-> termcode == MSK_RES_TRM_MAX_TIME;
3017 assert(lpi != NULL);
3036 assert(lpi != NULL);
3053 assert(lpi != NULL);
3080 assert(lpi != NULL);
3099 for( i = 0; i < ncols; i++ )
3101 assert(sux != NULL);
3102 redcost[i] -= sux[i];
3118 assert(lpi != NULL);
3136 assert(lpi != NULL);
3141 MOSEK_CALL( MSK_getsolution(lpi-> task, MSK_SOL_BAS, NULL, NULL, NULL, NULL, NULL, NULL, NULL, dualfarkas,
3156 assert(lpi != NULL);
3175 assert(lpi != NULL);
3176 assert(quality != NULL);
3191 if (res == MSK_RES_ERR_BASIS_SINGULAR)
3222 for( i = 0; i < n; i++ )
3280 for( i = 0; i < n; i++ )
3328 for( i = 0; i < n; i++ )
3333 resstat[i] = MSK_SK_LOW;
3336 resstat[i] = MSK_SK_BAS;
3339 resstat[i] = MSK_SK_UPR;
3342 resstat[i] = MSK_SK_SUPBAS;
3361 for( i = 0; i < n; i++ )
3366 resstat[i] = MSK_SK_UPR;
3369 resstat[i] = MSK_SK_BAS;
3372 resstat[i] = MSK_SK_LOW;
3375 resstat[i] = MSK_SK_SUPBAS;
3396 assert(lpi != NULL);
3430 assert(lpi != NULL);
3457 assert(lpi != NULL);
3465 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART_LU, MSK_OFF) );
3471 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
3474 for (i = 0; i < nrows; i++ )
3476 if (bind[i] < nrows)
3477 bind[i] = -1 - bind[i];
3479 bind[i] = bind[i] - nrows;
3504 assert(lpi != NULL);
3510 for (i=0; i<nrows; i++)
3517 MOSEK_CALL( MSK_putnaintparam(lpi-> task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_OFF) );
3518 MOSEK_CALL( MSK_solvewithbasis(lpi-> task, 0, &numnz, sub, coef) );
3521 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
3542 assert(lpi != NULL);
3546 #if MSK_VERSION_MAJOR < 7
3554 for (i=0; i<nrows; i++)
3557 #if MSK_VERSION_MAJOR < 7
3558 MOSEK_CALL( MSK_getavec(lpi-> task, MSK_ACC_VAR, c, &numnz, sub, val) );
3563 for (i=0; i<numnz; i++)
3564 coef[sub[i]] = val[i];
3566 MOSEK_CALL( MSK_putnaintparam(lpi-> task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_OFF) );
3567 MOSEK_CALL( MSK_solvewithbasis(lpi-> task, 0, &numnz, sub, coef) );
3571 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART_LU, MSK_ON) );
3590 assert(lpi != NULL);
3598 for (i=0; i<nrows; i++)
3605 MOSEK_CALL( MSK_putnaintparam(lpi-> task, MSK_IPAR_BASIS_SOLVE_USE_PLUS_ONE_, MSK_ON) );
3606 MOSEK_CALL( MSK_solvewithbasis(lpi-> task, 1, &numnz, sub, coef) );
3634 assert(lpi != NULL);
3647 for( i = 0; i < ncols; i++ )
3650 if( binvrow == NULL )
3661 for( i = 0; i < ncols; i++)
3665 #if MSK_VERSION_MAJOR < 7
3666 MOSEK_CALL( MSK_getavec(lpi-> task, MSK_ACC_VAR, i, &numnz, csub, cval) );
3671 for( k = 0; k < numnz; ++k )
3672 val[i] += binv[csub[k]] * cval[k];
3700 assert(lpistate != NULL);
3701 assert(blkmem != NULL);
3711 lpistate[0]-> solsta = MSK_SOL_STA_UNKNOWN;
3712 lpistate[0]-> num = -1;
3713 lpistate[0]-> ncols = ncols;
3714 lpistate[0]-> nrows = nrows;
3727 assert(blkmem != NULL);
3728 assert(lpistate != NULL);
3729 assert(*lpistate != NULL);
3743 MSKaccmodee accmode,
3750 for( i = 0; i < n; i++ )
3805 int *skxi = ( int *) lpi-> skx;
3806 int *skci = ( int *) lpi-> skc;
3808 assert( sizeof( int) == sizeof(MSKstakeye));
3827 assert( sizeof( int) == sizeof(MSKstakeye));
3850 assert(lpi != NULL);
3852 assert(lpistate != NULL);
3856 MOSEK_CALL( MSK_solutiondef(lpi-> task, MSK_SOL_BAS, &gotbasicsol) );
3902 assert(lpi != NULL);
3905 if (lpistate == NULL)
3911 if (lpistate-> nrows == 0 || lpistate-> ncols == 0)
3916 assert(lpistate-> nrows <= nrows);
3917 assert(lpistate-> ncols <= ncols);
3925 for (i = lpistate-> ncols; i < ncols; ++i)
3934 lpi-> skx[i] = MSK_SK_SUPBAS;
3936 lpi-> skx[i] = MSK_SK_UPR;
3939 lpi-> skx[i] = MSK_SK_LOW;
3941 for (i = lpistate-> nrows; i < nrows; ++i)
3942 lpi-> skc[i] = MSK_SK_BAS;
3957 assert(lpi != NULL);
3973 assert(lpi != NULL);
3978 if( *lpistate != NULL )
3993 assert(lpi != NULL);
3998 return ( lpistate != NULL && lpistate-> num >= 0);
4008 assert(lpi != NULL);
4027 assert(lpi != NULL);
4031 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_WRITE_SOL_HEAD, MSK_ON) );
4032 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_WRITE_SOL_VARIABLES, MSK_ON) );
4033 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_WRITE_SOL_CONSTRAINTS, MSK_ON) );
4059 assert(lpinorms != NULL);
4075 assert(lpinorms == NULL);
4088 assert(lpinorms == NULL);
4102 "SCIP_LPPAR_FROMSCRATCH",
4103 "SCIP_LPPAR_FASTMIP",
4104 "SCIP_LPPAR_SCALING",
4105 "SCIP_LPPAR_PRESOLVING",
4106 "SCIP_LPPAR_PRICING",
4107 "SCIP_LPPAR_LPINFO",
4108 "SCIP_LPPAR_FEASTOL",
4109 "SCIP_LPPAR_DUALFEASTOL",
4110 "SCIP_LPPAR_BARRIERCONVTOL",
4111 "SCIP_LPPAR_LOBJLIM",
4112 "SCIP_LPPAR_UOBJLIM",
4113 "SCIP_LPPAR_LPITLIM",
4114 "SCIP_LPPAR_LPTILIM",
4115 "SCIP_LPPAR_MARKOWITZ",
4116 "SCIP_LPPAR_ROWREPSWITCH",
4118 "SCIP_LPPAR_THREADS"
4145 return paramname[type];
4158 assert(lpi != NULL);
4164 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_SIM_HOTSTART, ival) );
4165 *ival = (*ival == MSK_SIM_HOTSTART_NONE);
4170 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_SIM_SCALING, ival) );
4171 *ival = (*ival != MSK_SCALING_NONE);
4174 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_PRESOLVE_USE, ival) );
4175 *ival = (*ival != MSK_PRESOLVE_MODE_OFF);
4182 *ival = (*ival == MSK_ON);
4185 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, ival) );
4203 #if SCIP_CONTROLS_PRICING
4205 static int pricing[7] = {
4206 MSK_SIM_SELECTION_SE,
4207 MSK_SIM_SELECTION_SE,
4208 MSK_SIM_SELECTION_FULL,
4209 MSK_SIM_SELECTION_PARTIAL,
4210 MSK_SIM_SELECTION_SE,
4211 MSK_SIM_SELECTION_ASE,
4212 MSK_SIM_SELECTION_DEVEX,
4229 assert(lpi != NULL);
4236 ival ? MSK_SIM_HOTSTART_NONE : MSK_SIM_HOTSTART_STATUS_KEYS ) );
4241 scaling = (ival ? MSK_SCALING_FREE : MSK_SCALING_NONE);
4242 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_SCALING, scaling) );
4243 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_INTPNT_SCALING, scaling) );
4247 ival ? MSK_PRESOLVE_MODE_FREE : MSK_PRESOLVE_MODE_OFF) );
4287 #if SCIP_CONTROLS_PRICING
4288 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_PRIMAL_SELECTION, pricing[ival]) );
4290 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_DUAL_SELECTION, pricing[ival]) );
4295 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_DUAL_RESTRICT_SELECTION, 0) );
4297 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_PRIMAL_RESTRICT_SELECTION, 0) );
4300 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_PRIMAL_SELECTION, MSK_SIM_SELECTION_FREE) );
4302 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_DUAL_SELECTION, MSK_SIM_SELECTION_FREE) );
4310 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_LOG, ival ? MSK_ON : MSK_OFF) );
4314 #if DEBUG_PARAM_SETTING
4321 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_SIM_MAX_ITERATIONS, ival) );
4340 assert(lpi != NULL);
4345 #if SCIP_CONTROLS_TOLERANCES
4347 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_BASIS_TOL_X, dval) );
4350 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_BASIS_TOL_S, dval) );
4353 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_INTPNT_TOL_REL_GAP, dval) );
4357 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_LOWER_OBJ_CUT, dval) );
4360 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_UPPER_OBJ_CUT, dval) );
4363 MOSEK_CALL( MSK_getdouparam(lpi-> task, MSK_DPAR_OPTIMIZER_MAX_TIME, dval) );
4383 assert(lpi != NULL);
4390 #if SCIP_CONTROLS_TOLERANCES
4395 MOSEK_CALL( MSK_putdouparam(lpi-> task, MSK_DPAR_BASIS_TOL_X, dval) );
4402 MOSEK_CALL( MSK_putdouparam(lpi-> task, MSK_DPAR_BASIS_TOL_S, dval) );
4405 MOSEK_CALL( MSK_putdouparam(lpi-> task, MSK_DPAR_INTPNT_TOL_REL_GAP, dval) );
4409 MOSEK_CALL( MSK_putdouparam(lpi-> task, MSK_DPAR_LOWER_OBJ_CUT, dval) );
4412 MOSEK_CALL( MSK_putdouparam(lpi-> task, MSK_DPAR_UPPER_OBJ_CUT, dval) );
4415 MOSEK_CALL( MSK_putdouparam(lpi-> task, MSK_DPAR_OPTIMIZER_MAX_TIME, dval) );
4437 assert(lpi != NULL);
4440 return MSK_INFINITY;
4450 assert(lpi != NULL);
4473 assert(lpi != NULL);
4476 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_READ_DATA_FORMAT, &olddataformat) );
4477 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_READ_DATA_FORMAT, MSK_DATA_FORMAT_LP) );
4479 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_READ_DATA_FORMAT, olddataformat) );
4495 assert(lpi != NULL);
4498 MOSEK_CALL( MSK_getintparam(lpi-> task, MSK_IPAR_WRITE_DATA_FORMAT, &olddataformat) );
4499 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_WRITE_DATA_FORMAT, MSK_DATA_FORMAT_LP) );
4501 MOSEK_CALL( MSK_putintparam(lpi-> task, MSK_IPAR_WRITE_DATA_FORMAT, olddataformat) );
|