From aa28c1d3788f19d3c0bd27d8755a3f52b47e9a90 Mon Sep 17 00:00:00 2001 From: rfleming Date: Sun, 29 Sep 2024 11:14:54 +0100 Subject: [PATCH] cplex NET default algorithm --- .../solvers/cplex/setCplexParametersForProblem.m | 8 ++++++++ src/base/solvers/msk/parseMskResult.m | 7 +++---- src/base/solvers/solveCobraLP.m | 13 ++++++++----- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/base/solvers/cplex/setCplexParametersForProblem.m b/src/base/solvers/cplex/setCplexParametersForProblem.m index d68c57e7f6..89a7781d28 100644 --- a/src/base/solvers/cplex/setCplexParametersForProblem.m +++ b/src/base/solvers/cplex/setCplexParametersForProblem.m @@ -118,8 +118,16 @@ % 6 CPX_ALG_CONCURRENT Concurrent (Dual, Barrier, and Primal in opportunistic parallel mode; Dual and Barrier in deterministic parallel mode) cplexProblem.Param.lpmethod.Cur=solverParams.lpmethod; %cplexProblem.Param.qpmethod.Cur='CPX_ALG_PRIMAL'; +else + cplexProblem.Param.lpmethod.Cur=3;%best benchmark performance on Harvetta end +if isfield(solverParams,'timelimit') + %https://www.ibm.com/docs/en/icos/12.10.0?topic=parameters-optimizer-time-limit-in-seconds + cplexProblem.Param.timelimit.Cur = solverParams.timelimit; +end + + if isfield(solverParams,'printLevel') solverParams=rmfield(solverParams,'printLevel'); end diff --git a/src/base/solvers/msk/parseMskResult.m b/src/base/solvers/msk/parseMskResult.m index 4346d70d48..1b1fb5aefa 100644 --- a/src/base/solvers/msk/parseMskResult.m +++ b/src/base/solvers/msk/parseMskResult.m @@ -67,7 +67,7 @@ origStat = res.sol.itr.solsta; %disp(origStat) switch origStat - case {'OPTIMAL','MSK_SOL_STA_OPTIMAL','MSK_SOL_STA_NEAR_OPTIMAL','UNKNOWN'} + case {'OPTIMAL','MSK_SOL_STA_OPTIMAL','MSK_SOL_STA_NEAR_OPTIMAL'} if strcmp(res.rcodestr,'MSK_RES_TRM_STALL') warning('Mosek stalling, returning solution as it may be almost optimal') else @@ -130,9 +130,8 @@ warning(['Unrecognised solsta: ' origStat]) stat=-1; %some other problem end - end - - if isfield(res.sol,'bas') && ~isequal(res.sol.bas.solsta,'UNKNOWN') %dont overwite interior point solution + elseif isfield(res.sol,'bas') + %&& ~isequal(res.sol.bas.solsta,'UNKNOWN') %dont overwite interior point solution origStat = res.sol.bas.solsta; switch origStat case {'OPTIMAL','MSK_SOL_STA_OPTIMAL','MSK_SOL_STA_NEAR_OPTIMAL'} diff --git a/src/base/solvers/solveCobraLP.m b/src/base/solvers/solveCobraLP.m index 70df60d868..caed3d4698 100644 --- a/src/base/solvers/solveCobraLP.m +++ b/src/base/solvers/solveCobraLP.m @@ -1374,11 +1374,14 @@ else stat = -1; end - - % cplexStatus analyzes the CPLEX output Inform code and returns - % the CPLEX solution status message in ExitText and the TOMLAB exit flag - % in ExitFlag - [origStatText, ~] = cplexStatus(origStat); + if 0 + % cplexStatus analyzes the CPLEX output Inform code and returns + % the CPLEX solution status message in ExitText and the TOMLAB exit flag + % in ExitFlag + [origStatText, ~] = cplexStatus(origStat); + else + origStat = CplexLPproblem.Solution.statusstring; + end switch CplexLPproblem.Param.lpmethod.Cur case 0