1@page RN70 Release notes for SCIP 7.0 2 3@section RN703 SCIP 7.0.3 4************************* 5 6Interface changes 7----------------- 8 9### New API functions 10 11- added function SCIPwithDebugSol() to determine whether SCIP was compiled with WITH_DEBUG_SOLUTION 12 13- New function SCIPcreateConsBounddisjunctionRedundant() and SCIPcreateConsBasicBounddisjunctionRedundant() that allow 14 the input to contain redundant literals. 15 16### Changed API functions 17 18- added __attribute__((format(printf,,,))) to variadic SCIP message printing functions; 19 this enables warnings about mismatches between format string and variadic function arguments if using GCC. 20 21### Interfaces to external software 22 23- removed MATLAB interface from interfaces/matlab 24 25Build system 26------------ 27 28- Compilation will now also work in a raw tarball of the scip git repository 29 30### Cmake 31 32- Make find_package more verbose and require packages to be found. Now enabled packages that are not found result in an error. 33 34Fixed bugs 35---------- 36 37- Fixed numerical bug by creating and checking the empty solution when problem vanishes in presolving. 38- Fixed several bugs in reoptimization. 39- Fixed bug in cons_bounddisjunction in which a constraint leads to a cutoff. 40- Fixed bug in reoptimization by avoiding redundant literals for bound disjunctions. 41- Replace wrong usage of CMAKE_BINARY_DIR by PROJECT_BINARY_DIR in CMake system 42- Fixed lpi_glop to use absl flag instead of GFlags 43- Fixed invalid initialization of limits/softtime parameter in cons_components 44- Fixed MIN macro not defined in some cases. 45- Safeguard some API methods for querying solving statistics against segmentation faults after SCIPpresolve() 46- Fixed unfreed solution in concurrent solving 47- Make sure that logicor constraints are enforced/separated if genlogicor is true in cons_indicator. 48 Thus, do not change constraints/logicor/sepafreq anymore, but output warning. 49- Fixed assert that assumed infeasibility cannot occur in presol_boundshift. 50- Fixed sign bug during creation of conflict constraints with almost zero left-hand side. 51- Disabled call of conflict handler for conflict sets that contain relaxation-only variables. 52- Fixed bug in cons_symresack by initializing all constraint data in constrans 53- Avoid allowing the upgrade of linear constraints corresponding to indicators in propagation of nodes. 54- Fixed bug in computing lex. min/max faces in dynamic orbitope propagation. 55- Limit vbounds propagator to one sweep through all bounds per call in order to avoid an infinite loop. 56- Fixed mismatches between formatter strings and arguments in calls to SCIP message printing functions. 57 58Miscellaneous 59------------- 60 61- To avoid performance variablity during reoptimization, the active constraints are now stored in the same order as in the 62 original problem. 63- Added workaround for bug in MSVS 2019 when compiling CppAD source. 64- The original order of variables is now only restored after presolve if `randomization/permutevars` is set to FALSE. 65 66@section RN702 SCIP 7.0.2 67************************* 68 69Features 70-------- 71 72- Extended check for valid variable and constraint names in PIP writer. 73- Indicator constraints now write the name of the linear constraint in CIP format. This avoids a complicated 74 name matching during parsing. The old format is still supported. 75- The objective scale and offset are now taken into account when reading/writing problems in lp/mps/fzn/pip format. 76 This often changes the behavior when writing transformed problems. 77 78Performance improvements 79------------------------ 80 81Examples and applications 82------------------------- 83 84- Add c++ Sudoku example 85 86Interface changes 87----------------- 88 89### New and changed callbacks 90 91### Deleted and changed API methods 92 93- deprecated SCIPsetParam(); use SCIPsetIntParam(), SCIPsetRealParam(), etc, instead 94 95### New API functions 96 97- new function SCIPcolGetVarProbindex() for accessing the probindex of a variable corresponding to a column 98- added new sorting functions SCIPsortPtrRealRealBoolBool() 99 100### Command line interface 101 102### Interfaces to external software 103 104### Changed parameters 105 106### New parameters 107 108### Data structures 109 110Deleted files 111------------- 112 113Unit tests 114---------- 115 116Testing 117------- 118 119Build system 120------------ 121 122### Cmake 123 124### Makefile 125 126Fixed bugs 127---------- 128 129- Fixed a sign bug occuring for some cases in the computation of the directed cutoff distance 130- Fixed overflow in inference information of cumulative constraint handler 131- Fixed problem with propfreq == 0 in cons_linear.c 132- Fixed aggregation heuristic in sepa_aggregation.c to not use local rows when that is requested nor modifiable rows 133- Fixed problem with incompatibility of symmetry handling in Benders decomposition 134- Fixed parsing of small number in CIP format of nonlinear constraint 135- Fixed problem in upgrading full orbitopes to partitioning orbitopes 136- Fixed treatment of negated variables in parsing orbitope constraints 137- Fixed potential indexing error in prop_vbounds.c 138- Fixed bug in writing fzn format 139- Revert to old parameter value when parameter change is rejected in PARAMCHGD callback 140- Fixed order of linker flags when building AMPL interface with cmake system. 141- Improved separation for SOC constraint with multiaggregated variable on right-hand-side. 142- Fixed bug in presol_boundshift: do not shift non-active variables 143- Fixed bug in domain propagation for SOC constraints with negative coefficient for variable on right-hand-side. 144- Fixed bug with multi-aggregated integer variables in cons_xor. 145- Fixed bug with changed number of variables in storing relaxation solution in probing/diving. 146- Fixed issues with scip statistics 147- Fixed issue with multi-aggregated variables 148- Fixed issue in with buffer memory in cons_cumulative 149 150Miscellaneous 151------------- 152 153Known bugs 154---------- 155 156@section RN701 SCIP 7.0.1 157************************* 158 159Build system 160------------ 161 162### Cmake 163 164- Fixed cmake module for Ipopt to support Ipopt 3.13 165- Added cmake variable BLISS_LIBRARY_DIR to pass a bliss library 166- Added warning to require minimal GCC version 4.8 167- Renamed FindCriterion cmake findmodule to FindCRITERION 168 169### Makefile 170 171- Updated make/make.project for macOS 172- Add SANITZERFLAGS (only OPT=dbg) to LDFLAGS also if SHARED=true (and rename SANITZERFLAGS to SANITIZERFLAGS) 173- Fixed GCC version check in make/make.linux.gnu.dbg 174 175Fixed bugs 176---------- 177 178- Fixed handling of constant term in quadratic objective of pip-reader 179- Fixed incorrect value string for parameter estimation/completiontype 180- Fixed initialization of first LP which led to wrong output about LPs not resolved correctly 181- Fixed bug in SCIPcutpoolClear() function not clearing internal datastructures properly 182- Fixed inability to set a value in a solution if it was within epsilon to the current value 183- Fixed problems for linking optimized code with debug library of SCIP (and vice versa) by moving debug-only members 184 to end of SCIP structs 185 186Miscellaneous 187------------- 188 189- Variables that are marked as relaxation-only are no longer checked against debug solutions if 190 they are captured by the transformed problem only. 191 192@section RN700 SCIP 7.0.0 193************************* 194 195Features 196-------- 197 198- Using the parameter "propagating/symmetry/recomputerestart" one can now decide to recompute symmetries after a 199 restart or not. Previously one could just turn off symmetry computation after a restart. If orbital fixing 200 has found a reduction before the restart occured, symmetries have to be updated to ensure correctness. 201 To this end, the user can decide via "propagating/symmetry/disableofrestart" whether orbital fixing is disabled or 202 whether symmetries are recomputed. 203 204- extended relaxators statistics in solve statistics about information on number of cutoffs, improved bounds, etc. 205 206- extends SMPS file reader for the stochastic information, the sto files, to read a lower bound for the discrete 207 scenarios. The lower bound is used when creating the auxiliary variables for Benders' decomposition. 208 209- extended Benders framework to solve NLPs and generate optimality and feasibility cuts from their solution 210 when the subproblem is convex nonlinear. 211 212- extended Benders framework to create copies of Benders decompositions that can be used in a multithreading environment 213 214- additional functionality has been added to enable the transfer of Benders' decomposition cuts between different SCIP 215 instances, e.g., when used in UG 216 217- LP rows (SCIP_ROW) can now store pointer to a constraint from which the row originates 218 219- Trust region, a new LNS heuristic, has been added to SCIP as both a standalone primal heuristic heur_trustregion.c 220 and as a neighborhood inside of Adaptive Large Neighborhood Search (heur_alns.c). This heuristic is designed to improve the 221 heuristic performance of the Benders' decomposition algorithm. It builds upon the successful trust region approaches 222 applied to Benders' decomposition. 223 224- Modularity of symmetry handling has been increased. It is now possible to use orbitopes (i.e., polyhedral symmetry 225 handling techniques) and orbital fixing on the same instance. 226 227- cut strengthening enabled within the Benders' decomposition framework. This uses a mix of the Improved Magnanti-Wong 228 method and Kelly's method. The cut strengthening is enabled by setting the paramemter 229 "benders/<bendersname>/cutstrengthenenabled" to TRUE. The parameters "cutstrengthenmult", "noimprovelimit" and 230 "corepointperturb" control the behavior of the cut strengthening method. Additionally, the parameter 231 "cutstrengthenintpoint" allows the user to specify the solution that is used to initialize the core point. The options 232 are the first LP solution, the first integer feasible solution, a relative interior point, a solution vector of all 233 ones and a solution vector of all zeros. Also, the core point can be reinitialized after each update to the incumbent 234 solution. 235 236- added option to adjust weights of different scores in relpscost (hybrid) branching rule based on degeneracy information 237 and skip strong branching for very high degeneracy rates 238 239- added new SCIP_DECOMP* object to store user decompositions. The user can specify one or several decompositions by assigning variable 240 and/or constraint labels either through the API or by reading a file in DEC format (which is one of the formats that GCG writes). 241 This format specifies constraint labels, variable labels are inferred from that. The decomposition is transformed after presolving. 242- statistics regarding the number of blocks, the largest and smallest blocks, the border, and the constraint graph are printed for the original decomposition, 243 and for each decomposition after presolving. 244- the decomposition can be used as initial decomposition for the Benders functionality of SCIP. 245- new subsection "How to provide a problem decomposition" in the SCIP documentation 246 247- GINS heuristic can make use of a user-provided decomposition labels in two ways: 248 1. by selecting a block of variables that maximizes the potential, and randomly selecting a start variable for the neighborhood and/or 249 2. by selecting an interval of consecutive blocks as neighborhood, until fixing rate is reached. In this case, no variable is randomly selected. 250 251- extend potential parameter of GINS to allow computation based on local LP solution, as well 252 253- new primal heuristic Adaptive Diving, which registers all publicly available dive sets from other diving heuristics. 254 At each call, it selects one of the available dive sets based on the user's score type choice (heuristics/adaptivediving/scoretype). 255 During the solution process, the heuristics learns online which divesets reach the best score, and executes them more frequently. 256 The statistic output for Diving heuristics has been extended to incorporate the statistics of each dive set within Adaptive diving. 257 258- Added new penalty alternating direction method (PADM) primal heuristic that splits the problem into several sub-SCIPs 259 according to a user-provided decomposition. The sub-SCIPs are solved on an alternating basis until a feasible solution of 260 the original problem is found. 261 262- Symmetry handling constraints (cons_orbisack, cons_orbitope, cons_symresack) now have an additional parameter to encode 263 whether they are model constraints, i.e., define the problem, or whether they are only present to handle symmetries. 264 265- The symmetry code has been completely restructured. The presolvers presol_symbreak and presol_symmetry as well as the propagator 266 prop_orbitalfixing have been merged into the single propagator prop_symmetry to avoid storing the same information 267 multiple times. This propagator is now responsible for adding symmetry handling constraints as well as activating orbital 268 fixing. Moreover, the new file symmetry.c contains general functions for symmetry computations like orbit computations. 269 270- Variables can now be marked as "relaxation-only". This flag should be used to introduce new variables that are required 271 to define a relaxation, but that are not part of any checked constraints. Essentially, these variables should only be used 272 in the current SCIP solve and disregarded after a restart or in SCIP copies. Hence, these variables are not copied by SCIPcopy and 273 SCIPgetVarCopy, they are currently not used in conflict constraints, and cuts involving them are not upgraded to linear constraints. 274 Relaxation-only variables cannot appear in the objective function. 275 276- The OSiL reader now supports nonlinear expressions of type "signpower". 277 278- Expressions of form abs(x)^p * x in a nonlinear constraint are now sometimes recognized and handled by abspower constraints. 279 280- If polyhedral symmetry handling methods are used (cons_orbisack, cons_orbitope, cons_symresack), it is now possible to 281 recompute symmetries if a restart occured. 282 283- upgrade some more quadratic constraints to second-order cone constraints, that is, 284 handle linear binary variables as if squared in simple upgrade and 285 do not require bounds for variables that have a zero entry in the computed eigenvectors in the non-simple upgrade 286 287- new variable event when changing the variable type 288 289- It is no longer necessary to provide a SCIP pointer for the subproblem in SCIPaddBendersSubproblem if custom solving 290 methods are defined. A NULL pointer can be supplied to SCIPaddBendersSubproblem. In this case, no internal Benders' 291 cut generation methods can be used. 292 293- Using the parameter "constraints/symresack/checkmonotonicity" one can now decide to upgrade to packing/partitioning 294 symresacks even if the underlying permutation is not monotone. 295 296- New branching rule `vanillafullstrong`, mostly for scientific purpose, with the following features: 297 1) no cutoff or domain reduction: only branching; 298 2) idempotent (optional): leave SCIP, as much as possible, in the same state before / after the strong branching calls 299 - basically, do not update any statistic; 300 3) donotbranch (optional): do no perform branching. So that the brancher can be called as an oracle only 301 (on which variable would you branch ? But do not branch please); 302 4) scoreall (optional): keep scoring variables, even if infeasibility is detected; 303 5) collectscores (optional): store the candidate scores from the last call, which can then be retrieved by calling SCIPgetVanillafullstrongData(); 304 6) integralcands (optional): consider integral candidates for branching, 305 i.e., get candidates from SCIPgetPseudoBranchCands() instead of SCIPgetLPBranchCands(). 306 307- If a reference value (misc/referencevalue) is given, the primal-reference and reference-dual integrals are calculated automatically and printed within the SCIP statistics. 308 309- Locally valid cuts / rows are now considered for dual proof analysis when `conflict/uselocalrows` is set to TRUE. 310 311- Linking variables in the linking constraint handler (cons_linking.{ch}) can now be integer or continuous. The coefficients of the binary variables are therefore now stored as SCIP_Real. 312 313- To save memory, it is now possible to remove all variables from the internal symmetry data structures that are 314 not affected by any symmetry. 315 316- Allow to filter first variables from orbits and transfer pseudo cost information to variables in orbit 317 318- Add integration of external MILP presolve library as a SCIP presolver plugin that runs on MILP problems 319 320- Parallelisation can be used when applying Benders' decomposition. There are two different forms of parallelisation 321 available. The first is applying Benders' decomposition within a parallel branch-and-bound. This is achieved through 322 the integration with the UG framework. The second is the use of shared memory parallelisation for solving the Benders' 323 decomposition subproblems. A priority queue has been added to help with load balancing. 324 325- The Benders' decomposition framework can handle MINLPs. If a convex relaxation of the MINLP exists, then this is 326 solved to generate optimality and feasibility cuts. The extensions to the framework are: 327 - New generic solving methods to solve convex NLP subproblems. 328 - Modification to benderscut_opt and benderscut_feas to enable the generation of cuts from convex NLPs. 329 - Addition of benderscut_feasalt to generate feasibility cuts from an alternative subproblem that minimises the 330 violation of infeasible problems. 331 - Better handling of subproblem solution results 332 333- Adds a feasibility phase to the Benders' decomposition subproblem solving methods. The feasibility phase adds slack 334 variables to each of the constraints to ensure feasibility of the subproblem. A large coefficient is given to these 335 slack variables in the objective function to penalise constraint violations. The coefficients are progressively 336 increased until all slack variables take the value 0.0. 337 338- Improved convexity check for Benders' decomposition subproblems. The constraints of the subproblem are now checked for 339 convexity in the initialisation of the Benders' decomposition algorithm. This enables the solving of convex NLPs as 340 Benders' decomposition subproblems. 341 342- Benders' decomposition can be applied using decomposition supplied in the DEC format. To apply Benders' decomposition 343 the parameters decomposition/benderslabels and decomposition/applybenders must be set to TRUE. 344 345- new event handler event_estim.c/h that approximates search tree completion and estimates tree size 346 to trigger restarts; many approximations of search tree completion and estimation, including WBE, SSG, and tree profile method 347- new display column that reports approx. search tree completion during the search, and an overview in the statistics table 348- added resources (script, tutorial, test data) to adapt tree size estimation to user instances. 349 350- Orbital Fixing uses a list of variables that have been fixed globally since the computation of symmetries to filter 351 symmetries. Previously, some plugins were disabled, which is not necessary anymore. 352 353- A new presolver "dualsparsify" was added. It tries to combine columns (i.e. variables) to cancel nonzero coefficients in the constraint matrix. 354 355- The presolver "tworowbnd" was implemented with better performance. 356 357- To be able to calculate better bounds for the dual variables, the presolver "dualinfer" was extended by the ability to perform convex combinations of continuous columns. 358 359- allow disabling of pricers during solving process 360 361- added emphasis setting for numerically challenging instances 362 363Performance improvements 364------------------------ 365 366- Extended cut presolving by removing variables that been fixed at their bounds 367 368- Improved branching point selection when branching on externals branching candidates. Instead of using exactly the 369 LP solution, a point closer to the middle of the variables domain is chosen. 370 371- Matrix presolvers that do not work on incomplete matrices now skip matrix creation if unsupported constraint types are detected. 372 373- consLockBenders callback implemented to add down locks on the Benders' decomposition auxiliary variables and 374 up and down locks per subproblem for all master problem variables. This allows the use of presolving and propagation 375 with Benders' decomposition. 376 377- improved performance of orbital fixing in several ways: 378 store permutations in transposed form to improve cache efficency; 379 reverse order to speed up filtering of permutations; 380 handle variables globally fixed to 1 in list; 381 use event handler to catch global fixings; 382 speed up orbit computations; 383 change handling of restarts; 384 use only permutations that can contribute to a variable's orbit; 385 386- allow rapid learning at local nodes 387 388- allow to recompute cut without using fractional values for sepa_cgmip 389 390- restrict the number of the clique table nonzeros relative to the number of problem nonzeros, which could be a performance bottleneck. 391 392- variable fixings of LP face heuristic are now computed earlier; subproblem creation is skipped if not enough variables are fixed. 393 394- Improved domcol presolver to not require a complete representation of all constraints in the matrix 395 396- performance improvement of adaptive large neighborhood search heuristic on merely continuous problems. The heuristic 397 stops if presolving in the sub-SCIP fixes less than 50 % of the current target fixing rate over all variables 398 (including continuous). 399 400- reduce memory usage in symmetry detection by a staggered allocation with decreasing overhead for larger instances 401 402- improved full orbitope propagation using a static implementation or a dynamic reordering of orbitope rows by a global rank function 403 404- improved detection of packing/partitioning orbitopes 405 406- enable an in-tree restart if after a reasonable initialization, the estimated size of the remaining tree is large. 407 408 409Examples and applications 410------------------------- 411 412- added methods to set and get hmin and hmax for optcumulative constraints 413 414Interface changes 415----------------- 416 417### New and changed callbacks 418 419- new optional callback `SCIP_DECL_DIVESETAVAILABLE` to check preconditions for this dive set, e.g., if an incumbent solution is available, 420 which is passed as new argument to SCIPcreateDiveset(). SCIPcreateDiveset() has another new parameter "ispublic". 421 422- new callback `SCIP_DECL_CONSHDLRCOPY` and `SCIP_DECL_CONSCOPY` in cons_orbisack and cons_symresack 423 424- new `idempotent` argument to SCIPgetVarStrongbranchInt() and SCIPgetVarStrongbranchFrac(), 425 so that statistics are not updated during the call. Likewise, new `updatecol` and `updatestat` arguments to SCIPcolGetStrongbranch(). 426 427- callback `SCIP_DECL_CONSHDLRENFOLP` can now also return SCIP_SOLVELP as *result, which indicates to the SCIP core that the LP relaxation 428 should be solved again because the primal feasibility tolerance of the LP has been tightened (using SCIPsetLPFeastol()) 429 430- extension of SCIP_PQUEUE by a new callback SCIP_DECL_PQUEUEELEMCHGPOS to catch swaps as well as functionality to delete arbitrary elements from the priority queue. 431 432### Deleted and changed API methods 433 434- LPI: 435 + now for all lp interfaces consistent requirements on SCIP_LPPAR: 436 LPITLIM and BARRIERCONVTOL positive or zero; FEASTOL, DUALFEASTOL, LPTILIM strictly positive 437 + now projecting SCIP_LPPAR values on feasible values for each lp interface 438 + add interface to Glop 439 + fixed mapping between scaling parameter values in Gurobi LPI lpi_grb 440- Symmetry: 441 + removed method SCIPseparateCoversOrbisack() in cons_orbisack.h since the orbitope constraint 442 handler has its own implementation of this routine with advanced features now 443 + renamed SCIPgetGeneratorsSymmetry() to SCIPgetSymmetry() and removed two arguments 444 + extended method SCIPgetSymmetry(): It is possible to access both the original and 445 transposed permutations matrix as well as the (independent symmetry) components of a permutation group now. 446 + arguments of functions SCIPcreateConsOrbisack(), SCIPcreateConsBasicOrbisack(), SCIPcreateConsOrbitope(), 447 SCIPcreateConsBasicOrbitope(), SCIPcreateConsSymresack(), SCIPcreateConsBasicSymresack(), and SCIPcreateSymbreakCons() extended 448 by "ismodelcons" to encode whether the constraints are model constraints or not 449 + the function SCIPgetSymmetry() no longer accepts the parameter recompute, but has parameter permvarmap as new input 450 + removed SCIPgetPermvarsObjSymmetry(), SCIPsetSymmetryComponentblocked(), SCIPgetSymmetryComponentblocked(), 451 SCIPgetSyminfoGloballyFixedVars(), SCIPcomputeGroupOrbitsSymbreak, SCIPincludePresolSymmetry(),SCIPincludePresolSymbreak(), 452 and SCIPincludePropOrbitalfixing() 453 + add function SCIPcomputeOrbitsComponentsSym() to compute orbits without filtering permutations and indices of orbits for each variable 454- SCIPallowObjProp() and SCIPallowDualReds() are deprecated and replaced by SCIPallowWeakDualReds() and SCIPallowStrongDualReds(), respectively 455- Benders' decomposition 456 + changed SCIPstoreBenderscutCut() in scip_benders.c to SCIPstoreBendersCut(). Where this function used to take a 457 SCIP_BENDERSCUT pointer, it now accepts a SCIP_BENDERS pointer. 458 + the functions SCIPsolveBendersSubproblem() no longer accepts the parameter type. The type is not a necessary 459 argument for the subproblem solving method. 460 + arguments of functions SCIPbendersSolveSubproblemLP(), SCIPbendersSolveSubproblemCIP(), and SCIPbendersOnlyCheckConvexRelax() changed 461 - removed SCIPbenderscutGetNAddedCuts() and SCIPbenderscutGetAddedCutData() 462 463- new argument "onlyifcomplete" in SCIPmatrixCreate() to skip matrix creation right after detecting unsupported constraint types 464 and new arguments to count statistics when doing a clean-up of inactive variables in the constraints before building the matrix 465 466- new argument "threadsafe" in SCIPcopy(), SCIPcopyConsCompression(), SCIPcopyOrig(), SCIPcopyOrigConsCompression and 467 SCIPcopyBenders(). This argument must only be set to TRUE if the source and target SCIP instances are to be solved in 468 parallel. Setting this argument to TRUE has a performance cost. 469 470- new argument "append" in SCIPsetModifiedDefaultSettingsIpopt() 471- functions SCIPclearRelaxSolVals(), SCIPsetRelaxSolVal(), SCIPsetRelaxSolVals(), SCIPsetRelaxSolValsSol(), and SCIPmarkRelaxSolValid() 472 receive an additional argument "relax" to store the relaxation handler as creator of the relaxation solution. 473 474- LP: 475 - SCIProwGetOriginCons() now returns a SCIP_CONS* instead of a SCIP_CONSHDLR*, use SCIProwGetOriginConshdlr() for the previous behavior 476 - SCIPcreateRowCons() and SCIPcreateEmptyRowCons() now expect a SCIP_CONS* instead of a SCIP_CONSHDLR*, 477 use SCIPcreateRowConshdlr() and SCIPcreateEmptyRowConshdlr(), respectively, for the previous behavior 478 - deprecated SCIPlpfeastol() and SCIPchgLpfeastol(), use SCIPgetLPFeastol() and SCIPsetLPFeastol() 479 480- new parameter "divecontext" for every method that queries statistics for a diveset. The context can be used to distinguish between the dive set 481 as single (standalone) heuristic or within Adaptive Diving. 482- new parameters "divecontext" and "iterlim" to SCIPperformGenericDivingAlgorithm() to control in which context (single,adaptive) statistics are updated. 483 484- SCIPcopyVars, SCIPcopy, SCIPcopyConsCompression, and SCIPgetVarCopy do not copy variables that are marked as relaxation-only, 485 thus it cannot be assumed anymore that each active variable from the master SCIP also has a counterpart in the copy. 486 SCIPcopy, SCIPcopyConsCompression, and SCIPcopyConss can now return *valid=TRUE if some non-checked and non-enforced constraints were not copied, e.g., 487 because they involved relaxation-only variables. Thus, a copy is already regarded as valid if all checked or enforced constraints were copied successfully. 488 489- linking constraint handler: 490 - changed type of vals argument from int* to SCIP_Real* in SCIPcreateConsLinking() and SCIPcreateConsBasicLinking() 491 - SCIPgetIntvarLinking() has been renamed to SCIPgetLinkvarLinking(). 492 - changed return value of SCIPgetValsLinking() from int* to SCIP_Real*. 493 - new method SCIPgetBinvarsDataLinking(). 494 495- SCIPbendersCheckSubproblemOptimality() now returns a boolean indicating whether the subproblem is optimal or not. 496 Previously this result was returned through a parameter. The change was required to facilitate the integration with 497 the UG framework. 498 499- deleted SCIPcombineTwoInt(), SCIPcombineThreeInt(), SCIPcombineFourInt(); use the appropriate SCIPhashTwo(), ..., SCIPhashSeven() method instead 500 501- SCIPsetupBendersSubproblem takes a parameter of the enforcement type. 502 503- SCIPcreateNlpiProb takes a hashmap to store the map between the nlrows and the index in the nlrow array. 504 505### New API functions 506 507- SCIPallowWeakDualReds() and SCIPallowStrongDualReds() replace the deprecated SCIPallowObjProp() and SCIPallowDualReds(), respectively 508- methods have been added to facilitate the transfer of Benders' decomposition cuts between solvers in UG. These include 509 SCIPapplyBendersStoredCuts(), SCIPbendersGetNStoredCuts(), SCIPbendersGetStoredCutData() and 510 SCIPbendersGetStoredCutOrigData(). 511- added SCIPisConvexAbspower() 512- new functions SCIPsolGetType(), SCIPsolGetRelax(), SCIPsolSetRelax(), SCIPsolSetLPRelaxation(), SCIPsolSetStrongbranch(), 513 SCIPsolSetPseudo to set or query the new type attribute of a primal solution. The type attribute gives information 514 about the origin of the solution, ie, whether it was created by a relaxation handler, 515 by the LP relaxation, by strong branching, by the current pseudo solution, or by a primal heuristic. 516 The meaning of the argument 'heur' in all creation methods for primal solutions such as SCIPcreateSol() stays unchanged. 517- added SCIProwGetOriginConshdlr(), SCIPcreateRowConshdlr(), SCIPcreateEmptyRowConshdlr() 518- new API functions SCIPsetCommonSubscipParams(), SCIPtranslateSubSol(), and SCIPtranslateSubSols() shared by several Large Neighborhood Search heuristics. 519- new API function SCIPgetLPDegeneracy() to get two measures for the degeneracy of the current LP 520- new API functions SCIPdivesetIsAvailable() to check preconditions of a dive set and SCIPdivesetIsPublic() to check if the dive set can be used 521 by other primal heuristics. 522- new API functions SCIPcomputeOrbitsSym(), SCIPcomputeOrbitsFilterSym(), SCIPgetPropertiesPerm(), SCIPdetermineBinvarAffectedSym(), 523 SCIPdetermineNVarsAffectedSym(), SCIPcomputeComponentsSym(), and SCIPextendSubOrbitope(), SCIPgenerateOrbitopeVarsMatrix() for symmetry computations 524- new API functions SCIPvarIsRelaxationOnly() and SCIPvarMarkRelaxationOnly() to query and set, resp., whether a variable is marked as relaxation-only 525- new API functions SCIPconshdlrGetNUpdateConss() and SCIPconshdlrGetUpdateConss(), for expert users only 526- new API function SCIPgetNConflictDualproofsApplied() 527- new API functions SCIPeventGetOldtype() and SCIPeventGetNewtype() for the new event when changing the variable type 528- new API function SCIPisConvexConsQuadratic() to check whether a quadratic constraint is convex when a given set of variables would be fixed 529- new API functions SCIPgetLPFeastol(), SCIPsetLPFeastol(), and SCIPresetLPFeastol() to get, set, and reset (to the default), respectively, the primal 530 feasibility tolerance for the LP relaxation 531- new API functions SCIPcleanupConss{Linear,Varbound,Setppc,Logicor,Knapsack}() to clean up inactive variables from those types of linear constraints 532- new API function SCIPsetBendersSubproblemComp() used to add a custom comparison method for ordering the Benders' 533 decomposition subproblem solves. The comparison method is used to help with load balancing. 534- new API function SCIPgetRowObjParallelism to get the objective parallelism of a row 535- new API function SCIPcolGetAge to get the age of a column 536- added SCIPhashThree(), SCIPhashFive(), SCIPhashSix(), and SCIPhashSeven() that complement SCIPhashTwo(), SCIPhashFour() to combine 32bit integers to 537 a 32bit hash value 538- new API function SCIPgenerateAndApplyBendersOptCut is used to generate a Benders' optimality cut using the dual 539 solutions. This function can be supplied vectors for the primal and dual solution for generating an optimality cut. 540 This avoids the need for a SCIP instance to solve the Benders' decomposition subproblem and generating cuts. 541- new API function SCIPconsAddCoef used for adding a coefficient to a linear-type constraint. 542- new API functions SCIPconsNonlinearGetRhs, SCIPconsNonlinearGetLhs and SCIPconsNonlinearAddLinearCoef for getting the 543 RHS and LHS from a nonlinear-type constraint and adding a linear coefficient to the constraint. 544- new API function SCIPbendersSolSlackVarsActive for checking whether any slack variables from the feasibility phase are 545 active in the subproblem solution. 546- new API functions SCIPbendersSetSubproblemType and SCIPbendersGetSubproblemType sets and gets the subproblem type. 547 This is either: 548 - Convex constraints with continuous variables 549 - Convex constraints with discrete variables 550 - Non-convex constraints with continuous variables 551 - Non-convex constraints with discrete variables 552- new API functions SCIPbendersSetSubproblemIsNonlinear() and SCIPbendersSubproblemIsNonlinear() for setting and 553 identifying whether the Benders' decomposition subproblems contain nonlinear constraints. Similarly, the functions 554 SCIPbendersSetMasterIsNonlinear() and SCIPbendersMasterIsNonlinear() sets and identifies whether the Benders' 555 decomposition master problem contains nonlinear constraints. 556- new API function SCIPapplyBendersDecomposition for applying Benders' decomposition given a decomposition in the DEC 557 format 558- new API function SCIPwasNodeLastBranchParent to query if a node has been the parent of the most recent branching in the tree 559- new API functions SCIPtreemodelInit(), SCIPtreemodelFree(), SCIPtreemodelIsEnabled(), SCIPtreemodelSelectCandidate() related to the new 560 treemodel way of comparing branching candidates. These functions are only currently used for reliability pscost branching, but they can be used 561 in other parts of the code. 562- New function SCIPcalcChildEstimateIncrease() to compute the increase in the child estimation 563- new API functions SCIPisOrbitalfixingEnabled() and SCIPgetSymmetryNGenerators() to check whether orbital fixing is 564 enabled and to get the number of generators of the current symmetry group, respectively 565- new API function SCIPdelNlRow() to remove a row from the NLP 566 567### Event system 568 569- new event type SCIP_EVENTTYPE_NODEDELETE to react on nodes that are about to be deleted from the tree 570 571### Changed parameters 572 573- renamed parameter "propagating/orbitalfixing/enableafterrestart" to ".../symmetry/recomputerestart" 574- Parameter "misc/allowdualreds" is now called "misc/allowstrongdualreds" 575- Parameter "misc/allowobjprop" is now called "misc/allowweakdualreds" 576- changed default values of propagation (new value: 1, old value: 5) and separation frequency (new value: -1, old value: 5) in cons_orbitope.c 577- all primal heuristics that use sub-SCIPs are disabled within the heuristics fast emphasis setting 578- deleted parameter heuristics/localbranching/useuct, use heuristics/useuctsubscip instead 579- changed default value of "presolving/symbreak/detectorbitopes" (new value: TRUE, old value: FALSE) 580- extended range of "misc/usesymmetry" (new range: [0,3], old range: [0,2]) 581- deleted parameter "constraints/orbisack/checkalwaysfeas" 582- deleted parameter "constraints/orbitope/checkalwaysfeas" 583- deleted parameter "constraints/symresack/checkalwaysfeas" 584- deleted parameter "presolving/symmetry/maxgenerators" 585- deleted parameter "presolving/symmetry/checksymmetries" 586- deleted parameter "presolving/symmetry/displaynorbitvars" 587- deleted parameter "presolving/symbreak/conssaddlp" 588- deleted parameter "presolving/symbreak/addsymresacks" 589- deleted parameter "presolving/symbreak/computeorbits" 590- deleted parameter "presolving/symbreak/detectorbitopes" 591- deleted parameter "presolving/symbreak/addconsstiming" 592- deleted parameter "propagating/orbitalfixing/symcomptiming" 593- deleted parameter "propagating/orbitalfixing/performpresolving" 594- deleted parameter "propagating/orbitalfixing/recomputerestart" 595- changed default value of "heuristics/coefdiving/freq" (old: 10, new: -1) 596- changed default value of "heuristics/conflictdiving/freq" (old: -1, new: 10) 597- changed default value of "heuristics/conflictdiving/lockweight" (old: 1.0, new: 0.75) 598- replaced parameter "numerics/lpfeastol" by "numerics/lpfeastolfactor" to specify which factor should be applied to the SCIP feasibility 599 tolerance to initialize the primal feasibility tolerance of the LP solver 600- enabling aggressive presolving now activates all available presolving plugins, 601 and decreases the presolving/restartfac parameter correctly with respect to default. 602- changed default value of heuristics/rins/nodesquot to 0.3 (was 0.1), to compensate 603 the removal of a hard coded factor of 3.0 in the code without affecting the default behavior 604 of the RINS heuristic. 605- changed default value of "constraints/quadratic/empathy4and" (old: 0, new: 2) 606- changed default value of "propagating/redcost/useimplics" (old: TRUE, new: FALSE) 607 608### New parameters 609 610- the possibility to define the Benders' decomposition auxiliary variables as implicit integer is provided. This 611 behavior is controlled with an additional parameter in the Benders' decomposition framework. 612- added parameter benders/<bendersname>/cutcheck to enable the generation of Benders' decomposition cuts during solution 613 checking. 614- constraints/orbitope/usedynamicprop: the possibility to propagate orbitope constraints by reordering the rows based on the 615 branching strategy is provided (only possible for non-model constraints) 616 617- new parameters heuristics/shiftandpropagate/minfixingratelp and heuristics/locks/minfixingratelp to stop the 618 heuristics after propagating integer fixings if no sufficient fixing of the all variables (including continuous) 619 could be achieved. These parameters help to avoid solving LP's that are comparable in hardness to the main root LP. 620 621- Added parameters branching/midpull and branching/midpullreldomtrig to control by how much to move 622 the branching point for an external branching candidate closer to the middle of the candidates domain. The 623 default of 0.75 and 0.5, respectively, uses a point that is 75*alpha% closer to the middle of the domain, where 624 alpha is the relative width of the candidates domain (width of local domain divided by width of global domain), 625 if the latter is below 0.5, and alpha=1.0 otherwise. That is, with the default settings, a branching point is 626 chosen closer to the middle of the candidates domain if the variables local domain is still similar to its 627 global domain, but is chosen closer to the LP solution if the local domain is much smaller than the global 628 domain. 629 630- Added parameter lp/minmarkowitz to set the Markowitz stability threshold (range 0.0001 to 0.9999). 631 High values sacrifice performance for stability. 632 633- Added parameters benders/<bendersname>/lnsmaxcalls and benders/<bendersname>/lnsmaxcallsroot to the Benders' 634 decomposition core. These parameters limit the number of Benders' decomposition subproblem checks, for the full 635 branch-and-bound tree and root node respective, when solving the auxiliary problem of LNS hueristics. These 636 parameters only have effect if the lnscheck parameter is set to TRUE. 637 638- Added parameter cons/linear/maxmultaggrquot to limit the maximum coefficient dynamism of an equation on which 639 multiaggregation is performed. This replaces a compiler define of the same name. 640 Default value is 1000, smaller values make multiaggregations numerically more stable. 641- new global parameter heuristics/useuctsubscip that affects all LNS heuristics using common sub-SCIP parameters 642 643- new parameter branching/relpscost/degeneracyaware to switch degeneracy-aware hybrid branching 644 645- new parameter separation/rapidlearning/checkexec to check whether rapid learning is allowed to run locally 646- new parameters separation/rapidlearning/check{degeneracy,dualbound,leaves,nsols,obj} to enable checking the respective feature for local rapid learning 647- new parameter separation/rapidlearning/maxcalls to limit the number of rapid learning executions 648- new parameter separation/rapidlearning/nwaitingnodes to set the number of waiting nodes before the dual bound is checked 649- new parameter separation/rapidlearning/mindegeneracy to set the minimal threshold of degenerate basic-variables 650- new parameters separation/rapidlearning/minvarconsratio to set the minimal ratio of unfixed variables in relation to basis size 651 652- new parameters to control the Benders' decomposition two-phase method. 653 - constraints/benderslp/depthfreq: after the maxdepth is reached, then the two-phase method will only be called at 654 nodes at a depth divisible by depthfreq. 655 - constraints/benderslp/stalllimit: after the maxdepth is reached, if there has been no improvement in the dual bound 656 for stalllimit number of nodes, then the two-phase method is executed for the next fractional LP solution that is 657 encountered. 658 - constraints/benderslp/iterlimit: after the root node, only iterlimit fractional LP solutions are used at each node 659 to generate Benders' decomposition cuts. 660 661- new parameters for symmetry handling 662 - new parameter "propagating/symmetry/maxgenerators" 663 - new parameter "propagating/symmetry/checksymmetries" 664 - new parameter "propagating/symmetry/displaynorbitvars" 665 - new parameter "propagating/symmetry/conssaddlp" 666 - new parameter "propagating/symmetry/addsymresacks" 667 - new parameter "propagating/symmetry/detectorbitopes" 668 - new parameter "propagating/symmetry/addconsstiming" 669 - new parameter "propagating/symmetry/ofsymcomptiming" 670 - new parameter "propagating/symmetry/performpresolving" 671 - new parameter "propagating/symmetry/recomputerestart" 672 - new parameter "constraints/symresack/checkmonotonicity" 673 - new parameter "propagating/symmetry/compresssymmetries" 674 - new parameter "propagating/symmetry/compressthreshold" 675 - new parameter "propagating/symmetry/disableofrestart" 676 - new parameter "propagating/symmetry/symfixnonbinaryvars" 677 678- new parameter for enabling shared memory parallelisation for solving Benders' decomposition subproblems. The parameter 679 benders/<bendersname>/numthreads sets the number of threads used for parallel subproblem solving. 680 681- new parameters to control enhancements for solving MINLPs by Benders' decomposition 682 - benders/<bendersname>/execfeasphase: enables the feasibility phase for solving the Benders' decomposition 683 subproblems 684 - benders/<bendersname>/slackvarcoef: the initial coefficient of the slack variable for the feasibility phase 685 - benders/<bendersname>/checkconsconvexity: should the constraints be checked for convexity. This can be set to FALSE 686 if you are certain that the NLP subproblem is convex. 687 688- new parameter presolving/clqtablefac (default value 2.0) as limit on number of entries in clique table relative to number of problem nonzeros 689 690- new parameter conflict/uselocalrows (default: TRUE) to incorporate locally valid cuts / rows for dual proof analysis 691 692- new return code SCIP_NOTIMPLEMENTED for functions, e.g., in the LPI that have not been implemented (yet) 693 694- new parameter separating/cgmip/genprimalsols that allows to generate initial primal solutions from Gomory cuts 695 696- new parameter branching/relpscost/filtercandssym to allow filtering from orbits 697 698- new parameter branching/relpscost/transsympscost to transfer pseudo cost information to orbit 699 700- new parameters for tree size estimation and restarts: 701 - estimation/restarts/restartpolicy (default value n) 702 - estimation/method (default value c) 703 - estimation/restarts/restartlimit (default value 1) 704 - estimation/restarts/minnodes (default value 1000) 705 - estimation/restarts/countonlyleaves (default value FALSE) 706 - estimation/restarts/restartfactor (default value 2) 707 - estimation/coefmonoprog (default value 0.3667) 708 - estimation/coefmonossg (default value 0.6333) 709 - estimation/restarts/hitcounterlim (default value 50) 710 - estimation/reportfreq (default value -1) 711 - estimation/regforestfilename (default value "-") 712 - estimation/completiontype (default value a) 713 - estimation/treeprofile/enabled (default value FALSE) 714 - estimation/treeprofile/minnodesperdepth (default value 20) 715 - estimation/useleafts (default value TRUE) 716 - estimation/ssg/nmaxsubtrees (default value -1) 717 - estimation/ssg/nminnodeslastsplit (default value 0) 718 719- new parameter constraints/linear/extractcliques to turn clique extraction off 720 721- new emphasis setting emphasis/numerics to increase numerical stability of (mostly) presolving operations such as (multi-)aggregations at the cost of performance. 722 723- new parameters for treemodel: 724 - new parameter branching/treemodel/enable to enable the treemodel in reliability pscost branching and possible 725 future parts of the code where it could be used. 726 - new parameter branching/treemodel/highrule to specify which branching rule to use when treemodel thinks the node 727 is high in the tree. 728 - new parameter branching/treemodel/lowrule to specify which branching rule to use when treemodel thinks the node 729 is low in the tree. 730 - new parameter branching/treemodel/height to specify at which (estimated) height a node is high or low in the tree. 731 - new parameter branching/treemodel/filterhigh to specify whether to filter dominated candidates in nodes which are 732 high in the tree. 733 - new parameter branching/treemodel/filterlow to specify whether to filter dominated candidates in nodes which are 734 low in the tree. 735 - new parameter branching/treemodel/maxfpiter to specify the maximum number of fixed-point iterations to use when 736 computing the ratio of a variable using the fixed-point method. 737 - new parameter branching/treemodel/maxsvtsheight to specify the maximum height to compute the SVTS score exactly 738 before approximating it using the ratio. 739 - new parameter branching/treemodel/fallbackinf defines the fallback strategy to use when the tree size estimates 740 obtained by SVTS are infinite. 741 - new parameter branching/treemodel/fallbacknoprim defines the fallback strategy to use when no primal bound is known 742 and thus SVTS would not be able to compute a tree size (it would be infinite). 743 - new parameter branching/treemodel/smallpscost defines the value under which pscosts are considered too small to be 744 the deciding factor for branching, in which case it may be better not to use the treemodel. 745 746- new parameters for symmetry handling constraint handlers to enforce that also non-model constraint are copied: 747 - new parameter "constraints/orbisack/forceconscopy" 748 - new parameter "constraints/orbitope/forceconscopy" 749 - new parameter "constraints/symresack/forceconscopy" 750 751 752### Data structures 753 754- small changes in constants of hash functions 755- added fast 2-universal hash functions for two to seven 32bit elements with 32bit output 756- extended SCIPpqueueCreate() by additional callback argument SCIP_DECL_PQUEUEELEMCHGPOS to catch position changes 757- new methods SCIPpqueueDelPos() to delete elements at a specific position in the priority queue and SCIPpqueueFind() to 758 find a specific position. It is recommended to track position changes using the new callback SCIP_DECL_PQUEUEELEMCHGPOS. 759 In contrast, using SCIPpqueueFind() can be slow because it needs to compare the element it searches for 760 with each slot in the queue. 761 762### Build system 763 764- The default value for DFLAGS in the non-cmake buildsystem has changed from -MM to -MMD. This will break the 765 generation of depend.* files if that was done by a compiler call that relied on -MM. The new preferred way 766 to handle compilation dependencies is to additionally use $(DFLAGS) when compiling the object files (.o) and 767 to include the generated .d files in the Makefile, see also "Build system / Makefile" below. 768 769Unit tests 770---------- 771 - new unit test for treemodel. 772 773Testing 774------- 775 776 - fixed an issue that may have lead to wrong status reports in the evaluation scripts 777 778Build system 779------------ 780 781### Cmake 782 783- avoid problem with doubly defined object together with CPLEX 784 785### Makefile 786 787- Removed static object compilation dependency files (depend.*). If using a GCC compatible compiler, then dependency 788 files are now dynamically created and updated during build. The new dependency files (*.d) reside next to each object 789 file (.o) in the corresponding obj subdirectory. 790- added support for building against Ipopt >= 3.13 791- unify compiler switches for Intel compiler and avoid problem with doubly defined object together with CPLEX 792 793Fixed bugs 794---------- 795 796- fix and improve memory handling in symmetry computation 797- fix shown number of applied conflicts in solving statistics 798- fix wrongly skipping strong branching call and using old information if LP was solved with 0 iterations 799- fix minor bug in cut score calculation 800- fixed several bugs related to rounding locks of variables not being updated correctly 801- small fix in cons_varbound.c to skip changing bounds of multi-aggregated variables in separation callback 802- fixed issue in SCIPtightenVar* and SCIPinferVar* that occurs for small bound changes 803- fixed rejecting minimal boundchange that changed sign of variable, even though SCIPisLb/UbBetter approved it 804- fixed issue in generateCutNonConvex() which is triggered when adding quadratic constraints during the solving process 805- fixed bug in freeing the reoptimization data if no problem exists 806- fixed bug in SCIPreoptReleaseData() when freeing all stored constraints 807- fixed bug when freeing the transformed problem via interactive shell if reoptimization is enabled 808- fixed two issues related to (near-)redundant logicor constraints in presolving 809- fixed counting of aggregations in XOR constraint handler 810- fixed handling of unbounded solutions 811- fixed update of LP size information when an LP error occured during probing 812- handle special case of variable bound constraints during aggregating variables 813- tighten sides of linear constraints before trying to upgrade them to more specialized constraints (knapsack, logic-or etc.) when calling SCIPupgradeConsLinear() 814- fixed an issue in repair heuristic in the case of loose (noncolumn) variables 815- allow user to correctly set heuristics/alns/(un)fixtol 816- fixed an issue in heur_completesol which is triggered during bound widening of unbounded continuous variables 817- fixed bug in cons_indicator if addopposite is true 818- fixed bug in sepa_disjunctive: treat case that conflictgraph is empty 819- added safety check in conversion to rational number to avoid overflow 820- fixed bug in interval evaluation with power-operator in certain situations 821- fixed behavior of SCIPmatrixCreate() regarding memory management and column generation 822- SCIPmatrixCreate() returns complete=FALSE when locks do not add up 823- fixed bug in sepa_oddcylce when variables are fixed 824- fixed numerical issues related to tighter constraint sides in varbound constraint handler 825- fixed update of watchedvars in logicor constraint handler in case of a restart during the tree 826- fixed treatment of multi-aggregated variables in logicor constraint handler 827- handle special case of redundant implications 828- fixed numerical issue related to almost-0-values in pseudosolution conflict analysis 829- fixed numerical issue related to very large greatest common dividers in linear constraint handler 830- avoid using implications on multiaggregated variables when propagating implications 831- fixed creation of (Lagrangian) variable bounds in the OBBT propagator 832- fixed sorting of primal solutions 833- fixed cleaning of clean buffer in conflict analysis 834- avoid probing on variables with huge bounds in shift and propagate heuristic 835- fix issue in printing solutions for variables that have been added by the dual sparsify presolver 836- fix issue related to fixing redundant logic-or constraints after presolving 837- fixed bug when parsing logic-or and and-constraints 838- fixed wrong assert in updateLazyBounds() 839- fixed bug in pricestore, which resulted in too many problem variables being added 840- fixed bug in cons_knapsack where weight of clique was not reset after an infeasibility was detected 841- fixed bug in presol_inttobinary which did not take into account that the aggregation could be rejected due to numerics 842- fixed bug in debug solution mechanism in connection to variables created by presol_inttobinary 843- fixed wrong indexing while undoing the implications from a redundant variable in SCIPshrinkDisjunctiveVarSet 844- redundancy checks in SCIPnodeAddBoundinfer now take a possible change to an active variable into account 845- fixed adding already added quadratic rows to NLP relaxation during solve 846- fixed issue related to variable locks in the varbound constraint handler 847- fixed bug in the quadratic constraint handler when changing infinite constraint sides 848- fixed sorting of variables in linear constraint handler 849- added additional checks to ensure numerical stability of dual proofs 850- fixed a case when activities of a linear constraint got unreliable but where still used for reductions 851- ensure that lhs <= rhs for linear constraints (without tolerances) 852- make handling of read errors in SCIPfread() consistent between version with and without ZLIB 853- correctly drop variable events in cons_indicator in restart 854- fixed bug in cons_orbitope with upgrading of orbitope constraints 855- additional checks in some presolvers for time limit being exceeded 856- fixed bug in presolving of cons_varbound with multi-aggregated variables 857- improve numerics in conflict analysis by using double-double arithmetic 858- fixed bound acceptance condition to avoid inconsistencies 859- fixed numerics in pseudoobj propagator by using double-double arithmetic 860 861Miscellaneous 862------------- 863 864- modified display column for memory usage ("mem"), which reports the memory usage most of the time, but shows the creator name 865 (heuristic, relaxation handler, LP relaxation, strong branching, pseudo solution) of every new incumbent solution. Together with this change, 866 heuristic display characters have been unified to represent the type of the heuristic 867 (diving, Large neighborhood search, propagation, etc.), see also type_heur.h. 868- added assert that ensures that the locks of a variable have been decreased to 0 when it is freed 869- added more output for completing a partial solution 870- checks in debug mode that clean buffer memory is really clean when being freed are now disabled by default 871- don't compute symmetries if reoptimization is enabled 872- prefer integral values when fixing an almost-fixed continuous variable in the trivial presolver 873- changed the name of the variable that is added by the OSiL reader to represent the quadratic or nonlinear parts of the objective function 874- SCIP_EXPORT is now defined as __attribute__((__visibility__("default"))) if GCC and no SCIP config header is used 875 876@page RN60 Release notes for SCIP 6.0 877 878@section RN602 SCIP 6.0.2 879************************* 880 881Features 882-------- 883 884- The abspower constraint handler now passes more accurate convexity 885 information to the NLP relaxation. 886 887Examples and applications 888------------------------- 889 890- added parsing functionality for optcumulative constraints in CIP format 891 892Interface changes 893----------------- 894 895### Interfaces to external software 896 897- Updated the Mosek LP solver interface to support Mosek 9.0. 898 899Build system 900------------ 901 902### Cmake 903 904- new target to 'doc' to build documentation 905- ctests now fail if parameter file not found 906- add flag STATIC_GMP and improve GMP find module 907- remove non-API methods from library (API methods use new macro SCIP_EXPORT) 908- increase minimal required CMake version to 3.3 909- correct paths and dependency information when installing SCIP 910 911Fixed bugs 912---------- 913- fixed SCIP-Jack presolving bug that could lead to wrong results for Steiner arborescence problems 914- fixed wrong unboundedness result in case not all constraints were already in the LP and enforcement was 915 skipped because an optimal solution was found 916- fixed wrong enforcement of constraints in the disjunction constraint handler 917- fixed wrong behavior of concurrent solve ignoring initial solutions 918- fixed bug in concurrent solve when problem was already solved in presolving 919- aggregate non-artificial integer variable for XOR constraints with two binary variables and delete constraint 920- copy the objective offset when copying the original problem 921- fixed bug in SCIPlpiGetBInvARow in lpi_cpx using wrong size of resulting vector 922- fixed quadratic runtime behavior in sepa_aggregation 923- fixed statistics of separators 924- improve numerical stability in varbound constraint handler by using double-double arithmetic 925- fixed bug in propagation of dual proofs 926- fixed bugs that arise for multiaggregated indicator variables by disallowing multiaggregation for them 927- improve numerical stability in SCIPcomputeBilinEnvelope* by using double-double arithmetic 928- fixed bug related to releasing pending bound changes in tree.c 929- set STD FENV_ACCESS pragma to on in code that changes floating-point rounding mode 930- disable GCC optimizations in main interval arithmetic code to prevent wrong optimizations 931- fixed wrong assert in cons_xor concerning the variable type 932- fixed different behavior of SCIPisLbBetter and SCIPisUbBetter between having NDEBUG defined or not 933- correctly handle bound disjunctions in symmetry detection 934- fixed issue in reliability branching related to the LP error flag not being reset 935- fixed treatment of near-infinite bounds in shiftandpropagate's problem transformation 936- fixed handling of infinite values in SCIPcomputeHyperplaneThreePoints() 937- fixed comparisons of infinite values in heur_intshifting.c and heur_shifting.c 938- fixed bug related to updating unprocessed cuts in the cutpool 939- fixed bug related to enabling quadratic constraints during `CONSINITLP` 940- add missing SCIP_EXPORT for functions used by GCG 941- fixed memory leak and wrong initialization for trival cases in cons_symresack.c 942- fixed bug with upgrading to packing/partitioning orbitopes 943- fixed bug with the status while upgrading in presol_symbreak.c 944- fixed wrong stage while clearing the conflict store 945- fixed behavior of SCIPfixVar() by setting infeasible pointer to TRUE if fixval lies outside variable domain 946- allow tightenVar() in SCIP_STAGE_PROBLEM stage 947- fixed bug in cumulative constraint handler when separating the LP solution 948- fixed issues with integer overflow in cumulative constraint handler 949- fixed bug where the convexity of Benders' decomposition subproblems was checked even when users defined subproblem 950 solving methods. Now, as per the documentation, the user must explicitly state whether the subproblem is convex 951- fixed wrong indexing in heur_dualval 952- fixed issue with basis status in SoPlex LPi 953 954Miscellaneous 955------------- 956 957- statistics now output primal/dual bounds if objective limit is reached 958- memory check in debug mode is now disabled by default 959- message is now provided to the user to inform that automatic Benders' auxiliary variable lower bound computations are 960 not activated when user defined subproblem solving methods are present 961- corrected documentation of the primalgap in SCIP; describe when it will be infinite 962 963@section RN601 SCIP 6.0.1 964************************* 965 966Features 967-------- 968 969- when using a debug solution every (multi-)aggregation will be checked w.r.t. this solution 970 971Performance improvements 972------------------------ 973 974- try greedy solution first before solving knapsack exactly using dynamic programming in SCIPsolveKnapsackExactly, 975 compute greedy solution by weighted median selection. 976- don't consider implied redcost by default in the reduced cost propagator 977 978Interface changes 979----------------- 980 981### Deleted and changed API methods and macros 982 983- The preprocessor macro NO_CONFIG_HEADER now needs to be defined when 984 including SCIP header files from a SCIP build or installation that 985 has been build via the Makefile-only build system. 986 987- The following preprocessor macros have been renamed: 988 WITH_ZLIB to SCIP_WITH_ZLIB, WITH_GMP to SCIP_WITH_GMP, WITH_READLINE 989 to SCIP_WITH_READLINE, NO_SIGACTION to SCIP_NO_SIGACTION, NO_STRTOK_R 990 to SCIP_NO_STRTOK_R, ROUNDING_FE to SCIP_ROUNDING_FE, ROUNDING_FP to 991 SCIP_ROUNDING_FP, ROUNDING_MS to SCIP_ROUNDING_MS. Note, however, that 992 the names of macros NO_RAND_R and NO_STRERROR_R have not been changed 993 so far. 994 995### New API functions 996 997- SCIPhashmapInsertInt(), SCIPhashmapSetImageInt(), and SCIPhashmapGetImageInt() to use integer values as images in hashmaps 998 999### Command line interface 1000 1001- warn about coefficients in MPS files with absolute value larger than SCIP's value for infinity 1002 1003### Changed parameters 1004 1005- default clock type for timing is now wallclock 1006 1007Unit tests 1008---------- 1009 1010- added unit tests for exact knapsack solving and (weighted) median selection algorithms 1011 1012Build system 1013------------ 1014 1015### Cmake 1016 1017- add missing GMP dependency when compiling with SYM=bliss 1018- add DL library when linking to CPLEX to avoid linker errors 1019- new config.h header defining the current build configuration, e.g. SCIP_WITH_GMP 1020 1021Fixed bugs 1022---------- 1023 1024- fixed handling of weights in cons_sos1 and cons_sos2 (NULL pointer to weights) 1025- fixed handling of unbounded LPs in SCIP and in several LPIs; added heuristic method to guess solution 1026- the STO reader is capable of handling scenarios defined using lower case "rhs" 1027- fixed OPB reader for instances without explicit plus signs 1028- correct dual solution values for bound constraints 1029- fixed recognition of variable with only one lock in cons_bivariate, cons_quadratic, and cons_nonlinear 1030- fixed update of constraint violations in solution repair in cons_bivariate, cons_quadratic, and cons_nonlinear 1031- print error message and terminate if matrix entries of a column are not consecutive in mps format 1032- fixed incorrect handling of fixed variables when transfer of cuts from LNS heuristic for Benders' decomposition 1033- fix returning local infeasible status by Ipopt interface if Ipopt finds problem locally infeasible 1034- skip attempt to apply fixings in linear constraint handler during solving stage as LP rows cannot change anymore 1035- fixed bug when reading >= indicator constraints in MPS format 1036- fix issue with nodes without domain changes if we ran into solution limit in prop_orbitalfixing 1037- fixed unresolved reference to CppAD's microsoft_timer() function on builds with MS/Intel compilers on Windows 1038- ignore implications added through SCIPaddVarImplication() that are redundant to global bounds also in the 1039 special case of an implication between two binary variables; also, use implications instead of cliques in the case 1040 of a binary implied variable with nonbinary active representative 1041- fixed bug with aggregated variables that are aggregated in propagation of cons_sos1 1042- fixed some special cases in SCIPselect/SCIPselectWeighted methods 1043- relaxed too strict assertion in Zirounding heuristic 1044- fixed the upgrade routine to XOR constraints: aggregate integer variable if its coefficient has the wrong sign 1045- fixed handling of nonartificial parity variables when deleting redundant XOR constraints 1046- earlier deletion of trivial XOR constraints (at most 1 operator left) 1047- fixed wrong hashmap accesses and added sanity check for the correct hashmap type 1048- avoid copying of unbounded solutions from sub-SCIPs as those cannot be checked completely 1049- corrected the output of the first LP value in case of branch-and-price 1050- fixed possible integer overflow, which led to wrong conclusion of infeasibility, in energetic reasoning of cons_cumulative.c 1051 1052Miscellaneous 1053------------- 1054- do not scale linear constraints to integral coefficients 1055 1056@section RN600 SCIP 6.0.0 1057************************* 1058 1059Features 1060-------- 1061 1062- new diving heuristic farkasdiving that dives into the direction of the pseudosolution and tries to construct Farkas-proofs 1063- new diving heuristic conflictdiving that considers locks from conflict constraints 1064- restructuring of timing of symmetry computation that allows to add symmetry handling components within presolving 1065- `lp/checkstability` is properly implemented for SoPlex LPI (spx2) 1066- new branching rule lookahead that evaluates potential child and grandchild nodes to determine a branching decision 1067- limits on the number of presolving rounds a presolver (maxrounds) or propagator/constraint handler (maxprerounds) 1068 participates in are now compared to the number of calls of the particular presolving method, not the number of 1069 presolving rounds in general, anymore 1070- new miscellaneous methods for constraints that have a one-row linear representation in pub_misc_linear.h 1071- a Benders' decomposition framework has been added. This framework provides the functionality for a user to solve a 1072 decomposed problem using Benders' decomposition. The framework includes classical optimality and feasibility cuts, 1073 integer optimality cuts and no-good cuts. 1074- add statistic that presents the number of resolves for instable LPs 1075- new readers for stochastic programming problems in SMPS format (reader_sto.h, reader_smps.h) 1076 1077Performance improvements 1078------------------------ 1079 1080- cuts generated from certain quadratic constraints with convex feasible region are now global 1081- performance improvements for Adaptive Large Neighborhood Search heur_alns.c 1082 + all neighborhoods now start conservatively from maximum fixing rate 1083 + new default parameter settings for bandit selection parameters 1084 + no adjustment of minimum improvement by default 1085- improved bound tightening for some quadratic equations 1086- constraint handler checking order for original solutions has been modified to check those with negative check priority 1087 that don't need constraints after all other constraint handlers and constraints have been checked 1088- deactivate gauge cuts 1089 1090Examples and applications 1091------------------------- 1092 1093- new example `brachistochrone` in CallableLibrary examples collection; this example implements a discretized model to 1094 obtain the trajectory associated with the shortest time to go from point A to B for a particle under gravity only 1095- new example `circlepacking` in CallableLibrary examples collection; this example models two problems about packing 1096 circles of given radii into a rectangle 1097- new price-and-branch application for the ringpacking problem 1098- new stochastic capacitated facility location example demonstrating the use of the Benders' decomposition framework 1099 1100Interface changes 1101----------------- 1102 1103### New and changed callbacks 1104 1105- added parameter locktype to `SCIP_DECL_CONSLOCK` callback to indicate the type of variable locks 1106 1107### Deleted and changed API methods 1108 1109- Symmetry: 1110 + removed function SCIPgetTimingSymmetry() in presol_symmetry.h since this presolver does not compute symmetries independent 1111 of other components anymore 1112 + additional argument `recompute` to SCIPgetGeneratorsSymmetry() to allow recomputation of symmetries 1113 1114- Random generators: 1115 + the seed of SCIPinitializeRandomSeed() is now an unsigned int 1116 + the seed of SCIPsetInitializeRandomSeed() is now an unsigned int and it returns an unsigned int 1117 + new parameter for SCIPcreateRandom() to specify whether the global random seed shift should be used in the creation of 1118 the random number generator 1119 1120- Miscellaneous: 1121 + additional arguments `preferrecent`, `decayfactor` and `avglim` to SCIPcreateBanditEpsgreedy() to choose between 1122 weights that are simple averages or higher weights for more recent observations (the previous default). 1123 The last two parameters are used for a finer control of the exponential decay. 1124 + functions SCIPintervalSolveUnivariateQuadExpression(), SCIPintervalSolveUnivariateQuadExpressionPositive(), and 1125 SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar() now take an additional argument to specify already 1126 existing bounds on x, providing an entire interval ([-infinity,infinity]) gives previous behavior 1127 1128### New API functions 1129 1130- SCIPintervalSolveUnivariateQuadExpressionNegative() 1131- SCIPvarGetNLocksDownType() and SCIPvarGetNLocksUpType() 1132- SCIPaddConsLocksType() 1133- SCIPconsIsLockedTypePos(), SCIPconsIsLockedTypeNeg(), SCIPconsIsLockedType(), SCIPconsGetNLocksTypePos() and SCIPconsGetNLocksTypeNeg() 1134- SCIPstrncpy(), a safe version of strncpy() 1135 1136### Changed parameters 1137 1138- Removed parameters: 1139 - `heuristics/alns/stallnodefactor` as the stall nodes are now controlled directly by the target node limit within the heuristic 1140 - `presolving/symmetry/computepresolved` since this presolver does not compute symmetries independent of other components anymore 1141 - `separating/maxincrounds` 1142 1143### New parameters 1144 1145- `lp/checkfarkas` that enables the check of infeasibility proofs from the LP 1146- `heuristics/alns/unfixtol` to specify tolerance to exceed the target fixing rate before unfixing variables, (default: 0.1) 1147- `propagating/orbitalfixing/symcomptiming` to change the timining of symmetry computation for orbital fixing 1148- `lp/alwaysgetduals` ensure that the dual solutions are always computed from the recent LP solve 1149- `display/relevantstats` indicates whether the small relevant statistics are displayed at the end of solving 1150- `propagating/orbitalfixing/performpresolving` that enables orbital fixing in presolving 1151- `presolving/symbreak/addconsstiming` to change the timining of symmetry computation for symmetry handling inequalities 1152- `propagating/orbitalfixing/enabledafterrestarts` to control whether orbital fixing is enabled after restarts 1153- `benders/*` new submenu for Benders' decomposition related settings. This includes the settings related to the 1154 included Benders' decompositions and the general Benders' decomposition settings. 1155- `benders/<decompname>/benderscuts/*` submenu within each included Benders' decomposition to control the Benders' 1156 decomposition cuts. The cuts are added to each decomposition separately, so the setting are unique to each 1157 decomposition. 1158 1159### Data structures 1160 1161- new enum `SCIP_LOCKTYPE` to distinguish between variable locks implied by model (check) constraints (`SCIP_LOCKYPE_MODEL`) 1162 and variable locks implied by conflict constraints (`SCIP_LOCKYPE_CONFLICT`) 1163- expression interpreter objects are now stored in the block memory 1164 1165Deleted files 1166------------- 1167 1168- removed presolving plugin presol_implfree 1169- separated scip.c into several smaller implementation files scip_*.c for better code overview; scip.c was removed, 1170 but the central user header scip.h remains, which contains includes of the separated headers 1171 1172Fixed bugs 1173---------- 1174 1175- fixed bug in gcd reductions of cons_linear regarding an outdated flag for variable types 1176- fixed bug in heur_dualval regarding fixing routine for integer variables 1177- suppress debug solution warnings during problem creation stage 1178- fixed check for activated debugging solution in components constraint handler 1179- fixed potential bug concerning solution linking to LP in SCIPperformGenericDivingAlgorithm() 1180- fixed reward computation in ALNS on continuous, especially nonlinear, problems 1181- fixed bug in freeing reoptimization data if problem was solved during presolving 1182- fixed check of timing in heur_completesol 1183- fixed wrong propagation in optcumulative constraint handler 1184- fixed non-deterministic behavior in OBBT propagator 1185- don't disable LP presolving when using Xpress as LP solver 1186- fixed possible `NULL` pointer usage in cons_pseudoboolean 1187- ensured that SCIPgetDualbound() returns global dual bound instead of the dual bound of the remaining search tree 1188- fixed rare division-by-zero when solving bivariate quadratic interval equation 1189- use total memory for triggering memory saving mode 1190- fix parsing of version number in the CMake module for Ipopt 1191- fixed handling of implicit integer variables when attempting to solve sub-MIP in nlpdiving heuristic 1192- added workaround for bug when solving certain bivariate quadratic interval equations with unbounded second variable 1193- fixed bug with releasing slack variable and linear constraint in cons_indicator 1194- fixed problem when writing MPS file with indicator constraints with corresponding empty linear constraints 1195- fixed bug in heur_vbound triggered when new variables were added while constructing the LP 1196- fixed bug with unlinked columns in SCIProwGetLPSolCutoffDistance() 1197 1198Miscellaneous 1199------------- 1200 1201- updated CppAD to version 20180000.0 1202- remove LEGACY mode, compiler needs to be C++11-compliant 1203 1204@page RN50 Release notes for SCIP 5.0 1205 1206@section RN501 SCIP 5.0.1 1207************************* 1208 1209Features 1210-------- 1211 1212- SCIP executable handles the `SIGTERM` signal. If the process receives a `SIGTERM`, SCIP terminates the solution process with a 1213 new `SCIP_STATUS` code `SCIP_STATUS_TERMINATE` and displays all relevant statistics before exiting. 1214- add number of conflict constraints found by diving heuristics to statistics 1215- allow output of lower bounds for visualization 1216- added symmetry detection for linking constraints 1217 1218Performance improvements 1219------------------------ 1220 1221- disable disaggregation of quadratic constraints by changing the default for `constraints/quadratic/maxdisaggrsize` to 1 1222 (disaggregation can still be very helpful on some instances, but also seems hurtful on others) 1223 1224- Cuts: 1225 - increased threshold when to scale up cuts that are generated by nonlinear constraint handlers 1226 - test additional scaling factors in CMIR cut generation heuristic 1227 - cleaned up implementation of the cut selection procedure and added new cut quality measure 1228 - use random tie-breaking in cut selection 1229 1230Interface changes 1231----------------- 1232 1233### New API functions 1234 1235- new methods SCIPtryTerminate() and SCIPterminated() in scip/interrupt.h for handling of SIGTERM signals. 1236- new method SCIPselectCuts() to run SCIP's cut selection procedure on a given array of cuts 1237 1238### Changed parameters 1239 1240- rename parameter `constraints/orbisack/orbisack/coverseparation` to `constraints/orbisack/coverseparation` 1241 1242### New parameters 1243 1244- `visual/displb` that enables output of lower bounds for visualization 1245- `presolving/symmetry/displaynorbitvars` (whether we display the number of affected variables in the statistics) 1246- `separating/efficacyfac` to change the weight of the efficacy in cut score calculation 1247- `separating/dircutoffdistfac` to change the weight of the directed cutoff distance in cut score calculation 1248 1249### Data structures 1250 1251- new `SCIP_STATUS` code `SCIP_STATUS_TERMINATE` in scip/interrupt.h for handling of SIGTERM signals. 1252 1253Unit tests 1254---------- 1255 1256- expanded unit tests of the lpis 1257- added check to unit tests that problem is not solved after every change 1258 1259Fixed bugs 1260---------- 1261 1262- fixed LP status to unsolved when marking LP to be resolved if objective limit has changed 1263- copy parameter settings to sub-SCIPs in SCIPcopyLargeNeighborhoodSearch() also when copying only LP rows 1264- fixed a check for fixed variables in Binpacking example 1265- generate deprecation warnings when using SCIPaddCut 1266- fix bug in sepa_gomory if cut is a bound change 1267- fixed handling of infinite bounds in cons_sos1 1268 1269- Constraints: 1270 - fixed bug while scaling linear constraints 1271 - don't delete conflict constraints that were transformed into model constraints during a restart 1272 - fixed treatment of variable aggregations in knapsack constraint handler that led to wrong propagations 1273 1274- LP Interface: 1275 - fixed LPI status after changing objective in lpi_cpx, lpi_grb, lpi_xprs, lpi_msk 1276 - fixed and unified asserts in LPIs 1277 - retrieve interior solution instead of (possibly non-existing) basic solution from mosek after using barrier without crossover in lpi_msk 1278 - fixed bug with `NULL` pointer handling in LPIs 1279 1280- Heuristics: 1281 - fixed wrong cast in LP iteration limit computation in proximity search heuristic 1282 - fixed check for time limit in heur_nlpdiving 1283 - improved numerics and fixed stop criterion in zirounding heuristic 1284 1285@section RN500 SCIP 5.0.0 1286************************* 1287 1288Features 1289-------- 1290 1291- new numerical solution violations get printed when checksol is called 1292- added analysis of the clique table which identifies possible aggregations via the search for 1293 strongly connected components and may detect infeasible assignments on the way 1294- added macros to do computations with a higher precision by using double-double arithmetic 1295- extended conflict analysis by analyzing dual solutions of boundexceeding LPs 1296- revised internal debugging mechanism to check against a user given debug solution (debug.h) 1297 1298- Heuristic: 1299 - add new heuristic MPEC that solves a MPEC reformulation of a mixed-binary nonlinear problem by regularized NLP reformulations 1300 - new primal heuristic ALNS that orchestrates eight different LNS heuristics adaptively 1301 using algorithms for the multi-armed bandit problem 1302 - three bandit selection algorithms to face sequential decision problems under uncertainty 1303 1304- Presolving and symmetry: 1305 - added presol_symmetry.c for computing and storing symmetry information of a MIP 1306 - added presol_symbreak.c to detect special symmetry structures and to add symmetry handling constraints 1307 - SCIP can now automatically detect and compute symmetries in MIPs (if a graph automorphism code is linked in) 1308 - added cons_symresack.c to handle permutation symmetries in a binary programs via inequalities and propagation 1309 - added cons_orbisack.c to handle special permutation symmetries in a binary programs via inequalities and propagation 1310 - cons_orbitope.c can now handle full orbitopes as well 1311 1312- Propagator: 1313 - added new propagator orbital fixing 1314 - utilizing linear inequalities to compute stronger linearizations for bilinear terms; the inequalities are computed in 1315 the OBBT propagator 1316 1317- Cuts: 1318 - added API for aggregating rows for generating cuts which uses double-double arithmetic internally 1319 - added filtering of parallel cuts in the cut pool 1320 1321- Plugins: 1322 + added new plugin type `table` for adding user-defined statistics tables 1323 + new presolving plugin presol_sparsify that tries to cancel nonzero coefficients in linear constraints by adding 1324 multiples of linear equalities 1325 1326Performance improvements 1327------------------------ 1328 1329- use disjoint set to reduce peak memory usage and time to compute of clique table connectedness information 1330- add and use RESTRICT macro for some pointers 1331- improved the implementation of SCIPvarGetActiveRepresentatives 1332- speed-up reverse propagation 1333- removed bestrelaxsol and directly access relaxation solution instead to decrease overhead when using relaxation handlers 1334- for fast presolving emphasis, disable use of implications in logicor presolving 1335- use limit on the total number of nonzeros added to the clique table during the greedyCliqueAlgorithm of cons_knapsack.c 1336- revised disaggregation of quadratic constraints: the number of created constraints can now be controlled and the 1337 disaggregated constraints are scaled in order to increase numerical accuracy 1338- disabled reformulation of products of a binary variable with a linear term that does not solely involve binary variables 1339- speed up creation of LP in the computation of relative interior points 1340- improved dual ray analysis 1341- drop events of disabled linear constraints to reduce event processing effort 1342 1343- Separation: 1344 - new implementation of zerohalf separator 1345 - enabled cutting plane separation in the tree 1346 - improved cut selection and management 1347 - improved cut post-processing: apply coefficient tightening, enforce maximal dynamism 1348 1349- Heuristics: 1350 - improved selection of rows in CMIR aggregation heuristic 1351 - generate lifted flowcover cuts in CMIR cut generation heuristic 1352 - faster implementation of CMIR cut generation heuristic 1353 - use LP solution polishing during probing and diving mode to activate it during many primal heuristics; remains disabled 1354 during strong branching and OBBT 1355 - improved versions of the clique and variable bound pre-root heuristics that are often able to fix many more variables 1356 1357Interface changes 1358----------------- 1359 1360### New and changed callbacks 1361 1362- New types: 1363 - added new abstract selection algorithm `SCIP_BANDIT` together with callbacks 1364 - added new types for symmetry handling 1365 1366- LP interface: 1367 - dropped NLP termination status `SCIP_NLPTERMSTAT_UOBJLIM` 1368 1369- NLP callbacks: 1370 - added parameter `objval` to `SCIP_DECL_NLPIGETSOLUTION` for returning the optimal objective value (can be set to `NULL`) 1371 1372- Separation callbacks: 1373 - added parameter `allowlocal` to `SCIP_DECL_SEPAEXECLP` and `SCIP_DECL_SEPAEXECSOL` to switch generation of locally valid cuts 1374 - added parameter `dstatssize` to `SCIP_DECL_NLPIDELVARSET` and `SCIP_DECL_NLPIDELCONSSET` 1375 1376### Deleted and changed API methods 1377 1378- Branching rules: 1379 - removed parameter `allowaddcons` from SCIPselectVarPseudoStrongBranching(), SCIPselectVarStrongBranching(), and 1380 SCIPincludeBranchruleRelpscost() 1381 1382- Constraint Handlers: 1383 - generalized SCIPcreateConsOrbitope() and SCIPcreateConsBasicOrbitope() method to three orbitope types (full, partitioning, packing) 1384 1385- Cutting plane separation methods: 1386 - changed function signature of SCIPcalcMIR() 1387 - changed function signature of SCIPcalcStrongCG() 1388 - new method SCIPaddRow() to replace deprecated SCIPaddCut() 1389 - removed parameter `scaling` from SCIPgetRowprepViolation() 1390 - added parameter `allowlocal` to SCIPseparateSol() 1391 1392- LP interface: 1393 - replaced LP parameters `SCIP_LPPARAM_LOBJLIM` and `SCIP_LPPARAM_UOBJLIM` by `SCIP_LPPARAM_OBJLIM` 1394 1395- NLP interface: 1396 - SCIPnlpStatisticsCreate() and SCIPnlpStatisticsFree() now require a pointer to blockmemory as parameter 1397 - added parameter `objval` to SCIPnlpiGetSolution() of NLPIs for returning the optimal objective value (can be set to `NULL`) 1398 - added parameter `varnameslength` to SCIPexprParse() 1399 - added parameter `dstatssize` to SCIPnlpiDelVarSet() and SCIPnlpiDelConsSet() 1400 - added modifier const to `exprtree` parameter of SCIPnlpiChgExprtree() 1401 1402- Primal heuristics: 1403 - SCIPheurPassIndicator() has a new parameter which allows to pass the objective of the solution 1404 1405- Relaxator methods: 1406 - added parameter `includeslp` to SCIPmarkRelaxSolValid(), SCIPsetRelaxSolVals() and SCIPsetRelaxSolValsSol(); 1407 - removed parameter `includeslp` from SCIPrelaxCreate() and SCIPincludeRelax() 1408 - removed functions SCIPrelaxIncludesLp() and SCIPrelaxSetIncludesLp() 1409 - replaced method SCIPgetRelaxFeastolFactor() by SCIPrelaxfeastol() and added SCIPchgRelaxfeastol() 1410 1411- Misc: 1412 - changed return type of SCIPcliqueGetId() from `int` to `unsigned int` 1413 - SCIPsolveParallel() is deprecated; use SCIPsolveConcurrent() instead 1414 - removed SCIPvarGetCliqueComponentIdx(); the connectedness information of the clique table is now stored as a 1415 `SCIP_DISJOINTSET` member of the clique table and cannot be publicly accessed 1416 - added parameter `copytables` to SCIPcopyPlugins() 1417 - SCIPsolveParallel() has been deprecated, use the new method SCIPsolveConcurrent() instead 1418 - allowed SCIPgetNConss() in stage `SCIP_STAGE_INITSOLVE` 1419 1420### New API functions 1421 1422- SCIPaddRow() to replace deprecated SCIPaddCut() 1423- methods to display linear constraint classification types; use SCIPclassifyConstraintTypesLinear() 1424 after reading a problem to classify linear constraint types 1425- public methods SCIPvariableGraphBreadthFirst() and SCIPvariableGraph{Create,Free}() to 1426 perform breadth-first search on the variable constraint graph used by the GINS and ALNS heuristics 1427- SCIPsetProbingLPState() to install given LP state and/or norms at the current probing node 1428- SCIPbranchcandGetLPMaxPrio() and SCIPbranchcandGetExternMaxPrio() to query the maximal branching priority of given 1429 branching candidates; also added SCIPbranchcandGetNPrioLPCands() to access the number of LP candidates with this priority. 1430- SCIPupdateSolIntegralityViolation(), SCIPupdateSolBoundViolation(), SCIPupdateSolLPRowViolation(), 1431 SCIPupdateSolConsViolation() and SCIPupdateSolLPConsViolation() for updating numerical solution violations, as well as 1432 SCIPactivateSolViolationUpdates() and SCIPdeactivateSolViolationUpdates() for activating/deactivating violation updates globally 1433- SCIPsetSubscipDepth() to set the depth of SCIP as a copied subproblem during problem stage 1434- SCIPdivesetGetNSols() to query the number of found solutions from a diveset. 1435- SCIPnextafter() that wraps different nextafter methods to return the next representable value after a given value 1436- SCIPlinConsStats{Create,Free,GetTypeCount,GetSum}() and SCIPprintLinConsStats() to work with linear constraint classification through the C API 1437- SCIPgetRowNumIntCols() that returns the number of integer columns in a row 1438- SCIPsetSlackVarUb() to control upper bound of slack variable in cons_indicator 1439 1440- Data structures: 1441 - methods SCIPrandomCreate() and SCIPrandomFree() are no longer public and should be replaced by SCIPcreateRandom() and 1442 SCIPfreeRandom(), respectively (the new methods respect the global parameter `randomization/randomseedshift` automatically) 1443 - methods SCIPdigraphCreate() and SCIPdigraphCopy() are no longer public and should be replaced by SCIPcreateDigraph() and 1444 SCIPcopyDigraph(), respectively, which receive a \SCIP argument and are more robust towards future interface changes 1445 1446- Bilinear: 1447 - SCIPgetAllBilinearTermsQuadratic() to access data of all existing bilinear terms in quadratic constraints 1448 - SCIPaddBilinearIneqQuadratic() to propose an inequality with two variables that appear in a bilinear term 1449 - SCIPcomputeBilinEnvelope{1,2}() to compute a linearization of a bilinear term when considering at most two linear inequalities 1450 1451- Clique: 1452 - SCIPcliqueGetIndex() which returns the unique identifier for the given clique 1453 - SCIPgetNCliquesCreated() which returns the number of cliques created so far 1454 1455- Cutting plane separation methods: 1456 - SCIPisCutNew() that returns whether a cut is already present in the global cut pool 1457 - SCIPgetSepaMinEfficacy() to access separating/minefficacy(root) 1458 1459- Interfaces: 1460 - interface methods to create and use bandit algorithms implemented as SCIP core plugins 1461 - interface methods for aggregating rows and computating MIP cuts, see cuts.h 1462 - interface method SCIPsetRandomSeed() to (re)set a random number generator seed 1463 1464### Command line interface 1465 1466- new interactive shell functionality to display linear constraint classification types; 1467 use `display linclass` after reading a problem to classify linear constraint types 1468- new command line parameter `-r` to pass a nonnegative integer as random seed. 1469 1470### Interfaces to external software 1471 1472- added interface to the NLP solver WORHP 1473- added interface to the NLP solver FilterSQP 1474- added interface to graph automorphism algorithms in `src/symmetry/` (initially only to BLISS) 1475- unify handling of objective limit in LPIs by replacing LPI parameters `SCIP_LPPAR_LOBJLIM` and `SCIP_LPPAR_UOBJLIM` by 1476 `SCIP_LPPAR_OBJLIM` 1477- dropped support for MOSEK < 7.0.0.0 1478 1479### Changed parameters 1480 1481- changed and removed several parameters for zerohalf separator 1482- replaced `constraints/quadratic/disaggregate` by `constraints/quadratic/maxdisaggrsize` to bound 1483 the total number of created constraints when disaggregating a quadratic constraint 1484- new value 3 for parameter `lp/solutionpolishing` to enable LP polishing only during probing and diving mode 1485- parameter `conflict/useboundlp` has new values `d` (only dual solution analysis) and `b` (both, conflict and dual solution analysis) 1486 1487- Heuristics: 1488 - fixed typo `heuristics/completesol/maxunkownrate` has changed to `heuristics/completesol/maxunknownrate` 1489 - replaced parameter `heuristics/{clique,vbounds}/minfixingrate` by `heuristics/{clique,vbounds}/minintfixingrate` and 1490 `heuristics/{clique,vbounds}/minmipfixingrate`, which check the fixing rate before LP solving and after sub-MIP presolve 1491 1492- Separating: 1493 - parameter `separating/maxstallrounds` only applies to nodes in the tree (not the root node, anymore); use the new 1494 parameter `separating/maxstallroundsroot` for the root node 1495 - moved parameters for flowcover and cmir separators to `separating/aggregation` 1496 1497- Removed parameters: 1498 - `constraints/{abspower,bivariate,nonlinear,quadratic,soc}/scaling` 1499 - `constraints/{abspower,bivariate,quadratic,nonlinear}/mincutefficacysepa` 1500 - `constraints/{abspower,bivariate,quadratic,nonlinear}/mincutefficacyenfofac` 1501 - `constraints/soc/minefficacy` 1502 - `conflict/usemir` 1503 - `conflict/prefermir` 1504 - `heuristics/clique/{multiplier,initseed}` 1505 - `separating/feastolfac` 1506 - `separating/orthofac` 1507 - `separating/cgmip/allowlocal` (use parameter passed to separation callback instead) 1508 - `separating/{gomory,strongcg}/maxweightrange` 1509 1510### New parameters 1511 1512- `conflict/prefinfproof` (prefer infeasibility proof to boundexceeding proof) 1513- `conflict/sepaaltproofs` 1514- `constraints/indicator/maxsepanonviolated` to stop separation after separation of non violated cuts 1515- `constraints/orbisack/coverseparation` (whether orbisack cover inequalities should be separated) 1516- `constraints/orbisack/orbiSeparation` (whether facet defining inequalities for orbisack should be separated) 1517- `constraints/orbisack/coeffbound` (maximal value of coefficients in orbisack facet inequalities) 1518- `constraints/orbisack/checkpporbisack` (check whether orbisacks can be strengthened by packing/partitioning constraints) 1519- `constraints/orbisack/checkalwaysfeas` (whether conscheck returns always `SCIP_FEASIBLE`) 1520- `constraints/orbitope/checkpporbitope` (check packing/partitioning orbitopes) 1521- `constraints/orbitope/sepafullorbitope` (separate full orbitopes) 1522- `constraints/orbitope/checkalwaysfeas` (whether conscheck returns always `SCIP_FEASIBLE`) 1523- `constraints/quadratic/{usebilinineqbranch,minscorebilinterms,bilinineqmaxseparounds}` 1524- `constraints/quadratic/disaggrmergemethod` to change the strategy of how to merge independent blocks of quadratic constraints 1525- `constraints/quadratic/mincurvcollectbilinterms` to change the minimal curvature of constraints 1526 to be considered when returning bilinear terms to other plugins 1527- `constraints/quadratic/binreformbinaryonly` to disable reformulation of products of binary and non-binary variables 1528- `constraints/symresack/ppsymresack` (check whether symresacks can be strengthend by packing/partitining constraints) 1529- `constraints/symresack/checkalwaysfeas` (whether conscheck returns always `SCIP_FEASIBLE`) 1530- `expbackoff` to all separators which increases the frequency exponentially over the depth in the tree 1531- `heuristics/completesol/{beforepresol,maxlpiter,maxcontvars}` 1532- `heuristics/{clique,vbounds}/maxbacktracks` to limit the number of backtracks in the fix-and-propagate phase 1533- `heuristics/{clique,vbounds}/uselockfixings` to enable fixing of additional variables based on variable locks 1534- `heuristics/vbounds/{feasvariant,tightenvariant}` to specify the fixing variants used by the vbounds heuristic 1535- `lp/refactorinterval` to change the refactorization interval of the LP solver 1536- `misc/debugsol` to specify a debug solution that should be checked during the solve 1537- `misc/usesymmetry` to determine whether symmetry handling should be used 1538- `presolving/symbreak/conssaddlp` (whether symmetry handling inequalities should be added to the LP) 1539- `presolving/symbreak/addsymresacks` (whether symresacks should be used to handle symmetries) 1540- `presolving/symbreak/computeorbits` (whether symmetry orbits should be computed) 1541- `presolving/symbreak/detectorbitopes` (whether it should be checked if some symmetries can be handled by orbitopes) 1542- `presolving/symmetry/computepresolved` (Whether symmetries are computed after presolving) 1543- `presolving/symmetry/maxgenerators` (maximal number of generators generated by symmetry detection) 1544- `presolving/symmetry/checksymmetries` (whether validity of computed symmetries should be verified) 1545- `propagating/obbt/{itlimitfactorbilin,minnonconvexity,createbilinineqs}` 1546- `propagating/vbounds/minnewcliques` to specify the minimum number of new cliques to trigger another clique table analysis 1547- `propagating/vbounds/{maxcliquesmedium,maxcliquesexhaustive}` to limit the number of cliques relative to the 1548 number of binary variable for performing clique table analysis 1549- `separating/maxincrounds` 1550- `separating/maxlocalbounddist`, `separating/maxcoefratio` and `separating/intsupportfac` 1551 1552### Data structures 1553 1554- new type `SCIP_Shortbool` (equal to uint8_t) for storing Boolean values in a more compact manner 1555- new disjoint set data structure `SCIP_DISJOINTSET` to incrementally update connectedness information for a graph on nodes {0,...,n-1} 1556- new red black tree data structure defined in `src/scip/rbtree.{c,h}` 1557- new object `SCIP_LINCONSSTATS`, see type_cons.h, to work with linear constraint classification through the C API 1558- added new type `SCIP_TABLE` together with callbacks to output SCIP statistics 1559 1560Unit tests 1561---------- 1562 1563- added several tests for the LP interface 1564- added tests that cover nonempty linear constraint classification types 1565- added tests for the double double arithmetic, the new red black tree data structure, the nlpi, obbt, interval arithmetics, 1566 symmetry computation, objective function changes in probing, computing envelopes of bilinear function, relaxation enforcement 1567 1568Build system 1569------------ 1570 1571- added interface to the NLP solver WORHP; set `WORHP=true` in order to link to WORHP 1572- added interface to the NLP solver FilterSQP; set `FILTERSQP=true` in order to link to FilterSQP 1573 1574### Cmake 1575 1576- added support for sanitizers in debug mode and options SANITIZE_ADDRESS, SANITIZE_MEMORY, SANITIZE_UNDEFINED, SANITIZE_THREAD 1577- added option SYM to specify which graph automorphism package (bliss, none) should be used, if available 1578- disable non-standard compliant floating point optimizations in combination with intel compilers 1579- improve Visual Studio compilation 1580- only accept IPOPT version 3.12.0 or higher 1581- preserve correct rpath in library (e.g. path to libipopt) when installing 1582 1583### Makefile 1584 1585- new flag `DEBUGSOL={true,false}` to enable checks against a user given debug solution 1586- added flag SYM to specify which graph automorphism package (bliss, none) should be used 1587- default value for ZIMPL in the Makefile is now `false` 1588 1589Fixed bugs 1590---------- 1591 1592- fix wrong statistic display of diving leaf solutions 1593- fixed order of SCIPcalcCliquePartition() in corner case where no cliques are available 1594- fix treatment of infinite lower bound in proximity objective cutoff 1595- fixed minor issue in expression graph simplification 1596 1597- Separator: 1598 - fix linear knapsack relaxation during separation if a binary variable does not have a solution value in [0,1]. 1599 - fixed potential ressource leaks in SCIPsolveLinearProb(), expr.c, sepa_eccuts, cons_cumulative.c, cons_nonlinear.c 1600 - fixed bug in cons_orbitope.c, where wrong terminating index in separation of SCIs was used 1601 - fixed wrong mapping of permuted basis indices in gomory separator 1602 - fixed integer objective separator for objective scales < 1 1603 1604- Presolver: 1605 - fixed numerical issues in boundshift presolver when aggregating integer variables 1606 - fixed aggregation of variables in boundshift presolver that contain large variable bounds 1607 1608- Heuristic: 1609 - fixed bug in feasibility pump heuristic when switching on the `usefp20` parameter 1610 - fixed handling of LOOSE variables in locks heuristic 1611 - fixed creation of conflicts in clique heuristic for incomplete LPs 1612 1613- Constraints: 1614 - fixed bug in mps reader. Reader now prints `OBJSENSE` section and tries to generate unique names of constraints 1615 - fixed upgrade to a varbound constraint if abspower constraint contains a multi-aggregated variable 1616 - fixed several bugs related to hashing of constraints/rows in cutpool.c and cons_linear.c 1617 - fixed registration of almost fixed nonlinear variables in abspower constraints 1618 1619- Propagator: 1620 - fixed releasing of variables in the genvbounds propagator in case the problem could be solved during presolving of a restart 1621 - fixed numerical issues in bound widening of variable bound constraint handler and vbound propagator during conflict analysis 1622 1623@page RN40 Release notes for SCIP 4.0 1624 1625@section RN401 SCIP 4.0.1 1626************************* 1627 1628Features 1629-------- 1630 1631- added parsing functionality to cardinality constraint handler for CIP format 1632- allow to relax objective limit in reoptimization in presolved stage 1633- suppress excessive printing about numerical troubles in LP on default verblevel (high) 1634 1635Performance improvements 1636------------------------ 1637 1638- only accept passed improving solutions in heur_indicator 1639- add and use RESTRICT macro for some pointers 1640- sorting of parents and children for some expression types is now independent of memory layout 1641 1642- Constraints: 1643 - widened a bottleneck in simplifying long signomial sums in a nonlinear constraint 1644 - unified and extended code that improves numerics of cuts generated by nonlinear constraint handlers 1645 1646- Separation: 1647 - stop separation in cons_indicator after maxsepanonviolated many non violated separated cuts 1648 - improve choice of variable to enter support in separation of cons_indicator 1649 1650Interface changes 1651----------------- 1652 1653### New API functions 1654 1655- SCIPvalidateSolve() to compare solving result with an external primal and dual reference value 1656- SCIPisObjChangedProbing() to check whether the objective function has changed during probing mode 1657- SCIPgetDualSolVal() to get the dual solution value of a constraint 1658- SCIPisLPPrimalReliable() and SCIPisLPDualReliable() to check whether the current primal / dual LP solution 1659 were successfully checked for feasibility 1660 1661### Command line interface 1662 1663- New option in the interactive shell to validate the solution against an external primal and dual reference value 1664- added command line option `-o` and command `validatesolve` in interactive shell 1665 to validate the solution against an external primal and dual reference value. 1666 1667### Interfaces to external software 1668 1669- Updated and new interfaces to Mosek 8.1, GAMS and Gurobi 1670- new LP interface to Glop (Google OR tools); CMake only 1671 1672### Changed parameters 1673 1674- renamed parameter `heuristics/completesol/maxunkownrate` to `heuristics/completesol/maxunknownrate` 1675 1676Testing 1677------- 1678 1679- add options to make test target (see Makefile section) 1680 1681Build system 1682------------ 1683 1684### Cmake 1685 1686- New CMake build system alongside the usual Makefile setup 1687 1688### Makefile 1689 1690- added make options for specifying EXECUTABLE and OUTPUTDIR variables for the make test target 1691 1692Fixed bugs 1693---------- 1694 1695- fixed unintended behavior of interrupt signal handler inside SCIP copies 1696- fixed uninitialized values in SCIP's digraph data structure after calling SCIPdigraphResize() 1697- fixed issue related to SCIPcreateFiniteSolCopy() not being able to remove all infinite fixings 1698- fixed issue in SCIPcopyLimits() w.r.t. soft time limit 1699- fixed bug in dynamic resizing of hashtables and hashmaps 1700- added workaround for bug in primal simplex of cplex 12.7.1.0 occuring when attempting to solve LPs without rows without presolving 1701- fixed bug in binpacking example that might have led to doing the same branching several times 1702- fixed memory issue in binpacking example 1703- in GAMS writer, forbid also various parenthesis characters in gams symbol names 1704- added missing definition of `SCIP_UNUSED` in memory.h if def.h is not included 1705- treat reopt bugs: Avoid numerical problems with changing objective; fix check for changed objective 1706- fixed reading issue in mps reader: integer variables fixed to 0 or 1 are treated as binaries now, 1707 allowing to use them as indicator variables 1708- afternode heuristics are now called even if the node limit was reached and the solving process will be stopped 1709 after the current node 1710- fixed bug when activating probing mode with a non-empty separation storage 1711 1712- LP interfaces: 1713 - fixed guard against using old Gurobi versions in lpi_grb.c: Gurobi 7.5 was not permitted 1714 - fixed wrong handling of unboundedness status in lpi_grb.c 1715 - fixed wrong handling of row basis status in lpi_grb.c 1716 1717- Propagator: 1718 - fixed bug in shift and propagate--variable information with a negation transformation is correctly reset after backtracking 1719 - fixed bug in genvbounds propagator when applying a restart after the root node 1720 1721- Constraints: 1722 - fixed bug in varbound coefficient tightening: if a varbound constraint only contained one variable afterwards, 1723 it may have been deleted without applying the induced bound, if the change was too small, this is now forced 1724 - fixed potential wrong locks update after a varbound constraint became redundant in coefficient tightening 1725 - fixed potentially wrong cleanup of fixed variables in nonlinear constraint handler 1726 - fixed memory leak in OSiL reader when using SOS constraints 1727 1728- Solution: 1729 - improved handling of infinite values in a primal solution in quadratic and nonlinear constraints 1730 - fixed bug in computing violation and cut for certain nonlinear constraints when LP solution is slightly out of bounds 1731 - fixed debug solution check that appeared in probing mode when the objective function has changed 1732 - relaxed a too strong assert concerning solutions close to the objective limit 1733 1734@section RN400 SCIP 4.0.0 1735************************* 1736 1737Features 1738-------- 1739 1740- Introduced support for partial or infeasible user solutions, which SCIP tries to complete/repair heuristically 1741- implemented linear time methods for (weighted) median selection for joint arrays of various types 1742- added adaptive solving behavior of SCIP based on solving phases and heuristic transitions, if enabled via `solvingphases/enabled` 1743- can now solve relaxations within probing 1744- in case of multiple relaxators the best solution is saved instead of the last one 1745- added write callback for reader_bnd 1746- added possibility to use a reference value for advanced analysis of the tree search. If a finite reference value 1747 (an objective value in original objective space) is passed via misc/referencevalue, SCIP keeps track of the 1748 number of nodes exceeding the reference value and the number of early backtracks -- path switches in the tree when 1749 a child node with lower bound smaller than the reference value was available. 1750- added reading capabilities for partial solutions with extension *.mst 1751- new global shift off all random seeds (randomization/randomseedshift) and unification of all existing random seeds 1752- use new macros SCIPdebugMsg(), SCIPsetDebugMsg(), SCIPstatDebugMsg() at all places where it makes sense 1753- new random number generator in pub_misc.h 1754- add check whether variables have been released when freeing SCIP 1755- a print callback can now be specified for user expressions 1756 1757- LP Solutions: 1758 - will now enforce relaxation solution instead of lp or pseudosolution if lowerbound is better and the whole lp is included in the relaxation 1759 - new feature solution polishing to improve integrality of LP solutions 1760 1761- Constraints: 1762 - new constraint handler for cardinality constraints 1763 - added interval-evaluation of sine and cosine 1764 - allow to create constraints of constraint handlers that don't need constraints 1765 - New constraint handlers cardinality and components 1766 1767- Conflicts: 1768 - implement a storage for conflicts to have more control over active conflicts 1769 - Improved conflict analysis through central conflict pool and dual ray analysis for primal infeasible LPs; can now analyze dual 1770 unbounded rays of primal infeasible LPs 1771 1772- Presolving: 1773 - New presolvers that disaggregate SOC constraints and reformulate QP's by adding KKT conditions 1774 - new presolving step for variables contained in a single quadratic constraint with proper square coefficients 1775 - add new presolving step to disaggregate second order cone constraints 1776 - new presolving method presol_qpkktref to add the KKT conditions of a QP 1777 - implemented and extended stuffing presolving in linear constraint handler 1778 - new components constraint handler which replaces the components presolver; it searches for independent subproblems 1779 and solves small ones as sub-SCIPs during presolve, larger ones are solved alternatingly during the main solving process 1780 - new presolving timing FINAL: presolving methods with this timing are only called once after all other presolvers with timings 1781 FAST, MEDIUM and EXHAUSTIVE are finished; during this timing only reductions are allowed that are self-contained, e.g., 1782 fixing all variables and deleting all constraints of an independent component; note that reductions found in this timing 1783 do not trigger a new presolving round 1784 1785- Separation and Cuts: 1786 - can now separate perspective cuts for indicator constraints 1787 - add sepa_convexproj, a separator which projects onto convex relaxation and build gradient cuts at the projection 1788 - add sepa_gauge, a separator which computes an interior point of a convex relaxation and performs a binary search in the segment joining 1789 the interior point and the point to separate until it finds a point in the boundary of the feasible region where to build a gradient cut 1790 - changed handling of coupling constraints in cons_indicator; the cuts will not be added to the pool, but are separated by default 1791 - concurrent solving mode that allows to run multiple SCIP instances, that share solutions and global variable bounds, in parallel 1792 - Revised pseudo random number generation and introduced central random seed for all plugins 1793 1794- Heuristics: 1795 - new Graph induced neighborhood search (GINS) primal heuristic that uses neighborhoods 1796 based on distances in the variable constraint connectivity graph. 1797 In addition, the heuristic supports a rolling horizon-like procedure to solve auxiliary problems 1798 for neighborhoods with increasing distance from the starting neighborhood. 1799 - new primal heuristic LP face that tries to find an integer solution inside the optimal LP face. 1800 - new heuristic that tries to complete partial solutions 1801 - the subnlp heuristic now gives ownership of a found solution to the heuristic that constructed the starting point, if any; 1802 as a consequence, MIP heuristics may now be shown more frequently for having found a solution when solving MINLPs, even 1803 though the solutions required an additional NLP solve 1804 1805- Propagator: 1806 - add prop_nlobbt, a nonlinear optimization-based bound propagator solving two convex NLP relaxations for each variable 1807 - nodes can now be postponed; currently, this can only be triggered by BEFORELP propagation callbacks 1808 1809- Statistic: 1810 + Extended statistic output displayable via the interactive shell 1811 + new statistic computed: `Root LP Estimate` that shows the root LP best-estimate with every pseudo-cost update 1812 + added leaf statistics about LP objective limit|feasible|infeasible leaves to the statistics output and 1813 to the callable library: SCIPgetNObjlimLeaves(), SCIPgetNFeasibleLeaves(), SCIPgetNInfeasibleLeaves() 1814 + next to the number of found solution, also the number of new best solutions is now printed for each heuristic 1815 (and relaxation solutions) in the statistics in the `Primal Heuristic` section. 1816 1817Performance improvements 1818------------------------ 1819 1820- Extended the presolving timings by an additional timing FINAL for self-contained reductions 1821- Randomized tie-breaking in different parts of the code to reduce performance variability 1822- use connectedness information of the clique table to speed up the clique partitioning algorithm 1823- knapsack approximation algorithms use linear-time weighted median selection instead of sorting 1824- improved greedy solution in SCIPsolveKnapsackApproximatelyLT() for the flow cover separation 1825- reduce performance variability by using random numbers as tie-breaker for external branching candidates 1826 1827- Heuristics: 1828 - adjusted most Large Neighborhood Search heuristics such that they collect their variable fixings first in an array, 1829 and only create and populate a sub-SCIP if enough variables will be fixed. 1830 - reduce performance variability by using a small perturbation in the undercover heuristic 1831 - 1-opt heuristic can now be repeatedly executed as long as new incumbents are found 1832 1833- Constraints: 1834 - Improved and extended stuffing inside of linear constraint handler 1835 - Changed handling of coupling constraints in cons_indicator 1836 - SCIP supports constraint compression for problem copies; constraint compression denotes the immediate 1837 removal of fixed variables from constraint data at creation time to reduce memory requirements. 1838 1839- Propagation: 1840 - rewrote the propagate-and-cut-and-price loop so that successful propagations with DURINGLPLOOP timing, bound changes found by separation, 1841 and new primal solutions now trigger a new round of node solving, starting with propagation; improved tuning of propagation and heuristic timings 1842 - tuned propagation methods of several constraint handlers 1843 - make more use of SCIPmarkConsPropagate() to mark constraints for propagation and improved the internal handling of marked constraints 1844 - improve propagation of absolute-value expression in the case that the sign of the argument is fixed 1845 1846Interface changes 1847----------------- 1848 1849### New and changed callbacks 1850 1851- Concurrent SCIP: 1852 - extended interface to support concurrent solving mode 1853 1854- Constraint Handlers: 1855 - new optional callback `CONSENFORELAX` to enforce a relaxation solution, see \ref CONS 1856 - `CONSINITLP` callback now has a new parameter `infeasible`, which is a pointer to store whether infeasibility 1857 was detected while building the initial LP relaxation 1858 1859### Deleted and changed API methods 1860 1861- setting a parameter to a non-valid value now produces an error message instead of a warning 1862- bound reader uses angle bracket around variable names 1863- the parameters of SCIPlpiChgObj(), SCIPlpiSetBase(), SCIPlpiSetState(), SCIPlpiSetNorms() have been declared as const 1864- SCIPapplyHeurSubNlp() can now return the solution found by the sub-NLP heuristic 1865 1866- Random: 1867 - methods SCIPrandomGetInt() substitutes SCIPgetRandomInt() (marked to be deprecated) 1868 - methods SCIPrandomGetReal() substitutes SCIPgetRandomReal() (marked to be deprecated) 1869 - methods SCIPrandomPermuteArray() substitutes SCIPpermuteRandomArray() (marked to be deprecated) 1870 - methods SCIPrandomPermuteIntArray() substitutes SCIPpermuteRandomIntArray() (marked to be deprecated) 1871 - method SCIPrandomGetSubset() substitutes SCIPgetRandomSubset() (marked to be deprecated) 1872 1873- Conflict Analysis: 1874 - added parameters `conftype` and `iscutoffinvolved` to SCIPinitConflictAnalysis() 1875 that indicate the type of the conflict and whether the current cutoff bound is used or not 1876 1877- Constraint Handlers: 1878 - added parameter `infeasible` to SCIPinitlpCons() 1879 1880- Copying: 1881 - added parameters `fixedvars`, `fixedvals`, `nfixedvars` to SCIPcopyVars() 1882 - added parameters `fixedvars`, `fixedvals`, `nfixedvars` to SCIPcopyOrigVars() 1883 - renamed parameter `success` to `valid` in SCIPgetConsCopy() 1884 1885- Hashmap and Hashtable: 1886 - removed function SCIPcalcHashtableSize() since not required anymore for `SCIP_HASHTABLE` and `SCIP_HASHMAP` 1887 - based on the initial size `SCIP_HASHTABLE` and `SCIP_HASHMAP` choose an appropriate size internally to allow insertion of that 1888 many elements without resizing 1889 - `SCIP_MULTIHASH` behaves like the old `SCIP_HASHTABLE` and SCIPcalcMultihashSize() should be used as replacement for 1890 SCIPcalcHashtableSize() 1891 1892- Nonlinear Relaxation: 1893 - added parameter `curvature` to SCIPcreateNlRow() 1894 1895- Parameters: 1896 - the following new methods return a bool indicating whether the given value is valid for the parameter instead of printing a warning 1897 message and returning an error code if the value is invalid 1898 - renamed method SCIPcheckBoolParam() to SCIPisBoolParamValid() 1899 - renamed method SCIPcheckLongintParam() to SCIPisLongintParamValid() 1900 - renamed method SCIPcheckCharParam() to SCIPisCharParamValid() 1901 - renamed method SCIPcheckStringParam() to SCIPisStringParamValid() 1902 - renamed method SCIPcheckRealParam() to SCIPisRealParamValid() 1903 - in param.c/h: the new methods return a bool whether the given value is valid for the parameter instead of printing a warning message 1904 and returning an error code if the value is invalid 1905 - rename SCIPparamCheckBool() to SCIPparamIsValidBool() 1906 - rename SCIPparamCheckString() to SCIPparamIsValidString() 1907 - rename SCIPparamCheckChar() to SCIPparamIsValidChar() 1908 - rename SCIPparamCheckLongint() to SCIPparamIsValidLongint() 1909 1910- Primal Heuristics: 1911 - added parameter `initialseed` to SCIPcreateDiveset() 1912 - introduced new type `SCIP_HEURTIMING` for primal heuristic timing masks 1913 - changed type of parameter `timingmask` from unsigned int to `SCIP_HEURTIMING` in SCIPincludeHeur(), SCIPincludeHeurBasic() 1914 1915- Relaxators: 1916 - new parameter `includeslp` for SCIPincludeRelax() and SCIPincludeRelaxBasic() 1917 to indicate whether relaxation includes all linear rows and can be enforced 1918 1919- Reoptimization: 1920 - rename method SCIPgetReopSolsRun() to SCIPgetReoptSolsRun() 1921 1922- Solutions: 1923 - added parameter `completely` to SCIPtrySol(), SCIPtrySolFree(), SCIPcheckSol() to check all constraints when 1924 printing violations 1925 1926- Variables: 1927 - removed SCIPvarGetLbAtIndex() and added SCIPgetVarLbAtIndex() 1928 - removed SCIPvarGetUbAtIndex() and added SCIPgetVarUbAtIndex() 1929 - removed SCIPVarGetBdAtIndex() and added SCIPgetVarBdAtIndex() 1930 - removed SCIPvarWasFixedAtIndex() and added SCIPgetVarWasFixedAtIndex() 1931 - Removed method SCIPvarGetNBinImpls() 1932 1933### New API functions 1934 1935- added functions for concurrent solving mode (see concurrent.h, concsolver.h) 1936- SCIPcreateNlpiProb(), SCIPupdateNlpiProb() and SCIPaddNlpiProbRows() to create and update a nonlinear relaxation 1937- SCIPgetNObjlimLeaves(), SCIPgetNFeasibleLeaves(), SCIPgetNInfeasibleLeaves() for statistics output 1938 about LP objective leaves 1939- SCIPcheckCopyLimits() which can be used to check that enough time and memory is left to run a sub-SCIP after 1940 subtracting time and memory used by the main-SCIP and SCIPcopyLimits() which copies these limits accordingly and disables 1941 all other limits (need to be set by the plugin, if needed) 1942- SCIPcopyLargeNeighborhoodSearch() in heuristics.h that supports compressed copying and two kinds of problem copy: the MIP-relaxation or 1943 a 1-1 problem copy (by copying the constraints and not the LP relaxation) 1944- SCIPsolveProbingRelax() to solve a relaxation within probing 1945- SCIPgetLastStrongbranchingLPSolstat() to query the LP statuses after strong branching on a variable 1946- SCIPinitializeRandomSeed() 1947- SCIPswapReals() to swap two real values 1948- SCIPgetNNZs() to get the number of active non-zeros in the transformed/presolved problem 1949 1950- Debug Messages: 1951 - SCIPprintDebugMessage(), SCIPsetPrintDebugMessage(), SCIPstatPrintDebugMessage() that output debug messages and also print the 1952 subscip depth; the first two output via the message handler; also added macros SCIPdebugMsg(), SCIPsetDebugMsg(), SCIPstatDebugMsg() 1953 - SCIPdebugMsgPrint()/SCIPsetDebugMsgPrint() that output a message without `[debug]` prefix via the message handler (compare SCIPdebugPrintf()) 1954 1955- Solution: 1956 - SCIPisDualSolAvailable() to query the dual solution availability 1957 - SCIPlpiSetIntegralityInformation() to improve SoPlex' solution polishing 1958 1959- Constraints: 1960 - library methods SCIPcopyConsCompression(), SCIPcopyOrigConsCompression() that accept an array of variables that are immediately 1961 fixed in the copy. Alternatively, local instead of global bounds can be used for compression. 1962 - library methods SCIPenableConsCompression(), SCIPisConsCompressionEnabled(), SCIPcopyConsCompression(), SCIPcopyOrigConsCompression() 1963 - SCIPgetIntVarXor() to access integer variable of XOR constraints 1964 - SCIPcreateConsCardinality() to create a cardinality constraint 1965 - SCIPcreateConsBasicCardinality() to create a basic cardinality constraint 1966 - SCIPchgCardvalCardinality() to changes cardinality value of cardinality constraint (i.e., right hand side of cardinality constraint) 1967 - SCIPaddVarCardinality() to add a variable to a cardinality constraint 1968 - SCIPappendVarCardinality() to append a variable to a cardinality constraint 1969 - SCIPgetNVarsCardinality() to get the number of variables in a cardinality constraint 1970 - SCIPgetVarsCardinality() to get the array of variables in a cardinality constraint 1971 - SCIPgetCardvalCardinality() to get the cardinality value of a cardinality constraint (i.e., right hand side of cardinality constraint) 1972 - SCIPgetWeightsCardinality() to get the array of weights of a cardinality constraint 1973 - SCIPgetLinvarMay{Decrease,Increase}Quadratic() to get index of a variable in linear term of quadratic constraint that may be decreased 1974 without making any other constraint infeasible 1975 1976- Parameters: 1977 - add SCIPparamIsValidInt() and SCIPparamIsValidReal() to param.c/h 1978 - add missing functions SCIPisIntParamValid() and SCIPisRealParamValid() to scip.c/h 1979 1980### Command line interface 1981 1982- new command line parameter `-v` to print detailed build options 1983 1984### Interfaces to external software 1985 1986- Interfaces for Python and Java are, among others, now available via http://www.github.com/scip-interfaces 1987- Revised documentation of the SCIP C-API to group methods more comprehensively by topics 1988- dropped support for Ipopt < 3.11 1989- Additional I/O-functionalities for debugging and logging in SCIP and in the AMPL interface 1990- updated CppAD to 20160000 1991- for users of the ampl interface, the display/logfile option has been added to set the name of a 1992 file to write the SCIP log to (additionally to stdout) 1993 1994- LP Interfaces: 1995 - SCIP uses the lpi_spx2 interface by default 1996 - Improved Gurobi interface that can handle ranged rows (requires Gurobi >= 7.0.2) 1997 - the CPLEX LPI now also compiles with CPLEX 12.7.0.0 1998 1999### Changed parameters 2000 2001- setting a value for a fixed parameter will no longer return with an error, if the new value equals the one to which the parameter is fixed 2002- changed value of parameter `separating/clique/cliquedensity` to 0.0 such that the separator always constructs a dense clique table 2003 which proved to be faster on the benchmarks MMM and stableset. 2004- parameters `misc/permutationseed`, `misc/permuteconss` and `misc/permutevars` changed to `randomization/permutationseed`, 2005 `randomization/permuteconss` and `randomization/permutevars` 2006- parameters `conflict/useinflp` and `conflict/useboundlp` are now of type char (before bool) 2007- all parameters of the components presolver (starting with `presolving/components/`) are now parameters of the components 2008 constraint handler (starting with `constraints/components/`) 2009 2010### New parameters 2011 2012- class randomization 2013- `branching/sumadjustweight` to adjust branching scores by adding a sum epsilon in order to keep score differences 2014 near zero, which are otherwise completely disregarded (they are adjusted to at least sum epsilon) 2015- `concurrent/* ` and `parallel/* ` for configuring the concurrent solving mode 2016- `constraints/cardinality/branchbalanced` to decide whether to use a balanced branching scheme in the enforcing of cardinality 2017 constraints 2018- `constraints/cardinality/balanceddepth` to set the maximal depth until balanced branching is turned off 2019- `constraints/cardinality/balancedcutoff` to determine that balanced branching is only used if the branching cut off value 2020 w.r.t. the current LP solution is greater than a given value 2021- `constraints/indicator/sepaperspective` to turn on separation of perspective cuts for indicator constraints 2022- `constraints/indicator/sepapersplocal` to decide whether local cuts can be used for perspective cuts for indicator constraints 2023- `constraints/quadratic/projectedcuts` to enable convex quadratics to generate gradients cuts at the 2024 projection of the point onto the region described by the constraint, which is supporting 2025- `lp/solutionpolishing` to enable LP polishing only at the root LP or always 2026- `misc/referencevalue` to pass a reference value for further analysis of the tree search, see also in `features` 2027- `presolving/qpkktref/addkktbinary` to allow the presence of binary variables for the KKT update 2028- `presolving/qpkktref/updatequadbounded` to add the KKT conditions to QPs only if all variables are bounded 2029- `presolving/qpkktref/updatequadindef` to add the KKT conditions to QPs only if the quadratic matrix is indefinite 2030- `randomization/lpseed` to set the initial seed of the LP solver 2031- `solvingphases/enabled` to activate adaptive behavior during the solution process; several further parameters 2032 in the solvingphases-section to control how to switch the parameters and whether a restart should be performed between the phases. 2033 2034### Data structures 2035 2036- new `SCIP_REGRESSION` data structure in pub_misc.h to incrementally compute a best-fit line through pairs of observations 2037- add maximum branch-and-bound tree depth constant `SCIP_MAXTREEDEPTH` (replaces SCIPgetDepthLimit() and SCIPtreeGetDepthLimit()) 2038- new files heuristics.c/heuristics.h to collect methods that are frequently used by heuristics 2039- merged dive.c/pub_dive.h with heuristics.c/heuristics.h, removed dive.c/pub_dive.h 2040- separated header pub_misc.h from repeated methods for sorting and (weighted) median selection; 2041 those are also available in separate headers pub_misc_sort.h 2042 and pub_misc_select.h, but included into pub_misc.h 2043 2044Unit tests 2045---------- 2046 2047- New unit testing system built on the Criterion framework 2048 2049Build system 2050------------ 2051 2052### Makefile 2053 2054- All makefiles in `examples/` and `applications/` have been updated. 2055- `make.project` defines a variable `SCIP_VERSION` containing the SCIP version number 2056- revise sub-makefiles for MSVC on MinGW 2057- make shared libraries aware of their dependencies 2058- sub-makefile for CrayXC systems added 2059 2060- Places: 2061 - All objective files are now placed in `obj/static` or `obj/shared`, depending on `SHARED=false` or `SHARED=true`, respectively. 2062 - All internal and external libraries are placed in `lib/static` and `lib/shared`, the include files are in `lib/include`. 2063 - The binaries now contain an rpath to the SCIP directory, such that shared libraries are found. 2064 2065- Linking: 2066 - link binary to shared libs when compiling with `SHARED=true` 2067 - External projects (including make.project) can use the makefile variable LINKCXXSCIPALL or LINKCCSCIPALL to link all SCIP libraries. 2068 - Building with `SHARED=true` automatically generates the combined library libscipsolver.so for easier linking 2069 2070- Targets: 2071 - Running `make help` lists all makefile options. 2072 - `make install` copies now all header files 2073 - new target `dll` to build Windows dlls with MSVC 2074 - rename `dll` target to `windowslib` 2075 2076Fixed bugs 2077---------- 2078 2079- fixed bug in event system: bound change events of the new focus node must be processed, even if the bound 2080 is the same as at the last focus node 2081- avoid numerically unstable (multi-)aggregations 2082- fixed bug in XML reader concerning comments 2083- the AMPL interface now writes a solve status (solve_result_num) into the .sol file 2084- in the cmpres.awk (allcmpres.sh) output, the counts in the time column are now with respect to the 2085 whole set of processed instances (as with fail and solv), while before it was with respect to the 2086 set of instances where no solver failed (eval set); thus, now proc = fail + time + solv. 2087- writing of solutions or parameters to a file now works also with the message handler set to quiet 2088- ignore lower and upper bound tightenigs beyond +/-infinity during solving 2089- time limit of SCIP-infinity is converted to LPI-infinity when setting it 2090- fix LP activity of a row that has been modified 2091 2092- Propagation: 2093 - fixed possible segmentation fault in genvbounds propagator 2094 - fixed bug with sorting of propagators in presolving: the order can be changed by calling probing; thus, there is a copy of the 2095 propagators, which is sorted by presolving priority 2096 - added missing capturing and releasing mechanism in genvbounds propagator 2097 - fix wrong propagation of product expressions 2098 2099- Constraints: 2100 - fixed wrong representation of SOC constraints in NLP 2101 - fixed a few issues within redundant constraint detection of (specialized) linear constraint handlers 2102 - fixed issue in reader_opb concerning writing of fixed variables contained in no constraints 2103 2104- Memory: 2105 - fixed memory bug in `SCIP_DIGRAPH` 2106 - improved counting of memory consumption by using more block memory and counting all allocated memory 2107 - fix memory leaks in TSP example 2108 - return `SCIP_ERROR` when a memory exception is caught in SoPlex (was `SCIP_LPERROR`) 2109 - fixed memory leak in OSiL reader 2110 2111- Objective: 2112 - fixed bug while changing the objective value of an original value after transforming the problem 2113 - fixed bug with solutions from previous runs not satisfying an objective limit 2114 - SCIPisObjIntegral() now works correctly in `SCIP_STAGE_PROBLEM` 2115 2116- Heuristics: 2117 - fixed two bugs in heur_indicator: use improvesols parameter now and update pointer to indicator constraint handler 2118 - fix wrong NLP representation of logic-or constraints in the dual value heuristic 2119 - correct handling of implicit integer variables with fractional solution value in simplerounding heuristic 2120 - fixed bug in heur_octane with uninitialized ray direction 2121 2122@page RN32 Release notes for SCIP 3.2 2123 2124@section RN321 SCIP 3.2.1 2125************************* 2126 2127Features 2128-------- 2129 2130- new `force` parameter in (root)redcost propagator to run the propagator also with active pricers 2131 2132Performance improvements 2133------------------------ 2134 2135- do not transfer solutions to original space, if SCIP is being freed 2136- modified implication graph analysis of SOS1 constraint handler; a new component allows to deduce zero fixings of variables 2137- made SOS1 constraint handler specific diving selection rule faster for the case that the SOS1 constraints do not overlap 2138- improved disjunctive cuts by the `monoidal cut strengthening` procedure of Balas and Jeroslow 2139 2140Examples and applications 2141------------------------- 2142 2143- several improvements of SCIP-Jack (STP application): extended presolving for STP variants, STP-specific branching 2144 rule, dual heuristic to generate initial LP relaxation 2145 SCIP-Jack is now competitive with problem specific state-of-the-art solvers on several well-known STP variants, 2146 e.g., the (rooted) prize-collecting Steiner tree problem. 2147- MultiObjective application renamed to PolySCIP; several improvements: better command line argument processing, 2148 overhaul of much of the source code, installation via CMake 2149 2150Interface changes 2151----------------- 2152 2153- made debug solution functionality thread safe (see debug.h for further information) 2154 2155### Deleted and changed API methods 2156 2157- add SCIPcomputeHyperplaneThreePoints() to compute a hyperplane containing three given 3-dimensional points 2158- SCIPsolveLinearProb() now uses a 1-dimensional matrix representation 2159 2160### Command line interface 2161 2162- added interactive shell command `display finitesolution` to print solution with infinite fixings removed, 2163 added reference to that method to `display solution` output if there are infinite fixings 2164- new interactive shell command `write history` to write the command line history (only when compiled with Readline) 2165 2166### Interfaces to external software 2167 2168- significantly improved Python interface to support user callbacks as well as linear and quadratic expressions 2169 2170### New parameters 2171 2172- `constraints/sos1/branchingrule` to decide whether to use neighborhood, bipartite, or SOS1 branching (this parameter 2173 replaces the old parameters `constraints/sos1/neighbranch`, `constraints/sos1/bipbranch`, and `constraints/sos1/sos1branch`) 2174- `constraints/sos1/depthimplanalysis` to limit the number of recursive calls of implication graph analysis 2175- `constraints/sos1/perfimplanalysis` to perform an implication graph analysis to deduce variable fixings and 2176 additional SOS1 constraints (this parameter replaces the old parameter `constraints/sos1/updateconflpresol`) 2177- `misc/transsolorig` for transfering transformed solutions to the original space (default: true) 2178- `propagating/rootredcost/onlybinary` to propagate root reduced costs of binary variables only 2179 2180### Data structures 2181 2182- renamed MIP matrix structure to `SCIP_MATRIX` 2183- changed the numeric values for `PRESOLTIMING` flags 2184 2185Build system 2186------------ 2187 2188### Makefile 2189 2190- new target `dll` to build Windows dlls with MSVC 2191- add new compiling flag OPENSOURCE to allow/forbid the usage of third party software 2192 2193Fixed bugs 2194---------- 2195 2196- fixed wrong objective sense when copying the original problem 2197- fixed a bug in merge step of cliques during clean up phase; method did not correctly handle infeasibility in the case of multiple 2198 variable-negation pairs 2199- fixed a previously untreated case in the linear cons simplification where coefficients only differ by slightly more than an epsilon 2200- fixed bug in parsing emphasis parameters which formerly led to completely wrong results 2201- fixed bug in the computation of the Wilcoxon test 2202- do not use the relative and absolute gap limit if no primal solution has been found so far 2203- fixed bug in conflict.c with wrong reset of bounds used 2204- fixed bug with transferring solutions to new runs (need to recompute objective before checking) 2205- fixed issue with infinite values when checking cuts for redundancy 2206- fixed library problems on Windows operating systems 2207 2208- Variables: 2209 - fixed wrong check when computing cuts for factorable quadratic functions bound tightening of a single variable 2210 - fixed wrong handling of loose variables in OBBT 2211 - fixed freeing of hash for binary variables 2212 - fixed bug during the computation of branching points for continuous variables which are almost fixed to +/- SCIPinfinity() 2213 - treated the case of integer variables as intermediate variables in the process of obtaining the active variable for a 2214 given binary variable 2215 2216- LP: 2217 - fixed a bug in dive.c that occurred when lpsolvefreq was set to 1; after a cutoff, the solution values of the 2218 linked LP solution might have become invalid 2219 - do not analyse an infeasible LP for conflicts during diving mode when LHS/RHS of rows were changed 2220 - use LPi infinity when reverting bound changes in conflict analysis 2221 2222- Heuristics: 2223 - fixed bug in heur_simplerounding in connection with relaxators 2224 - fixed bug in feaspump heuristic where last solution candidates were not updated correctly 2225 - fixed bug with infinite shift values in heur_shifting 2226 - fixed bug in shiftandpropagate heuristic: the heuristic did not correctly handle intermediate, global bound changes of the selected variable 2227 after its tentative fixing led to a cutoff. 2228 2229- Propagator: 2230 - (root) reduced cost propagators are not run anymore when doing branch-and-price, 2231 since they may install upper bounds on variables which might interfere with the 2232 pricing (they may be enabled again by their force parameters) 2233 - fixed too hard assertion in pseudoobj propagator 2234 - fixed a bug in shiftandpropagate where column positions after sorting are now correctly linked to their variables after sorting 2235 - fixed potential memory leak in genvbound propagator 2236 2237- Presolving: 2238 - fixed inconsistency in knapsack constraint handler data during presolving 2239 - fixed some problem with reoptimization when the problems are infeasible or have been solved in presolving 2240 - fixed endless loop in knapsack constraint handler when continuous variables change their types to binary during presolving 2241 - squares of binary variables might not have been replaced by the binary variable itself in presolve, 2242 if the variable was originally general integer and only became binary during presolve (due to bound tightening) 2243 - fixed bug in dive.c avoiding a check of constraints in the presence of indicator constraints 2244 2245- Constraints: 2246 - fixed numerical problems in computation of cuts for bivariate functions in quadratic constraint handler 2247 - fixed bug in quadratic constraint handler when computing lifted-tangent inequalities 2248 - fixed bug in nonlinear constraint handler when replacing a violated nonlinear constraint leads to an infinite 2249 - fixed bug in SOS1 constraint handler with inconsistent data structure after restart 2250 - fixed wrong handling of negated variables in bound tightening procedure of SOS1 constraint handler 2251 - fixed bug in simple fixing heuristic of SOS1 constraint handler 2252 - fixed two bugs in pseudoboolean constraint handler with wrong sorting of and constraints 2253 - fixed issue: constraints being parallel to objective function (after restart) sometimes led to wrongly stating infeasible 2254 - fixed bug during coefficient tightening in varbound constraint handler 2255 - handle cutoffs in cons_indicator detected by infeasible inequalities 2256 - fixed late change of type of slack variables in cons_indicator, if the bounds are not integral 2257 - fixed initsol and exitsol of cons_indicator, if problem has already been solved 2258 - fixed bug in cons_indicator with changing type of slackvariable 2259 2260@section RN320 SCIP 3.2.0 2261************************* 2262 2263Features 2264-------- 2265 2266- added reoptimization feature for optimization problems with changed objective function or tighter feasible region 2267- the original problem can now be permuted directly after reading (if `misc/permutationseed` has value >= 0) 2268- added methods to compute strongly connected components with Tarjan's Algorithm 2269- added method to propagate implications of SOS1 variables 2270- convex quadratic contraints can now generate gradient cuts which are supporting to the feasible region 2271- SoPlex interface can now (re)store dual steepest edge weights 2272- extended expression parsing to support power, realpower and signpower operators; started support for user-defined operators 2273 in expression trees/graphs 2274- possibility to set a soft time limit which becomes active only after the first primal solution was found 2275- added matrix module for getting access to the internal mixed inter linear problem matrix 2276- better handling of large values returned by the LP solver 2277- added more checks to SCIP{alloc,realloc,duplicate}BufferArray() to handle overflows properly 2278- new plugin for reoptimizing a sequence of optimization problem that differ in the objective function, e.g., sequences arising from 2279 column generation 2280- new plugin `compr` for rearranging the search tree, currently this only works on the reoptimization tree 2281- moved assertions in comparison methods from scip.c to set.c 2282 2283- Constraints: 2284 - we can now upgrade quadratic constraints with one bilinear term to SOC constraints 2285 - we can also upgrade general quadratic constraints with a single negative eigenvalue to SOC constraints 2286 2287- Branching: 2288 - tighter reliability notions introduced for reliability branching, based on pseudo-cost relative errors 2289 and comparing candidates with the best pseudo-candidate using a 2-sample student-T test. These methods 2290 are used in disjunction with the existing reliability notion that uses a fixed number as reliability 2291 threshold for every variable before turning off strong-branching. This means, the classical method 2292 must be turned off by setting parameters minreliable and maxreliable to 0. The behavior is 2293 controlled through several parameters. 2294 - new distribution branching rule to base decisions on row activity (normal) distribution over domain space 2295 - can now output information for BAK: Branch-and-bound Analysis Kit 2296 - new score in hybrid reliability pseudocost branching that prefers nonlinear variables when solving MINLPs 2297 - new branching rule multaggr which allows to branch on general disjunctions defined by fractional multi-aggregated variables 2298 - new branching rules for SOS1 constraints for branching on a neighborhood or a complete bipartite subgraph of 2299 the conflict graph. In addition to variable domain fixings, it is sometimes also possible to add complementarity 2300 constraints to the branching nodes. This results in a nonstatic conflict graph, which may change dynamically 2301 with every branching node. 2302 - new branching rule nodereopt to reconstruct the tree after changing the objective function 2303 2304- Reader: 2305 - the MPS reader can now read semi-integer variables, they are handled by creating bound disjunction constraints 2306 - the MPS reader can now handle objective constants given as (the negation of) the RHS of the objective row 2307 2308- Separation: 2309 - obbt propagator applies now additional separation and propagation in order to learn stronger and more bound tightenings 2310 - extended probing mode to allow separation and objective coefficient changes 2311 - improved separation procedure of SOS1 constraint handler, including bound (clique) cuts and implied bound cuts 2312 - new disjunctive cut separator for SOS1 constraints 2313 - new edge-concave cut separator for quadratic constraints 2314 2315- Presolver: 2316 - Improved coordination of presolvers. There are three timings for presolvers now, FAST, MEDIUM and EXHAUSTIVE. 2317 Each presolving callback can specify one or more of these timings in which it will be called later. 2318 Within a presolving method, the current timing can be checked and the algorithms to be performed selected based on 2319 the timing. In one presolving round, first all presolving methods with timing FAST are called, sorted by priority. 2320 If they found enough reductions, a new round is started, otherwise, all presolving methods with timing MEDIUM are 2321 called. Again, with enough reductions, a new presolving round is started, too few reductions lead to running 2322 the EXHAUSTIVE presolvers. Similar to the delay concept used before, we are not neccessarily running all EXHAUSTIVE 2323 presolvers but stop as soon as one of them found enough reductions, starting a new presolving round immediately. 2324 - new presolving components for SOS1 constraints, including bound tightening and clique extension 2325 - new presolver tworowbnd for improving variable bounds and detecting redundant constraints added 2326 - new presolver dualagg for aggregating single up-/downlocked variables by a binary variable added 2327 - new presolver implfree for aggregating implied free variables added 2328 - new presolver redvub which can detect redundant variable upper bound constraints added 2329 - new presolver stuffing for fixing of singleton continuous variables added 2330 2331- Heuristic: 2332 - improved clique and variable bound heuristics 2333 - new heuristic distribution diving that bases its score function on the changes regarding solution density 2334 - variable histories can be transferred between sub-SCIPs solved by LNS heuristics and the component presolver 2335 and the main SCIP to reuse this information. 2336 - new heuristic heur_indicator that tries to make partial solutions with indicator constraints feasible. It also 2337 tries to improve them (or external solutions) by a one-opt local search. 2338 - new heuristic (heur_bound) which fixes all integer variables to their lower/upper bounds and solves the remaining LP 2339 - modified diving heuristics to handle SOS1 constraints 2340 - new primal heuristic for reoptimization 'ofins': objective function induced neighborhood heuristic 2341 - new heuristic for reoptimization which constructs solutions based in the changes between the objective function and the optimal 2342 solution before changing the objective function 2343 2344- Statistic: 2345 - extended variable branching statistics in the interactive shell by sample variance of unit gains 2346 - extended statistic output of interactive shell by more information on diving heuristic behavior 2347 2348Performance improvements 2349------------------------ 2350 2351- improved treatment of nonlinearities in hybrid reliability pseudo cost branching 2352- using sparsity information of the SoPlex LP 2353 2354- Constraints: 2355 - improved vartype upgradability from continuous to implicit variables in cons_linear.c, depending on their objective coefficients 2356 - improved propagation of SOS1 constraint handler using the information from a conflict 2357 2358- Heuristics: 2359 - zi rounding heuristic uses buffer data structures, thereby decreasing total memory usage of SCIP 2360 - adjusted (hard) diving heuristics to solve fewer LPs. LP's are resolved only if a parameter-defined 2361 percentage of the variable bounds changed through domain propagation or at a predefined frequency. 2362 - some of the diving heuristics additionally consider indicator variables and SOS1 variables as candidate variables and try to 2363 make these constraint types feasible before passing a rounded solution to SCIPtrySol() 2364 2365- Presolving: 2366 - new presolving/propagation algorithm using the gcd for ranged rows and equations in cons_linear 2367 - added presolving levels (FAST, MEDIUM and EXHAUSTIVE) to allow better balancing of presolvers 2368 2369- Separation: 2370 - improved separation procedure of SOS1 constraint handler 2371 - improved separation procedure for convex quadratic constraints 2372 2373Examples and applications 2374------------------------- 2375 2376- two new applications for multi-objective optimization (PolySCIP) and the Steiner Tree Problem in Graphs 2377- new application for solving Steiner tree problems: SCIP-Jack can handle both the classical Steiner tree problem in graphs 2378 and 10 of its variants 2379 2380Interface changes 2381----------------- 2382 2383### New and changed callbacks 2384 2385- new callback function `SCIP_DECL_CONSGETDIVEBDCHGS` to provide 2386 constraint handler method to suggest dive bound changes during the generic diving algorithm, see type_cons.h for details 2387- new callback `SCIP_DECL_DIVESETGETSCORE` to implement scoring function to guide diving 2388 2389### Deleted and changed API methods 2390 2391- avoid potential comparisons of different infinity values by adjusting the LP solution value 2392- SCIPintervalSign(), SCIPintervalAbs(), SCIPintervalMax(), SCIPintervalMin(), SCIPexprgraphGetNodePolynomialMonomialCurvature(), 2393 and SCIPexprgraphTightenNodeBounds() need an infinity value to decide whether an interval is empty or not 2394- SCIPgetFeasibilityQuadratic() and SCIPgetActivityQuadratic() returns now a `SCIP_RETCODE` and needs an additional `SCIP_Real*` to 2395 store the result 2396- methods which support statistical tests in pub_misc.h, SCIPstudentTGetCriticalValue(), SCIPcomputeTwoSampleTTestValue() etc. 2397- SCIPsolveLinearProb() solves a linear problem of the form Ax=b for a regular square matrix A 2398- Added parameter `freesubscip` to SCIPapplyProximity() 2399 2400- Data structures: 2401 - Renamed method SCIPdigraphGetSuccessorsDatas() to SCIPdigraphGetSuccessorsData() 2402 - Renamed method SCIPdigraphGetNodeDatas() to SCIPdigraphGetNodeData() 2403 - Renamed method SCIPdigraphSetNodeDatas() to SCIPdigraphSetNodeData() 2404 2405- Constraint Handlers: 2406 - Renamed method SCIPconshdlrGetPropTimingmask() to SCIPconshdlrGetPropTiming() 2407 - new method SCIPconshdlrSetPropTiming() 2408 - Removed method SCIPconshdlrIsPresolvingDelayed() 2409 - Removed method SCIPconshdlrWasPresolvingDelayed() 2410 - SCIPmakeSOS1sFeasible() based on solution values, fixes variables to zero to turn all SOS1 constraints feasible 2411 - removed `delay(presol)` parameter from SCIPinclude{Conshdlr,Presol,Prop}() and added `(presol)timing` parameter 2412 - new parameter `presoltiming` for method SCIPpresolCons() 2413 - SCIPvarIsSOS1() returns whether some variable is involved in an SOS1 constraint 2414 - SCIPgetConflictgraphSOS1() gets conflict graph of SOS1 constraints 2415 - Added parameter `presoltiming` to SCIPpropCumulativeCondition() 2416 - Removed parameter `delaypos` from SCIPsetConshdlrPresol() 2417 - Added parameter `presoltiming` to SCIPsetConshdlrPresol() 2418 - Removed parameter `delaypos` from SCIPincludeConshdlr() 2419 - Added parameter `presoltiming` to SCIPincludeConshdlr() 2420 - Added parameter `consgetdivebdchgs` to SCIPincludeConshdlr() to provide a divebdchg-callback for the constraint handler 2421 to include 2422 2423- Branching Rules: 2424 - Added parameter `forcestrongbranch` to SCIPselectVarStrongBranching() 2425 - Added parameter `executebranching` SCIPexecRelpscostBranching() 2426 - Added parameters `ndomredsdown` and `ndomredsup` to SCIPgetVarStrongbranchWithPropagation() 2427 2428- LP and Cutting Planes: 2429 - Added parameters `inds` and `ninds` to SCIPgetLPBInvRow(), SCIPgetLPBInvCol(), SCIPgetLPBInvARow(), SCIPgetLPBInvACol(), and 2430 SCIPcalcStrongCG() 2431 - Added parameters `maxweight`, `weightinds`, `nweightinds`, and `rowlensum` to SCIPcalcMIR() 2432 2433- Variables: 2434 - SCIPvarGetNodeSOS1() returns node of SOS1 variable in the conflict graph 2435 - SCIPnodeGetVarSOS1() returns SOS1 variable associated to some given node in the conflict graph 2436 - Removed method SCIPvarGetNBinImpls() 2437 2438- Presolving: 2439 - Removed parameter `delaypos` from SCIPincludePresolBasic() 2440 - Added parameter `presoltiming` to SCIPincludePresolBasic() 2441 - Removed parameter `delaypos` from SCIPincludePresol() 2442 - Added parameter `presoltiming` to SCIPincludePresol() 2443 - Removed parameters `presoldelay` and `presoltiming` from SCIPincludePresol() 2444 - Removed parameters `presoldelay` and `presoltiming` from SCIPsetPropPresol() 2445 2446- Misc: 2447 - Added parameter `isequation` to SCIPaddClique() 2448 - Removed parameter `writeimplications` from SCIPwriteCliqueGraph() 2449 - Removed method SCIPallocBufferSize() 2450 - Removed method SCIPduplicateBufferSize() 2451 - Removed method SCIPreallocBufferSize() 2452 - Removed method SCIPfreeBufferSize() 2453 - Removed method callback SCIPdialogExecConflictgraph() 2454 2455### New API functions 2456 2457- started support for user-defined operators in expression trees/graphs (see SCIPexprCreateUser()), 2458 interface will likely change again in future SCIP versions 2459- new methods for mixed inter linear matrix access (see pub_matrix.h) added 2460- SCIPcomputeArraysIntersection() to compute the set intersection of two ordered arrays 2461- SCIPcomputeArraysSetminus() to compute the set difference of two ordered arrays 2462- SCIPcutGetLPActivityQuot() in pub_cutpool.h to get the potion of LP's where this cut was sharp in an optimal basis. 2463- SCIPpresolGetTiming(), SCIPpresolSetTiming(), SCIP{conshdlr,prop}GetPresolTiming(), and SCIP{conshdlr,prop}SetPresolTiming() 2464- SCIPdigraphSetNSuccessors() sets the number of successors of some digraph node to a given value 2465 2466- Diving: 2467 - SCIPcreateDiveset() to add a diveset to a heuristic. Heuristics may have multiple divesets under different names 2468 - SCIPperformGenericDivingAlgorithm() that performs diving with periodic LP resolve according to the diveset argument. 2469 2470- Constraints: 2471 - new setter function SCIPsetConshdlrGetDiveBdChgs() in scip.h to set dive bound change callback for this constraint handler 2472 - SCIPaddDiveBoundChange() to add a diving bound change to the diving bound change storage of SCIP together with the information if this is a 2473 bound change for the preferred direction or not, to be used by constraint handlers inside the getDiveBdChgs-callback 2474 - SCIPchgCoefLinear() and SCIPdelCoefLinear() to modify linear constraint during problem creation 2475 2476- Memory: 2477 - BMSallocClearBlockMemoryArray()/SCIPallocClearBlockMemoryArray() and 2478 BMSallocClearBufferMemoryArray(), SCIPallocClearBufferArray() to allocate arrays that are initialized to 0 2479 - SCIPbuffermem() to get buffer memory; 2480 2481- Sort: 2482 - added new sorting functions SCIPsortRealRealRealBoolBoolPtr(), SCIPsortDownRealRealRealBoolBoolPtr() 2483 - added new sorting functions SCIPsortIntIntIntReal(), SCIPsortDownIntIntIntReal(), SCIPsortRealIntInt(), SCIPsortDownRealIntInt() 2484 2485- Param: 2486 - SCIPwriteParam() to write a single parameter to a file 2487 - SCIPcheckParam{Bool,Char,...}() to check whether a parameter value is within the feasible domain 2488 2489- Quadratic: 2490 - SCIPchgLhsQuadratic(), SCIPchgRhsQuadratic(), SCIPchgLinearCoefQuadratic(), SCIPchgSquareCoefQuadratic(), 2491 and SCIPchgBilinCoefQuadratic() to modify quadratic constraints during problem creation 2492 - SCIPgetFeasibilityQuadratic() and SCIPgetActivityQuadratic() to get the feasibility and activity of a quadratic constraint in a given solution 2493 - SCIPaddSquareLinearization(), SCIPaddSquareSecant(), SCIPaddBilinLinearization() and SCIPaddBilinMcCormick() 2494 in cons_quadratic.h to compute linear under- and overestimation for bilinear and quadratic terms 2495 2496### Command line interface 2497 2498- extended variable branching statistics and statistic output in the interactive shell (see Statistic section) 2499- submenu for setting `vbc` settings renamed to `visual` 2500- at the end of a command line run the best solution can now be output in the orignal space 2501 2502### Interfaces to external software 2503 2504- in the AMPL interface, variable and constraint attributes (flags) can now be set via suffixes, where 0 (unset) stands 2505 for the default, 1 for TRUE and other values for FALSE; see SCIPcreateVar() and SCIPcreateCons() for their meaning; 2506 for variables, `initial` and `removable` are recognized; 2507 for constraints, `initial`, `separate`, `enforce`, `check`, `propagate`, `dynamic` and `removable` are recognized 2508- the AMPL interface now passes an initial guess, if specified, as a solution (that will be checked for feasibility) to SCIP 2509 2510### Changed parameters 2511 2512- rowrepswitch set to 2.0, so row representation is activated if LP has at least 2 times more rows than columns 2513- one can now set emphasis parameters at the beginning of a settings file; it should start with `emphasis:` and 2514 the contain the emphasis string, e.g., `emphasis: feasibility` or `emphasis: heuristics off`. 2515 2516- Renamed parameters: 2517 - `vbc/filename` to `visual/vbcfilename` 2518 - `vbc/realtime` to `visual/realtime` 2519 - `vbc/dispsols` to `visual/dispsols` 2520 2521### New parameters 2522 2523- added parameter to switch pseudo cost update in diving heuristics (enabled by default) 2524- `branching/relpscost/confidencelevel` to set the confidence level to be used by statistical tests 2525- `branching/relpscost/higherrortol` to define the highest reliability threshold for relative error based reliability 2526- `branching/relpscost/lowerrortol` to define a lower reliability threshold for relative error based reliability 2527- `branching/relpscost/nlscoreweight` for weight of nonlinear score when branching on MINLPs 2528- `branching/relpscost/usedynamicconfidence` to use a dynamic confidence level based on the amount of 2529 strong-branching simplex-iterations compared to the overall simplex iterations (default is FALSE) 2530- `branching/relpscost/usehyptestforreliability` to enable strong branching decisions based on a 2-sample student-T test of all prior 2531 pseudo-cost observations between the best pseudo-candidate and the candidate for which to decide whether strong-branching should be applied 2532- `branching/relpscost/userelerrorreliability` to enable relative error based reliability 2533- `branching/relpscost/skipbadinitcands` for skipping strong-branching candidates whose estimated gain 2534 is significantly worse than the one of the locally best (sb or pseudo) candidate 2535- `constraints/linear/multaggrremove` to perform multi-aggregations in linear constraint handler only if the constraint can be removed afterwards 2536- `constraints/linear/rangedrowpropagation` to disabled newly implemented propagtion algorithm for ranged rows and equations 2537- `constraints/quadratic/advanced/interiorcomputation` to select the way of computing and interior point for gauge cuts 2538- `constraints/quadratic/gaugecuts` to enable convex quadratics to generate gradients cuts which are supporting 2539- `constraints/soc/generalsocupgrade` to allow general quadratics to be upgraded to soc 2540- `constraints/SOS1/addcomps` to add local complementarity constraints to the branching nodes (can be used in combination 2541 with neighborhood or bipartite branching) 2542- `constraints/SOS1/addbdsfeas` to define a minimal feasibility value for local bound (clique) inequalities in order to be 2543 added to the branching node 2544- `constraints/SOS1/addcompsdepth` to define the maximal depth for adding complementarity constraints 2545- `constraints/SOS1/addcompsfeas` to define a minimal feasibility value for local complementarity constraints in order to be 2546 added to the branching node 2547- `constraints/SOS1/autocutsfromsos1` to automatically switch to separating bound cuts from SOS1 constraints if the SOS1 2548 constraints do not overlap 2549- `constraints/SOS1/autosos1branch` to switch to SOS1 branching if the SOS1 constraints do not overlap 2550- `constraints/SOS1/conflictprop` to define whether to use conflict graph propagation 2551- `constraints/SOS1/bipbranch` to branch on a complete bipartite subgraph of the conflict graph 2552- `constraints/SOS1/boundcutsdepth` to define the node depth of separating bound (clique) cuts 2553- `constraints/SOS1/boundcutsfreq` to define the frequency for separating bound (clique) cuts 2554- `constraints/SOS1/boundcutsfromgraph` to define whether to separate bound (clique) inequalities from the conflict graph 2555- `constraints/SOS1/boundcutsfromsos1` to define whether to separate bound (clique) inequalities from SOS1 constraints 2556- `constraints/SOS1/fixnonzero`: If neighborhood branching is used, then fix the branching variable (if positive in sign) 2557 to the value of the feasibility tolerance 2558- `constraints/SOS1/implcutsdepth` to define the node depth of separating implied bound cuts 2559- `constraints/SOS1/implcutsfreq` to define the frequency for separating implied bound cuts 2560- `constraints/SOS1/implprop` to define whether to use implication graph propagation 2561- `constraints/SOS1/maxaddcomps` to define the maximal number of complementarity constraints added per branching node 2562- `constraints/SOS1/maxboundcuts` to define the maximal number of bound (clique) cuts separated per branching node 2563- `constraints/SOS1/maxboundcutsroot` to define the maximal number of bound (clique) cuts separated per iteration in the root node 2564- `constraints/SOS1/maximplcuts` to define the maximal number of implied bound cuts separated per branching node 2565- `constraints/SOS1/maximplcutsroot` to define the maximal number of implied bound cuts separated per iteration in the root node 2566- `constraints/SOS1/maxextensions` to define maximal number of extensions that will be computed for each SOS1 constraint in presolving 2567- `constraints/SOS1/maxsosadjacency` to define that the adjacency matrix of the conflict graph is not created in presolving if 2568 the number of SOS1 variables is too large 2569- `constraints/SOS1/maxtightenbds` to define the maximal number of bound tightening rounds per presolving round 2570- `constraints/SOS1/neighbranch` to branch on a neighborhood of the conflict graph 2571- `constraints/SOS1/nstrongiter` to define the maximal number LP iterations to perform for each strong branching round 2572- `constraints/SOS1/nstrongrounds` to define the maximal number of strong branching rounds to perform for each node (only 2573 available for neighborhood and bipartite branching) 2574- `constraints/SOS1/sos1branch` to branch on a single SOS1 constraint, i.e., a clique of the conflict graph 2575- `constraints/SOS1/sosconsprop` to define whether to use SOS1 constraint propagation 2576- `constraints/SOS1/strthenboundcuts` to define whether to strengthen bound (clique) cuts in case bound variables are available 2577- `constraints/SOS1/updateconflpresol` to update the conflict graph during the presolving procedure 2578- `display/allviols` to print all violated constraints of the best solution during checksol in the scip shell 2579- `heuristics/indicator/improvesols` that turns on the improvement of external solutions by one-opt 2580- `heuristics/*diving/lpresolvedomchgquot` to determine the percentage of changed domains since previous LP to trigger 2581 an LP resolve [default: 0.15] (* stands for eight diving heuristics to support this feature) 2582- `heuristics/*diving/lpsolvefreq` to determine the frequency for resolving LP's during the execution of 2583 this heuristic [default: 1, use 0 for a dynamic setting based on the number of domain reductions] 2584 (* stands for eight diving heuristics to support this feature) 2585- `heuristics/shiftandpropagate/binlocksfirst` to set if binaries without locks should be preferred in ordering 2586- `heuristics/shiftandpropagate/maxcutoffquot` to select a maximum percentage of allowed cutoffs before stopping the heuristic (default is 0.0) 2587- `heuristics/shiftandpropagate/selectbest` to trigger if shiftandpropagate should select the best candidate in every round 2588 (set to FALSE for static order) (default is FALSE) 2589- `limits/autororestart` for triggering an automatic restart after this many nodes, or -1 for no auto restart [default is -1] 2590- `limits/softtime` to set a soft time limit (active only after first primal solution was found) 2591- `misc/allowobjprop` to allow objective function propagation 2592- `misc/allowdualreds` to allow dual reductions 2593- `misc/outputorigsol` to control whether at the end of a command line run the solution should be output in the orignal space 2594- `numerics/checkfeastolfac` to scale feasibility tolerance when checking the feasibility of best found solution 2595 after the solving process finished (e.g., checksol in scip shell) 2596- `separating/cutselrestart` for cut selection during restart copy process (`a`ge, activity `q`uotient) [default is `a`] 2597- `separating/cutselsubscip` for cut selection for sub SCIPs (`a`ge, activity `q`uotient) [default is `a`] 2598- `separating/disjunctive/maxconsdelay` to delay separation of disjunctive cuts if number of SOS1 constraints is larger than predefined value 2599- `separating/disjunctive/maxdepth` to define the node depth of separating disjunctive cuts 2600- `separating/disjunctive/maxinvcuts` to define the maximal number of disjunctive cuts investigated per iteration in a branching node 2601- `separating/disjunctive/maxinvcutsroot` to define the maximal number of disjunctive cuts investigated per iteration in the root node 2602- `separating/disjunctive/maxrank` to define the maximal permissible rank of a disjunctive cut that could not be scaled to integral coefficients 2603- `separating/disjunctive/maxrankintegral` to define the maximal permissible rank of a disjunctive cut that could be scaled 2604 to integral coefficients 2605- `separating/disjunctive/maxrounds` to define the maximal number of separation rounds of disjunctive cuts in a branching node 2606- `separating/disjunctive/maxweightrange` to define the maximal valid range of simplex tableau row weights 2607 2608### Data structures 2609 2610- new enum `SCIP_CONFIDENCE_LEVEL` for different levels of confidence for statistical tests. 2611- new struct `SCIP_DIVESET` that bundles options for SCIP's diving heuristics; all hard diving heuristics (those 2612 without `obj` at the beginning) include diveset and implement only the scoring callback. 2613- rename all file `*_vbc.?` to the more generic `*_visual.?` 2614- moved buffer memory handling to blockmemory/memory.?; 2615 remove files type_buffer.h, struct_buffer.h buffer.h buffer.c; 2616 removed functions SCIP*buffer*() from scip.? and replaced them by macros; 2617 redesigned buffer interface to be similar to block memory; added checks for strange sizes 2618 2619Testing 2620------- 2621 2622- added scripts and targets for testing with xpress (see Makefile section) 2623 2624Build system 2625------------ 2626 2627### Makefile 2628 2629- new parameter `DELHEADERS` for `uninstall`-target: scip headers are only removed when invoking `make uninstall DELHEADERS=true` 2630- added scripts check_xpress.awk, check_xpress.sh, evalcheck_xpress.sh and check_cluster_xpress.sh and target 2631 `testclusterxpress` and `testxpress` 2632 2633Fixed bugs 2634---------- 2635 2636- fixed bug in primal.c and tree.c by using SCIPinfinity() as a cutoffbound to delete child nodes 2637- fixed bug in lp.c which leads to wrong primal and dual feasibility 2638- fixed wrong handling of infinite activities and primal values in sepastore.c and lp.c 2639- fixed bug that led to an erroneous warning about the clock type 2640- fix behavior of `make install` which now sets symbolic links and short links to binaries and libraries 2641- fix bug which lead to wrong global bound tightenings in prop_genvbounds.c 2642- fix call to random generator for Windows operating systems in misc.c 2643- fixed again a bug in backward propagation of linear expressions in expression graph 2644 2645- NLP: 2646 - fixed bug in heur_nlpdiving.c: wrong counting of fix variables 2647 - fix wrong handling of `SCIP_NLPSOLSTAT_LOCALINFEASIBLE` solution status in nlp.c 2648 - fix characterization of logic or constraints in SCIP's NLP relaxation 2649 2650- Branching: 2651 - fixed wrong comparison when executing branching rule for external branching candidates 2652 - fix spatial branching on implicit integer variables 2653 - fix wrong comparisons of values larger/less than +/- SCIPinfinity() in branch.c, lp.c and sol.c 2654 - fixed problem with lpisrelax flag in probing mode when doing branch-and-price 2655 2656- Constraint Handlers: 2657 - try to handle fixings of multi-aggregated variable in cons_sos1 presolving and avoid error 2658 - fixed bug in pseudoboolean constraint handler about negated variables 2659 - fixed assert in cons_soc.c: now soc with 1 lhs variable are allowed 2660 - fixed wrong assert in cons_indicator (slack variables might be replaced by active variables that have nonzero objective) 2661 - fix late creation of auxiliary LP in cons_nonlinear.c, which lead to a segmentation fault with lpi_spx2.cpp 2662 - fixed bug in cons_abspower.c: do not generate cuts with infinity right-hand-side anymore 2663 - fixed setting of enforcement flag for constraints created by reformulation in nonlinear constraint handlers 2664 - fixed bug in cons_indicator with handling local bounds 2665 2666- Memory: 2667 - fix potential memory leak in SoPlex LP interfaces when setting invalid basis 2668 - fix potential memory leak in method SCIPgetConsCopy() 2669 - fix potential memory leak in method detectRedundantConstraints() of the knapsack constraint handler 2670 2671- Interval arithmetic: 2672 - fix handling of infinite intervals in SCIPintervalIsEmpty() 2673 - fixed bug in intervalarith.c: bivariate quadratic equations may have been solved wrongly if second variable is unbounded 2674 2675- Quadratic Constraints: 2676 - fix wrong sorting of bilinear terms in cons_quadratic 2677 - fix potentially tightening of LB/UB of a variable to +/- infinity in cons_quadratic 2678 - fixed bug in cons_quadratic.c which leads to an overflow when SCIP allocates memory for a dense matrix 2679 - fixed bug in cons_quadratic.c: do not generate linearization cuts for disabled constraints 2680 - fix missing clean phase of bilinear terms with zero coefficient in cons_quadratic.c 2681 2682@page RN31 Release notes for SCIP 3.1 2683 2684@section RN311 SCIP 3.1.1 2685************************* 2686 2687Features 2688-------- 2689 2690- use clock average to reduce number of system calls via `timing/rareclockcheck` parameter 2691- added copy mechanism for conjunction constraints 2692- added revised lpi_xprs for using XPRESS as LP solver 2693 2694Performance improvements 2695------------------------ 2696 2697- improved solving of LPs in OBBT propagator 2698- improved activity-delta computation and thereby propagation for linear constraints 2699- improved memory management of proximity heuristic 2700- disabled statistic timing in all subscips via new parameter `timing/statistictiming` 2701 2702Interface changes 2703----------------- 2704 2705### New and changed callbacks 2706 2707- rename array arcdatas in digraph to arcdata 2708- changes in clock type are now transferred to SoPlex 2709- corrected wrong primal bound in statistics for unbounded problems 2710- forbid to call SCIPfixVar() in `SCIP_STAGE_PRESOLVED` stage, which is not allowed since it calls SCIPchgVarLb/Ub() 2711 2712### Deleted and changed API methods 2713 2714- rename SCIPdigraphGetNodeDatas() to SCIPdigraphGetNodeData(); 2715- rename SCIPdigraphSetNodeDatas() to SCIPdigraphSetNodeData() 2716- SCIPapplyProximity() has an additional parameter freesubscip, which causes the method to free 2717 the created subscip automatically at the end. 2718 2719### New API functions 2720 2721- SCIPhasPerformedPresolve() to check, e.g., whether LP duals are accessible 2722- SCIPconvertRealTo[Long]Int() to convert reals that represent integers to [long] ints. 2723- SCIPisDualfeasEQ() and related to perform checks w.r.t. to the dual feasibility tolerance 2724- SCIPdeleteSubproblemProximity() to free proximity subproblem manually as external caller 2725 2726### Command line interface 2727 2728- added dialog for writing the finite solution (calling SCIPcreateFiniteSolCopy() before writing) 2729 2730### Interfaces to external software 2731 2732- AMPL interface now returns dual multipliers if problem is an LP and presolving was turned off 2733 2734### Changed parameters 2735 2736- changed default value of parameter `heuristics/proximity/minimprove` to 0.02; previous value was 0.25 2737- changed default value of parameter `heuristics/proximity/usefinallp` to FALSE 2738 2739### New parameters 2740 2741- `timing/rareclockcheck` to call the system time less frequently, based on the current average time interval 2742 between two calls to SCIPsolveIsStopped(); the default value is FALSE 2743- `timing/statistictiming` to enable/disable all timers for statistic output of SCIP; the default value is TRUE 2744 2745### Data structures 2746 2747- renamed MIP matrix structure to `SCIP_MATRIX` 2748- changed the numeric values for `PRESOLTIMING` flags 2749 2750Build system 2751------------ 2752 2753### Makefile 2754 2755- added Makefile support for cygwin 64 Bit 2756- allow to turn off block and buffer memory by the makefile parameters NOBLKMEM, NOBUFMEM, NOBLKBUFMEM; 2757 also remove the now superfluous makefiles for noblkmem, nobufmem, noblkbufmem 2758 2759Fixed bugs 2760---------- 2761 2762- fixed wrong conversion of reals representing negative integer values 2763- in debug mode, SCIP checks that no NaN's are introduced in SCIPsolSetVal() 2764- fixed bug 697 (and 699), calling SCIPsolve() after the problem was already solved and SCIPfreeSolve() was called now 2765 does nothing anymore 2766- added support for character `#` in variable names in old non-linear CIP format (i.e., names without `<` and `>`) 2767- fixed bug 702, removed too hard assert when casting too big values into `SCIP_Longint` 2768- branching for continuous variables with unbounded intervals now takes `branching/clamp` into account 2769- forbid aggregations with scalar smaller feastol or larger 1/feastol 2770- fixed bug 683, not recognizing errors/segfaults especially in free stage of SCIP by improving the check scripts 2771- fixed bug where quieting a message handler also disabled writing to files other than stdout 2772- fixed bug 708, special case of implications led to a fixing 2773- fixed bug, variable bounds detected wrong infeasibility 2774- another bug fix when computing the original variable sum of a given variable in SCIPvarGetOrigvarSum() 2775- fixed setting solution value of multi-aggregated var in xml-solution case 2776- fixed bug changing the variable type of an negated variable 2777- fixed numerical troubles in SCIPcreateFiniteSolCopy() 2778- fixed bug in SCIPpermuteProb(): if called before transforming the problem, data structures were not initialized yet 2779- fixed bug in aggregation procedure if two variables were of non-binary type but for one of the variables 2780 SCIPvarIsBinary() returned true 2781- treat activities of pseudo solutions as invalid when containing positive and negative infinity contributions 2782- fixed bug in GMI example: fractionality of slack variable is now computed correctly 2783- fixed LP interface of CPLEX: functions getBInv* return the correct sign of the coefficients. 2784- fixed bug in SCIPpermuteProb(), when called in transformed stage and non-active constraints exist 2785 2786- Dual: 2787 - use dual feasibility tolerance for comparisons regarding reduced costs 2788 - fixed bug in prop_dualfixing: don't fix variables to infinite values during solving 2789 - fixed sign of the dual multipliers returned by AMPL interfaces for maximization 2790 2791- Objective and Time Limit: 2792 - fixed wrong output of status when an objective limit was imposed but not reached yet 2793 - fixed the rare case that branching was performed even though strong branching found global bound changes leading to 2794 an infeasible/objlimit LP 2795 - fixed bug that objective limit was not reset correctly during SCIPfreeTransform() for maximization problems 2796 - fixed bug that hitting the time limit while solving a pure LP and then continuing the solving process lead to 2797 not solving the LP, but always creating a single child node until maximum depth is reached 2798 2799- Heuristic: 2800 - fixed bug leading to an incorrect dual bound when solving probing LPs within a DURINGPRICINGLOOP heuristic 2801 - fixed bug in proximity heuristic which attempted to enter diving mode even at nodes without a constructed LP 2802 - fixed wrong pseudo cost updates during diving heuristic execution after backtracking 2803 - fixed bug in heur_oneopt: avoid bound violations if shift value is negative due to infeasibilities 2804 - fixed bug that reaching a solution limit by beforenode heuristics lead to disregarding the current node if the 2805 optimization process was restarted later 2806 - fixed bug in trysol heuristic not saving the best solution in maximization problems 2807 2808- Presolve: 2809 - fixed bug in presolving of abspower constraints that lead to wrong variable locks 2810 - allow to call SCIPmarkConsPropagate() in INITPRESOLVE stage 2811 - fixed bug in components presolver with handling of dual fixable variables: unboundedness was not detected, 2812 better handle components with single variables by dual fixing propagator 2813 - issues in component solving by presol_components do not lead to stopping the overall process, anymore, the component 2814 is just disregarded 2815 2816- Memory: 2817 - fixed bug with freeing problem: need to reset objective limit 2818 - fixed memory leaks in case of erroneous parsing of constraints, e.g., non-linear constraints 2819 - fixed missing memory allocation for node data in digraphs 2820 2821- Constraints: 2822 - fixed bug in cons_quadratic which leads to wrong min/max activities 2823 - removed wrong break in cons_pseudoboolean 2824 - fixed bug in cons_varbound.c using the wrong constraint side for updating an upper bound 2825 - fixed bug in presolve of cons_nonlinear: wrong constraint upgrades may have been performed due to outdated bound 2826 information in expression graph 2827 - fixed bug in cons_setppc, wrongly aggregating variables if dual-presolving was disabled 2828 - fixed bug in cons_sos1: locks and events were not initialized if constraint was added to transformed problem 2829 - fixed bug in cons_setppc with dual presolving disabled 2830 - corrected copy of disjunction constraints 2831 2832- Reading: 2833 - allow to read numbers like `42856.` in lp-format 2834 - fixed bug(?) in reader_mps: variables are now written in columns section even of they occur in no constraint 2835 and have an objective coefficient of 0 (otherwise, CPLEX and Gurobi cannot read the file) 2836 - fixed bug with reading `>=1` indicator constraints in LP-files 2837 - fixed bug in reader_lp which created two indicator constraints with the same name to trigger an equality 2838 - fixed bug when reading indicator constraints for linear constraints (equations/ranged rows) from MPS files 2839 2840@section RN310 SCIP 3.1.0 2841************************* 2842 2843Features 2844-------- 2845 2846- added breadth first search node selection 2847- new node selection rule UCT which balances exploration and exploitation by considering node visits 2848- added possibility to not set a cutoff bound in the LP solver (can be enabled by setting `lp/disablecutoff` to TRUE) 2849- added missing debugging solution check for cliques 2850- added a data pointer to each node of the `SCIP_DIGRAPH` 2851- SCIPgetVarCopy() will now copy the original bounds when called for an original variable 2852- added upgrade of continuous variables to implicit variables for linear equations even if the coefficient is 2853 not equal to 1 2854- probing supports implicit binary variables 2855- added scaling to computation of relative interior point in SCIPcomputeLPRelIntPoint() 2856 2857- Solution: 2858 - added two methods to iterate over a sparse solution (`SCIP_SPARSESOLUTION`), see pub_misc.h 2859 - it is now possible to add an offset for the original problem instance, all original solutions will be initialized with 2860 this value and updated, when the offset is changed 2861 - extended and corrected dual feasibility checks for LP solution (controlled by parameter `lp/checkdualfeas`) 2862 2863- Cuts and Separation: 2864 - the rank of cuts is now stored and taken into account to improve numerical stability 2865 - added possibility to separate a cutpool w.r.t. a given solution (instead of LP-solution) 2866 2867- Branching: 2868 - new branching rule `cloud branching` that considers several alternative LP optima 2869 - additional vbc output added: branching information is printed earlier and also for nodes which were cut off 2870 - added support for strong branching with domain propagation in full strong and reliability pseudo cost branching 2871 - added strong branching with domain propagation support: in SCIPstartStrongbranch(), support for propagation can 2872 be enabled (uses the probing mode, some overhead compared to standard strong branching), after that 2873 SCIPgetVarStrongbranchWithPropagation() can be used to perform strong branching on a variable with previous domain 2874 propagation; similar to probing, valid bounds for variables are collected 2875 - strong branching with propagation can be enabled in fullstrong and relpscost branching rule 2876 - added possibility to store pricing norms of the LP solver (in addition to basis information) to speed up LP solving 2877 after a backtrack, e.g. in probing or strong branching with domain propagation 2878 - a pricer can now return that no further pricing should be done but rather early branching, even if it added variables 2879 2880- LP interface: 2881 - SoPlex (>= 1.7.0.5) can compute condition number of current basis matrix via LP interface 2882 - LPI files (lpi*.[h|c]) all moved from src/scip to src/lpi 2883 2884- Constraints: 2885 - added propagation method to cons_xor relying on Gaussian elimination, which can also produce feasible solutions 2886 - added first implication detection in cons_linear 2887 - cons_indicator can now try to construct feasible solutions from a cover 2888 - added possibility to forbid upgrading of linear constraints 2889 - new initial constraints are now added to the LP before solving a probing LP 2890 - first implementation of parsing for nonlinear constraints in CIP format 2891 - added upgrade from varbound constraints to set-packing constraints 2892 - added upgrade from bounddisjunction constraints to set-packing/logicor constraints 2893 - cumulative constraint handler adds disjunctive constraints (cumulative with capacity 1) for all jobs which cannot 2894 be processed in parallel 2895 - added new clique extraction algorithm for linear constraints 2896 - the slack variables of indicator constraints can now be scaled 2897 - added redundancy check of sides of ranged row varbound constraint 2898 - added coefficient tightening for ranged row varbound constraint 2899 - XOR constraint handler can add two extended formulations (flow/asymmetric, parameter `addflowextended/addextendedform`) 2900 - added multi-aggregation for binary variables with at most two uplocks and two downlocks, which emerge from set- 2901 partitioning or set-packing constraints 2902 - added upgrade from quadratic constraints to set-packing constraints 2903 - generalized the linking constraint handler 2904 2905- Reader: 2906 - can now read and write CIP-files with (multi-)aggregated variables 2907 - all readers now take the global parameters `reading/dynamic{conss|cols|rows}` and `reading/initialconss` into account 2908 - added reader_pbm, which writes the constraint-variable incidence matrix in pbm format (possibly scaled to given size) 2909 - reader_osil can now read SOS1 and SOS2 constraints 2910 - reader_lp and reader_mps are now able to write and-constraints in form of their (weak/strict) relaxation 2911 - added reading capability to GAMS reader (if compiling with GAMS=true, requires a GAMS system) 2912 - added capability of writing SOS1/2 constraints to GAMS reader (introduces extra variables and equations) 2913 2914- Heuristic: 2915 - new primal heuristics dual value 2916 - new LNS heuristic called `proximity`, which solves a problem in which a local branching constraint replaces the 2917 objective function which in turn is treated as additional constraint 2918 - new LP-based rounding heuristic (heur_randround) whose randomized rounding is biased towards the LP solution value; 2919 the heuristic uses the probing mode of SCIP to generate conflict clauses on the fractional variables 2920 2921- Presolving: 2922 - added new dual presolving for setppc-constraints 2923 - changed dualfix presolver to propagator such that dual fixing can also be applied during repropagation of the root node 2924 - added full-dual presolving step in setppc constraint handler 2925 - dual solution can now be displayed for pure LPs when no presolving was performed 2926 - added clique presolving for xor constraints 2927 - added presolving using pairs of variable bound constraints that use the same variables 2928 - added more presolving to cons_indicator, checking whether indicator/slack variables are aggregated 2929 - added presolve.{c,h} which should be used for all preprocessing mechanisms executed from within SCIP, corresponding to 2930 solve.{c,h} and also for presprocessing methods which can be called from different plugins or from the core to avoid 2931 code doubling 2932 - return error if variable should be fixed to infinity after presolving (LP-solvers do not handle this consistently) 2933 - in verblevel `SCIP_VERBLEVEL_FULL`, the number of non-zeros will be output for the original and presolved model 2934 - new presolving step for tightening logicor constraints using implication and clique information 2935 - several new presolving steps for linear and knapsack constraints, using gcd information and many more 2936 2937- Statistic: 2938 - added average gap based on primal-dual integral to solution statistics; can be disabled via parameter 2939 `misc/calcintegral` 2940 - the statistics now include the value of the first LP solved at the root node (without cuts) 2941 - added new statistic which distinguishes between internal nodes and leaves which got processed 2942 - new section `Root Node` in statistics, listing objective value, iterations and solving time for the first LP solved 2943 at the root node as well as final dual bound of the root node and LP iterations for processing the root node 2944 (those where listed in the `Solutions` section before, named `Root Dual Bound` and `Root Iterations`) 2945 2946Performance improvements 2947------------------------ 2948 2949- allow multiaggregation of binary variables 2950- shorten conflicts and deriving global boundchanges from conflicts 2951- apply lowerbound provided by pricers already during pricing loop, stop pricing if the lower bound computed by pricing 2952 already exceeds the cutoff bound 2953- improved performance of SCIPcliquelistDel(), SCIPcliquetableAdd(), SCIPcliquetableCleanup() 2954 2955- LP Solution: 2956 - strong branching LP solutions are checked for integrality 2957 - improved LP reoptimization for branch-and-price applications 2958 - improved numerical stability checks for LP solution 2959 - faster feasibility check of LP solutions (controlled by parameters `lp/checkprimfeas` and `lp/checkdualfeas`) 2960 2961- Presolver: 2962 - improved methods SCIPlpiGetBInv{Row,Col,ACol} for row representation in SoPlex LP interface 2963 - improved performance of method SCIPsolRetransform() when called during presolving with many aggregations 2964 - minor presolving performance improvements in cons_logicor.c and cons_knapsack.c 2965 - dual fixing presolver was turned into a propagator 2966 - many presolving improvements in constraint handlers 2967 - improved dual-presolving for setppc constraints in special cases 2968 2969- Constraints: 2970 - major improvements in pseudo-boolean constraint handler 2971 - performance improvement in domain propagation by marking constraints for propagation 2972 - added more constraint upgrading possibilities 2973 - improved handling of initial constraints created during solving 2974 - disabled scaling in feasibility check of nonlinear constraint handlers 2975 - conflict consisting of exactly two binary variables will be handled as set-packing constraint instead of an logicor 2976 constraint and the corresponding clique information is globally added 2977 - fasten repropagation for set-packing and -partitioning constraints 2978 - improved merging of and-constraints 2979 - disabled multi-aggregation in linear constraint handler when coefficients differ too much 2980 - improved multi-aggregation in linear constraint handler when only one variable in the aggregation has infinity 2981 contribution 2982 - added upgradability for implicit binary variable cases for linear constraints 2983 2984Examples and applications 2985------------------------- 2986 2987- new textbook Gomory mixed integer cuts example 2988 2989Interface changes 2990----------------- 2991 2992- removed all message length parameters in message.c and for printing error messages (not needed anymore) 2993 2994### New and changed callbacks 2995 2996- Domain Propagation: 2997 - added parameter `nmarkedconss` to SCIP_DECL_CONSPROP() callback which gives the number of constraints marked 2998 for propagation (these constraints are listed first in the conss array given as parameter). 2999 3000- Primal Heuristics: 3001 - Added parameter `nodeinfeasible` to SCIP_DECL_HEUREXEC() callback which states whether the current subproblem was 3002 already detected to be infeasible. In this case, the current LP solution might not respect local bounds and the 3003 heuristic must not assume that it does. 3004 3005- Variable Pricers: 3006 - Added parameter `stopearly` to callback method SCIP_DECL_PRICERREDCOST(). This boolean pointer should be used by the pricer 3007 to state whether early branching should be performed, even if new variables were added in the current pricing round. 3008 3009- Branching Rules: 3010 - new possible return value `SCIP_DIDNOTFIND` for SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_BRANCHEXECPS(), and 3011 SCIP_DECL_BRANCHEXECEXT() callbacks to state that the branching rule searched, but did not find a branching. 3012 3013### Deleted and changed API methods 3014 3015- SCIPcalcMIR() takes an additional parameter sidetypes to determine which side of the rows to use 3016 (relevant for ranged rows) 3017- SCIPvarParseOriginal() and SCIPvarParseTransformed() now return the end of the parsed string 3018- SCIPgetConsCopy() now always captures the created constraint 3019 3020- Branching: 3021 - Added parameter `nfracimplvars` to SCIPgetLPBranchCands() 3022 - SCIPgetLPBranchCands() can be used to retrieve the number of implicit integer variables with fractional LP solution 3023 value via an additional pointer; the corresponding implicit integer variables can be accessed together with their 3024 fractionalities and solution values in the same way as binary and integer variables before; the arrays are sorted such 3025 that binary and integer variables precede the implicit integer variables; the method SCIPbranchcandGetLPCands() 3026 has been modified in the same way 3027 3028- LP and Cutting Planes: 3029 - Added parameter `sidetypes` to SCIPcalcMIR() to specify the specify row side type to be used. 3030 - Added parameter `cutrank` to SCIPcalcMIR() and SCIPcalcStrongCG() which stores the rank of the returned cut; 3031 via SCIProwChgRank() the rank of a cut can be changed (default rank is 0) 3032 - Added parameter `infeasible` to SCIPaddCut() which is a pointer to store whether the cut is infeasible for the 3033 local bounds. 3034 - SCIPgetLPObjval() now returns the LP value of the current (suboptimal) basis if the iteration limit is hit during LP 3035 solving (instead of -infinity); this value is not necessarily a valid dual bound and must not be used as such, but can 3036 be used as an objective estimate, e.g., if strong branching is simulated using the probing mode 3037 - removed parameter `normtype` from function SCIPcomputeLPRelIntPoint() 3038 3039- Misc: 3040 - Added parameter `lazyconss` to SCIPwriteMIP() to swith writing removable rows as lazy constraints. 3041 - Added parameter `enablepropagation` to SCIPstartStrongbranch(), which can be used to enable strong branching 3042 with domain propagation. 3043 - SCIPstartStrongbranch() has a new parameter `propagate` to enable or disable propagation support for strong branching 3044 - New method SCIPgetVarStrongbranchWithPropagation() which performs strong branching with propagation on a variable. 3045 - Added parameter `endptr` to SCIPparseVar() which stores the final string position after parsing. 3046 3047### New API functions 3048 3049- added SCIPdebugCheckConss() to the debugging mechanism and therefore created a `SCIP_SOL` (in original space) in debug.c 3050- before copying solutions to the original solution candidate storage, infinite solution values can now be removed using SCIPcreateFiniteSolCopy() 3051- SCIPsortLongPtrRealBool(), SCIPsortLongPtrRealRealBool(), SCIPsortLongPtrRealRealIntBool() and corresponding 3052 methods for sorting, insertion and deletion 3053- SCIPstoreSolutionGap() in scip.c, to store the gap when the first and last solution is found 3054- SCIPwriteCliqueGraph() which allows to write a graph with node weights for fractional variables 3055 3056- Separation: 3057 - SCIPconshdlrIncNCutsFound(), SCIPsepaIncNCutsFound() and SCIPsepaIncNCutsFoundAtNode() to increase the number of found cuts 3058 - SCIPseparateSolCutpool() to separate a cutpool w.r.t. a given solution 3059 3060- Constraint Handlers: 3061 - New method SCIPconshdlrGetStrongBranchPropTime() which returns the time used for domain propagation methods 3062 of the constraint handler during strong branching. 3063 - New method SCIPconsIsMarkedPropagate() which returns whether a constraint is marked for propagation. 3064 - New methods SCIPconsAddUpgradeLocks() and SCIPconsGetNUpgradeLocks() to increase or get the number of upgrade 3065 locks of a constraint. 3066 - New method SCIPgetNCheckConss() which returns the number of checked constraints. 3067 3068- Data structures: 3069 - New methods SCIPsparseSolGetFirstSol() and SCIPsparseSolGetNextSol() to get the first sparse solution 3070 or iterate over the sparse solutions, respectively. 3071 - New methods for the `SCIP_QUEUE` data structure in pub_misc.h to handle a (circular) queue, e.g., SCIPqueueCreate(), 3072 SCIPqueueFree(), SCIPqueueInsert(), SCIPqueueRemove(), SCIPqueueFirst(), SCIPqueueIsEmpty(), SCIPqueueNElems() 3073 - New method SCIPgmlWriteNodeWeight() to write a node section including weight to a .gml graph file. 3074 - New methods for hash tables: SCIPhashtableRemoveAll(), SCIPhashtableGetNElements(), SCIPhashtableGetLoad() 3075 - New methods in pub_misc.h to handle a resource activity, e.g., SCIPactivityCreate(), SCIPactivityFree(), 3076 SCIPactivityGetVar(), SCIPactivityGetDemand() ... 3077 - New methods for digraphs: SCIPdigraphResize() to resize the graph and SCIPdigraphSetNodeDatas() and 3078 SCIPdigraphGetNodeDatas() to set and get the data attached to the nodes. 3079 3080- Domain Propagation: 3081 - New method SCIPpropGetStrongBranchPropTime() which returns the time spent by a domain propagator during strong branching. 3082 - New methods SCIPmarkConsPropagate() and SCIPunmarkConsPropagate() to (un)mark a constraint for propagation. 3083 3084- LP and Cutting Planes: 3085 - New methods SCIPchgRowLhsDive() and SCIPchgRowRhsDive() to change left and right hand side of a row during diving. 3086 - Added parameter `cutoff` to SCIPsolveDiveLP(), SCIPsolveProbingLP(), and SCIPsolveProbingLPWithPricing() 3087 which is a pointer to store whether the diving/probing LP was infeasible or the objective limit was reached. 3088 - SCIPgetFirstLP{Dual/Lower}boundRoot() which return the value of the first LP solved at the root node 3089 - SCIPgetNRootFirstLPIterations() which returns the number of LP iterations for the first LP solved at the root node 3090 - SCIPlpiGetNorms(), SCIPlpiSetNorms() and SCIPlpiFreeNorms() for getting the LP pricing norms from the LP 3091 solver, loading them back into the solver and freeing the data 3092 - New method SCIPgetFirstLPTime() and SCIPgetNRootFirstLPIterations() to return time and iterations for the first LP solve 3093 and SCIPgetFirstLPDualboundRoot() and SCIPgetFirstLPLowerboundRoot() to return the first root LP dual and lower bound. 3094 - New method SCIPprintDualSol() which prints the dual solution for a pure LP (works only with preprocessing disabled). 3095 - New method SCIPisCutApplicable() which returns whether a cut is good enough to be applied. 3096 3097- Message Handler: 3098 - the main output routine of message.c (`bufferMessage` now handleMessage) has been rewritten: it now does not need 3099 a copy of the string to be output anymore, which makes the code much simpler (and also faster); it is passed a 3100 function pointer to the output function and uses it to directly output the (buffered) messages 3101 - New generic messagehandler output callback method SCIP_DECL_MESSAGEOUTPUTFUNC(). 3102 - Removed parameter `msglength` from callback method SCIP_DECL_ERRORPRINTING(). 3103 - New method SCIPmessageVPrintError() to print an error message. 3104 - Removed method SCIPmessagePrintWarningHeader(). 3105 3106- Parameters: 3107 - New method SCIPparamGetCharAllowedValues() to get the allowed values for a char parameter. 3108 - New method SCIPgetParam() to get the parameter with a given name. 3109 3110- Variables: 3111 - SCIPapplyProbingVar() in prop_probing.h 3112 without deteriorating its objective value 3113 - SCIPshrinkDisjunctiveVarSet(), which takes an set of variables with corresponding bounds and boundtypes, and 3114 tries to derive global boundchanges and also to shorten this set of variables by using cliqe, implication and 3115 variable bound information 3116 - SCIPselectVarStrongBranching() to get the variable that fullstrongbranching would select 3117 - New method SCIPvarGetValuehistory() to get the value-based history of a variable. 3118 3119- Misc: 3120 - New method SCIPdoNotMultaggr() which returns whether multi-aggregation was disabled. 3121 - New method SCIPcreateFiniteSolCopy() to create a copy of a solution with infinite fixings removed. 3122 - New method SCIPadjustImplicitSolVals() which sets implicit integer variables to an integer value in the given 3123 solution without deteriorating its objective value. 3124 - New method SCIPcopyOrig() to copy the original problem. Analoguosly, use SCIPcopyOrigProb(), SCIPcopyOrigVars(), 3125 and SCIPcopyOrigConss() to copy original problem data, variables, or constraints, respectively. 3126 - New method SCIPwriteCliqueGraph() to write the clique graph in GML format into a given file 3127 - New method SCIPaddOrigObjoffset() to add an offset to the objective function. 3128 in original space and updates all orignal solutions correspondingly 3129 - New method SCIPcopyImplicationsCliques() to copy implications and cliques to a copied SCIP instance. 3130 - New method SCIPgetOpenNodesData() which returns all unprocessed nodes. 3131 - Added parameter `endline` to SCIPprintDisplayLine() to switch printing a newline symbol at the end of the line. 3132 - New method SCIPgetNLimSolsFound() returning the number of feasible primal solution respecting the objective limit. 3133 3134### Command line interface 3135 3136- allow dialog option to write clique graph 3137- dual solution values can now be obtained in the interactive shell after solving a pure 3138 LP without presolving 3139 3140### Interfaces to external software 3141 3142- new SoPlex 2.0 interface, can be enabled with `LPS=spx2` 3143- add support for SOS1 and SOS2 constraints to AMPL interface (see `interfaces/check/testset/SOS/sos?a.mod` for example) 3144- added copy of GAMS interface from COIN-OR/GAMSlinks project; GAMS-reader in SCIP can now read model instances from .gms files 3145- beta version of a python interface for the scipoptsuite is now available under interfaces/python 3146- beta version of a Java native interface is now available under `interfaces/jni` 3147 3148### Changed parameters 3149 3150- parameter `branching/scorefunction` has new value `q` for for `q`uotient branching score function 3151- replaced parameter `lp/checkfeas` by two parameters `lp/checkprimfeas` and `lp/checkdualfeas` to decide on primal and dual 3152 feasibility checks individually 3153- removed all local parameters `reading/(READER)/dynamic{conss|cols|rows}` and replaced them by global parameters 3154 `reading/dynamic{conss|cols|rows}` 3155- changed default value of parameter `numerics/dualfeastol` to 1e-7 for safer dual bounds from LP solver 3156- new possible values for parameter `heuristics/shiftandpropagate/sortkey` for sorting variables w.r.t. their norm, 3157 default changed from `u` to `v`, which means sorting downwards by violations 3158 3159- Constraints: 3160 - changed type of parameters `constraints/bivariate/scaling`, `constraints/quadratic/scaling`, `constraints/soc/scaling` 3161 from boolean to character 3162 - changed default for `constraints/{abspower,bivariate,nonlinear,quadratic,soc}/scaling` to off 3163 - changed default max coefficient for big-M constraint to be initial from 1e6 to 1e9 3164 3165- Separation: 3166 - changed default value of gomory cut separation parameter `separating/gomory/maxrank` from 0 to 3, to take also gomory 3167 cuts that could not be scaled to integral coefficients, with maximal rank 3 into account 3168 - remove parameter `separating/closecuts/relintnormtype` 3169 3170### New parameters 3171 3172- `branching/checksol` and `branching/heursbsol` to specify whether the strong branching LP solution 3173 should be checked for feasibility and whether a simple rounding heuristic should be run on this solution 3174- `branching/firstsbchild` and `branching/forceall` to specify the first child node to be 3175 investigated during strong branching (`u`p, `d`down, `a`uto) and whether always both children should be solved (only for 3176 strong branching with domain propagation, per default, the second child is not looked at when the first is infeasible) 3177- `conflict/fullshortenconflict` to decide whether we want to stop shortening a conflict set, when no 3178 global bound changes can be found anymore 3179- `conflict/maxvarsdetectimpliedbounds` to decide whether the a valid conflict of what maximal length 3180 will be used to derive global bound changes 3181- `constraints/{linear,knapsack}/detectcutoffbound` and `constraints/{linear,knapsack}/detectlowerbound` 3182 to enable/disable detection of constraint parallel to the objective function that will add an cutoffbound or an 3183 lowerbound respectively and these constraints will be prevented from entering the LP 3184- `constraints/and/upgraderesultant` to upgrade resultants of and constraints from binary to implicit binary variables, default is TRUE 3185- `constraints/abspower/scaling` and `constraints/nonlinear/scaling` 3186- `constraints/indicator/scaleslackvar` for scaling of the slack variable in indicator constraints 3187- `constraints/indicator/trysolfromcover` for trying to construct a feasible solution from a cover 3188- `constraints/linear/checkrelmaxabs` for checking linear constraints with a side of 0.0 relative to 3189- `constraints/linear/detectpartialobjective` to enable/disable the detection of sub-equations of the objective function 3190- `constraints/logicor/strengthen`, should pairwise constraint comparison try to strengthen constraints by removing superflous non-zeros? 3191- `constraints/xor/addextendedform` to add an extended formulation in XOR-constraints 3192- `constraints/xor/addflowextended` to add use the extended flow formulation in XOR-constraints 3193- `heuristics/<heurname>/lplimfac` for LNS heuristics to limit the number of LPs solved in a subproblem 3194 the maximum absolute value in the activity instead of 1.0 3195- `heuristics/shiftandpropagate/fixbinlocks` for fixing binary variables with no locks in one direction to the corresponding bound 3196- `heuristics/shiftandpropagate/collectstats` which decides whether variable statistics are collected 3197- `heuristics/shiftandpropagate/impliscontinuous` to decide whether implicit integer variables are treated as continuous variables 3198- `heuristics/shiftandpropagate/preferbinaries` and `heuristics/shiftandpropagate/stopafterfeasible`, 3199 which decide whether binaries should be shifted first and the shifting should be stopped when no violations are left 3200- `lp/disablecutoff` to toggle usage of LP cutoff bound (0: enabled, 1: disabled, 2: auto = disabled if pricers are used) 3201- `misc/calcintegral` (default TRUE) to trigger calculation of primal-dual integral 3202- `misc/finitesolutionstore` to switch whether infinite fixings should be removed from solutions before 3203 copying them to the original solution store 3204- `misc/permuteconss` and `misc/permutevars` to control whether variables and/or constraints should be permuted, if permutationseed != -1 3205- `presolving/components/feastolfactor` to increase the feasibility tolerance in all sub-SCIPs, when solving a component 3206- `propagating/obbt/conditionlimit` to discard instable LP bases 3207- `reading/(READER)/initialconss` that determines whether model constraints are initial 3208- `reading/cipreader/writefixedvars` for disabling printing of fixed variables in CIP format 3209- `reading/lpreader/aggrlinearization-ands` and `reading/mpsreader/aggrlinearization-ands` to enable/disable 3210 the printing of the weak or strict relaxation of and-constraints in LP and MPS format, respectively 3211- `reading/lpreader/linearize-and-constraints` and `reading/mpsreader/linearize-and-constraints` to 3212 allow and-constraints to be linearized when printing in LP and MPS format, respectively 3213- `separating/feastolfac` to allow dynamic decrease of relaxation feasibility tolerance depending on feasibility to applied cuts, 3214 i.e., allow relaxation solutions to have a primal infeasibility of at most this factor times the infeasibility of applied cuts 3215- `separating/gomory/sidetypebasis` to decide whether the sides of ranged rows should be determined from the basis status 3216- `separating/oddcycle/cutthreshold` to run odd cycle separation if not enough cuts have been found 3217- `separating/zerohalf/delayedcuts` to use the delayed cutpool for the zerohalf separator 3218- `write/allconss` to enable that all constraints are written 3219- `write/genericnamesoffset` when writing a generic problem to define an offset on the variable numbering 3220 3221### Data structures 3222 3223- New structure to store value-based branching and inference history (see pub_history.h). 3224- new data structure for (circular) queues (`SCIP_QUEUE`) 3225- hash tables will now increase dynamically 3226- Moved LP solver interfaces to subdirectory `src/lpi`. 3227 3228Testing 3229------- 3230 3231- added McNemar tests and Wilcoxon signed rank tests to cmpres.awk evaluation scripts 3232- added passing MEM option of testgams(cluster) target as workspace option to GAMS jobs 3233- extended test scripts by statistical tests 3234 3235Build system 3236------------ 3237 3238### Makefile 3239 3240- default flag for ZIMPL is now `auto`, which means that it is built if and only if GMP is available (GMP=true) 3241- fixed make install for older Mac systems where install command does not have option -t 3242- dropped support for Ipopt < 3.10 3243 3244Fixed bugs 3245---------- 3246 3247- fixed bug when adding (global) clique, implications or variable bound information in solving stage that lead to 3248 global bound changes which contradict local bounds and therefore need to be stored as pending bound changes 3249- unlinking a solution now copies solution values smaller than SCIPepsilon() avoiding some feasible solution in the 3250 transformed problem to be infeasible in the original problem 3251- fixed bug when flushing the warning buffer when SCIP is closed 3252- fixed bug when a bound change contradicts a local bound and is stored as pending, but the contradicting local 3253 bound becomes global afterwards (--> node where pending bound change is valid can be cut off) 3254- fixed statistics bug: externally given solutions and new solutions found while transforming existing ones 3255 are now listed in line `other solutions` of primal heuristics statistics 3256- fixed bug in random generators SCIPgetRandomInt() and SCIPgetRandomReal() for large intervals 3257- make sure that bound changes of negated original variables are correct 3258 3259- Branching: 3260 - fixed bug w.r.t. changing the variable branching priority beyond the problem stage 3261 - allow again branching on continuous variables with huge bounds 3262 3263- Separation: 3264 - fixed bug in sepa_cgmip computeObjWeightSize() w.r.t. equal sized rows 3265 - fixed wrong bound calculation in sepa_rapidlearning 3266 - fixed bug in flowcover separator to exclude unconstrained rows in aggregation 3267 3268- LP and Interfaces: 3269 - fixed bug that lead to resolving the LP after diving instead of restoring the buffered solution 3270 - fixed rare bug with conflict analysis and LP/LPI having different states after diving 3271 - fixed several bugs in lpi_grb 3272 - fixed wrong strong branching results in lpi_grb.c and an invalid write 3273 - fixed bug in handling max-function in ampl interface; added support for min-function 3274 3275- Presolving: 3276 - fixed bug in prop_dualfix w.r.t. to fixing of variables to infinity after presolving 3277 - fixed wrong presolving finished status which sometimes occurred when the time limit was hit during presolve 3278 - fixed bug where a limit on presolving rounds was exceeded by 1 3279 - fixed minor bugs in presolving in cons_setppc.c and cons_logicor.c 3280 - fixed minor bug in cons_linear w.r.t. disabled presolving 3281 3282- Propagators: 3283 - fixed bug in genvbounds propagator occurring when objective offset or scale changes after a restart 3284 - fixed bug in genvbounds propagator by replacing non-active variables on right-hand side after presolving 3285 3286- Readers: 3287 - fixed memory bug in reader_mps 3288 - fixed several minor bugs with handling of memory when writing aggregated variables (reader_lp, reader_mps) 3289 - fixed bug in reader_lp when writing bilinear terms (product sign was missing) 3290 - fixed bug in reading indicator constraints in mps-format 3291 - nonlinear readers now create auxiliary objective variables and constraints always as initial and not removable 3292 in order to avoid unbounded LPs due to loose variables with infinite best bound 3293 3294- Constraints: 3295 - fixed several bugs where variables or constraints were not freed correctly 3296 - do not multi-aggregate variables if the constant would be a huge value in order to avoid numerical troubles 3297 - fixed bug with infinite multi-aggregation constants 3298 - fixed output of aggregated variables in indicator constraints in lp and mps-format 3299 - improved handling of initial constraints: constraints which are initial, but added during the search to an already 3300 treated node are kept and added to the LP at every node where they are active 3301 - fixed bug in cons_superindicator concerning names of upgraded constraints 3302 - fixed bug in cons_indicator with trying to create solution in problem stage 3303 - fixed bug in cons_orbitope with fixing upper right triangle in non-root nodes 3304 3305Miscellaneous 3306------------- 3307 3308- new SCIP Optimization Suite homepages 3309 3310@page RN30 Release notes for SCIP 3.0 3311 3312@section RN302 SCIP 3.0.2 3313************************* 3314 3315Features 3316-------- 3317 3318- reading erroneous CIP files can now output some indication of syntax errors 3319- can now run splint on core files 3320- cons_xor now uses the integral variable in propagation 3321- allowed to switch on/off the solution debugging 3322 3323Performance improvements 3324------------------------ 3325 3326- improved SCIPlpiAdd{Cols,Rows}() in SoPlex LPi 3327 3328Examples and applications 3329------------------------- 3330 3331Interface changes 3332----------------- 3333 3334### New API functions 3335 3336- SCIPmarkColNotRemovableLocal() and SCIPmarkRowNotRemovableLocal() to forbid removal of an column/row 3337 from the LP in the current node 3338- SCIPmessageVPrintError() 3339 3340### Command line interface 3341 3342- can now output the solutions in the solution pool in the interactive shell 3343 3344### Interfaces to external software 3345 3346- updated Mosek LP interface to compile with Mosek 7 3347 3348Fixed bugs 3349---------- 3350 3351- fixed bugs in solution counting 3352- fixed fieldtypes in sorting template 3353- fixed bug concerning the userinterrupt flag, which was not reset 3354- fixed solution collection when counting solutions 3355- fixed bug with storing original solutions 3356- fixed bug with infinite multi-aggregation constants 3357- fixed bug that removing reverse implication did not reset closestvblpcount 3358- fixed bug that duplicate solutions stopped copying of solutions to original solution candidate store 3359- forbid branching on variables with huge bounds; such huge values cannot be enumerated with fixed precision 3360 floating point arithmetics 3361- fixed bug that Ipopt's error message was not fully shown due to exiting before the message handler buffer was emptied 3362- unlinking a solution now copies solution values smaller than SCIPepsilon() avoiding some feasible solution in the 3363 transformed problem to be infeasible in the original problem 3364- allow to add columns (rows) with nonzero indices beyond current number of rows (columns) in SoPlex LPi 3365- updated get.ASL script to cope with broken ftp access to netlib server 3366 3367- Memory: 3368 - fixed bugs with freeing C++ object data for problem and variables 3369 - fixed memory leak in lp.c (probably never occurred so far since array was not used) 3370 - fixed bug in sepa_zerohalf.c where the maxcuts(root) parameters led to an invalid memory allocation call 3371 3372- LP: 3373 - fixed assert in solve.c with branched status and LP reached the objective limit 3374 - fixed bug in heur_oneopt.c and heur_clique.c which was caused by side-effects when calling SCIPconstructLP(); when 3375 adding new variables in this method (e.g. adding new variables needed for a relaxation), this changes the variables 3376 array of SCIP 3377 - fixed problem that diving did not save status for infeasible LPs 3378 - fixed bug in SCIPlpComputeRelIntPoint() with wrong iteration limit and with wrong recompution 3379 - fixed bug that old LP size was not updated for deadend if no LP was solved 3380 3381- Expressions: 3382 - fixed issues with ungraceful termination when encountering unsupported expression operands in AMPL interface 3383 - fixed bug in backward propagation of linear expressions in expression graph 3384 3385- Propagation: 3386 - fixed potential performance issue with tree depth always assumed to be zero when propagating in probing mode 3387 - fixed bug in prop_vbound w.r.t. creation of variables during the search 3388 - fixed several bugs in propagation of cons_xor: need to take integral variables into account 3389 - fixed bug in cons_abspower.c handling infinity values in propagation 3390 - fixed bug in cons_and.c when a constraint was not correctly propagated which led to wrong dual-presolve reductions 3391 - fixed bug in cons_abspower: wrong infinity check when propagating bounds 3392 3393- Presolving: 3394 - fixed bug that the number aggregated variables were not counted in presol_inttobinary.c 3395 - fixed bug in presol_domcol: locks are now checked to see whether rounding was forbidden for a variable 3396 3397- Reader: 3398 - fixed bug in reader_gms.c w.r.t. writing nonlinear expressions with polynomials with constants 3399 - fixed bugs in parsing bounds from CIP-files, in reader_gms and AMPL interface 3400 - fixed bug when reading a mps formated file with a missing bound in the bound section 3401 3402- Constraints: 3403 - fixed bug in cons_bounddisjunction with satisfied literal of multi-aggregated variable 3404 - fixed bug in upgrade method of cons_soc 3405 - fixed issue with negated variables in cons_xor.c 3406 - fixed several asserts in cons_xor presolving 3407 - fixed bug in cons_xor.c calling method on null pointer row 3408 - fixed bug using a too hard comparison on the objective-infeasible-decision in constraint enforcement 3409 - fixed possible cycling in enforcement of nonlinear constraints due to too early removal of newly added cuts from LP 3410 - fixed bug wrongly removing constraints locally while counting 3411 - fixed bugs in cons_bivariate.c when the nonlinear function is not differentiable on the boundary of the domain 3412 - fixed bug in cons_indicator.c:SCIPmakeIndicatorFeasible() with handling fixed variables 3413 - fixed bug in cons_integral: check integrality of implicit integer variables when a solution is checked for feasibility 3414 - fixed bug in Undercover with `pseudo-`quadratic constraints 3415 - fixed bug with quadratic constraints not being upgraded 3416 - fixed bug in intervalarith.c: bivariate quad. equations may have been solved wrongly if second variable is unbounded 3417 3418- Separation: 3419 - fixed bug in sepa_zerohalf.c not copying the displays to the subscip, but still changing a display parameter there 3420 - fixed iteration limit determination in sepa_closecuts 3421 - fixed bug in sepa_closecuts: need to make sure that variable values of separation point satisfy bounds 3422 - fixed bugs in sepa_oddcylce: number of arcs have to be adjusted, handle implicit binary variables, 3423 fixed bug in heuristic separation method, fixed asserts 3424 - fixed wrong bound calculation in sepa_rapidlearning 3425 3426@section RN301 SCIP 3.0.1 3427************************* 3428 3429Features 3430-------- 3431 3432- added delayed cutpool which only gets separated if the sepastore is empty after a separation round 3433- sepa_cgmip can now take the objective row into account 3434- added possibility to run clang compiler 3435- statistics now include output on number of solutions that respect objective limit 3436 3437Performance improvements 3438------------------------ 3439 3440- also copying active tight cuts from the delayed cut pool when calling SCIPcopyCuts() 3441- sort genvbounds only when root node is finished; apply more often 3442 3443Examples and applications 3444------------------------- 3445 3446Interface changes 3447----------------- 3448 3449- when using an objective limit, heuristic characters are not displayed any longer for worse solutions 3450 3451### Deleted and changed API methods 3452 3453- fixed spelling in the method name SCIPgmlWriteClosing() 3454 3455### New API functions 3456 3457- SCIPgetNLimSolsFound() to get number of solutions that respect the objective limit 3458 3459Fixed bugs 3460---------- 3461 3462- fixed issue with applying the effective root depth during the search 3463- fixed bug concerning usage of dualbound and lowerbound 3464- fixed bug trying to color probing nodes, which are not added to the vbc output anymore 3465- fixed bug in sorting template 3466- fixed bug leading to removing a ranged row parallel to the objective function, although one of the sides was still needed 3467- fixed a bug correcting the binvarssorted flag in cons_linear.c 3468- fixed bug in cons_varbound.c not resolving multi-aggregated variables 3469- relaxed assert in SCIPvarCh{Lb,Ub}{Global,Local} that new bound must be tighter to feastol 3470- fixed contra-intuitive behavior when using SCIP with objective limits and solution limit at the same time; 3471 SCIP now only stops when sufficiently many solutions better than the objective limit have been found 3472- fixed bug when adding binary implications with non-vartype binary variables 3473- fixed bug adding binary implications on binary variables with type != `SCIP_VARTYPE_BINARY` 3474- fixed bug concerning different tolerances for reached objective limit in case of pricing with fastmip 3475 3476- LP: 3477 - fixed bug which disabled iteration limit in SCIPlpSolveAndEval() 3478 - ensure consistency of LP bounds during OBBT diving, i.e., that lower <= upper holds exactly 3479 - set lpsolstat to `SCIP_LPSOLSTAT_NOTSOLVED` in SCIPchg{Lp,Dual}feastol() 3480 - use tighter dual feasibility tolerance for LPs solved during optimization-based bound tightening 3481 - fixed bug with unflushed LP arising from global bound changes in strong branching 3482 3483- Constraints: 3484 - fixed issue with deleting varbound constraints in case the bound change was not applied 3485 - fixed bugs in parsing dis-/conjunctive constraints 3486 - fixed bug with handling of empty logicor and bounddisjunction constraints 3487 - fixed issue in cumulative constraint and separation 3488 - fixed bug when sorting knapsack constraints with the same weights 3489 - fixed bug resulting in trying to delete an upgraded linear constraint a second time in exitpre callback 3490 - fixed minor bug in conjunctive constraint handler printing wrong constraint 3491 - fixed bug in disjunctive constraint handler when enforcing a constraint 3492 - fixed behaviour change of indicator constraint handler when solving another instance after solving one using the 3493 interactive shell 3494 - fixed several issues in cumulative constraint handler 3495 - fixed bug in cumulative constraint handler w.r.t. getting active variables 3496 - fixed bug in cumulative constraint handler concerning conflict analysis 3497 3498- LPI and Interfaces: 3499 - fixed bug in CppAD in connection with abspower constraints 3500 - fixed bug in CppAD when using signpower functions with expression pointers that do not fit into an unsigned int 3501 - better handling of generalized (Lagrangian) variable bounds that are not in the LPI 3502 - fixed wrong basis rstat values in CPLEX LPI 3503 - fixed bug with LP not being flushed after bound changes on columns that are not in the LPI 3504 - methods SCIPlpiIs{PrimalFeasible,DualFeasible,DualUnbounded}() in SoPlex LPi now check that the LP is not perturbed, 3505 which may happen when stopping due to iteration or time limit 3506 - fixed inconsistencies between methods SCIPlpiIs{PrimalFeasible,DualFeasible,Optimal,...} in SoPlex LPi 3507 3508- Propagation: 3509 - fixed bug when adding linear constraints with non active variables in solving process, during propagation this 3510 resulted in changing the row, which is not possible for unmodifiable constraints/locked rows 3511 - fixed small issue in pseudo objective propagator w.r.t. propagating the lower bound globally 3512 - fixed bug in cons_orbitope: in rare cases one cannot repropagate 3513 - fixed bug of wrong result code in propagation in prop_genvbound.c 3514 3515- Presolve: 3516 - fixed bug in copying nonlinear constraints during presolve (resulted 3517 in wrongly declaring instances as infeasible when using component presolve) 3518 - fixed bug in copying nonlinear constraints during presolve (nonlinear part was not copied) 3519 3520- Heuristics: 3521 - fixed wrong solving status (OPTIMAL) in case an unbounded solution was provided or found by heuristic before presolve 3522 - fixed bug in heur_subnlp running with tightened tolerances: sumepsilon must be tightened like feastol and epsilon 3523 - fixed bug in nlp diving heuristic for fractional variables with values slightly outside of their domain 3524 3525- Numerics: 3526 - fixed several numeric issues 3527 - fixed numerical bug in conflict.c relaxing bounds while keeping an infeasibility proof 3528 - fixed feasibility decision bug when replacing inactive variables by their active counterparts, which might change the 3529 redundancy status of a bounddisjunction constraint due to numerics 3530 - fixed numerical bug adding a relaxed bound for conflict analysis in cons_varbound 3531 - fixed numerical bug in conflict analysis of genvbounds propagator 3532 3533@section RN300 SCIP 3.0.0 3534************************* 3535 3536Features 3537-------- 3538 3539- SCIPcomputeLPRelIntPoint() with normtype=`s` now uses homogenized LP for computing rel.int. point too and allow to 3540 set relaxrows = FALSE 3541- new column showing the pseudo objective value 3542- digraph structure added to misc.c and pub_misc.h that can be used to handle directed graphs, compute undirected 3543 components in the graph and sort these components (almost) topologically 3544- SCIP does now print an info message when the root LP could not be solved or is unbounded 3545- added counter and clock for SCIPcopy() calls 3546- correct initialization of steepest edge weights with SoPlex 1.6.0.4 3547- parameters can now be fixed, which means that their value cannot be changed unless they are unfixed, first; 3548 the fixing status of a parameter is copied to sub-SCIPs, which allows to ensure that certain parameters 3549 are also not changed when, e.g., heuristics change emphasis settings or also specific parameters 3550- automatic transfer of original solutions (e.g., provided by the user, from solution pool, after restart, from heuristic 3551 adding original solution during solve) to the transformed space (might fail due to, e.g., dual fixings) 3552- added possibility to use GUBs for lifting knapsack cuts (disabled) 3553- added pre- and post-conditions in doxygen documentation for all methods of scip.{c,h} 3554- added zeroobj heuristic that solves a copy of the problem without an objective function and with quite strict limits 3555 on the number of nodes and LP iterations 3556- complete reworking of the vbounds propagator: it now takes into account variable bounds, cliques and implications, 3557 stores bounds of variables which were changed and performs a forward propagation from these bounds, i.e., tries to 3558 derive new bounds for other variables; during propagation, bound changes are propagated in an (almost) topological order 3559 3560- Constraints: 3561 - full version of cumulative constraint handler 3562 - new constraint handler `superindicator` for indicator constraints with slack constraints of arbitrary type 3563 - implemented first clique lifting procedure in cons_setppc.c (by default is off) 3564 - the conjunction and disjunction constraint handlers are now able to parse their CIP output format 3565 3566- Memory: 3567 - better handling of memory limits, in particular for large problems 3568 - estimate memory consumption for sub-SCIP and do not copy them if close to memory limit 3569 3570- Presolve: 3571 - time for initpre and exitpre methods is now also measured in presolving time 3572 - added dual presolving for and-constraints difficult instances (no guarantees) 3573 - oneopt can now be called before presolving 3574 - added a presolving step in the disjunctive constraint handler, removing disjunction, where a sub-constraint was 3575 deleted, which means this sub-constraint is redundant, which again means it is always TRUE or will be enforced by 3576 another constraint 3577 - added new presolver convertinttobin, which converts bounded integer variables to their binary representation, e.g. 3578 for integer variable 0 <= x <= 10 the binary variables y0, y1, y2 and y3 are created, such that 3579 1 y0 + 2 y1 + 4 y2 + 8 y3 <= 10 and x = 1 y0 + 2 y1 + 4 y2 + 8 y3 3580 - added new presolver gateextraction, which tries to find and-gates/constraints which are linearized 3581 e.g. (x + y + z >= 1, x + y <= 1 and x + z <= 1 => x == AND(~y,~z)), in special cases it also detects set-partitioning 3582 constraints e.g. (x + y + z >= 1, x + y <= 1, x + z <= 1 and y + z <= 1 => x + y + z == 1)); 3583 gate-extractor is also able to detect logicor constraints and set-packing/-partitioning constraints with the same 3584 variables, to upgrade these both constraints to a set-partitioning constraint 3585 - added new presolver components, that searches for independent components in the problem structure and solves 3586 these components as sub-SCIPs when they are small enough (per default <= 20 discrete variables, nodelimit of 10000) 3587 - added new presolver domcol that looks for dominated columns in a MIP and tries to fix them 3588 3589- Reader: 3590 - CNF reader now creates feasibility instances per default, usage of an objective has to be set by a parameter 3591 - added reader for MI(NL)Ps in OSiL (Optimization Services Instance Language) format 3592 3593- Statistic: 3594 - new statistics and new statistic output messages 3595 - number of presolving calls of plugins is counted and displayed in the statistics, 3596 can be accessed via SCIPpresolGetNCalls() and SCIP{prop/conshdlr}getNPresolCalls() 3597 - the statistics shows for a branching rule the number of calls for LP, extern and pseudo candidates 3598 - new switch `SCIP_STATISTIC` and new macros SCIPstatisticMessage(), SCIPstatisticPrintf() and SCIPstatistic() to output 3599 statistic and execute code lines which are only needed therefor. Works as `SCIP_DEBUG` and SCIPdebugXyz() 3600 - added statistics on the number of cuts/rows that have actually been applied to the lp for each constraint handler and separator; 3601 use SCIPcreate(Empty)RowCons() and SCIPcreate(Empty)RowSepa() to support the statistics. 3602 3603- NLP: 3604 - new propagators obbt and genvbounds for MINLP 3605 - new NLPI parameter `SCIP_NLPPAR_FASTFAIL` to enable convergence checks in NLP solver to stop early on seemingly 3606 - added nlpdiving heuristic that comprises several diving heuristics using an NLP relaxation 3607 3608Performance improvements 3609------------------------ 3610 3611- improved scaling by choosing the smallest scaler 3612- if first root lp is solved and the optimality is rejected by SCIP, there won't be an unnecessary solving of the lp 3613 from scratch again 3614- several performance improvements for Pseudo-Boolean optimization, pseudo objective propagator 3615- streamlined initlp functions in cons_indicator, cons_sos1, cons_sos2 (add rows only if needed) 3616- improved time used for adding implications 3617- speed up in SCIPboolarrayExtend() in misc.c replacing a for loop with BMSmoveMemoryArray() call 3618- speed up in var.c changing some recursive calls into iterative calls and reducing the number of VARFIX event that are 3619 thrown for fixation, aggregation or multi-aggregations 3620- revised reduced cost propagator 3621- increased performance in SCIPcliqueAddVar(), adding a variable to a clique 3622- tighten primal and dual feasibility tolerances independently if they are not reached in LP solving 3623 3624- Probing: 3625 - if probing reached the end of all variables it will restart the probing cycle correctly 3626 - improved probing by ordering the variables differently and applying the one-branch before the zero-branch 3627 3628- Constraints: 3629 - improved scaling of linear constraints, linear constraints with integral variables will now be scale with 3630 1e+06/MAX(maximal absolute coefficient, 1.0) instead of 1e+03/MAX(maximal absolute coefficient, 1.0); 3631 if all coefficients are in absolute value equal they will be scaled by that 3632 - added clique presolving for and-constraints, which checks if two operands or one operand and the resultant are in a 3633 clique and then fixes the resultant to 0 and in the former case we can delete the and-constraint too 3634 - speed up in linear constraint handler replacing aggregated variables 3635 - when all nonlinearities have been fixed and the number of nonfixed variables is 1 in cons_nonlinear/cons_quadratic/ 3636 cons_bivariate, handle it by a bound change instead of adding a linear constraint 3637 3638- Separation: 3639 - automatically turn off separation in sepa_oddcycle if it was too unsuccessful within the last calls 3640 - use faster Dijkstra variants in sepa_oddcycle 3641 - improved tcliquegraphAddImplicsVars() in sepa_clique.c to faster add possible variables 3642 - changed emphasis settings: knapsack disaggregation is now allowed in fast presolving, CG-MIP separator disabled in 3643 aggressive separation 3644 3645- Reader: 3646 - improved lp-, mps-, opb-reading time 3647 - speed up mps reader asking parameters only once 3648 3649- Heuristics: 3650 - added parameters mincoveredrel and mincoveredabs to heur_undercover to only run if problem is sufficiently nonlinear 3651 - improved intdiving heuristic by activating backtracking to a different fixing value 3652 - heur_undercover treats indicator constraints as nonlinear and fixes the binary variable for linearization 3653 3654Examples and applications 3655------------------------- 3656 3657- new examples for scheduling and usage of the callable library with nonlinear problems 3658- the error messages are not handled via the message handler anymore; per default the error message a written to stderr 3659 3660Interface changes 3661----------------- 3662 3663- introduced basic inclusion and creation methods to simplify usage of the SCIP library 3664- allowed to start diving mode even if LP is not flushed, not solved, or not solved to optimality 3665- changed the message handler system within SCIP heavily such that it is thread save 3666- the resolve propagation methods for the constraint handler and propagator getting a new parameter called relaxedbd; 3667 explaining/resolving this relaxed bound is sufficient 3668- default integer comparer SCIPsortCompInt() (see pub_misc.h) 3669 3670- LP interface: 3671 - SoPlex LPI supports setting of `SCIP_LPPAR_DUALFEASTOL` when using SoPlex version 1.6.0.5 and higher. 3672 3673- Problem: 3674 - Forbid problem modifications in `SCIP_STAGE_{INIT,EXIT}PRESOLVE` (see pre-conditions for corresponding methods in scip.h). 3675 3676- Miscellaneous: 3677 - New macro SCIPdebugPrintCons() to print constraint only if `SCIP_DEBUG` flag is set. 3678 - all objscip *.h file now use the default SCIP interface macros (this should avoid errors when changing the interface) 3679 3680### New and changed callbacks 3681 3682- Constraint Handler: 3683 - Added a propagation timing parameter `proptiming` to SCIP_DECL_CONSPROP(), giving the current timing at which 3684 this method is called (also to the corresponding c++ wrapper classes). 3685 - New optional callback methods in constraint handlers: `SCIP_DECL_CONSGETVARS` and `SCIP_DECL_CONSGETNVARS`. 3686 These callbacks, if implemented, should return an array of all variables and the number of all variables used 3687 by the given constraint, respectively. (This method might, e.g., be called by a presolver) 3688 3689- NLP Solver Interface: 3690 - New NLPI callback SCIP_DECL_NLPISETMESSAGEHDLR() to set message handler in NLP solver interfaces. 3691 3692- Propagator: 3693 - Added a propagation timing parameter `proptiming` to SCIP_DECL_PROPEXEC(), giving the current timing at which this method is 3694 called (also to the corresponding c++ wrapper classes). 3695 3696- Plugin management: 3697 - added `basic` inclusion methods which have only fundamental data of the plug-ins as arguments; added setter functions 3698 for all non-fundamental callbacks of the plug-ins; the plug-in types with basic inclusion functions are: 3699 readers, constraint handlers, conflict handlers, presolvers, propagators, heuristics, separators, relaxation handlers, 3700 branching rules, node selectors and pricers; these methods should make the usage easier, sparing out optional callbacks and 3701 parameters: e.g., SCIPincludeConshdlrBasic(); 3702 - To extend the basic functionalities, there are setter method to add 3703 optional callbacks. For example SCIPsetConshdlrParse(), SCIPsetPropCopy() or SCIPsetHeurInitsol(). 3704 3705- Constraint Handlers: 3706 - Added basic creation methods for all constraints types, e.g., SCIPcreateConsBasicLinear(); these methods should make the usage easier, 3707 sparing out optional callbacks and parameters. 3708 3709### Deleted and changed API methods 3710 3711- SCIPcomputeCoverUndercover() now has an additional parameter coverbd 3712- tcliqueMaxClique has an additional parameter to store the number of used branch-and-bound nodes 3713- the code in `src/dijkstra` and `src/xml` has been changed to (increasingly) conform to the SCIP coding style; 3714 all function (and variable) names have been changed (do not contain `_` anymore). 3715- renamed SCIPstairmap*Core() to SCIPstairmap*Stair() 3716 3717- Conflict Analysis: 3718 - Added parameter `relaxedbds` to conflict handler callback method SCIP_DECL_CONFLICTEXEC(). This array contains 3719 bounds which are sufficient to create a valid conflict 3720 3721- Constraint Handler: 3722 - Added a parameter `restart` to the SCIP_DECL_CONSEXITSOL() callback method, indicating whether this call was 3723 triggered by a restart. 3724 - Added a parameter `relaxedbd` to SCIP_DECL_CONSRESPROP() callback method. If explaining a given bound change 3725 (index), it is sufficient to explain the reason for reaching the `relaxedbd` value, see above 3726 - Removed parameters `isunbounded`, `isinfeasible` and `result` from SCIP_DECL_CONSINITPRE() and SCIP_DECL_CONSEXITPRE() 3727 callback methods. It is not allowed to determine unboundedness or infeasibility in these callbacks, anymore. 3728 - added a `SCIP_CONS*` parameter to SCIPcreateConsDisjunction() which can represent the linear relaxation of the whole 3729 disjunction constraint as a conjunction constraint, or `NULL` 3730 - remove problematic function cons_indicator:SCIPsetSlackVarIndicator() 3731 - Renamed SCIPgetCountedSparseSolutions() to SCIPgetCountedSparseSols() in cons_countsols.{c,h}. 3732 3733- Counting: 3734 - Changed the counting system within SCIP heavily. New method for `SCIP_SPARSESOL` usage, SCIPsparseSolCreate(), 3735 SCIPsparseSolFree(), SCIPsparseSolGetVars(), SCIPsparseSolGetNVars(), SCIPsparseSolGetLbs(), SCIPsparseSolGetUbs() 3736 in (pub_)misc.{c,h}. 3737 3738- Cuts and Separation: 3739 - removed `targetscip` parameter from SCIPconvertCutsToConss(), now this function can only convert cuts on one instance, 3740 otherwise use SCIPcopyCuts() 3741 - added `ncutsadded` parameter to SCIPcopyCuts() to be able to store the number of copied/converted cuts 3742 - New functions SCIPcreateEmptyRowCons(), SCIPcreateEmptyRowSepa(), SCIPcreateRowCons(), and SCIPcreateRowSepa() that allow 3743 to set the originating constraint handler or separator of a row respectively; this is, for instance, needed for statistics 3744 on the number of applied cuts. If rows are created outside a constraint handler or separator use SCIPcreateRowUnspec() and 3745 SCIPcreateEmptyRowUnspec(). The use of SCIPcreateEmptyRow() and SCIPcreateRow() is deprecated. 3746 - New functions SCIProwGetOrigintype(), SCIProwGetOriginCons(), and SCIProwGetOriginSepa() to obtain the originator 3747 that created a row. 3748 3749- LP: 3750 - new parameter numerics/lpfeastol for primal feasibility tolerance used in LP solver 3751 - SCIPcomputeLPRelIntPoint() takes two new arguments giving a time and iteration limit 3752 - SCIPcolGetStrongbranchLPAge(), SCIPgetVarStrongbranchLPAge(), SCIPgetNLPs(), SCIPgetNPrimalLPs(), SCIPgetNDualLPs(), 3753 SCIPgetNBarrierLPs(), SCIPgetNResolveLPs(), SCIPgetNPrimalResolveLPs(), SCIPgetNDualResolveLPs(), SCIPgetNNodeLPs(), 3754 SCIPgetNNodeInitLPs(), SCIPgetNDivingLPs(), SCIPgetNStrongbranchs(), SCIPgetNRootStrongbranchs() now return a longint 3755 instead of an integer 3756 3757- Message Handler and Printing: 3758 - New callback method SCIP_DECL_MESSAGEHDLRFREE() which is called when the message handler is freed. 3759 - The old callback method SCIP_DECL_MESSAGEERROR() was replaced by the callback method SCIP_DECL_ERRORPRINTING(). 3760 - the follwing methods additionally need the SCIP pointer as parameter to make the output thread save: 3761 SCIPprintVersion(), SCIPsetMessagehdlr(), SCIPgetMessagehdlr() and SCIPwarningMessage() 3762 - the error printing method can be replaced using the method SCIPmessageSetErrorPrinting(); the default error message 3763 printing can be recoverd via SCIPmessageSetErrorPrintingDefault() (see pub_message.h) 3764 - Changed the message handler system within SCIP heavily such that it is thread-safe. SCIPcreateMessagehdlr() in 3765 scip.{c,h} was replaced by SCIPmessagehdlrCreate() in pub_message.h/message.c with a changed parameter list; 3766 see pub_message.h and type_message.h. 3767 - removed method SCIPcreateMesshdlr(), please use SCIPmessagehdlrCreate() (see pub_message.c) 3768 - removed method SCIPfreeMesshdlr(), please use SCIPmessagehdlrRelease() (see pub_message.c) 3769 - Error messages (SCIPerrorMessage()) are not handled via the message handler anymore; per default the error 3770 message is written to stderr. 3771 - the following methods need an additional message handler: SCIPdispLongint(), SCIPdispInt(), SCIPdispTime(), all message 3772 handler methods (see pub_message.h), SCIPhashtablePrintStatistics(), SCIPhashmapPrintStatistics(), SCIPlpiCreate() 3773 - SCIPprintCons() does not print termination symbol `;\n` anymore; if wanted, use SCIPinfoMessage() to print `;\n` manually 3774 - remove SCIPcolPrint() and SCIProwPrint(), please use SCIPprintCol() SCIPprintRow() see scip.h 3775 - method SCIPprintError() does not need the file stream anymore. The error is written via the error message callback. 3776 3777- Nonlinear expressions, relaxation, and solver interface: 3778 - Method SCIPexprtreeRemoveFixedVars() is not public anymore. 3779 - Renamed SCIPmarkNonlinearitiesPresent() to SCIPenableNLP() 3780 - Renamed SCIPhasNonlinearitiesPresent() to SCIPisNLPEnabled(). 3781 - removed SCIPmarkContinuousNonlinearitiesPresent(), 3782 renamed SCIPhasContinuousNonlinearitiesPresent() to SCIPhasNLPContinuousNonlinearity() and allow call only during 3783 initsolve and solve, 3784 3785- Parameters: 3786 - Replaced SCIPparamSet*() by SCIPchg*Param() 3787 + replaced SCIPparamSetBool() by SCIPchgBoolParam() 3788 + replaced SCIPparamSetInt() by SCIPchgIntParam() 3789 + replaced SCIPparamSetLongint() by SCIPchgLongintParam() 3790 + replaced SCIPparamSetReal() by SCIPchgRealParam() 3791 + replaced SCIPparamSetChar() by SCIPchgCharParam() 3792 + replaced SCIPparamSetString() by SCIPchgStringParam() 3793 3794- Presolving: 3795 - Removed parameters `isunbounded`, `isinfeasible` and `result` from SCIP_DECL_PRESOLINITPRE() and 3796 SCIP_DECL_PRESOLSEXITPRE(). It is not allowed to determine unboundedness or infeasibility in these callbacks, anymore. 3797 3798- Propagator: 3799 - changed parameters of function SCIPpropagateCutoffboundVar() in prop_pseudoobj.{c,h} 3800 - Added a parameter `restart` to SCIP_DECL_PROPEXITSOL() callback method, indicating whether this call was triggered 3801 by a restart. 3802 - Added a parameter `relaxedbd` to SCIP_DECL_PROPRESPROP() callback method. If explaining a given bound change 3803 (index), it is sufficient to explain the reason for reaching the `relaxedbd` value. 3804 - Removed parameters `isunbounded`, `isinfeasible` and `result` from SCIP_DECL_PROPINITPRE() and 3805 SCIP_DECL_PROPEXITPRE() callback methods. It is not allowed to determined unboundedness or infeasibility in 3806 these callbacks, anymore. 3807 3808- Sort and Copy: 3809 - The methods SCIPsortedvecInsert*() have an additional parameter which can be used to receive the position where 3810 the new element was inserted, if this is not of interest a `NULL` pointer can be given 3811 - new parameter in SCIPcopyPlugins() to indicate whether the message handler from the source SCIP should be passed to the 3812 target SCIP (only the pointer is copied and the usage counter of the message handler is increased) 3813 - New parameter in SCIPcopy() to indicate whether the message handler from the source SCIP 3814 should be passed to the target SCIP (only the pointer is copied and the usage counter of the message handler is 3815 increased). In multi theaded enviroment this parameter needs to be set to FALSE. 3816 3817- Variable usage: 3818 - rename SCIPvarGetBestBound() to SCIPvarGetBestBoundLocal() 3819 - rename SCIPvarGetWorstBound() to SCIPvarGetWorstBoundLocal() 3820 - Method SCIPvarGetProbvarSum() is not public anymore, use SCIPgetProbvarSum() instead. 3821 - Replaced method SCIPvarGetRootRedcost() by SCIPvarGetBestRootRedcost(). 3822 3823### New API functions 3824 3825- setup timer to all plugins and therefore SCIP<plugin-type>GetSetupTime() methods in all pub_plugin-type.h to ask 3826 for this time (, e.g. SCIPeventhdlrGetSetupTime() in pub_event.h) 3827- new GML(Graph Modeling Language) methods SCIPgmlWriteOpening(), SCIPgmlWriteCosing(), SCIPgmlWriteArc(), SCIPgmlWriteEdge(), 3828 SCIPgmlWriteNode() that write to a given GML file 3829- new LPI method SCIPlpiGetObjsen() to query objective sense 3830- SCIPpermuteIntArray() in pub_misc.h and misc.c for permuting an integer array 3831- SCIPcalcBinomCoef() in pub_misc.h and misc.c which calculates a binomial coefficient up to 33 over 16 3832- SCIPheurPassSolAddSol() in heur_trysol.c; solution which are passed via this method are just without any feasibility check 3833- SCIPgetGlobalPseudoObjval() which returns the global pseudo objective value which is all variables 3834 set to their best (w.r.t. the objective function) global bound 3835- SCIPhashGetKeyStandard() which returns the element itself as the key, SCIPhashKeyEqPtr(), 3836 SCIPhashKeyValPtr() which do the hash-comparison/-conversion on a pointer in pub_misc.h 3837- SCIPhashtableClear() which removes all elements of a hash table 3838- SCIPisUpdateUnreliable() to check whether an iteratively updated value should be recomputed from scratch 3839 (e.g., for activities; uses new parameter `misc/num_recompfac`) 3840- SCIPisHugeValue() to check whether a value is huge and should be handled separately from other values 3841 (e.g., in activity computations) and SCIPgetHugeValue() to get the smallest value counting as huge 3842- SCIPfixParam() and SCIPunfixParam() to fix and unfix a parameter, respectively; 3843 the fixing status of a parameter can be requested by SCIPparamIsFixed(); 3844- SCIPsetBasePointClosecuts() to set the base point for close cut separation 3845- SCIPchgCutoffboundDive() to change the cutoffbound in diving mode 3846- SCIPupdateCutoffbound() which can be used to pass a cutoff bound 3847 3848- Presolving: 3849 - SCIPpropIsPresolDelayed() which return if a propagator is delay during presolving 3850 - Added method SCIPisPresolveFinished() which returns whether the presolving process would be stopped after the 3851 current presolving round, given no further reductions will be found, can be used to ensure that a presolver is called very late 3852 3853- Memory: 3854 - added forgotten implementation of SCIPfreeMemorySize(), SCIPfreeMemorySizeNull() in scip.h and BMSfreeMemorySize(), 3855 BMSfreeMemorySizeNull() in memory.h 3856 - SCIPmemccpy() in pub_misc.h and misc.c which copies either a specified number of charcters of a source 3857 string to a destination string or until it hits a stoping character 3858 - BMSmoveMemory(), BMSmoveMemoryArray(), BMSmoveMemorySize() and corresponding BMSmoveMemory_call() in 3859 memory.{h,c} too move memory elements 3860 3861- Conflict Analysis: 3862 - SCIPisConflictAnalysisApplicable() which return FALSE is the conflict will not runs; can be used 3863 to avoid unnecessary initialization of the conflict analysis 3864 - SCIPaddConflictRelaxedLb(), SCIPaddConflictRelaxedUb() and SCIPaddConflictRelaxedBd(); these methods 3865 can be used to give for a bound change which is part of an explanation a relaxed bound; this means the relaxed bound 3866 is already efficient to be part of a valid explanation 3867 - SCIPisConflictVarUsed() returns TRUE if the given bound change is already part of the conflict set; 3868 that is the bound change is redundant; 3869 - SCIPgetConflictVarLb() and SCIPgetConflictVarUb() returning the lower/upper bound of the given 3870 variable within the current active conflict set 3871 3872- Variable usage: 3873 - SCIPvarsGetProbvar() in pub_var.h and var.c, which returns for a given array of variables the active, fixed 3874 or multiaggregated representation 3875 - SCIPgetActiveVars() in scip.{h,c}, which returns for a given array of variables the active counterparts 3876 - SCIPgetNObjVars() which returns the number of variables which have a non-zero objective coefficient 3877 - SCIPenableVarHistory() and SCIPdisableVarHistory() which can be used to turn off and on the collection 3878 of variables statistics which is used for example for branching 3879 - SCIPbranchVarHole() which branches a variable w.r.t. a given domain hole 3880 - SCIPvarGetAggregatedObj() which computes for a (not active) variable the corresponding objective value 3881 - SCIPsolIsOriginal() that returns whether a solution is defined on the original variables 3882 - SCIPgetVarImplRedcost() which returns the implied reduced costs 3883 - SCIPvarGetBestRootSol(), SCIPvarGetBestRootRedcost(), SCIPvarGetBestRootLPObjval() which return the best 3884 combination for a variable w.r.t. root solution value, root LP objective value and root reduced cost 3885 - SCIPhaveVarsCommonClique() in scip.{h,c}, to check for common clique information on two given variables 3886 - added basic creation methods SCIPcreateVarBasic() and SCIPcreateProbBasic() and setter functions for 3887 non-fundamental callbacks of variables and problems. 3888 - added new methods SCIPvarGetBestBoundGlobal() and SCIPvarGetWorstBoundGlobal(). 3889 3890- Constraint Handler: 3891 - added public wrapper functions for calling constraint handler callback methods for a single constraint: 3892 SCIPactiveCons(), SCIPdeactiveCons(), SCIPinitlpCons(), SCIPsepalpCons(), SCIPsepasolCons(), SCIPpropCons(), 3893 SCIPrespropCons(), SCIPenfopsCons(), SCIPenfolpCons() 3894 - added basic creation methods for all constraint handlers 3895 - SCIPchgCapacityKnapsack() which can be used to change the capacity of a knapsack constraint 3896 - SCIPconsIsAdded() which returns whether a constraint was already to a SCIP instance 3897 - SCIPconshdlrGetNCutsApplied() in pub_cons.h to get the number of cuts applied to the lp 3898 - SCIPconshdlrIncNAppliedCuts() in cons.h to increase the number of applied cuts (used by sepastore.c) 3899 - SCIPchgVarName() and SCIPchgConsName() which can be used to change name of variables and 3900 constraints in problem creation stage 3901 - New methods SCIPgetConsVars() and SCIPgetConsNVars() which return for a given constraint the involved variables and 3902 the number of variables if the corresponding constraint supports this (optional) callbacks 3903 (corresponding callbacks need to be implemented, see above) 3904 3905- Message Handler: 3906 - SCIPmessagehdlrCapture() which captures a given message handler (increases number of uses) 3907 - SCIPmessagehdlrRelease() which releases and possibly frees a given message handler (decreases number of uses) 3908 - SCIPsetMessagehdlrLogfile() which can be used to write into a log file 3909 - SCIPsetMessagehdlrQuiet() which can be used to turn the screen output on and off 3910 3911### Command line interface 3912 3913- in the interactive shell, parameters can be fixed and unfixed with `fix` (instead of `set`), e.g., `fix heuristics rens freq TRUE`; 3914- new shell command `change minuc` to minimize the number of unsatisfied constraints 3915 3916### Interfaces to external software 3917 3918- beta-version of a MATLAB interface can be found under interfaces/matlab 3919- beta-version of a AMPL interface can be found under interfaces/ampl 3920 3921### Changed parameters 3922 3923- `branching/fullstrong/reevalage` changed from an integer to a longint parameter 3924 3925- Removed parameters: 3926 - `separating/closecuts/separootonly` 3927 - `constraints/quadratic/defaultbound` 3928 - `separating/cgmip/nodelimit` 3929 3930### New parameters 3931 3932- `constraints/%s/timingmask` for changing the timingmask for calling the propagtion method of all constraint plugins 3933- `constraints/and/dualpresolving` by default set to TRUE, enabling dual-presolving on and-constraints 3934- `constraints/indicator/{sepacouplingcuts,sepacouplinglocal}` to enable separation of (local) cuts 3935- `constraints/indicator/{maxsepacuts,maxsepacutsroot}` to restrict the number of separated cuts 3936- `constraints/indicator/dualreductions` to enable dual presolving/propagation steps 3937- `constraints/setppc/cliquelifting`, `constraints/setppc/addvariablesascliques`, 3938 `constraints/setppc/cliqueshrinking`, first for enabling/disabling the clique lifting algorithm in cons_setppc.c, 3939 second parameter is for trying to create extra clique constraints in lifting algorithm, third parameter is for trying 3940 to decrease the number of variable in a clique constraint in the lifting algorithm 3941- `limits/totalnodes` that allows to stop at the correct node if a restart occured; therefore the new 3942 `SCIP_STATUS_TOTALNODELIMIT` is added 3943- `lp/{rootiterlim,iterlim}` to set a limit on the LP iterations spend in the initial root LP and each 3944 LP resolve, respectively 3945- `misc/transorigsols` by default set to TRUE, that switches whether SCIP tries to transfer original 3946 solutions into the transformed space (in initsol and if a heuristic adds an original solution during solving) 3947- `numerics/hugeval` that defines the smalles value counting as huge (see new method SCIPisHugeValue()) 3948- `numerics/recompfac` which denotes the factor, by which the absolute of an iteratively updated value has 3949 to be decreased in order to recompute the value from scratch 3950- `presolving/convertinttobin/maxdomainsize` by default is set to `SCIP_LONGINT_MAX`, which deternmines 3951 the domainsize for which integers are converted to their binary representation 3952- `presolving/convertinttobin/onlypoweroftwo` by default is set to FALSE, that parameter allows you to 3953 only convert integer variables with a domainsize of 2^p-1 to their binary representation 3954- `presolving/convertinttobin/samelocksinbothdirections` by default is set to FALSE, that parameter allows 3955 you to convert only integer variables to their binary representation, which have the same amount of up- and downlocks 3956- `presolving/gateextraction/sorting` by default is set to 1, that parameter determines if you want to try 3957 to extract big-gates(-1) or small-gates(1) at first by ordering bigger/smaller logicor constraint up front, or use 3958 them as they are (0) 3959- `presolving/gateextraction/onlysetpart` by default is set to FALSE, that parameter allows you to 3960 only extract set-partitioning and no and-constraints 3961- `presolving/gateextraction/searchequations` by default is set to TRUE, that parameter allows you to 3962 search for logicor constraints and set-packing/-partitioning constraints with same variables 3963- `propagating/%s/timingmask` for changing the timingmask for calling the propagtion method of all propagator plugins 3964- `propagating/probing/maxdepth` to set the maximal depth until the probing propagation is executed 3965- `reading/cnfreader/useobj` to state whether an artificial objective, depending on the number of clauses 3966 a variable appears in, should be used, by default set to FALSE, old default behavior of reader corresponds to TRUE 3967- `separating/cgmip/{minnodelimit,maxnodelimit}` to determine node limit. 3968- `separating/closecuts/maxlpiterfactor` for iteration limit in relative interior point computation 3969- `separating/oddcycle/maxunsucessfull` to automatically turn off separation 3970- `oncepernode` in Rounding and Simple Rounding heuristic 3971 3972### Data structures 3973 3974- new data structure for binary trees (`SCIP_BT` and `SCIP_BTNODE` in pub_misc.h) 3975- renamed data structure `SCIP_STAIRMAP` to `SCIP_PROFILE` 3976- added new stages `SCIP_STAGE_INITPRESOLVE`, `SCIP_STAGE_EXITPRESOLVE` and `SCIP_STAGE_FREE`; renamed `SCIP_STAGE_FREESOLVE` 3977 to `SCIP_STAGE_EXITSOLVE` 3978- Changed the counting system within SCIP heavily. `SPARSESOLUTION` was renamed to `SCIP_SPARSESOL` and moved 3979 from cons_countsols.h to struct_misc.h 3980 3981Testing 3982------- 3983 3984- the check script now recognizes MIQCP and MINLP instances 3985- make test now also checks instances in wbo, cnf, osil and fzn format 3986- renamed parameter SCRDIR of `make testgams` to CLIENTTMPDIR and changed its default to `/tmp` 3987 3988Build system 3989------------ 3990 3991### Makefile 3992 3993- CppAD source code is now distributed with SCIP (`src/cppad`), so that `lib/cppad` is not used anymore; 3994 the default for EXPRINT has changed from none to cppad 3995 3996Fixed bugs 3997---------- 3998 3999- fixed bug with strong branching with the LP status for conflict analysis 4000- fixed bug w.r.t. adding a value to the objective offset of the transformed problem 4001- fixed wrong assert in feasibility pump stage 3 4002- fixed bug in solve.c, applied bounding for the initial lp was only done if root-lp-solution was valid but another 4003 solution could also have been added 4004- primal solutions with infinite objective value are now automatically discarded 4005- all plugins that solve sub-SCIPs now do not stop the whole solution process if there has been an error 4006- fixed bug in cip reader, wrong use of SCIPstrtok() 4007 4008- Variables: 4009 - fixed bug in shiftandpropagate w.r.t. SCIPconstructLP() which can have the side effect that variables are created 4010 - method SCIPvarGetProbvarSum() (and thus also SCIPgetProbvarSum()) returns +/-infinity if the variable resolves to a 4011 variable fixed to +/-infinity (depending on the sign of the scalar) but does not multiply with the scalar, anymore 4012 - better handling of infinite solution values for aggregated and negated variables 4013 - fixed bug that disabled multi-aggregation of two integer or implicit integer variables 4014 - fixed bug in sol.c with requesting values of transformed variables in original solution; previously this had only 4015 been handled in SCIPgetSolVal(), now the handling has been moved to SCIPsolGetVal() 4016 - fixed several bugs writing an mps file in the reader_mps.c, e.g. writing fixed variables which are not (yet) removed 4017 and writing integer variables even with an objective value of 0, if they only exist in non-linear constraints 4018 4019- Separation: 4020 - fixed minor bugs with respect to counting generated and lifted cuts in sepa_oddcycle 4021 - fixed bug in sepa_clique.c, could not handle only empty cliques, that were not removed 4022 4023- Heuristics: 4024 - fixed potential bugs in shiftandpropagate heuristic concerning the transformation update of a variable with free status 4025 - fixed bug in heur_zirounding with computation of up/downslacks 4026 - fixed bug in mutation heuristic with unnecessary aborts due to a wrong memory limit 4027 - fixed potential bug in fix-and-infer heuristic with variables being fixed to infinite value 4028 - fixed bug in diving heuristics with variables being fixed to values outside their domain 4029 - fixed bug in simple rounding heuristic with column generation for variables with strictly positive lower bound 4030 - made Octane heuristic numerically more stable to avoid asserts being caused by cancellation 4031 - fixed bug in mutation heuristic with variables being fixed to infinite values 4032 - do not run heur_shiftandpropagate if there is no LP 4033 4034- LP Interface: 4035 - fixed bug in Cplex LPI: after running simplex, solisbasic flag was always true, which might be wrong if Cplex hit a 4036 time limit 4037 - fixed bug in SCIP probing mode with cleared LPI state but solved LP 4038 - fixed assert with `LPI=none` (need to count rows/cols in lpi_none) 4039 - fixed bug in SoPlex LPI where objective sense was not correct after reading LP from file in SCIPlpiReadLP() 4040 4041- Constraints: 4042 - fixed bug in scip.c adding a constraint in SCIPgetConsCopy() to the constraint hashmap 4043 - fixed bug in cons_linear w.r.t recalculation of unreliable activities 4044 - fixed bug in cons_linear concerning huge activity values: besides infinite contributions, we now also treat huge 4045 contributions separately, count their occurences in a constraint and provide a relaxed activity value 4046 - fixed bug in cons_xor.c parsing a constraint 4047 - fixed count of propagations in cons_indicator and only try to propagate if variables are not yet fixed 4048 - fixed some bugs in cons_disjunction.c (wrong assert, forgotten deletion of constraint, wrong SCIPreleaseCons() call) 4049 4050Miscellaneous 4051------------- 4052 4053- first release of GCG, a generic branch-cut-and-price solver built on top of SCIP 4054- first release of UG, a framework for solving mixed integer programs, mixed integer 4055 nonlinear programs and constraint integer programs in parallel 4056- new SCIP T-shirts 4057- renamed ZIB Optimization Suite to SCIP Optimization Suite 4058 4059@page RN21 Release notes for SCIP 2.1 4060 4061@section RN212 SCIP 2.1.2 4062************************* 4063 4064Performance improvements 4065------------------------ 4066 4067- fixed performance issue in debug mode, where SCIPvarGetLPSol_rec() calculated a value to often, which in the end lead 4068 to exponential growth in running time 4069- force cuts from linearizations of convex constraint in NLP relax solution into LP, thus allowing faster proving of 4070 optimality for convex NLPs 4071 4072Fixed bugs 4073---------- 4074 4075- fixed bug in varAddTransitiveImplic() in var.c, when adding implications on special aggregated, namely negated, variables 4076- fixed issue if a primal solution leads to a cutoff of the current focus node 4077- fix compilation issues with zlib 1.2.6 4078- fixed bug in SCIPsolveKnapsackExactly(), trying to allocate too much memory which led to an overflow and later to a segmentation fault 4079- fixed bug in sepa_rapidlearning, carrying on the optimization process, when already solved 4080 4081- Heuristics: 4082 - fixed bug in heur_undercover.c, where a variable with fixed bounds but not of status `SCIP_VARSTATUS_FIXED` was wrongly handled 4083 - fixed bug in heur_oneopt.c which forgot to check LP rows if local rows are present 4084 4085- Constraints: 4086 - fixed bug in SCIPsolveKnapsackExactly() 4087 - fixed bug in cons_quadratic where bounds on activity of quadratic term were not always invalidated when quadratic variables were removed 4088 - fixed bug in cons.c, where after a restart the arrays for all initial constraints were corrected in the initsol process 4089 instead of the initpre process, this was to late because you might change the status in presolving which lead to an assert() 4090 - fixed bug in NLP representation of abspower constraints handling (x+a)^2 with nonzero a 4091 - fixed bug parsing an and-constraint in cip format 4092 - fixed bug in cons_setppc, did not handle new constraints with inactive variables 4093 - fixed bug in cons_xor.c which did not copy the artificial integer variable (used for the lp relaxation) 4094 4095@section RN211 SCIP 2.1.1 4096************************* 4097 4098Features 4099-------- 4100 4101- the pseudo objective propagator can be forced to propagate if active pricers are present; this can be done 4102 if for all (known or unknown) variables follows that: they have positive (negative) objective coefficient 4103 and the global lower (upper) bound is zero. 4104 4105Performance improvements 4106------------------------ 4107 4108- improvements in undercover heuristic 4109- improve SCIPintervalSolveBivariateQuadExpressionAllScalar() for ax=0 case if x has 0 in the interval for the linear coef. 4110- better domain propagation for quadratic constraints that consist of `non-overlapping` bilinear terms only 4111- ensure that a fixing of a variable in an abspower constraint is propagated to a fixing of the other variable 4112- improvements in undercover heuristic, e.g., bound disjunction constraints are considered when setting up the covering problem 4113 4114Interface changes 4115----------------- 4116 4117### Changed parameters 4118 4119- changed parameter `propagating/pseudoobj/maxcands` to `propagating/pseudoobj/minuseless` (see prop_pseudoobj.c) 4120 due to revision of the pseudo objective propagator 4121 4122### New parameters 4123 4124- added parameters `heuristics/undercover/coverbd` and `heuristics/undercover/fixingorder` 4125 4126Fixed bugs 4127---------- 4128 4129- fixed numeric issue in aggregations 4130- fixed pseudo cost computation 4131- fixed bug with setting type of slack variables to be implicitly integral 4132- fixed bug when copying problem data in c++ case returned with the result `SCIP_DIDNOTRUN` 4133- fixed computation of counter which state the changes since the last call of a presolver 4134- fixed handling of unbounded solutions, including double-checking their feasibility and that the primal ray is a 4135 valid unboundedness proof and reoptimizing the LP with modified settings if the solution is not feasible 4136- fixed compilation issues with negate() function in intervalarith.c on exotic platforms 4137- fixed bug in SCIPsortedvecDelPos...() templates 4138- pseudo objective propagator does not propagate it active pricers are present 4139- fixed bug in heur_shiftandpropagate.c concerning the treatment of unbounded variables 4140- workaround for trying to add variable bounds with to small coefficients 4141 4142- Reading and Writing: 4143 - gams writer now also substitutes $-sign from variable/equation names 4144 - fixed bug in reader_mps.c: INTEND marker is now also written, if COLUMNS section ends with non-continous variables 4145 - fixed bug in flatzinc reader w.r.t. boolean expressions 4146 4147- Constraints: 4148 - fixed constraint flags evaluation within the ZIMPL reader (reader_zpl.c) 4149 - fixed bug in SCIPmakeIndicatorFeasible() in cons_indicator.c 4150 - fixed bug with conflict clause modification in cons_indicator 4151 - fixed bug in cons_bounddisjunction with uninitialized return values 4152 - fixed bug in cons_orbitope with calling conflict analysis 4153 - fixed bug in nlpi_oracle w.r.t. changing linear coefs in a NLP constraint 4154 4155@section RN210 SCIP 2.1.0 4156************************* 4157 4158Features 4159-------- 4160 4161- New original solution storage capability, which allows transfering solutions between SCIP runs 4162- SCIP-CPX is now threadsafe 4163- comparison of solutions now also works for original solutions 4164- can now compute the relative interior point of the current LP 4165- interval arithmetics for power, log, exp, bivariate quadratic expressions should be rounding safe now 4166- LP iterations in resolving calls can now be limited w.r.t. the average number of LP iterations in previous calls 4167 (after the root node); this is currently only done for the initial LP solve at a node and the corresponding parameter 4168 resolveiterfac is set to -1 (no limit) per default 4169- it is now possible in `SCIP_STAGE_TRANSFORMED` to call SCIPaddVarLocks() (i.e. to lock variables in initialization methods) 4170- changed computation of optimality gap which is now done in the same way as described in the MIPLIB 2010 paper: the gap 4171 is 0, if primalbound (pb) and dualbound (db) are equal (within tolerances), it is infinity if pb and db have opposite 4172 signs and (this changed), if both have the same sign, the difference between pb and db is devided by the minimum of 4173 the absolute values of pb and db (instead of always the dual bound) 4174- functionality to use the bound flipping ratio test of SoPlex is available (requires at least version 1.5.0.7) 4175- there exists now a solution candidate store for the original problem; during transformation these solutions are tried; 4176 during free the transformed problem the best feasible solution of the transformed problem are copied to the solution 4177 candidate store of the original problem; this useful if you solve several problems iteratively, solutions get now 4178 carried over automatically. 4179- reworked concept of lazy bounds: they can now also be used for problems where constraints and objective together 4180 ensure the bounds; to allow this also for diving heuristics that might change the objective and thus destroy this 4181 property, lazy bounds are explicitly put into the LP during diving and removed afterwards 4182- `SCIP_HASHMAP` now works also without block memory 4183- The variable deletion event is now a variable specific event and not global, anymore. 4184- All timing flags are now defined type_timing.h. 4185- all C template files are now called <plugintype>_xyz.{c,h} instead of <plugintype>_xxx.{c,h} 4186 4187- Separators and Cuts: 4188 - reorganized computation of scores in cut filtering: instead of the computation at the time of addition, scores are now 4189 only computed w.r.t. the current LP solution and when cut filtering is performed; one can now fill the cut storage 4190 with cuts that were separated for different solutions 4191 - New separator for close cuts and a new function to compute relative interior points of the LP 4192 - added first version of sepa_closecuts.{c,h} to separate cuts w.r.t. a point that is closer to the integral polyhedron 4193 4194- Constraints: 4195 - implement possibility to force a restart in cons_indicator if enough indicator variables have been fixed 4196 - the xor constraint handler can now parse its constraints 4197 - the bounddisjunction constraint handler can now parse its constraints 4198 - the knapsack, setppc and soc constraint handler can now parse their constraints 4199 - the varbound constraint handler can now parse its constraints 4200 - added beta version of variable deletion: for branch-and-price application, variables can now be completely deleted 4201 from the problem; variables that are deletable have to be marked with SCIPvarMarkDeletable(), constraint handlers can 4202 implement the new `SCIP_DECL_DELVARS` callback that should remove variables from the constraints; at the moment, only 4203 the linear, the setppc and the knapsack constraint handler support this callback; furthermore, when using this 4204 feature, all used plugins have to capture and release variables they store in their data, this is currently only done 4205 for the aforementioned constraint handlers as well as the and, the varbound and the logicor constraint handler; for 4206 more details about this feature, see the FAQ 4207 - added pseudoboolean constraint handler (cons_pseudoboolean.{c,h}) 4208 - added first version of cons_disjunction.{c,h} which allows a disjunction of constraints 4209 - added constraint handler for (absolute) power constraints (cons_abspower.{c,h}) to handle equations like z = sign(x)abs(x)^n, n > 1 4210 4211- Heuristics: 4212 - new heuristic vbounds which use the variables lower and upper bounds to fix variable and performs a neighborhood search 4213 - added vbound heuristic (heur_vbounds.{c,h}) 4214 - added clique heuristic (heur_clique.{c,h}) 4215 4216- Reading and Writing: 4217 - added writing for wbo files 4218 - added writing for pip files (linear, quadratic, polynomial nonlinear, polynomial abspower, polynomial bivariate, and 4219 and constraints) 4220 - CIP format variable characters defined, e.g. `SCIP_VARTYPE_INTEGER_CHAR` 4221 - Improved support for wbo format for weighted PBO problems, IBM's xml-solution 4222 format and pip and zimpl format for polynomial mixed-integer programs 4223 - New reader for (standard) bounds on variables 4224 - Extended reader for CIP models to handle various new constraints, including all types of linear constraints 4225 - flatzinc reader is now capable to read cumulative constraints 4226 - changed opb(/wbo) reader which now creates pseudoboolean constraints instead of linear- and and-constraints, only a 4227 non-linear objective will create and-constraints inside the reader and while reading a wbo file the topcost constraint 4228 is created as well 4229 - added clock for determine the time for reading 4230 - added reader for variable bounds (reader_bnd.{c,h}) 4231 - Removed method SCIPreadSol(); call solution reading via SCIPreadProb() which calls the solution reader for .sol files. 4232 4233- Nonlinear: 4234 - Major extensions for nonlinear CIP, new option for n-ary branching on nonlinear variables (within pseudocost branching rule) 4235 - added BETA version of constraint handler for nonlinear constraints (cons_nonlinear.{c,h}) to handle nonlinear 4236 equations given by algebraic expressions using operands like addition, multiplication, power, exp, log, bivariate 4237 nonlinear constraints; currently no trigonometric functions 4238 - added BETA version of constraint handler for bivariate nonlinear constraints (cons_bivariate.{c,h}) to compute tight 4239 estimators for 1-convex and convex-concave bivariate nonlinear functions (given as expression tree) 4240 - the gams writer can now write nonlinear, abspower and bivariate constraints 4241 - Extended writer for GAMS and pip format to write more types of nonlinear constraints 4242 - the pip and zimpl reader now create nonlinear constraints for polynomials of degree > 2 4243 4244- Presolving: 4245 - new dual presolving methods in cons_setppc and cons_logicor 4246 - new presolving step `removeConstraintsDueToNegCliques` in locigor constraint handler which updates logicor constraints 4247 to setppc constraints if a negated clique inside this constraint exist, by default is off 4248 - new presolving step in cons_knapsack (detectRedundantVars, deleteRedundantVars) which determines redundant variables 4249 in knapsack constraint with or without using clique information 4250 - cons_logicor is now able to replace all aggregated variables in presolving by there active or negation of an active 4251 variable counterpart 4252 - prop_pseudoobj is now working in presolving as well 4253 - implement presolving in exitpre() in cons_orbitope and cons_indicator 4254 4255- Propagators: 4256 - added counter for number calls and timing for resolve propagation calls for constraint handler and propagators 4257 - Propagators are now also called in node presolving 4258 - the probing presolver presol_probing.{c.h} is now a propagator prop_probing.{c,h}, all corresponding parameters moved as well 4259 - the redcost separator sepa_redcost.{c.h} is now a propagator prop_redcost.{c,h}, all corresponding parameters moved as well 4260 - outsourced propAndSolve() method in solve.c which calls domain propagation and solving of the lp and relaxation 4261 4262- Statistic: 4263 - solutions which are given by the user from the outside are now marked by `#` in the output 4264 - the `Solving Time` is now spitted into presolving, solving and reading time 4265 - Presolvers section has new column `AddCons` which states the number of added constraint 4266 - Constraints section has new column named #ResProp which show the number of resolve propagation calls of certain 4267 constraint handler 4268 - Constraint Timing section has a new column #ResProp which states the time spend in resolve propagation method of the 4269 constraint handler 4270 - improved output of propagators in display statistics 4271 - new section `Propagator Timing` which shows the time spend in different callbacks of the propagator 4272 - rearranged first two columns of Propagators section; #Propagate and #ResProp stating the number of call for 4273 propagation and resolve propagation; the Time column is moved into the new section Propagator Timings 4274 - Constraints section has new column named `MaxNumber` which the maximum number of active constraint of a certain 4275 constraint handler 4276 - added two columns `Time-0-It` and `Calls-0-It` in the LP section which states the number of LP call and time spend for 4277 solving LPs with zero iterations (only refactorization) 4278 - The display of statistics for presolvers, propagators, constraints and LP solving has changed. 4279 4280Performance improvements 4281------------------------ 4282 4283- Reorganized filtering process of separation storage (allows adding cuts for different solutions) 4284- Improved presolving for various constraint handlers 4285- Improved propagation methods for variable bound constraints 4286- Improved performance for quadratic constraints 4287- performance improvements in prop_vbounds 4288- child selection rules now get also applied when the relaxation value is equal to the bound changed in branching 4289- added dual reduction to cons_cumulative.c 4290- for continuous variables, the pseudo costs update and the pscost branching rule now use the same strategies for 4291 updating the pseudo costs and estimating the improvement in the LP bound 4292- only perform probing if the variables are locked 4293- performance and memory consumption improvements in xmlparse.c 4294- Improved knapsack cover cuts 4295- avoid very long separation times of LEWIs in cons_knapsack for very large minimal covers 4296- used SCIPallocMemoryArray() instead of SCIPallocBlockMemoryArray() which leads to fewer memory consumption in 4297 getLiftingSequence() in cons_knapsack, also improved cache use bei using an extra array instead blockmemory chunks 4298- switched FASTMIP from 1 to 2 for CPLEX and changed default pricing rule back to steepest edge pricing instead of 4299 quickstart steepest edge pricing 4300- made sorting method more robust 4301- LNS heuristics now use SCIPcopy() by default 4302- considering inactive variables in undercover heuristic; limiting effort for solving covering problem 4303- if during probing mode the LP relaxation is solved from scratch, e.g., when calling the shiftandpropagate heuristic 4304 before root node solving, then we clear the resulting LP state, since it might be a bad starting basis for the next 4305 solve of the LP relaxation (controlled by new parameter `lp/clearinitialprobinglp`) 4306- included LP simplifier into SoPlex LP interface, applied when solving from scratch (lpi_spx.cpp) 4307- new presolving steps in varbound constraint handler, tightening bounds, coefficients, sides and pairwise presolving 4308 4309Interface changes 4310----------------- 4311 4312- Miscellaneous: 4313 - The emphasis setting types now distinguish between plugin-type specific parameter settings (default, aggressive, fast, off), 4314 which are changed by SCIPsetHeuristics/Presolving/Separating(), and global emphasis settings (default, cpsolver, easycip, 4315 feasibility, hardlp, optimality, counter), which can be set using SCIPsetEmphasis(). 4316 4317### New and changed callbacks 4318 4319- added propagator timings `SCIP_PROPTIMING_BEFORELP`, `SCIP_PROPTIMING_DURINGLPLOOP` and `SCIP_PROPTIMING_AFTERLPLOOP` for 4320 all propagation callbacks (see propagators and constraint handlers) which lead to calling the propagation methods of a 4321 propagator before the lp is solved, during the lp loop and after the lp solving loop 4322 4323- Conflict Analysis: 4324 - Added parameter `separate` to conflict handler callback method SCIP_DECL_CONFLICTEXEC() that defines whether the conflict 4325 constraint should be separated or not. 4326 4327- Constraint Handler: 4328 - The new constraint handler callback SCIP_DECL_CONSDELVARS() is called after variables were marked for deletion. 4329 This method is optional and only of interest if you are using SCIP as a branch-and-price framework. That means, 4330 you are generating new variables during the search. If you are not doing that just define the function pointer 4331 to be `NULL`. 4332 If this method gets implemented you should iterate over all constraints of the constraint handler and delete all 4333 variables that were marked for deletion by SCIPdelVar(). 4334 4335- NLP Solver Interface: 4336 - The callbacks SCIP_DECL_NLPIGETSOLUTION() and SCIP_DECL_NLPISETINITIALGUESS() got new parameters to get/set values of 4337 dual variables. 4338 - The callback SCIP_DECL_NLPICOPY() now passes the block memory of the target SCIP as an additional parameter. 4339 4340- Presolving: 4341 - New parameters `isunbounded` and `isinfeasible` for presolving initialization (SCIP_DECL_CONSINITPRE(), 4342 SCIP_DECL_PRESOLINITPRE(), SCIP_DECL_PROPINITPRE()) and presolving deinitialization (SCIP_DECL_CONSEXITPRE(), 4343 SCIP_DECL_PRESOLEXITPRE(), SCIP_DECL_PROPEXITPRE()) callbacks of presolvers, 4344 constraint handlers and propagators, telling the callback whether the problem was already declared to be 4345 unbounded or infeasible. This allows to avoid expensive steps in these methods in case the problem is already 4346 solved, anyway. 4347 4348 Note, that the C++ methods 4349 - scip::ObjConshdlr::scip_presol() corresponding to SCIP_DECL_CONSPRESOL() 4350 - scip::ObjConshdlr::scip_initpre() corresponding to SCIP_DECL_CONSINITPRE() 4351 - scip::ObjPresol::scip_initpre() corresponding to SCIP_DECL_PRESOLINITPRE() 4352 - scip::ObjProp::scip_initpre() corresponding to SCIP_DECL_PROPINITPRE() 4353 - scip::ObjConshdlr::scip_exitpre() corresponding to SCIP_DECL_CONSEXITPRE() 4354 - scip::ObjPresol::scip_exitpre() corresponding to SCIP_DECL_PRESOLEXITPRE() 4355 - scip::ObjProp::scip_exitpre() corresponding to and SCIP_DECL_PROPEXITPRE() 4356 are virtual functions. That means, if you are not adding the new parameters, your code will still compile, but these methods are not executed. 4357 - Propagators are now also called in during presolving, this is supported by the new callback methods SCIP_DECL_PROPINITPRE(), 4358 SCIP_DECL_PROPEXITPRE(), and SCIP_DECL_PROPPRESOL(). 4359 - The new parameters `nnewaddconss` and `naddconss` were added to the constraint handler callback method SCIP_DECL_CONSPRESOL() 4360 and the presolver callback method SCIP_DECL_PRESOLEXEC(). These parameters were also added to corresponding C++ wrapper 4361 class methods (scip_presol() in objconshdlr.h and scip_exec() in objpresol.h) 4362 4363- Problem Data: 4364 - The callback SCIP_DECL_PROBCOPY() got a new parameter `global` to indicate whether the global problem or a local version is copied. 4365 4366### Deleted and changed API methods 4367 4368- implemented SCIPlpiGetPrimalRay() in SoPlex interface that has become available with SoPlex version 1.5.0.2 4369- allowed calling SCIPgetRowSolActivity() in `SCIP_STAGE_SOLVED`, since LP is still available 4370- various extensions and modifications for expressions and expression trees (too much to state here) 4371- The result value `SCIP_NEWROUND` has been added, it allows a separator/constraint handler to start a new separation round 4372 (without previous calls to other separators/conshdlrs). 4373- SCIPcalcNodeselPriority() got a new parameter `branchdir`, which defines the type of branching that was performed: upwards, downwards, or fixed. 4374 4375- Constraint Handlers: 4376 - Method SCIPincludeQuadconsUpgrade() of quadratic constraint handler got new parameter `active` to indicate whether the upgrading method is active by default. 4377 - Method SCIPseparateRelaxedKnapsack() in knapsack constraint handler got new parameter `cutoff`, which is a pointer to store whether a cutoff was found. 4378 4379- Nonlinear expressions, relaxation, and solver interface: 4380 - SCIPcreateNLPSol() now creates a `SCIP_SOL` that is linked to the solution of the current NLP relaxation 4381 - Various types and functions dealing with polynomial expressions have been renamed to use the proper terms `monomial` and 4382 `polynomial` in nonlinear expressions (nlpi/*expr*); results in many renamings of types, structs and methods. 4383 - The methods SCIPnlpGetObjective(), SCIPnlpGetSolVals(), and SCIPnlpGetVarSolVal() have been removed, use SCIPgetNLPObjval(), 4384 SCIPvarGetNLPSol() and SCIPcreateNLPSol() to retrieve NLP solution values instead. 4385 SCIPcreateNLPSol() now returns an error if NLP or NLP solution is not available 4386 - Removed methods SCIPmarkRequireNLP() and SCIPisNLPRequired(), because the NLP is now always constructed if nonlinearities 4387 are present. 4388 - SCIPgetNLP() has been removed and NLP-methods from pub_nlp.h have been moved to scip.h, which resulted in some renamings, too. 4389 - renamed SCIPexprtreeEvalSol() to SCIPevalExprtreeSol() and now located in scip.h. 4390 - renamed SCIPexprtreeEvalIntLocalBounds() to SCIPevalExprtreeLocalBounds() and now located in scip.h. 4391 - renamed SCIPexprtreeEvalIntGlobalBounds() to SCIPevalExprtreeGlobalBounds() and now located in scip.h. 4392 - The functions SCIPnlpiGetSolution() and SCIPnlpiSetInitialGuess() got additional arguments to get/set dual values. 4393 - The method SCIPgetNLPI() got a new parameter `nlpiproblem`, which is a pointer to store the NLP solver interface problem. 4394 4395- Timing: 4396 - SCIPincludeProp() got additional parameters to set the timing mask of the propagator and the new callbacks and parameters 4397 related to calling the propagator in presolving. 4398 - SCIPincludeConshdlr() got additional parameters to set the variable deletion callback function and the timing mask for 4399 propagation. 4400 - removed parameters timelimit and memorylimit from SCIPapplyRens() 4401 - The parameters `timelimit` and `memorylimit` were removed from SCIPapplyRens(). 4402 4403- Problem Data: 4404 - The method SCIPcopyProb() got a new parameter `global` to indicate whether the global problem or a local version is copied. 4405 4406- Writing and Parsing Constraints: 4407 - The methods SCIPwriteVarName(), SCIPwriteVarsList(), and SCIPwriteVarsLinearsum() got a new boolean parameter `type` 4408 that indicates whether the variable type should be written or not. 4409 - The methods SCIPparseVarName() and SCIPparseVarsList() got a new output parameter `endptr` that is filled with the position 4410 where the parsing stopped. 4411 - The method SCIPwriteVarsList() got additionally a new parameter `delimiter` that defines the character which is used for delimitation. 4412 4413- Variables: 4414 - SCIPmarkDoNotMultaggrVar()/SCIPvarMarkDoNotMultaggr() now allow to mark negated and aggregated variables 4415 - SCIPgetVarCopy() got a new parameter `success` that will be FALSE if method is called after problem creation stage and no hash map is 4416 given or no image for the given variable is contained in the given hash map. 4417 - SCIPchgVarType() got an extra boolean parameter to store if infeasibility is recognized while upgrading a variable from continuous 4418 type to an integer type. 4419 - SCIPdelVar() got a new parameter `deleted`, which stores whether the variable was successfully marked to be deleted. 4420 4421### New API functions 4422 4423- information about the quality of the solution of an LP (currently the condition number of the basis matrix) can now be: 4424 + requested from the LPI (currently only available for CPLEX): methods SCIPlpiGetRealSolQuality() and 4425 + SCIPprintLPSolutionQuality() command display lpsolquality in interactive shell display column lpcond to show 4426 + estimate on condition number, if available 4427- SCIPround() and SCIPfeasRound() to round to nearest integer 4428- SCIPsortRealRealIntInt() and corresponding sorting/inserting/deleting methods in pub_misc.h and necessary defines in misc.c 4429- SCIPsortRealIntLong(), SCIPsortPtrPtrRealInt() and corresponding sorting/inserting/deleting methods in 4430 pub_misc.h and necessary defines in misc.c 4431- SCIPcomputeLPRelIntPoint() to compute relative interior point of the current LP 4432- SCIPstartSolvingTime() and SCIPstopSolvingTime() which can be used to start or stop the solving time clock 4433- SCIPstrToRealValue() and SCIPstrCopySection() in pub_misc.h; these methods can be used to convert a string 4434 into a `SCIP_Real` value and to copy a substring. 4435- SCIPgetBinvarRepresentatives() which gets binary variables that are equal to some given binary variables, 4436 and which are either active, fixed, or multi-aggregated, or the negated variables of active, fixed, or multi-aggregated variables 4437- SCIPhasPrimalRay() and SCIPgetPrimalRayVal() that return whether a primal ray is stored and which value a 4438 given variable has in the primal ray, respectively 4439- SCIPsetConsModifiable() 4440- SCIPsetParam() which is a generic parameter setter method, independent of the parameter type 4441- SCIPpropInitpre(), SCIPpropExitpre(), SCIPpropPresol() which initializes, exists and executes the presolving phase 4442- SCIProwGetAge() to access the age of a row (pub_lp.h/lp.c) 4443- SCIPsolGetOrigObj() in pub_sol.h which returns for a solution in the original problem space the objective value 4444- SCIPretransformSol() in scip.h that allows to retransform a solution to the original space 4445- SCIPlpiClearState() to LP interfaces for clearing basis information in the LP solver 4446- SCIPgetSubscipDepth() to access the depth of the current SCIP as a copied subproblem 4447- SCIPdebugAddSolVal() and SCIPdebugGetSolVal() to add/get values to/from a debug solution 4448- SCIPsepastoreRemoveInefficaciousCuts() to remove non-efficious cuts from the separation storage 4449 4450- Nodes: 4451 - SCIPnodeGetParent() to get parent node of a node 4452 - SCIPnodesSharePath() in pub_tree.h that determines whether two nodes are on the same leaf-root path 4453 - SCIPnodesGetCommonAncestor() in pub_tree.h that finds the common ancestor node for two given nodes 4454 4455- Read and Write: 4456 - SCIPgetReadingTime() which returns the time for reading in seconds 4457 - SCIPparseVarsLinearsum(), SCIPparseVarsPolynomial() and SCIPwriteVarsPolynomial() and for writing and 4458 parsing polynomials in constraint handler writing/parsing methods 4459 4460- Memory: 4461 - SCIPcreateMesshdlrPThreads() and SCIPfreeMesshdlrPThreads() for allocating and deleting necessary memory 4462 for message handlers for parallel pthread version 4463 - SCIPallocClearMemoryArray() and BMSallocClearMemoryArray() for allocating cleared memory arrays in scip.h and memory.h 4464 4465- Intervals: 4466 - SCIPintervalPowerScalarInverse() to solve an equation y = x^p for given bounds on y and scalar exponent p 4467 - SCIPintervalQuadBivar() to compute tight bounds on a bivariate quadratic form 4468 - SCIPintervalSolveBivariateQuadExpressionAllScalar() to compute tight bounds on the solutions of a bivariate quadratic equation 4469 4470- Variables: 4471 - SCIPcomputeVarCurrent{L,U}b{Local,Global}() to compute local or global lower or upper bounds of a 4472 multiaggregated variable from the bounds of the aggregation variables 4473 - SCIPbranchVarValNary() for n-ary variable branching 4474 - SCIPgetNegatedVars() which returns all negated variables for a given array of variables, if the negated 4475 variables are not existing yet, they will be created 4476 - SCIPgetNTotalVars() that returns the total number of created vars, icluding variables that were deleted in the meantime 4477 - SCIPvarGetHashkey(), SCIPvarIsHashkeyEq(), SCIPvarGetHashkeyVal() in pub_var.h which can be used for `SCIP_HASHTABLE` of variables 4478 - SCIPvarGetNBdchgInfosLb() and SCIPvarGetNBdchgInfosUb() in pub_var.h returning the number of lower or upper bound changes on the active path 4479 - SCIPvarGetBdchgInfoLb() and SCIPvarGetBdchgInfoUb() returning the bound change information at the given position 4480 - SCIPvarMarkDeletable() to mark a variable to be deletable completely from the problem (for 4481 branch-and-price); can only be called before the variable is added to the problem 4482 - SCIPvarMarkNotDeletable() that marks a variable to be non-deleteable (used within SCIP for forbidding 4483 deletion of variables contained in solution, LP bases, (multi)aggregation, ...) 4484 - SCIPvarIsDeletable() that returns whether a variable is marked to be deletable (each variable is per default non-deletable) 4485 4486- NLP: 4487 - SCIPgetNLPVarsNonlinearity() to get for each variable in the NLP the number of NLP rows in which this variable appears in a nonlinear way 4488 - SCIPnlrowGetDualsol(), SCIPgetNLPVarsLbDualsol(), SCIPgetNLPVarsUbDualsol() to retrieve dual values from an NLP solution 4489 - SCIPgetNLPFracVars() to get the fractional variables in an NLP solution 4490 4491- Propagator: 4492 - SCIPpropSetPresolPriority() which changes the presolving priority of a given propagator 4493 - SCIPpropGetPresolPriority(), SCIPpropGetPresolTime(), SCIPpropWasPresolDelayed(), SCIPpropGetNFixedVars(), 4494 SCIPpropGetNAggrVars(), SCIPpropGetNChgVarTypes(), SCIPpropGetNChgBds(), SCIPpropGetNAddHoles(), SCIPpropGetNDelConss(), 4495 SCIPpropGetNAddConss(), SCIPpropGetNUpgdConss(), SCIPpropGetNChgCoefs(), SCIPpropGetNChgSides(), SCIPpropGetTimingmask(), 4496 SCIPpropDoesPresolve() which return corresponding presolving information 4497 - SCIPpropGetNRespropCalls() and SCIPconshdlrGetNRespropCalls() which return the number of times a 4498 propagator or a constraint handler was called for resolving a propagation 4499 - SCIPpropGetRespropTime() and SCIPconshdlrGetRespropTime() which return time spent for resolving a 4500 propagation within a propagator or a constraint handler 4501 - SCIPcheckCumulativeCondition(), SCIPpropCumulativeCondition() and SCIPrespropCumulativeCondition() in 4502 cons_cumulative.h; these methods can be used to check, propagate, or resolve the propagation of a cumulative condition 4503 - SCIPpropagateCutoffboundVar() in prop_pseudoobj.h which can be used to propagate the cutoff bound for the given variables 4504 4505- Constraints: 4506 - added to linear constraint handler SCIPsetUpgradeConsLinear(), which (de-)activates the possibility to 4507 upgrade a linear constraint to a specialized linear constraint (e.g. knapsack) 4508 - SCIPconvertCutsToConss() and SCIPcopyCuts() to scip.{c,h} for copying cuts to linear constraints 4509 - SCIPaddCoefLogicor() to add a variable to a logic or constraint 4510 - SCIPfindOrigCons() which return a original constraint with the given name or `NULL` 4511 - SCIPconshdlrGetNAddConss() which returns the number of added constraints during presolving by a given constraint handler 4512 - SCIPpresolGetNAddConss() which returns the number of added constraints during presolving by a given presolver 4513 4514### Command line interface 4515 4516- New funtionalities in the interactive shell (modify current CIP instance, write NLP relaxation) 4517- added dialog `write nlp` to write current NLP relaxation to a file 4518- new dialog `change freetransproblem` to free transformed problem in the interactive shell before changing the problem 4519- it is possible to change bounds of a variable in the interactive shell 4520- it is possible to add a constraint to a problem in the interactive shell 4521 4522### Interfaces to external software 4523 4524- Improved SOPLEX interface (LP simplifier) 4525- Improved CPLEX interface, including measures for numerical stability 4526 4527### Changed parameters 4528 4529- change default value of parameter `nodeselection/restartdfs/selectbestfreq` 100 4530- moved parameters for pseudoboolean constraints from opb-reader to pseudoboolean constraint handler 4531- changed possible parameter values of `branching/pscost/strategy` from `bri` to `cdsu`: default is now `u`, i.e., to 4532 estimate the LP gain by a branching for external branching candidates (esp. continuous variables) the same way as 4533 their pseudo costs are updated 4534- added possible value `d` for `constraints/soc/nlpform` to choose a convex division form for SOC constraint 4535 representation in NLP 4536- renamed parameter `constraints/quadratic/linearizenlpsol` to `constraints/quadratic/linearizeheursol` and do 4537 linearizations in every solution found by some heuristic 4538- renamed parameter `constraints/quadratic/mincutefficacyenfo` to `constraints/quadratic/mincutefficacyenfofac` and 4539 interpret it as a factor of the feasibility tolerance 4540- removed fastmip setting 2, which means the dualsolution would not be calculated but because SCIP always asks for the 4541 dual solution, the lp would be reoptimized to calculate them; so it had no real effect 4542- all parameters in cons_indicator and cons_sos1 have been converted to lower case! 4543- changed default value of parameter `separating/gomory/maxroundsroot` to 10 4544- changed default value of parameter `separating/gomory/maxsepacutsroot` to 50 4545- removed parameter `heuristics/subnlp/nlpsolver`, use `nlp/solver` instead 4546 4547### New parameters 4548 4549- `branching/delaypscostupdate` to delay the update of pseudo costs for continuous variables behind the separation round: default is TRUE 4550- `branching/lpgainnormalize` to set the strategy how the LP gain for a continuous variable is normalized when updating the 4551 variables pseudocosts: default is to divide LP gain by reduction of variable's domain in sibling node 4552- `branching/pscost/nchildren` and `branching/pscost/nary*` to enable and customize n-ary branching on 4553 external branching candidates (e.g., in spatial branching for MINLP) 4554- `conflict/bounddisjunction/continuousfrac` which defines the maximum percantage of continuous variables 4555 within a conflict create by the bounddisjunction conflict handler 4556- `conflict/separate` which enables or disables the separation of conflict constraints 4557- `constraints/{nonlinear,quadratic,soc,abspower}/sepanlpmincont` to specify minimal required fraction 4558 of continuous variables in problem to enable linearization of convex constraints in NLP relaxation solution in root 4559- `constraints/indicator/forcerestart` and `constraints/indicator/restartfrac` to control forced restart in cons_indicator 4560- `constraints/indicator/generatebilinear` to generate bilinear (quadratic) constraints instead of indicator constraints 4561- `constraints/indicator/maxconditionaltlp` to enable a quality check for the solution of the alternative LP 4562- `constraints/indicator/removeindicators` to remove indicator constraints if corresponding vub has been added 4563- `constraints/linear/nmincomparisons` and `constraints/linear/mingainpernmincomparisons` to influence 4564 stopping criterium for pairwise comparison of linear constraints 4565- `constraints/pseudoboolean/decompose`, for pseudoboolean constraints to transform pseudoboolean constraints into linear- and and-constraints 4566- `constraints/quadratic/binreforminitial` to indicate whether linear (non-varbound) constraints added due to reformulation of products with 4567 binary variables in a quadratic constraints should be initial (if the quadratic constraint is initial), default is FALSE 4568- `constraints/quadratic/checkfactorable` to disable check for factorable quadratic functions (xAx = (ax+b)*(cx+d)) in quadratic constraints 4569 and not to use of this information in separation (generates lifted tangent inequalities according to Belotti/Miller/Namazifar if also 4570 linear vars are present) 4571- `constraints/quadratic/disaggregate` to split a block-separable quadratic constraint into several quadratic constraint 4572- `constraints/quadratic/maxproprounds` and `constraints/quadratic/maxproproundspresolve` to limit the 4573 number of propagations rounds for quadratic constraints within one propagation round of SCIP solve or during SCIP presolve 4574- `constraints/varbound/presolpairwise` that allows pairwise presolving of varbound constraints, default is TRUE 4575- `heuristics/shiftandpropagate/onlywithoutsol` to switch whether the heuristic should be called in case a primal solution is already present 4576- `limit/maxorigsol` which defines the size of the solution candidate store (default value is 10) 4577- `lp/resolverestore` controlling how LP solution is restored after diving: if TRUE by resolving them, 4578 if FALSE by buffering them; if `lp/freesolvalbuffers` is TRUE, we free the buffer memory each time (FALSE by default) 4579- `lp/clearinitialprobinglp` to clear LP state at end of probing mode, if LP was initially unsolved 4580- `lp/resolveitermin` and `lp/resolveiterfac` to limit the number of LP iterations in resolving calls: 4581 resolveiterfac is a factor by which the average number of iterations per call is multiplied to get the limit, but the 4582 limit is at least resolveitermin; default is -1 (no limit) for resolveiterfac and 1000 for resolveitermin 4583- `lp/resolverestore` and `lp/freesolvalbuffers` possibility to buffer and restore LP solution after diving without 4584 having to resolve the LP; currently turned off, because performance impact is unclear; 4585- `misc/improvingsols` which states whether only solutions which have a better (or equal) primal bound 4586 as the best known are checked; this is of interest if the check of a solution is expensive; default value is FALSE 4587- `misc/resetstat` which state if the statistics should be reseted if the transformed problem is freed 4588 (in case of a benders decomposition this parameter should be set to FALSE) default value is TRUE 4589- `nodeselection/restartdfs/countonlyleafs` in node selector restart dfs which can be used to select the counting process of processed nodes 4590- `presolving/donotaggr` to deactivate aggregation of variables globally 4591- `pricing/delvars` and `pricing/delvarsroot` that define, whether variables created at a node / the 4592 root node should be deleted when the node is solved in case they are not present in the LP anymore 4593- `propagating/%s/maxprerounds` for all propagators which allows to change to maximal number of rounds 4594 of presolving where this propagator participates in 4595- `propagating/%s/presoldelay` for all propagators which allows to change if the presolving call of the given propagator should be delayed 4596- `propagating/%s/presolpriority` for all propagators which allows to change the priority of calling the given propagator 4597- `propagating/pseudoobj/propfullinroot` for allowing to propagate all variables in the root node, 4598 instead of stopping after `maxcands` which is set by a parameter as well 4599- `reading/gmsreader/bigmdefault` and `reading/gmsreader/indicatorreform` reader_gms is now able to write indicator 4600 constraints (reformulated either via big-M or sos1) 4601- `reading/gmsreader/signpower` to enable writing sign(x)abs(x)^n as the rarely used gams function signpower(x,n) 4602- `separating/closecuts/maxunsucessful` to turn off separation if we can not find cuts 4603- `timing/reading` to add reading time to solving time 4604 4605### Data structures 4606 4607- split off `PARAMEMPHASIS` from `PARAMSETTING` (in pub_paramset.c/paramset.c) 4608- new data structure `SCIP_STAIRMAP` 4609- add expression graph data structures and methods for reformulation, domain propagation, simple convexity check on 4610 nonlinear expressions and simplification for expression trees and graphs 4611 4612Testing 4613------- 4614 4615- New scripts for running tests with GAMS 4616- added scripts check_gams.sh, evalcheck_gams.sh and check_gams.awk and target `testgams` in Makefile 4617- adjusted all test scripts to use the same new optimality gap computation as in SCIP 4618- added Makefile option `VALGRIND=true` to enable running the SCIP checks (make test) through valgrind; valgrind errors 4619 and memory leaks are reported as fails 4620- moved *.test and *.solu files to subdirectory testset in check directory and adjusted test scripts 4621 4622Build system 4623------------ 4624 4625### Makefile 4626 4627- Variables: 4628 - via `PARASCIP=true` as a `Makefile` option it is possible to compile SCIP threadsafe in DEBUG-mode, (in OPT-mode it's 4629 only necessary if non-default messagehandler or CppAD is used) 4630 - the `make` parameter `PARASCIP=true` leads to threadsafe message handlers where you need to call 4631 SCIPcreateMesshdlrPThreads() and SCIPmessageSetHandler()/SCIPmessageSetDefaultHandler() and SCIPfreeMesshdlrPThreads(); 4632 therefore we need to link with pthread library 4633 - new variable $(INSTALLDIR) in Makefile which define installation directory for the libraries, $(INSTALLDIR)/lib/, 4634 binary, $(INSTALLDIR)/bin and include headers, $(INSTALLDIR)/include, the default value is the empty string 4635 4636- Linking: 4637 - Linking against Clp and Ipopt has been simplified. Only the directory where the 4638 package has been installed need to be provided now. For details see the INSTALL file. 4639 - to link against IPOPT, only the base directory of an Ipopt installation need to be specified now; additionally, if 4640 building with gnu compilers, the Ipopt libraries directory is stored in the SCIP binary, which should make it easier 4641 to run with Ipopt shared libraries 4642 - to link against Clp, only the base directory of an Clp installation needs to be specified now 4643 4644- Targets: 4645 - New targets `(un)install` in Makefile, support for valgrind in testing environment 4646 - new target `make libs` which compiles only the libraries 4647 - new target in Makefile `install` performs `make` and copies using the install command the include headers, binary, and 4648 libraries 4649 - new target in Makefile `uninstall` removes libraries, binary and include headers form `INSTALLDIR` 4650 - removed target `lintfiles`, this target is now imitated by the `lint` target and a none empty variable `FILES` 4651 4652Fixed bugs 4653---------- 4654 4655- fixed bug in copying if the target SCIP already is in solving stage: it might be that the copy of a variable cannot be found/created 4656- fixed bug trying to print big messages bigger than `SCIP_MAXSTRLEN` 4657- fixed bug w.r.t. counting feasible solutions and turned of sparse solution test 4658- LP solution status is now checked when checking root LP solution. Otherwise, due to different time measurements, it 4659 might happen that the LP solving was stopped due to the time limit, but SCIP did not reach the limit, yet. 4660- fixed bug trying to tighten multiaggregated variables, which have only one active representation and this variable is already tightened 4661- fixed possible buffer overrun in tclique_graph.c 4662- fixed issue with interactive shell in case (user) plugins are included after the default plugins 4663- fixed bug where mutiaggregating leads to an aggregation and both variables were of implicit or integral type 4664- fixed bug in conflict.c, where LPi was manipulated, but not marked as not solved 4665 4666- Tree: 4667 - fixed assertion in tree.c w.r.t. node estimation 4668 - fixed bug in debug.c: removed tree nodes had not been checked if they were pruned due to an incumbent solution found by a diving heuristic 4669 4670- Bounds: 4671 - fixed bug which occured when changing a bound in the solving stage when this variables got upgraded from continuous to 4672 a integer type, where the bounds of this variable were still not integral; due to that SCIPchgVarType() has changed (see above) 4673 - fixed bug in handling of lazy bounds that resulted in putting the bounds explicitly into the LP 4674 4675- Separation: 4676 - fixed assert in sepa_clique.c which is currently not valid because implicit binary variables in cliques are ignored 4677 - fixed bug in sepa_zerohalf.c concerning inconsistent construction of solution array of variables and fixed wrong assert about variable bounds 4678 4679- Constraints: 4680 - fixed not correct merging of variable in logicor constraint handler and changed the name of the method to a common 4681 name used by other constraint handlers too(findPairsAndSets->mergeMultiples) 4682 - fixed bugs in changing the initial and checked flags for constraints in original problem 4683 - fixed bug in cons_linear.c, when scaling a constraint maxabscoef was not set correctly, furthermore the correction of 4684 maxabscoef was not handled correctly 4685 - fixed bug in cons_indicator.c trying to copy a constraint where the pointer to the linear constraint did not point to 4686 the already transformed linear constraint (, happend when SCIPcopy() is used after transforming before presolving) 4687 - fixed numerical bug in linear constraint handler: polishing of coefficients after fixing variables led to wrong 4688 results for continuous variables fixed to a close-to-zero value. 4689 - fixed bug in cons_bounddisjunction where branching on multiaggregated variables was tried while all aggregation variables are fixed 4690 - fixed bug in presolving of cons_logicor.c: adding variable implications can lead to further reductions; added call to applyFixings() 4691 - fixed bug in cons_countsols.c w.r.t. none active variables 4692 - fixed bug in cons_linear.c, scaling could have led to wrong values 4693 4694- Reader: 4695 - fixed bug in reader_fzn.c w.r.t. cumulative constraints 4696 - fixed bug in reader_mps.c: if a variables first occurence is in the bounds section, then the corresponding variable bound was lost 4697 - fixed several issues in flatzinc reader 4698 - deactived checking of zero solution in Zimpl reader when no starting values are provided 4699 - reader_lp is now able to read lines longer than 65534 characters 4700 4701- Memory: 4702 - fixed bug in copying NLPI interfaces that use block-memory (NLPI copy used block memory from source SCIP) 4703 - fixed memory leak in reader_pip.c 4704 - fixed memory leak in coloring part of maximum clique algorithm (tclique_coloring.c) 4705 - fixed memory leak in coloring part of maximum clique algorithm (tclique_coloring.c) in a better way 4706 4707- Numerics: 4708 - fixed bug which occured when the dual farkas multipliers were not available in the lpi because the LP could only be 4709 solved with the primal simplex due to numerical problems 4710 - fixed bug in ZI round heuristic that led to infeasible shiftings for numerically slightly infeasible rows with close-to-zero coefficients 4711 - fixed numerical issue in octane heuristic: close-to-zero values for ray direction could have led to bad computations 4712 4713- Propagation: 4714 - fixed bug in propagation of indicator constraints: cannot fix slack variable to 0 if linear constraint is disabled/not active 4715 - fixed bug in cons_linear.c while sorting the eventdatas during the binary variable sorting for propagation 4716 - fixed bug and wrong assert in heur_shiftandpropagate.c when relaxing continuous variables from the problem 4717 - fixed bug in cons_orbitope:resprop() for the packing case 4718 - fixed wrong changing of wasdelayed flag for propagators 4719 - fixed bug using wrong sign in infinity check in prop_pseudoobj 4720 - fixed bug in redcost propagator: can only be called if the current node has an LP 4721 - fixed bug w.r.t. infinity loop during propagation 4722 4723Miscellaneous 4724------------- 4725 4726- The interface contains several additional callback functions and parameters for plugins. Some effort may be required to compile your old 4727 projects with SCIP 2.1. For details see section `Changes between version 2.0 and 2.1` in the doxygen documentation. 4728 4729@page RN20 Release notes for SCIP 2.0 4730 4731@section RN202 SCIP 2.0.2 4732************************* 4733 4734Performance improvements 4735------------------------ 4736 4737- improved twoopt-heuristic by considering larger search domains 4738- the SoPlex interface now has the capability to provide a primal ray, provided it is compiled against the next SoPlex release (>= 1.5.0.2) 4739- calculation of node priority now also works when variable's relaxation value is equal to a bound 4740- fixed issue w.r.t. calling primal heuristics after presolving detected infeasibility 4741 4742- Constraints: 4743 - fasten propagation in cons_knapsack.c due to negated clique partitions 4744 - recalculating only needed partitions in cons_knapsack.c, not always both 4745 4746- Memory: 4747 - reduced memory usage of shift-and-propagate heuristic 4748 - knapsack constraints are now separated faster; SCIPsolveKnapsackExactly() now works faster and requires less memory 4749 - fasten knapsack separation by replacing SCIPallocBuffer(Array) through SCIPallocBlockMemory(Array) 4750 - improved runtime and memory consumption in SCIPsolveKnapsackExactly() in cons_knapsack.c 4751 4752Fixed bugs: 4753---------- 4754 4755- fixed `make/make.project` 4756- fixed wrong assert in plugins that use SCIPcopy() 4757- fixed bug in DINS w.r.t. column generation 4758- fixed bug in var.c where a possible multiaggregation was resolved to an aggregation but the variables types were not 4759 checked to prefer more general types for aggregating; possible memory loss removed 4760- fixed bug in prop_vbounds.c w.r.t. infinity lower and upper bound of variable bound variables 4761- fixed bug w.r.t. setting wall clocks 4762- fixed wrong assert in var.c (replaced `==` through SCIPsetIsEQ()), real values do not have to be exactly the same when 4763 computed in different function 4764- fixed bug in SCIPsolveIsStopped() where it could happen that TRUE was reported if a nodelimit was reached but 4765 checknodelimits had been set to FALSE 4766- fixed three bugs when writing in fzn format (wrongly splitted writing buffer, wrong variables was used, floats were printed to short) 4767- fixed bug in conflict.c, infeasibility analysis with big values led to wrong result 4768 4769- Heuristics: 4770 - fixed bug in DINS heuristic that occured when the incumbent solution value is outside the variable's current domain 4771 - fixed behavior of LNS heuristics when the subproblem aborts: continue in optimized mode, stop in debug mode 4772 - fixed segmentation fault in heur_subnlp.c which occured if resolving the NLP with a tighter feasibility tolerance 4773 failed with a solver error 4774 - fixed bug in heur_subnlp.c where constraints forbidding variable fixations where added if a cutoff was used in the subproblem 4775 - fixed bug in heur_subnlp.c where wrong constraints forbidding variable fixations where added in case of general integers 4776 4777- NLP: 4778 - fixed bug in changing quadratic coefficients of a row in the NLP 4779 - fixed various small bugs in nonlinear expressions code 4780 - fixed removal of fixed linear variables from a nonlinear row: a fixed variable may have not been removed if there was 4781 also a multiaggregated variable 4782 4783- LP: 4784 - implemented SCIPlpiGetPrimalRay() in SoPlex interface that has become available with SoPlex version 1.5.0.2 4785 - fixed two bugs at nodes with unbounded LP relaxation: don't check lp rows of infinite solution; don't analyze conflict 4786 due to primal cutoff bound of -infinity 4787 - fixed wrong assumption that an optimal LP solution in the root is optimal for the problem if there are no active 4788 pricers, need to check also whether all variables are in the LP 4789 4790- Constraints: 4791 - fixed bug in reader_cip regarding reading of very long constraints 4792 - fixed bug while after restarting possible the aggregted variables were not removed in setppc constraints 4793 - fixed bug in cons_knapsack: in seldom circumstances the relaxation of a linear constraint can detect infeasibility, 4794 which was not handled properly 4795 - fixed bug w.r.t. to pricing variables in case new initial constraints come in during the price and cut loop 4796 - fixed bug in cons_soc.c w.r.t. upgrading from quadratic constraints with finite left-hand-side 4797 - fixed bug caused by not (correctly) counting boundchanges in cons_varbound.c 4798 - fixed bug in sorting mechanism in cons_xor.c 4799 - fixed wrong (neg)cliquepartition check in cons_knapsack.c when deleting a coefficient 4800 - fixed bug in cons_quadratic: in seldom cases, fixed variables may have been substituted out wrongly in presolve 4801 - fixed bugs in cons_countsols.c w.r.t. collecting feasible solutions and forbidding a found solution 4802 - fixed bug in cons_linear.c: multiaggregated variables were not removed when adding during solve, leading to a failing 4803 assert in tightenBounds due to an unsuccessful bound tightening 4804 4805- Memory: 4806 - fixed bug concerning overflow in memsize calculation in set.c 4807 - fixed memory leak in SoPlex LP interface when requesting an unbounded solution 4808 - fixed memory leak in SoPlex LP interface when solving with LP scaling 4809 - fixed memory leaks in reader of TSP example 4810 4811@section RN201 SCIP 2.0.1 4812************************* 4813 4814Performance improvements 4815------------------------ 4816 4817- SCIP with SoPlex as LP solver now uses auto pricing by default (start with devex, switch to steepest 4818 edge after some iterations); this fixes timeouts on instances where devex converges very slowly 4819- fixing lifting of new knapsack items which are negated items of already included items, this could lead to very long presolving 4820- fixed performance issue in presolving w.r.t. to computing the number of new fixings, aggregated, 4821 and so on before a constraint handler presolver is called 4822- in case of adding constraints during pricing with initial flag set to 4823 TRUE, we add now these constraints after the pricing round to the LP 4824- changed parameter values in clique separator in order to avoid very large branch-and-bound trees 4825 4826Interface changes 4827----------------- 4828 4829### New and changed callbacks 4830 4831- allow access of transformed constraints in `SCIP_STAGE_TRANSFORMED` 4832 4833### Changed parameters 4834 4835- replaced parameter `constraints/quadratic/minefficacy` by `constraints/quadratic/minefficacysepa` and `constraints/quadratic/minefficacyenfo` 4836- added possible values `a` and `e` for `constraints/soc/nlpform` to enable automatic choice and convex exponential-sqrt 4837 form for SOC constraint representation in NLP 4838 4839Fixed bugs 4840---------- 4841 4842- fixed bug w.r.t. looseobjval; the counting of number of loose variables in the LP data structure was incorrect in case 4843 a variable got aggregated or multi-aggregated 4844- fixed bug in copy method of objvardata which should only create a new `SCIP_VARDATA` if the implemented subclass create 4845 a copy of the given objvardata object 4846- fixed bug in lp.c where in case of objlimit reached and fastmip not all variables where priced because of an incorrect 4847 dual solution 4848- fixed bugs in binpacking example w.r.t. empty struct and not initializing an array 4849- fixed bugs in sepa_clique.c concerning incorrect way to ignore implicit binary variables in cliques and non-active 4850 variables in implications 4851- fixed some bugs w.r.t. to casting pointer arrays 4852- fixed bug in vars.c which handled arrays with parts of original variables during resolving to active variables (using 4853 SCIPvarsGetProbvarBinary) wrong 4854- fixed bug in nlp.c: nlrowSearchQuadElem was using SCIPquadelemSortedFind() incorrectly 4855 4856- Branching: 4857 - fixed assertion w.r.t. to probing during the propagation round of a branch-and-bound node 4858 - fixed computation of node's objective value estimate when branching on continuous variables (see 4859 SCIPtreeCalcChildEstimate(), SCIPtreeBranchVar()) 4860 - fixed bug in statistic w.r.t. number of calls for external branching candidates 4861 - fixes to branching on continuous variables 4862 4863- Reader: 4864 - fixed bug in reader_gms.c: linear coefficients for quadratic variables were not printed if they had no 4865 square-coefficient 4866 - fixed bug in reader_mps: indicator constraints do not output the slack variables anymore 4867 4868- Constraints: 4869 - fixed bugs in SCIPcopyConss: copy all active constraints (including disabled ones), *valid was not initialized to TRUE 4870 - fixed bug in debug.c w.r.t. checking of constraints and continuous variables 4871 - fixed bug in cons.c which didn't allow the changing of the separation and enforcement flag of a constraint in the 4872 problem stage 4873 - corrected behavior of the copy function in cons_indicator.c: create artificial linear constraint if linear constraint 4874 was deleted 4875 - fixed bug in cons_indicator.c: presolving cannot delete linear constraints; several other minor bugfixes 4876 - fixed bugs in cons_bounddisjunction where the branching during the constraint enforcement was done incorrectly 4877 - fixed bugs in cons_orbitope.c: orbitopal fixing for the packing case had two bugs; also fixed one wrong assert 4878 - fixed bugs in cons_sos?.c: take average of objestimate 4879 - fixed bug in cons_logicor, implications on none `SCIP_VARTYPE_BINARY` variable were handled wrong 4880 - fixed bug in cons_linear while trying to add a conflict without any variables 4881 - fixed bug in cons_indicator.c: creating constraints in transformed stage is now possible 4882 4883- LP Interface: 4884 - fixed bug w.r.t. memory allocation for all values of a column in lpi_cpx.c 4885 - fixed bugs in SCIPnlpiOracleChgLinearCoefs() and SCIPnlpiOracleChgQuadCoefs() for the case where new coefficients where 4886 added 4887 - fixed bugs in lpi_none.c w.r.t. debug and opt mode 4888 - fixed bug in lpi_cpx.c w.r.t. to wrong handling in case the crossover did not succeed 4889 4890- Heuristics: 4891 - fixed bug in heur_subnlp when initialized starting values of a fixed variable in the NLP of the subscip 4892 - fixed bug in heur_undercover: removed option globalbounds, since we are not allowed to relax bounds at a probing node 4893 - fixed bug in heur_shiftandpropagate where some variables were initialized too late 4894 - fixed numerical issue in some heuristics: nearly-integral values that are between the feasibility and the integrality 4895 tolerance might not have been rounded correctly 4896 - fixed bug in heur_guideddiving: best solution is now copied to avoid deletion in case of many new solutions 4897 - fixed bug in DINS heuristic, information storage for binary variables could lead to bad memory access in column 4898 generation applications 4899 - fixed bug in heur_shiftandpropagate.c: Now, the heuristic checks rows for global infeasibility at the beginning. This 4900 check is only relevant if presolving is disabled. 4901 - fixed bug in heur_subnlp when forbidding a particular combination of integer variables in the main problem 4902 4903@section RN200 SCIP 2.0.0 4904************************* 4905 4906Features 4907-------- 4908 4909- added relaxation structure to SCIP, it represents global relaxation information independent from a specific relaxator; 4910 at the moment, it contains information about the relaxation solution stored in the variables: objective value and 4911 validness 4912- SCIP may now be manually restarted 4913- SCIPsolveKnapsackExactly() got a new 12. parameter `SCIP_Bool* success` which stores if an error occured during 4914 solving(normally a memory problem) 4915- SCIP can now handle problems with continuous variables w.r.t. to counting (the projection to the integral variables 4916 are counted) 4917- an XML-parser is available in the src/xml subdirectory 4918- We do not distinguish between block memory for the original and the transformed problem anymore. The same 4919 block memory is now used in both problem stages. 4920- added new sorting method SCIPsortLongPtr(), SCIPsortDownLongPtr() and all corresponding methods 4921- added new sorting method SCIPsortRealIntPtr(), SCIPsortDownRealIntPtr() and all corresponding methods 4922 4923- Heuristics: 4924 - SCIP can now copy instances (e.g. for heuristics) 4925 - new undercover heuristic for MINLPs: fixes variables such as to obtain a linear or convex subproblem and solves this 4926 - primal heuristics may now already be called before presolving, using the new timing point 4927 `SCIP_HEURTIMING_BEFOREPRESOL`. Note that solutions that are added before/during presolving, will be retransformed to 4928 the original space. 4929 - primal heuristics may now be called during presolving, using the new timing point `SCIP_HEURTIMING_DURINGPRESOLLOOP` 4930 - added heuristic zirounding (heur_zirounding.{c,h}) 4931 - added heuristic twoopt (heur_twoopt.{c,h}) 4932 - added new NLP heuristic (heur_subnlp.{c,h}) which solves the sub-NLP that is obtained by fixing all discrete variables 4933 in the CIP and applying SCIP's presolving 4934 - feasibility pump heuristic now implements all functionality for feasibility pump 2.0 4935 4936- Reader: 4937 - can now read XML-solution files as used by CPLEX 4938 - the MPS reader can now read MIQPs and MIQCPs where a quadratic objective function can be specified by a QMATRIX or 4939 QUADOBJ section and the quadratic part of a quadratic constraint by a QCMATRIX 4940 - the MPS reader can now write quadratic and SOC constraints 4941 - the GAMS reader can now write SOC constraints 4942 - added support for bool_gt, bool_lt, bool_ge, bool_le, bool_ne, bool_not, int_times, int_minus, int_plus, int_negate, 4943 float_times, float_minus, float_plus, float_negate constraints to flatzinc reader 4944 - the LP reader (.lp files) can now read MIQPs and MIQCPs and write quadratic and SOC constraints 4945 - the LP reader (.lp files) and MPS reader can now read semicontinuous variables, they are handled by creating bound 4946 disjunction constraints 4947 - added new reader for polynomial mixed-integer programs (reader_pip.{c,h}) as used in the POLIP 4948 4949- Indicator constraints: 4950 - SCIP can now handle indicator constraints (reading (from LP, ZIMPL), writing, solving, ...) see \ref cons_indicator.h. 4951 - the indicator constraint can now decompose the problem, i.e., not add the linear constraint to the problem if all of 4952 its variables are continuous 4953 - can now read and write indicator constraints in the (extended) MPS format 4954 - cons_indicator tries to adapt solutions to get feasible during check 4955 - cons_indicator allows to store information on other linear constraints that might help to separate cuts 4956 4957- Constraint handlers: 4958 - Solution counting extended to constraint integer programs, this also 4959 includes constraint integer programs which contain continuous variables 4960 - The solution behavior of SCIP can be diversified by randomly permuting constraints and variables or randomly 4961 determining a set of branching variables with a unique high priority 4962 - `negated cliques` (1<=i<=n : sum (x_i) >= n-1) were added and we are using them now inside the knapsack constraint 4963 handler, the cliquepartitioning which is returned by SCIPcalcCliquePartition() contains now integer != 0, negatives ones 4964 indicates a negated clique and positive ones indicates a normal clique 4965 - SCIP is now able to detect in DEBUG-mode whether a constraint or variables which will be added, was also created in 4966 the same scip instance, if not an error is thrown 4967 - cons_knapsack is now able to detect negated cliques due to negated cliques on knapsack constraints 4968 - SCIP is now able to write non-linear opb-files(linear instances with and-constraints) 4969 - New constraint handlers for linking constraints (only Beta), cumulative constraints, and for breaking orbitopal symmetries 4970 - `negated cliques` handling in knapsack constraint handler got changed due to the new method 4971 SCIPcalcNegatedCliquePartition() resulting in new consdata members `negcliquepartition`, `negcliquepartitioned` and 4972 `nnegcliques`; changed SCIPcalcCliquePartition() so all cliquepartitions (calculated by SCIPcalcCliquePartition() or 4973 SCIPcalcNegatedCliquePartition(), which uses the first one) contain again not negative integers 4974 - `and`, `knapsack`, `linear`, `logic`, `or`, `quadratic`, `setpp`, `varbound`, `xor` and `clique` constraint handlers 4975 can handle implicit binary variables 4976 - knapsack constraint handler is now able to pairwise presolving constraints 4977 - constraint handlers `logicor`, `and`, `or` can parse their output 4978 - constraint handler `or` can copy its constraints 4979 - added packing/partitioning orbitope constraint handler for symmetry handling (cons_orbitope.{c,h}) 4980 - added constraint handler for second order cone constraints (cons_soc.(c|h)) 4981 - added constraint handler cons_linking.{c,h} (see cons_linking.c for more details) 4982 - cons_quadratic can make solutions in CONSCHECK feasible for the quadratic constraints by moving values of linear 4983 variables and passing the modified solution to the trysol heuristic 4984 - constraint handler can now register their upgrade functions for quadratic constraints to cons_quadratic (similar to 4985 LINCONSUPGD) 4986 4987- Separation: 4988 - New separators for oddcycle cuts and Chvatal-Gomory cuts using sub-MIPs 4989 - modified implementation of separation algorithms in cons_knapsack.c according to results of diploma thesis; including 4990 super-additive lifting (disabled) 4991 - uncommented decomposeProblem() in sepa_zerohalf.c (in default settings, not used anyway): was not adapted to the case 4992 that contiuous variables are allowed in a row 4993 - new separator rapid learning (sepa_rapidlearning.{c,h}) that produces conflicts, global bound changes, primal 4994 solutions and initializes inference values for branching 4995 - added Chvatal-Gomory cuts separated with a sub-MIP (sepa_cgmip.{c|h}) 4996 - added reader for 'Weigted Boolean Optimization': problems (reader_wbo.{c,h}), this reader needs the reader_opb files 4997 - new separator oddcycle (sepa_oddcycle.{c,h}) separates oddcycle inequalities using the implication/conflict graph and 4998 dijkstra-algorithm based on binary heaps (dijkstra/dijkstra_bh.{c,h}) 4999 5000- Branching: 5001 - Branching on externally given candidates, the \ref BRANCH 'branching rules' have a second new callback method 5002 (see type_branch.h for more details): SCIP_DECL_BRANCHEXECEXT(x) can be used to branch on external branching candidates, 5003 which can be added by a user's `relaxation handler` or `constraint handler` plugin, calling SCIPaddExternBranchCand(). 5004 - added branchcands for relaxator solution, that can be added by the relaxator and used by branching rules 5005 - added relaxsol to variables, s.t. a relaxator can store a solution on which branching or separation can be done 5006 - SCIP can now branch on relaxation solutions that are either installed to the relaxsol field of the variables or added 5007 to the list of relaxation candidates, e.g., by constraint handlers. Branching on relaxation solutions is performed if 5008 the enforcement resulted in an unresolved infeasibility and there are no LP branching candidates, but before pseudo 5009 solution branching. The branching rules leastinf, mostinf, random and pscost implement the callback for branching on 5010 relaxation candidates. 5011 - SCIP can branch on continuous variables. The branching value x' must not be one of the bounds. Two children (x <= x', 5012 x >= x') will be created. 5013 - the vbc visualization adds the branching type (lower or upper bound change) and the new bound to the node information 5014 - the vbc visualization adds the new bound of the branched variable to the node information 5015 5016- Statistic: 5017 - added statistic information about the first primal solution to SCIP statistic; in the statistic output a new line 5018 appears with this information 5019 - now the statistic displays the number of calls of the feasibility checking method of each constraint handler and the 5020 running time of it 5021 5022- Propagation: 5023 - New rounding and propagation heuristics 5024 - New propagator for variable bounds 5025 - primal heuristics may now be called directly after the node's propagation loop, using the new timing point 5026 `SCIP_HEURTIMING_AFTERPROPLOOP` 5027 - following methods SCIPinferVarUbProp(), SCIPinferVarLbProp(), SCIPinferVarLbCons(), SCIPinferVarUbCons() have a new 6th 5028 parameter `SCIP_Bool force` which allows bound tightening even if the difference to the newbound is below bound 5029 strengthening tolerance 5030 - added propagator for variable lower and upper bounds (prop_vbounds.{c,h}); adjusted cons_varbound.c, var.c, and, 5031 implics.c to work correctly with the new propagator 5032 5033- Nonlinear CIPs: 5034 + Improved constraint handler for quadratic constraints 5035 + New constraint handler for second order cone constraints 5036 + New MINLP heuristics (undercover, subnlp) 5037 + Preliminary support for non-linear relaxations (via expression trees) 5038 + Automatic branching on solutions from arbitrary relaxations and on continuous variables 5039 5040Performance improvements 5041------------------------ 5042 5043- improved `settings/emphasis/cpsolver.set` to decrease time per node 5044- reworked access to pseudo solution and inference value of variables in order to reduce function calls 5045- changed default value of parameter `nodeselection/restartdfs/selectbestfreq` to 0; this means if the current node has 5046 no children the node with the best bound is selected (SCIPgetBestboundNode()) 5047- added a dual reduction step in cons_knapsack.c 5048- fasten check for common cliques in SCIPcliquelistsHaveCommonClique 5049- SCIP with CPLEX as LP solver now uses quickstart steepest edge pricing as default instead of steepest edge pricing 5050- avoid unnecessary domain propagation and LP resolve at nodes with infeasible LP relaxation 5051- improved zerohalf cut separator: more than one delta is tested for MIR cuts, better handling of dense base 5052 inequalities, faster scaling of fractional coefficients in rows (now enabled), improved parameter settings (presolving) 5053 5054- LP solution: 5055 - in root node, first LP solution is checked for feasibility to avoid expensive setup 5056 - avoided restarting if LP solution is feasible 5057 - separators are not called any longer for an integral initial LP solution 5058 5059Examples and applications 5060------------------------- 5061 5062- New branch-and-price example which includes Ryan/Foster branching (binpacking example) 5063- New example illustrating the use of an event handler (`example/Eventhdlr`) 5064 5065Interface changes 5066----------------- 5067 5068- Enhanced user interface for callable library: manual restarts, predefined settings and many other features 5069- Support of wbo format for weighted PBO problems, IBM's xml-solution format and pip format for polynomial mixed-integer programs 5070- Extended reader for Flatzinc models 5071- new API for 'expressions interpreter': code that evaluates expression trees, including first and second derivatives 5072- NLP solver interface (NLPI) now independent of SCIP like LPI 5073- SCIP can now maintain a central NLP relaxation of the problem (similar to LP) 5074- SCIP can now manage a list of external codes (e.g., LP or NLP solver, ZIMPL) 5075- lp.h/lp.c and the lpi's were changed according to the changes mentioned below. 5076- adding and deletion of rows to the separation storage and to the LP can now be catched by events 5077 (`SCIP_EVENTTYPE_ROWADDEDSEPA`, `SCIP_EVENTTYPE_ROWDELETEDSEPA`, `SCIP_EVENTTYPE_ROWADDEDLP`, `SCIP_EVENTTYPE_ROWDELETEDLP`) 5078 5079### New and changed callbacks 5080 5081- new callback SCIP_DECL_BRANCHEXECRELAX(), together with new parameter in SCIPincludeBranchrule() for branching on a 5082 relaxation solution 5083 5084- Copying a SCIP instance: 5085 - Constraint handlers have two new callback methods. One for copying the constraint handler plugins 5086 SCIP_DECL_CONSHDLRCOPY() and the other for copying a constraint itself, SCIP_DECL_CONSCOPY(). 5087 - All plugins, like \ref BRANCH `branching rules` and \ref HEUR `primal heuristics`, have a new callback method (see, e.g., 5088 type_branch.h and type_heur.h for more details): 5089 - SCIP_DECL_BRANCHCOPY(x), SCIP_DECL_HEURCOPY(x) etc. 5090 - When copying a SCIP instance, these methods are called to copy the plugins. 5091 - The main problem has a new callback method (see type_prob.h for more details) SCIP_DECL_PROBCOPY(x) when copying a 5092 SCIP instance, this method is called to copy the problem's data. 5093 - Variables have a new callback method (see type_var.h for more details) SCIP_DECL_VARCOPY(x) when copying a SCIP 5094 instance, this method is called to copy the variables' data. 5095 5096- Restarts: 5097 - The callback SCIP_DECL_PROBEXITSOL(x) in the main problem has one new parameter (see type_prob.h for more details): 5098 - The parameter `restart` is `TRUE` if the callback method was triggered by a restart. 5099 5100### Deleted and changed API methods 5101 5102- All C++ objects and constructors have a SCIP pointer, now. 5103- added parameter scip to ObjCloneable::clone() 5104- changes in a row can now be catched via row events (SCIPcatchRowEvent(), SCIPdropRowEvent(), 5105 `SCIP_EVENTTYPE_ROWCOEFCHANGED`, `SCIP_EVENTTYPE_ROWCONSTCHANGED`, `SCIP_EVENTTYPE_ROWSIDECHANGED`) 5106- added new parameter `varcopy` to SCIPcreateVar() to add the function for copying variable data 5107- in case of using SCIPwriteTransProblem() the currently (locally) valid problem is written this now also includes the 5108 local constraints 5109 5110- Settings: 5111 - The predefined setting files like `settings/cuts/off.set,aggressive.set,fast.set` have been replaced by 5112 interface methods like SCIPsetHeuristics(), SCIPsetPresolving(), SCIPsetSeparating(), and SCIPsetEmphasis() in 5113 \ref scip.h and by user dialogs in the interactive shell like 5114 `SCIP> set {heuristics|presolving|separating} emphasis {aggressive|fast|off}` or 5115 `SCIP> set emphasis {counter|cpsolver|easycip|feasibility|hardlp|optimality}` 5116 - All functions for setting user parameters of different types like SCIPparamSetBool(), SCIPparamSetChar(), 5117 SCIPparamSetInt(), SCIPparamSetLongint(), and SCIPparamSetString() in pub_paramset.h have a new parameter 5118 `quiet` it prevents any output during the assign to a new value. 5119 5120- NLP: 5121 - NLPIs can now be used without generating a SCIP instance (i.e., do not require a SCIP pointer), code moved into src/nlpi 5122 - NLPIs can now be managed like other SCIP plugins, i.e., they can be included into the SCIP core and accessed by 5123 methods SCIPincludeNlpi(), SCIPfindNlpi(), SCIPgetNNlpis(), SCIPgetNlpis(), SCIPsetNlpiPriority() 5124 5125- Intervalarithmetic: 5126 - method SCIPgetVarPseudocostCurrentRun() now returns the pseudocost value of one branching direction, scaled to a unit 5127 interval, old method now called SCIPgetVarPseudocostValCurrentRun() 5128 - renamed SCIPintervalScalarProductRealsIntervals()/SCIPintervalScalarProduct() by 5129 SCIPintervalScalprodScalars()/SCIPintervalScalprod() and redesigned them in intervalarith.c including new methods 5130 SCIPintervalScalprodScalarsInf/Sup() 5131 5132- Branching: 5133 - The usage of strong branching changed. Now, SCIPstartStrongbranch() and SCIPendStrongbranch() must be 5134 called before and after strong branching, respectively. 5135 - The methods SCIPgetVarPseudocost() and SCIPgetVarPseudocostCurrentRun() in \ref scip.h now return the pseudocost value of 5136 one branching direction, scaled to a unit interval. The former versions of SCIPgetVarPseudocost() and 5137 SCIPgetVarPseudocostCurrentRun() are now called SCIPgetVarPseudocostVal() and SCIPgetVarPseudocostValCurrentRun(), respectively. 5138 - The methods SCIPgetVarConflictScore() and SCIPgetVarConflictScoreCurrentRun() in \ref scip.h are now called 5139 SCIPgetVarVSIDS() and SCIPgetVarVSIDSCurrentRun(), respectively. 5140 - The methods SCIPvarGetNInferences(), SCIPvarGetNInferencesCurrentRun(), SCIPvarGetNCutoffs(), and 5141 SCIPvarGetNCutoffsCurrentRun() are now called SCIPvarGetInferenceSum(), SCIPvarGetInferenceSumCurrentRun(), 5142 SCIPvarGetCutoffSum(), and SCIPvarGetCutoffSumCurrentRun(), respectively. Furthermore, they now return 5143 `SCIP_Real` instead of `SCIP_Longint` values. 5144 - The method SCIPgetVarStrongbranch() has been replaced by two methods SCIPgetVarStrongbranchFrac() and 5145 SCIPgetVarStrongbranchInt(). 5146 5147- Copying a SCIP instance: 5148 - Every new callback method resulted in a new parameter of the include function for the corresponding plugin, 5149 e.g., SCIPincludeBranchrule() has two new parameters `SCIP_DECL_BRANCHCOPY((*branchcopy))` and 5150 `SCIP_DECL_BRANCHEXECREL((*branchexecrel))`. In the same fashion, the new callbacks 5151 `SCIP_DECL_VARCOPY` and `SCIP_DECL_PROBCOPY` led to new parameters in SCIPcreateVar() and SCIPcreateProb() in 5152 scip.c, respectively. 5153 - W.r.t. to copy and the C++ wrapper classes there are two new classes. These are `ObjCloneable` and `ObjProbCloneable`. 5154 The constraint handlers and variables pricers are derived from `ObjProbCloneable` and all other plugin are derived from `ObjCloneable`. 5155 Both classes implement the function `iscloneable()` which return whether a plugin is clone able or not. Besides that each class has a 5156 function named `clone()` which differ in their signature. See objcloneable.h, objprobcloneable.h, and the TSP example for more details. 5157 - SCIPincludeHeur() and SCIPincludeSepa() in \ref scip.h, as well as scip::ObjSepa() and scip::ObjHeur(), have a new parameter: 5158 `usessubscip`: It can be used to inform SCIP that the heuristic/separator to be included uses a secondary SCIP instance. 5159 - The argument success in `SCIP_DECL_CONSCOPY` has been renamed to valid. 5160 5161- Heuristics: 5162 - SCIPcutGenerationHeuristicCmir() in sepa_cmir.h has three new parameters: 5163 - `maxmksetcoefs`: If the mixed knapsack constraint obtained after aggregating LP rows contains more 5164 than `maxmksetcoefs` nonzero coefficients the generation of the c-MIR cut is aborted. 5165 - `delta`: It can be used to obtain the scaling factor which leads to the best c-MIR cut found within 5166 the cut generation heuristic. If a `NULL` pointer is passed, the corresponding c-MIR cut will already be 5167 added to SCIP by SCIPcutGenerationHeuristicCmir(). Otherwise, the user can generate the cut and add it to SCIP 5168 on demand afterwards. 5169 - `deltavalid`: In case, the user wants to know the best scaling factor, i.e., `delta` passed is not `NULL`, 5170 `deltavalid` will be `TRUE` if the stored scaling factor `delta` will lead to a violated c-MIR cut. 5171 5172### New API functions 5173 5174- added SCIPcalcNegatedCliquePartition() to scip.c to calculate a clique partition on negations of all given binary 5175 variables 5176- SCIPpermuteArray() that randomly shuffles an array using the Fisher-Yates algorithm 5177- SCIPgetRandomSubset() that draws a random subset of disjoint elements from a given set of disjoint elements 5178- SCIPswapPointers() 5179- SCIPlpiGetSolverDesc() to get a descriptive string of an LP solver (developer, webpage, ...) 5180- SCIPholelistGetNext() to get the next hole of the hole list 5181- SCIPlpRecalculateObjSqrNorm() which is used when the old calculated square norm was unreliable 5182- SCIPpricerIsDelayed() which returns if the pricer is delayed (see pub_pricer.h) 5183 5184- Variables: 5185 - SCIPvarIsBinary() which checks if a variable is (implicit) binary (see var.c for more details) 5186 - SCIPvarGetHolelistOriginal(), SCIPvarGetHolelistGlobal(), SCIPvarGetHolelistLocal() to get the original, global and local holes, respectively 5187 - SCIPvarGetProbvarHole() to tranform a given domain hole to the corresponding active, fixed, or multi-aggregated variable 5188 5189- Restart: 5190 - allow user to trigger a restart during presolving SCIPrestartSolve() 5191 - SCIPrestartSolve() that allows the user to manually restart the solving process 5192 - SCIPisInRestart() to detect whether we are currently restarting 5193 5194- Heuristics: 5195 - for heuristics SCIPheurSetFreq() to change the frequency of the heuristic (pub_heur.h, heur.c) 5196 - SCIPsepaUsesSubscip(), SCIPheurUsesSubscip() 5197 5198- Intervalarithmetic: 5199 - SCIPeventGetHoleLeft() and SCIPeventGetHoleRight() for accessing the left right interval bound of a domain hole added or removed event 5200 - SCIPholelistGetLeft() and SCIPholelistGetRight()to get the left and right interval bounds of the open hole interval 5201 - SCIPintervalAddInf/Sup/Vectors(), SCIPintervalMulInf/Sup() in intervalarith.c 5202 5203- Sorting: 5204 - added SCIPsortPtrPtrLongIntInt(), SCIPsortLongPtrPtrIntInt() and corresponding sorting/inserting/deleting methods in 5205 pub_misc.h and necessary defines in misc.c 5206 - added SCIPsortLongPtrInt() and corresponding sorting/inserting/deleting methods in pub_misc.h and necessary defines in misc.c 5207 - added SCIPsortPtrPtrInt() (and various other) and corresponding sorting/inserting/deleting methods in pub_misc.h and 5208 necessary defines in misc.c 5209 - SCIPsortPtrBool() and corresponding sorting/inserting/deleting methods in pub_misc.h and necessary defines in misc.c 5210 5211- Constraint Handlers: 5212 - SCIPconshdlrGetEnfoConss(), SCIPconshdlrGetNEnfoConss() 5213 - can now forbid upgrading of individual linear constraints (SCIPmarkDoNotUpgradeConsLinear()) 5214 - SCIPpermuteProb() that randomly permutes constraints and variables 5215 - SCIPgetResultantOr() which returns the resultant of an `or` constraint 5216 - SCIPmarkDoNotUpgradeConsLinear() in cons_linear.?, which allows to forbid upgrading of linear constraints 5217 - SCIPgetNUpgrConss() which returns the number of upgraded constraints 5218 - SCIPconshdlrGetCheckTime() and SCIPconshdlrGetNCheckCalls() which returns the running time in the feasibility checking of the 5219 corresponding constraint handler respectively the number of calls of the checking method (implemented in cons.c) 5220 5221- Copy: 5222 - SCIPcopy() to clone a SCIP instance 5223 - SCIPcopyPlugins(), SCIPcopyParamSettings(), SCIPcopyVars(), SCIPcopyConss(), SCIPgetVarCopy() to copy 5224 individual parts of a SCIP instance separately. 5225 - SCIPcopyProbData() and SCIPprobCopyProbData() which copies the probdata from a sourcescip to a targetscip 5226 5227- Branching: 5228 - two new functions SCIPgetVarsStrongbranchesFrac()/SCIPgetVarsStrongbranchesInt() for computing strong branching 5229 information for several variables 5230 - SCIPbranchruleGetNRelaxCalls() to get the total number of times, a particular branching rule was called on a relaxation solutions 5231 - SCIPbranchRelax() to branch on a relaxation solution 5232 - SCIPbranchVarVal() to branch on an arbitrary value within the variable's bounds 5233 - SCIPbranchGetBranchingPoint() and SCIPgetBranchingPoint() to select branching point for a variable, e.g., 5234 ensure branching point is inside the interval for a continuous variable 5235 - SCIPexecRelpscostBranching() in branch_relpscost.{c,h}; this method allows of calling the reliability 5236 pseudo cost branching algorithm for given set of branching candidates from the outside 5237 - SCIPinitVarBranchStats() to initialize the branching statistics (such as pseudo costs, VSIDS, inference values) of a variable 5238 - SCIPselectBranchVarPscost() in branch_pscost.{c,h}; this method selects from a given candidate array a 5239 branching variable w.r.t. pseudo cost branching for relax candidates 5240 5241- Reading, Writing and Parsing: 5242 - SCIPparseVarName() which parses a string in cip-format as a variable name 5243 - SCIPparseVarList() which parses a string as a variable list in cip-format 5244 - the Flatzinc reader can now handle the output annotations of the Flatzinc format; the method SCIPprintSolReaderFzn() 5245 outputs the given solution in Flatzinc format w.r.t. the output annotations 5246 - SCIPprintSolReaderFzn() which prints the best solution in Flatzinc format w.r.t. to the output annotations 5247 in the input file of the flatzinc model 5248 - SCIPwriteVarName() which writes a variable in cip-format to given stream 5249 - SCIPwriteVarsList() which writes an array of variables in cip-Format to given stream 5250 - SCIPwriteVarsLinearsum() which writes an array of variables and coefficients as linear sum in cip-Format to given stream 5251 5252- Copying a SCIP instance: 5253 - SCIPapplyRens() in \ref heur_rens.h has a new parameter `uselprows`. It can be used to switch from LP rows 5254 to SCIP constraints as basis of the sub-SCIP constructed in the RENS heuristic. 5255 5256- Parameters: 5257 - SCIPsetParamsCountsols() which sets the parameter for a valid counting process 5258 - SCIPsetEmphasis() which sets parameter to detect feasibility fast, handle hard LP, solves easy CIPs fast, behaves like a 5259 CP solver, set parameter for a valid counting process; the desired behavior is triggered via a parameter of the function 5260 - SCIPresetParam() to reset the value of a single parameter to its default value 5261 5262- Settings: 5263 - added SCIPsortRealRealRealPtr() and corresponding sorting/inserting/deleting methods in pub_misc.h and necessary defines in misc.c 5264 as basis for the subSCIP, setting ist to TRUE (uses LP rows) will lead to same version as before 5265 - SCIPsetHeuristics(), SCIPsetSeparating(), SCIPsetPresolving() which set the heuristics to aggressive, fast, off, or 5266 default settings, depending on the `SCIP_PARAMSET` parameter 5267 - SCIPsetSubscipsOff() which disables all plugins that uses subscips 5268 - SCIPsepaSetFreq() to set the calling frequency of a separator 5269 5270### Command line interface 5271 5272- added new dialog for setting the SCIP parameters for hardlp, optimality, easy CIP, CP like search 5273- added new dialog for setting the SCIP parameters for feasibility problems `SCIP> set emphasis feasibility` 5274- added new dialog for setting the SCIP parameters for counting `SCIP> set emphasis counting` 5275- added new dialog for setting presolving to aggressive, fast, or off in interactive shell 5276- added new dialog for setting separation to aggressive, fast, or off in interactive shell 5277- added new dialog for writing all solutions which are collected during the counting process (see cons_countsols.{c,h}) 5278- added new dialog for setting heuristics to aggressive, fast, or off in interactive shell 5279- added new dialog `display pricers` which displays all included pricers 5280 5281### Interfaces to external software 5282 5283- added interface to CppAD (nlpi/exprinterpret_cppad.cpp) 5284- Improved Xpress, CPLEX, SoPlex interfaces 5285- the SoPlex interface now includes equilibrium scaling on lp's solved from scratch without starting basis 5286- the SoPlex interface can now double check each SoPlex result against CPLEX (lpi_spx.cpp) 5287- the SoPlex interface has the option to restore basis only after entire strong branching phase instead of after each 5288 strong branch (off, because it mostly appears to increase strong branching time and iterations) (lpi_spx.cpp) 5289 5290### Changed parameters 5291 5292- removed parameter `constraints/knapsack/maxnumcardlift` and adapted setting files 5293- changed parameter `lp/fastmip` from boolean to integer, possible values are 0 (off), 1 (medium, default), 2 (full, 5294 must not be used with branch-and-price). 5295 5296### New parameters 5297 5298- `branching/clamp` to set the minimal fractional distance of a branching point to a continuous variable' bounds 5299- `branching/random/seed` to change the initial seed value of the branching rule random 5300- `constraints/indicator/addCouplingCons` that allows to add variable upper bounds if addCoupling is true 5301- `constraints/indicator/enforceCuts` that allows to check for violated cust in enforcement 5302- `constraints/indicator/maxCouplingValue` for the maximal value of the coefficient in a coupling inequality/constraint 5303- `constraints/indicator/noLinconsCon` which controls whether the linear constraint is not explicitly 5304 added to the problem. default is FALSE 5305- `constraints/knapsack/dualpresolving` to switch dualpresolving on/off inside the knapsack constraint handler, default is TRUE 5306- `constraints/knapsack/presolpairwise` that allows pairwise presolving of knapsack constraints, default is TRUE 5307- `constraints/knapsack/presolusehashing` that allows fast pairwise presolving of knapsack constraints, default is TRUE 5308- `heuristics/crossover/dontwaitatroot` that allows to call crossover at root node independently from nwaitingnodes 5309- `heuristics/rens/uselprows` that allows to switch between LP row and SCIP constraints as basis for the 5310 subSCIP, default is TRUE (uses LP rows) 5311- `lp/rowrepswitch` telling simplex solver to switch to row representation of the basis (if possible), 5312 if number of rows divided by number of columns exceeds this value (default value infinity, i.e. never switch) 5313- `lp/threads` to change the number of threads used to solve the LP relaxation (default is 0: automatic) 5314- `misc/lexdualstalling` that turns on the lex dual algorithm if the separation process is stalling 5315- `misc/usevartable` and `misc/useconstable` which turns on/off the usage of hashtables mapping from 5316 variable/constraint names to the variables/constraints; when turned off, SCIPfindVar() and SCIPfindCons() may not be 5317 used; the hashtables can be turned off for subMIPs to improve the performance, default value TRUE 5318- `misc/usesmalltables` which results in using smaller tables for names, cliques and cuts and improves 5319 the performace for smaller instances, default value FALSE 5320- `misc/permutationseed` to change the permutation seed value for permuting the problem after the 5321 problem is transformed (-1 means no permutation) 5322- `reading/zplreader/usestartsol` which allows to switch ZIMPL start solutions off, default value TRUE 5323- `vbc/dispsols` to propose if the nodes where solutions are found should be visualized in the branch and bound tree 5324 5325### Data structures 5326 5327- implemented the data structure and events for global and local domain holes added and removed 5328- new data structures and methods to handle nonlinear expressions in NLPI ({type_, struct_, pub_}expression.{h,c}): 5329 nlpioracle can store and evaluate general NLPs now, nlpi_ipopt can solve general NLPs now 5330 5331Testing 5332------- 5333 5334- minor changes on several evaluation scripts (new statuses: better, solved, sollimit, gaplimit) and short-mode for cmpres.awk 5335- support for FreeBSD (32- and 64-bit) including minor changes in several scripts in the check-directory 5336 5337Build system 5338------------ 5339 5340### Makefile 5341 5342- added scripts check_*.sh, evalcheck_*.sh and check_*.awk for blis, glkp, gurobi and symphony (including targets in 5343 Makefile) and slightly modified scripts for cplex, cbc and mosek and cmpres-script 5344- added target `lintfiles` which allows to call flexelint with a list of file, for example, make lintfiles 5345 `FILES=src/scip/prop_vbounds.c` 5346- the NLP solver interfaces and expression interpreter are located in a separate library (libnlpi.*; similar to the lpi 5347 library) and is required to link against the SCIP library also projects that use SCIP via `make/make.project` need to 5348 change their Makefile (!!!): in the $(MAINFILE) target, add $(NLPILIBFILE) behind $(LPILIBFILE) in the dependencies 5349 and add $(LINKCXX_l)$(NLPILIB)$(LINKLIBSUFFIX) to the linker flags 5350- The additional NLPI library requires a change in the Makefile of SCIP's project: 5351 The $(MAINFILE) target now has $(NLPILIBFILE) as additional dependency and the linking 5352 command requires $(LINKCXX_l)$(NLPILIB)$(LINKLIBSUFFIX) as additional argument. 5353- A bug in the Makefiles of older versions of the SCIP examples may cause 5354 data loss. If you have a custom Makefile, please ensure that the target 5355 `clean` is changed as described here: 5356 http://scipopt.org/download/bugfixes/scip-1.2.0/make.txt. 5357 5358Fixed bugs 5359---------- 5360 5361- fixed bug in conflict.c in the method conflictsetAddBound() 5362- fixed `bug` in projects Makefiles w.r.t. `make clean` 5363- fixed bug in rapid learning with wrong ordering of dual and primal bound update, primal bound is now updated inside 5364 rapid learning 5365- fixed potential bug in rapid learning with dual reductions 5366- fixed potential bug where SCIPselectSimpleValue() returns a value slightly outside of the given bounds due to rounding 5367 errors (probably cancelation in subtraction in SCIPfindSimpleRational), now use rounding control and check result 5368- fixed bug that SCIP could not be continued after it has been stopped due to a limit 5369- fixed bug in var.c: SCIPvarChgLbOriginal() and SCIPvarChgUbOriginal() cannot access original bounds if the variable is 5370 negated 5371- fixed potential bug with pseudo solution branching on free variables 5372- fixed bug with multiaggregations whose infimum and supremum are both infinite: in such a case multiaggregation is now 5373 forbidden 5374- fixed numerical issue with multiaggregations which are infinite in one direction: value of multiaggregated variable 5375 could have been larger then inifinity 5376- fixed bug w.r.t. of adding a variable bound variable to its self 5377- fixed bug concering the incorrect assumption that every solution computed in SCIPlpGetUnboundedSol() is integral (we 5378 will not branch but return `infeasible or unbounded` like in presolving) 5379- fixed bug while breaking an clique down to their impications (in SCIPcliquetableCleanup() in implics.c) where the 5380 variable was not of vartype `SCIP_VARTYPE_BINARY`, instead of adding an implication we add a variable bound 5381- fixed bug with debugging a solution: during restarts erroneously it was claimed that the primal solution is cut off 5382 5383- Interface: 5384 - fixed bug w.r.t. ObjDialog and displaying the description of the dialog 5385 - fixed bug when aborting pricing with Ctrl-C 5386 5387- LP: 5388 - fixed bug in scip.c w.r.t. to call of conflict analysis for LPs which reached the objective limit in case of diving 5389 - fixed bug with resolving LPs at infeasible root node 5390 - fixed bug in lp.c: in sumMIRRow() rowtoolong was not set correctly 5391 - fixed bug in lp.c w.r.t. objective limit reached and the chosen comparison (fixed buglist entry 40) 5392 - fixed bug in lp.c: if in SCIPlpSolveAndEval() the LP has to be solved from scratch due to numerical troubles, reset 5393 `SCIP_LPPARAM_FROMSCRATCH` to `FALSE` afterwards 5394 - fixed bug in lp.c SCIProwGetObjParallelism() due to a wrong parallelism value which arised from cancellations during 5395 calculation of squared euclidean norm of objective function vector of column variables 5396 - fixed bug in lp.c: SCIPlpGetUnboundedSol() did not ensure that unbounded solution lies withing the bounds of the 5397 variables 5398 - fixed bug in lp.c w.r.t. to the number of `active` pricer 5399 5400- Solve: 5401 - fixed bug in solve.c where relaxation branching candidates were cleared, but the relaxation was still marked solved 5402 and not called again, furthermore, adjusted criterions for solving a relaxation again 5403 - fixed bugs in solve.c: even with LP solving disabled, the root LP was solved in case continous variables are 5404 contained; setting pricing/maxvars(root) to 1 resulted in not calling the pricers 5405 - fixed bug in solve.c: make sure SCIP terminates correctly also when a user interrupt or gap limit is reached, i.e., 5406 avoid error `pricing was aborted, but no branching could be created!` 5407 5408- Tree: 5409 - fixed bug in tree.c: if an explicit branching point is given, we may not recompute a better centering point 5410 - fixed bug in tree.c: propagate implications on multi-aggregated should not be performed 5411 5412- Constraints: 5413 - corrected several asserts in linear and quadratic constraint handler concerning parsing of CIP format 5414 - fixed bug while deleting redundant variables, which have no influence on changing the feasibility of the linear 5415 constraints, we need to update the sides of the constraint at each step, bug number 51 in bugzilla 5416 - fixed bug in copy procedure of AND constraint handler, negated variables have been copied to their originals 5417 - fixed bug when deleting a constraint where the update was delayed and not processed yet (in cons.c) 5418 - fixed bug in cons_linear.c: binary variables should not be multi-aggregated 5419 - fixed bug in cons_quadratic.c: curvature of bivariate quadratic constraints was not detected correctly 5420 - fixed bug in cons_sos2.c: the branching position was sometimes mistakenly increased 5421 - fixed bug in propagation of cons_sos2.c: the node can be cut off at more places: the previous version was not 5422 sucessfull in this respect 5423 - fixed bug in cons_linear.c:applyFixings() which could lead to lhs/rhs smaller/larger than -/+infinity 5424 - fixed bug in cons_linear.c in detectRedundantConstraints() and corrected old bug fix in SCIProwCreate(): we want lhs 5425 <= rhs to be satisfied without numerical tolerances in order to avoid numerical problems in the LP solver 5426 5427- Knapsack Constraint Handler: 5428 - fixed bug in cons_knapsack.c: mergeMultiples() now detects whether a node can be cut off 5429 - fixed bug in cons_knapsack.c w.r.t. to items with zero weight 5430 - fixed bug in cons_knapsack.c: In SCIPseparateRelaxedKnapsack() not all variables need to be active in deeper regions 5431 of the tree 5432 - fixed bug in cons_knapsack.c and sepa_clique.c: the assumption that implications are always nonredundant and contain 5433 only active variables is not correct anymore as the corresponing vbound might be missing because of numerics 5434 5435- Separation and Cuts: 5436 - fixed bug in cutpool.c: the hashkey computation was not constant over time 5437 - fixed bug in cutpool.c: hashkey of a row changed during the solving process (if a row is made integral after creation, 5438 maxabsval can be invalid when adding it to the pool, but might be recomputed later on) 5439 - fixed bug in sepa_rapidlearning.c, stop processing if there are no binary variables left 5440 - fixed bug in sepa_rapidlearning.c, corrected computation of right dualbound 5441 - fixed bugs in sepa_zerohalf.c, e.g., handling of intscaling and substitution of variable bounds 5442 - fixed bug in sepastore.c in sepastoreApplyLb/Ub being to hard on feasibility decisions 5443 - fixed bug in sepa_flowcover.c: numerical issues while computing candidate set for lambda 5444 5445- LP Interfaces: 5446 - fixed bug in SoPlex autopricing due to which autopricing had behaved like steepest edge pricing so far 5447 - fixed bug in lpi_clp.cpp: SCIPlpiChgBounds() checks if the column status exists in Clp before using it 5448 - fixed wrong assert in Cplex LPI: Due to numerical inaccuracies, a few pivots might be performed after refactorization 5449 - fixed bug concerning assert(!SCIPlpDivingObjChanged(lp)) which was caused by wrong infinity double parameters for 5450 cplex 5451 - fixed makefile system for `OSTYPE=darwin` w.r.t. to CPLEX as LP solver 5452 5453- Presolving: 5454 - fixed bug in cons_setppc: aggregated variables were not correctly removed in presolving 5455 - fixed bug in presolving of linear constraint handler: in redundancy detection, two different numerical epsilons were used 5456 - fixed bug in presolving while not applying a bound change on a variable in a single-variable constraint (e.g. x1 = 5457 0.03) in cons_linear which is too small, that lead to another bound change in presol_trivial which is not allowed, so 5458 now this bound change will be forced 5459 - fixed SCIPvarIsTransformedOrigvar() in var.c (variables generated by presol_inttobinary returned false) 5460 - fixed bug w.r.t. an assert in presol_inttobinary.c; it was assumed that the aggregation which is performed there will 5461 never lead to an infeasibility, this is not true, see comment in presol_inttobinary.c 5462 - fixed bug in presol_trivial.c trying to fix continuous variables, now uses a less stricter comparison to fix variables 5463 - fixed bug in cons_bounddisjunction.c: presolve may have tried to tighten bounds on a multiaggregated variable (now 5464 upgrades to linear constraint) 5465 5466- Reading, Writing and Messages: 5467 - fixed bug while trying to write a MIP where SCIP needs to flush the lp changes first 5468 - fixed potential resource leak when running out of memory while writing files 5469 - fixed bug in reader_zpl.c which appeared using the parameter `reading/zplreader/parameters` 5470 - fixed bugs in flatzinc readers with constraints that exclusively consist of constants 5471 - fixed bug in reader_gms: correct handling of nonstandard bounds on general integer variables 5472 - fixed buglist entry 35, which was caused by a wrong read in correction when the reading buffer was full in 5473 reader_opb.c 5474 - fixed bugs in reader_fzn.c w.r.t. parsing and solution output in Flatzinc format 5475 - fixed bug in reader_fzn.c w.r.t. comment lines 5476 - fixed bug in reader_opb.c w.r.t. comment lines 5477 - fixed bug in message handler w.r.t. to messages which are longer then `SCIP_MAXSTRLEN` 5478 5479- Heuristics: 5480 - fixed bugs do to `HEUR_TIMING SCIP_HEURTIMING_AFTERPROPLOOP` which appeared during repropagation 5481 - fixed bug in trivial heuristic: the locking solution might have falsely initialized some values to zero 5482 - fixed bug in heur_oneopt.c w.r.t. to SCIPtrySol(); it is necessary that the bound of the solution is check otherwise, 5483 infeasible solution could be accepted as feasible 5484 - fixed bug in heur_trivial.c w.r.t. to debug messages after a solution was freed 5485 - fixed bug for `HEUR_TIMING SCIP_HEURTIMING_BEFOREPRESOL` and modifiable constraints 5486 - corrected wrong assert in DINS heuristic when called for an empty problem 5487 - fixed potential bug in OCTANE heuristic with nonbasic solutions 5488 - fixed bug in sub-MIP heuristics with parameter change if some default plugins are not included 5489 - fixed bug in trivial heuristic with bounds that are greater than the heuristic's infinity value 5490 5491Miscellaneous 5492------------- 5493 5494- As the interface contains several additional callback functions and 5495 parameters for plugins, some effort may be required to compile your 5496 own projects with SCIP 2.0. See also `Changes between version 1.2 and 2.0` in the doxygen 5497 documentation for additional information. 5498 5499@page RN12 Release notes for SCIP 1.2 5500 5501@section RN120 SCIP 1.2.0 5502************************* 5503 5504Features 5505-------- 5506 5507- adjusted hard memory limit to (soft memory limit)*1.1 + 100mb in check.sh, checkcount.sh, check_cplex.sh, 5508 check_cluster.sh and check_cbc.sh 5509- new presolving step in cons_knapsack.c, same like `simplifyinequalities` in cons_linear.c 5510- now it's possible to write strings with more than `SCIP_MAXSTRLEN` amount of characters in all message.c functions 5511- the current/root lp can be marked to be no relaxation of the current/root problem 5512- added new preprocessing step (mergeMultiples) in cons_setppc.c where equal variables are merged 5513- Black-box lexicographic dual simplex algorithm; can now run lexicographical dual algorithm (parameter `lp/lexdualalgo`) 5514 5515- Bounds: 5516 - SCIP now has `lazy bounds`, which are useful for column generation: see @ref PRICER_REMARKS `pricer remarks` for an explanation. 5517 Each variable has now two additional `SCIP_Real` parameter which define a lazy lower and upper bound; lazy means that 5518 there exists constraints which implies these (lazy) bounds. If the lazy lower or upper bound is greater or less than 5519 the local lower or upper bound, respectively, then the corresponding bound is not put into the LP. The bounds are set 5520 to minus and plus infinity per default which yields the same behavior as before. With the methods SCIPchgVarLbLazy() 5521 and SCIPchgVarUbLazy() these bounds can be set. This is of interest if SCIP gets used as a branch-and-price 5522 framework. Attention! The lazy bounds need to be valid for each feasible LP solution. If the objective function 5523 implies bounds on the variables for each optimal LP solution, but these bounds may be violated for arbitrary LP 5524 solutions, these bounds must not be declared lazy! 5525 - interval arithmetic functions can work with unbounded intervals added new functions to allow more operations on 5526 intervals, including solving quadratic interval equations 5527 5528- Branching: 5529 - extended hybrid relpscost branching rule by usage of the average length of conflicts a variable appears in 5530 - `early branching`-functionality added: in a branch-and-price code, the user can stop pricing at a node although there 5531 may exist variables with negative reduced costs. In this case, the lp-lowerbound will not be used. The pricer has, 5532 however, the option to return a lower bound. This can be useful for column generation. 5533 5534- Constraints: 5535 - Copy constructors and i/o functionality for constraints: all linear type constraint handlers are able to copy 5536 constraints using the function SCIPgetConsCopy() in scip.h 5537 - the linear constraint handler is able to parse a string in CIP format and create a corresponding linear constraint 5538 - Constraint handler for indicator constraints and parsing them from *.lp and *.zpl files 5539 - the indicator constraint can now try to produce a feasible solution (via heur_trysol) 5540 - one can now write indicator constraints in LP-format 5541 - added constraint handler for quadratic constraints 5542 5543- Cuts: 5544 - added new version of zerohalf cuts from Manuel Kutschka 5545 - added multi-commodity-flow cut separator 5546 5547- Heuristics: 5548 - Heuristics which are applied before root LP 5549 - added heuristic that performs a local search in an NLP (takes only linear and quadratic constraints into account so far) 5550 - added heuristic that gets a solution from other components and tries it (heur_trysol.?) 5551 - new trivial heuristic: tries zero solution, lower and upper bound solution and some variable lock based fixing 5552 - added new timing point, `SCIP_HEURTIMING_DURINGPRICINGLOOP`, for calling heuristics; If this timing point is used the 5553 corresponding heuristics is called during the pricing loop of variables; we also added this timing point to 5554 heur_simplerounding.{h,c} which has the effect that a LP solution which satisfies all integrality conditions during 5555 the pricing loop is detected 5556 5557- Interfaces: 5558 - added first version of an interface to NLP solvers (type_nlpi.h, struct_nlpi.h, nlpi.h, nlpi.c, nlpi_oracle.h, nlpi_oracle.c) 5559 - Preliminary support of non-convex MIQCPs: Constraint handler for quadratic constraints, NLP heuristic and 5560 Ipopt interface, see \ref cons_quadratic.h. 5561 - There are LP-interfaces to QSopt and Gurobi (rudimentary). 5562 5563- Reader and Writer: 5564 - added reader and writer for FlatZinc models (reader_fzn.{c,h}) 5565 - added writer for GAMS models (reader_gms.{c,h}) 5566 5567Performance improvements 5568------------------------ 5569 5570- Enhanced MCF cuts: stable version, used by default 5571- replaced some function calls in loop conditions 5572- in sepa_cmir.c, if mksetcoefs is invalid for delta=1 no other values of delta are tested anymore 5573- changed the timing of the feasibility pump in case of pricing 5574- removed changing of update rule to `ETA` from standard soplex update `Forrest-Tomlin` in lpi_spx.cpp 5575- improved memory usage in heur_octane.c 5576- improved reading time of opb-files, due to using a hashtable for all `and`-constraints 5577- improved performance of merging variables in mergeMultiples() in cons_knapsack.c 5578- improved performance in tightenWeightsLift() and SCIPseparateRelaxedKnapsack() in cons_knapsack.c, due to now 5579 sparse-cleaning `global` arrays instead of using BMSclearMemory... functions for cleaning local arrays each time 5580- improved performance in SCIPcliquelistRemoveFromCliques() 5581- improved performance in SCIPcalcCliquePartition() 5582- improved performance in SCIPvarGetActiveRepresentatives() in var.c 5583 5584- Presolving: 5585 - improved pairwise presolving in cons_and.c due to using a hashtable 5586 - improved pairwise presolving in cons_xor.c due to using a hashtable 5587 5588Interface changes 5589----------------- 5590 5591- A significant change for C++ users is that all include files of SCIP 5592 automatically detect C++ mode, i.e., no `extern `C`` is needed anymore. 5593- Reader for Flatzinc and GAMS models 5594 5595### New and changed callbacks 5596 5597- The callback SCIP_DECL_PRICERREDCOST(x) in the \ref PRICER `pricers` has two new parameters: 5598 + A `result` pointer determines whether the pricer guarantees that there exist no more variables. This allows for early branching. 5599 + A pointer for providing a lower bound. 5600 5601- The \ref CONS `constraint handlers` have two new callback methods (see type_cons.h for more details): 5602 + SCIP_DECL_CONSCOPY(x): this method can be used to copy a constraint. 5603 + SCIP_DECL_CONSPARSE(x): this method can be used to parse a constraint in CIP format. 5604 5605### Deleted and changed API methods 5606 5607- SCIPcalcMIR() in scip.h has two new parameter `mksetcoefsvalid` and `sol`. The parameter `mksetcoefsvalid` stores 5608 whether the coefficients of the mixed knapsack set (`mksetcoefs`) computed in SCIPlpCalcMIR() are valid. If the mixed 5609 knapsack constraint obtained after aggregating LP rows is empty or contains too many nonzero elements the generation of the 5610 c-MIR cut is aborted in SCIPlpCalcMIR() and `mksetcoefs` is not valid. The input parameter `sol` can be used to separate a 5611 solution different from the LP solution. 5612- new parameter `set` in SCIPconsSetInitial(). 5613- some interval arithmetic method take an additional argument to denote which value stands for infinity in an interval 5614 5615- Variables: 5616 - SCIPgetVarClosestVlb() and SCIPgetVarClosestVub() in scip.h have a new parameter `sol`. It can be used to obtain the closest 5617 variable bound w.r.t. a solution different from the LP solution. 5618 - new parameters `lowerbound` and `result` in type_pricer.h: lowerbound can save a lower bound computed by the pricer, 5619 result indicates whether the pricer guarantees that there exist no more variables if no variable was found 5620 5621### New API functions 5622 5623- new methods to deactivate a pricer SCIPdeactivatePricer() in scip.c 5624- new methods in pub_misc.h/misc.c to access hash map lists and elements of a hash map list and to clear all entries in a hash map 5625- SCIPsetProbName() to set problem name in scip.h/c (SCIPprobSetName() in prob.h/c) 5626 5627- Objective: 5628 - SCIPgetTransObjscale() and SCIPgetTransObjoffset() in scip.c 5629 - SCIPaddObjoffset() in scip.h; sets offset of objective function 5630 - SCIPgetOrigObjoffset() in scip.h; returns the objective offset of the original problem 5631 - SCIPgetOrigObjscale() in scip.h; returns the objective scale of the original problem 5632 5633- Constraints: 5634 - detectRedundantConstraints() in cons_xor.c and necessary hash-functions for fast pairwise presolving 5635 - SCIPparseCons() in scip.h; parses constraint information (in cip format) out of a string 5636 - SCIPgetConsCopy() in scip.h; which copies a constraint of the source SCIP 5637 5638- Relaxation: 5639 - SCIPisLPRelax() and SCIPisRootLPRelax() in scip.c and scip.h returning whether the current/root LP is a 5640 relaxation of the current/root problem and thus defines a valid lower bound 5641 - SCIPlpSetIsRelax() and SCIPlpSetRootLPIsRelax() in lp.c and lp.h to set the information, whether the lp is a valid relaxation; 5642 this information is per default set to true and constraint be used. The aggregated version has only 2 linear constraints the 5643 default linearization has nvars + 1 5644 5645- Sort: 5646 - extended the sort template functions in sorttpl.c with a `five` array; now it possible to used this template to sort 5647 up to five arrays 5648 - new interface methods SCIPcolSort(), SCIProwSort(), SCIPcolGetIndex() 5649 - added SCIPsortPtrPtrLongInt() and corresponding sorting/inserting/deleting methods in pub_misc.h and necessary defines 5650 in misc.c 5651 5652- Variables: 5653 - SCIPprintNodeRootPath() in scip.h This method prints all branching decisions on variables from the root to the given node 5654 - SCIPnodeGetParentBranchings(), SCIPnodeGetAncestorBranchings(), SCIPnodeGetAncestorBranchingPath(); These methods return 5655 the set of variable branchings that were performed in the parent node / all ancestor nodes to create a given node 5656 - SCIPchgVarLbLazy() and SCIPchgVarUbLazy() in scip.h; These methods can be used to change the lazy lower or 5657 upper bound of a variable; This might has the consequences that the bounds of the corresponding variable is not in 5658 LP. This is the case if the lazy lower or upper bound is greater or less than the local lower or upper bound, respectively 5659 - SCIPvarGetLbLazy() and SCIPvarGetUbLazy() in pub_var.h; These methods return the lazy lower or upper bound, respectively 5660 - SCIPvarCompareActiveAndNegated() and SCIPvarCompActiveAndNegated() in pub_var.h for comparing variables 5661 negated, active or fixed the same way 5662 - SCIPparseVars() in scip.h; parses variable information (in cip format) out of a string 5663 - SCIPgetNFixedonesSetppc() and SCIPgetNFixedzerosSetppc() in cons_setppc.{h,c}; these methods returns 5664 current (local) number of variables fixed to one/zero in the given setppc constraint 5665 - SCIPgetVarConflictlengthScore(), SCIPgetVarAvgConflictlength(), SCIPgetAvgConflictlengthScore() and their pendants for the current run 5666 - added function SCIPvarsGetProbvarBinary() in pub_var.h; gets active, fixed, or multi-aggregated problem variables of 5667 binary variables and corresponding negated status 5668 5669### Interfaces to external software 5670 5671- LP Interfaces: 5672 - heavily revised Mosek interface 5673 - new interface to QSopt due to Daniel Espinoza 5674 - First version of LP interfaces to Gurobi and QSopt 5675 - Major performance improvements in LP interfaces to Clp, Mosek and SoPlex 5676 5677- External Software: 5678 - adjusted interface to ZIMPL (reader_zpl.{c,h} for ZIMPL version 2.10; this interface should also work with older ZIMPL versions 5679 - Adjusted interface to Zimpl version 3.0.0 5680 - added first version of an interface to Ipopt (only QCP, no deletion of vars/cons allowed; nlpi_ipopt.(h|c)) 5681 5682- SCIP Interfaces: 5683 - On http://code.google.com/p/python-zibopt/source/checkout you find a beta 5684 version of a python interface to SCIP implemented by Ryan J. O'Neil. 5685 5686### Changed parameters 5687 5688- removed parameter `constraints/and/initiallp` since it is not needed anymore; 5689- set parameter `constraints/and/sepafreq` default value to 1 5690- display character of oneopt heuristic changed to `b` 5691 5692### New parameters 5693 5694- `branching/relpscost/advanced/conflenscore`, default value 0.001 5695- `constraints/and/aggrlinearization` in cons_and.c, aggregated version of the linearization 5696- `constraints/and/enforcecuts` in cons_and.c, should cuts be separated during LP enforcing? 5697- `constraints/and/presolusehashing` in cons_and.c, should pairwise presolving use hashing?, default TRUE 5698- `constraints/countsols/sollimit` in cons_countsols.c, counting stops, if the given number of solutions were found (-1: no limit) 5699- `constraints/xor/presolusehashing` in cons_xor.c, should pairwise presolving use hashing?, default TRUE 5700- `heuristics/oneopt/duringroot`, default value TRUE 5701 5702Build system 5703------------ 5704 5705### Makefile 5706 5707- extend Makefile to link against Ipopt if `IPOPT=true` is set 5708 5709Fixed bugs 5710---------- 5711 5712- fixed wrong use of pointer in lp.c 5713- fixed bug with array dimension not reset to zero when array is freed in pseudoobj propagator 5714- fixed bug with enforcement of pseudo solutions: if pseudo solution is choosen because LP hit a limit, it has to be 5715 enforced in any case 5716- fixed potential bug in coloring example: SCIPcreateChild() is now given an estimate in terms of the transformed 5717 problem by SCIPgetLocalTransEstimate(), no longer the estimated original problem value. Also clarified this in the 5718 comments for SCIPcreateChild() 5719- fixed compiler warning `warning: dereferencing type-punned pointer will break strict-aliasing rules` which resuts in 5720 scip-crashes with gcc version 4.4.0 5721- adjusted assert in var.c 5722- fixed bug in SCIPvarGetActiveRepresentatives() in var.c 5723- fixed bug with objective limit in lp.c: previously the infinity value of SCIP was used as default - now the value of 5724 LPI is used. In the earlier version in many cases the problems where never infeasible. 5725- added and adjusted some asserts, initialized some values 5726- increased the numerical stability of coefficient tightening for Big M formulations 5727- fixed bug with incorrect pseudo activities when objective of a variable switches sign in linear constraint handler 5728- fixed bug with empty constraints in several writing routines 5729- fixed `GGT-Kaibel-Bug` in var.c, prop_pseudoobj.c and cons_varbound.c that occured while computing new values using 5730 infinity values 5731 5732- Bounds: 5733 - fixed bug in coefficient tightening with infinite bounds 5734 - fixed bug in solve.c: in case lowerbound >= upperbound, SCIPsolveIsStopped() returned `SCIP_STATUS_GAPLIMIT` 5735 5736- Nodes: 5737 - fixed bug in SCIPsolveNode() concerning the case that the time limit was hit while solving the LP relaxation of a 5738 subproblem which is already an LP (branching on pseudo solution is not possible) 5739 - fixed bug in vbc tools concerning of marking probing nodes 5740 - fixed bug in solve.c with nodes which are marked to be repropagated while enforcement 5741 5742- Variables: 5743 - fixed possible infinite loop while multiaggregating a variable in var.c 5744 - fixed bug in SCIPgetSolVals() similar to SCIPgetSolVal(): try to get original variables of transformed ones if the 5745 solution lives in original space 5746 5747- Pricing: 5748 - fixed potential bug: restarts are now only done if no active pricers exist 5749 - fixed bug in SCIPlpSolveAndEval(): if fastmip and pricers enabled and objlimit was reached but CPLEX did not perform 5750 the final pivot step in order to exceed the objlimit, do one additional simplex step with pricing strategy steepest 5751 edge, if this doesn't suffice, turn off fastmip temporarily and solve again. Also consider solstat of the new 5752 solution. 5753 - fixed bug with invalid pseudo solution (lower bound was always >= 0) when using pricing. 5754 - fixed bug in SCIPfreeProb() in scip.c: all pricers are deactivated now 5755 5756- Memory: 5757 - now frees debug memory 5758 - fixed bug with exponential complexity for reallocating memory in SCIPvarGetActiveRepresentatives() in var.c 5759 - fixed casting of void* pointers in memory.h for C++, adjusted the same for C in memory.h and due to that adjusted all 5760 header files(set whole files in extern `C`) and cpp-files(removed unnecessary extern `C` lines) 5761 - removed memory leak in connection with freeing branch and bound nodes: focusnode was not freed if both children could 5762 be cut off due to bounding 5763 5764- Reading and Writing: 5765 - corrected bug in reader_lp.c: earlier read bounds were thrown away (implementation was not conforming to standard) 5766 - fixed bug in reader_lp.c with respect to constraint and variable names which start with two or more dots `..` 5767 - fixed bug in all readers w.r.t. SCIPgetProbvarLinearSum() 5768 - fixed bug in reader_mps.c with respect to corrupted files 5769 - fixed bug in reader_mps.c with respect to writing transformed problems 5770 - changed wrong writing of mps files due to constraints without any name 5771 - fixed a bug during reading debug solution file 5772 - fixed bug in case of reading an objective function in opb format with multiple occurrences of the same variable 5773 - fixed bug in case of reading an objective function in lp format with multiple occurrences of the same variable 5774 - fixed a wrong fix of a reading bug, which was in reality a writing bug in MPS format; integer variables in mps format 5775 without bounds are binary variables, if the bound of an integer variable is infinity you have to write this bound 5776 5777- Separation: 5778 - fixed bug in sepa_cmir.c, sepa_mcf.c and sepa_flowcover.c: sol different to LP solution is now separated 5779 - corrected two asserts in sepa_redcost.c (reduced costs can be negative for fixed variables: qsopt uses this) 5780 - fixed bug in sepa_zerohalf.c; replacement of own sorting functions by template functions was incorrect 5781 - fixed bug in var.c, cons_knapsack.c and sepa_flowcover.c: variable bounds corresponding to implication are not 5782 generated if coefficient is large, variable bounds with large coefficients are ignored for construction of knapsack 5783 and snf relaxations 5784 - fixed bug in sepa_impliedbound.c concerning redundant implications 5785 5786- Cuts: 5787 - fixed bug in sepa_cmir.c concerning uninitialized mksetcoefs (if MIR-cut generation is aborted because the aggregated 5788 constraint is empty or contains too many nonzero elements mksetcoefs is invalid) 5789 - interrupts optimization process if a node will be cutoff, which allows the solution 5790 - fixed bug in sepa_impliedbounds.c and sepa_intobj.c: if separating a sol, this sol is now also given to SCIPaddCut() 5791 so that the efficacy of the cut is now computed correctly 5792 - fixed bug in solve.c caused by integer overflow due to setting the number of cuts to INT_MAX 5793 5794- Presolving: 5795 - fixed wrong result in check.awk, if infeasible problems are stopped in presolving 5796 - fixed exponential calculation of solution values during check of original solution, therefore changed 5797 SCIPvarGetActiveRepresentatives() in var.c and flattened all multiaggregated vars at the end of presolving in 5798 exitPresolve() 5799 - fixed bug with wrong abort criterion in presolving 5800 - fixed bug in presol.c caused by not reseting presolver-wasdelayed status 5801 - fixed bug in SCIPconsSetInitial() that occurred in pairwise presolving: add or delete constraint in initconss when 5802 changing the initial flag 5803 5804- Constraints: 5805 - fixed bug in cons.c caused by not resetting conshdlr data after restart 5806 - fixed memory error in cons_countsols.c 5807 - fixed assert in cons_and.c method SCIP_DECL_CONSINITSOL(consInitsolAnd) 5808 - fixed bug in cons_countsols.c we respect to warning message that `The current parameter setting might cause ...` 5809 5810- Knapsack Constraint Handler: 5811 - fixed wrong assert in cons_knapsack.c and handled a special this case in simplifyInequalities() 5812 - fixed some bugs in simplifyInequalities() in cons_knapsack.c 5813 - fixed bug in mergeMultiples() in cons_knapsack.c 5814 - adjusted ConsData and ConsHdlrData in cons_knapsack.c 5815 - fixed compiler warning caused by no initialization of two integer in cons_knapsack.c 5816 - fixed bug in cons_knapsack.c caused by having a multi-aggregated variable in a knapsack constraint, now applyFixing is 5817 able to resolve a binary multi-aggregation with integral values 5818 5819- Linear Constraint Handler: 5820 - fixed infinity loop in simplify inequalities in cons_linear.c 5821 - fixed bug in cons_linear.c: do not select variable as slack variable for multiaggregation in convertLongEquality if it 5822 has been marked as not-multiaggregable 5823 - fixed bug in cons_linear.c: also do not multiaggregate variables in dual preproccessing if it has been marked as 5824 not-multiaggregable 5825 - fixed bug in cons_linear.c: slight decrease of epsilon in order to make sure that scaled coefficients are really 5826 integral 5827 - fixed bug in chgRhs() and chgLhs() of cons_linear.c: after changing lhs or rhs of a constraints lhs <= rhs has to be 5828 satisfied without numerical tolerances 5829 5830- Heuristics: 5831 - added and changed some SCIPisStopped() calls in several heuristics 5832 - fixed bug in oneopt heuritic with start solution which has become infeasible due to global bound changes 5833 5834- Interfaces: 5835 - corrected several bugs in the Clp-interface concerning return values 5836 - fixed potential interface bug: time limits of 0.0 are not anymore passed to the LP solver, which may have caused 5837 errors 5838 5839@page RN11 Release notes for SCIP 1.1 5840 5841@section RN110 SCIP 1.1.0 5842************************* 5843 5844Features 5845-------- 5846 5847- SCIP can now count integer feasible solutions for IPs/CIPs (without continuous variables) (see SCIPcount()) 5848- check.awk now uses TeX package supertabular which supports automatic pagebreak 5849- struct `SCIP_Stat` has now two additional variables: `nprobboundchgs`, `nprobholechgs`; these are used to fix the domain 5850 reduction counts in sepa.c, cons.c, branch.c and prop.c; this means, that now the domain reduction counts are reduced 5851 by those domain reduceds which are preformed during probing 5852- added capabilities to flatten the (multi)-aggregation graph of variables 5853- pseudoobj propagator now also propagates the global lower (dual) bound 5854- new heuristic DINS (distance induced neighborhood search by Ghosh) 5855 5856- Output: 5857 - SCIP can now output a picture of the constraint matrix in PPM format. 5858 - output of real values is now done with 15 digits after the decimal point 5859 - Extended the capabilities of SCIP to output problems in different formats (LP, MPS, CIP, ...). You can output the original and 5860 transformed problem. Furthermore, generic names can be given to the variables and constraints. 5861 - The feasibility test for solutions at the end of the execution now outputs more useful information. 5862 This made some changes in the interface of constraint handlers necessary. 5863 5864- Presolving: 5865 - added predefined settings file presolving/aggressive.set 5866 - new presolver boundshift (presol_boundshift.{c,h}); this presolver is currently turned off with default parameter setting 5867 5868- Constraints: 5869 - linear constraint handler now detects continuous variables that are implicit integer in dual presolve 5870 - replaced some old sorting methods in cons_knapsack.c, heur_octane.c, sepa_flowcover.c and presol_probing.c through 5871 SCIPsort...() interfaces, adjusted misc.{c,h} and pub_misc.h for these changes 5872 - cons_countsols.c is now able to store the collected solution if required 5873 - added first version of SOS type 1 constraint handler (cons_sos1.{c,h}) 5874 - added first version of SOS type 2 constraint handler (cons_sos2.{c,h}) 5875 - less aggressive scaling in linear constraint handler presolve to improve numerics 5876 - added first version of constraint handler cons_countsols.{c,h} 5877 5878- Reader: 5879 - added ccg-reader (weighted column connectivity graph) 5880 - added reader for pseudo-Boolean problems (reader_opb.{c,h}) 5881 - the ZPL reader is now able to pass a starting solution to SCIP 5882 - the MPS reader is now able to write a problem in MPS format 5883 - the ZIMPL reader now understands SOS type 1 and 2 constraints 5884 - the LP reader reads SOS constraints of type 1 and 2 5885 - the MPS reader reads the SOS section (but cannot yet handle `MARKERS`) 5886 5887- LPI: 5888 - The SoPlex LPI can now write basis files. 5889 - revised lpi_clp.cpp (many small changes, in particular writing and reading of bases) 5890 - added FASTMIP settings in lpi_clp.cpp that try to improve the performance of Clp as much as possible 5891 5892- Cuts and Separation: 5893 - the c-MIR separator now also tries to get rid of implicit integer variables by aggregation 5894 - allow cut selection based on support of inequality in orthogonality computation 5895 - disabled zerohalf cuts by default 5896 - adjusted all predefined settings files, e.g., `settings/cuts/fast.set`, such that they are consistent wrt removed, 5897 added and changed parameter values of scip. 5898 - New cutting plane separator MCF (beta version). 5899 - new separator sepa_zerohalf.{c,h}; separates {0,1/2}-Cuts according to Caprara and Fischetti 5900 5901Performance improvements 5902------------------------ 5903 5904- heavily decreased the usage of SCIPisStopped(), which costs system time 5905- small performance improvement of c-MIR aggregation heuristic 5906- reworked strong branching in lpi_clp.cpp (scaling works now, bounds can be trusted) 5907 5908- Constraints: 5909 - The preprocessing has been revised. It now applies bound computations in a numerically more stable way. The pairwise 5910 comparison of linear, logicor, and setppc constraints has been improved. 5911 - better branching in SOS1/SOS2 constraints 5912 - fixed performance bug with large number of unnamed constraints that will kill the name hash table (now, unnamed 5913 constraints are not put into the hash table) 5914 5915- Cuts and Separation: 5916 - improved the performance of SCIPcalcMIR() and SCIPcalcStrongCG() by exploiting sparsity 5917 - improved performance of SCIPvarGetLPSol(), which affects many parts of the code, in particular Gomory and strong CG cuts 5918 - do not calculate MIR and StrongCG cut aggregations if number of nonzeros in aggregated row is too large 5919 5920- Presolving: 5921 - improved pairwise presolving in cons_linear.c: reduced cache misses, reduced number of SCIPisStopped() calls and 5922 included detecting of redundant constraints with hash table in advance 5923 - tighter memory limits in knapsack presolve lifting procedure to avoid overly expensive presolving 5924 - included detecting of redundant constraints with hash table in advance in cons_logicor.c and limit other pairwise 5925 presolving 5926 - included detecting of redundant constraints with hash table in advance in cons_setppc.c and limit other pairwise 5927 presolving 5928 - limit pairwise presolving in cons_linear.c 5929 5930Examples and applications 5931------------------------- 5932 5933- Added an example for the graph coloring problem in `examples/Coloring`, showing the usage of column generation. 5934- added SOS2 example 5935- extended TSP example 5936 5937Interface changes 5938----------------- 5939 5940### New and changed callbacks 5941 5942- New callback method SCIP_DECL_READERWRITE(x) in type_reader.h; this method is called to write a problem to file 5943 stream in the format the reader stands for; useful for writing the transformed problem in LP or MPS format. Hence, 5944 also SCIPincludeReader() has changed. 5945- The callback \ref CONSCHECK (SCIP_DECL_CONSCHECK()) in the constraint handlers now has a new parameter `printreason` that tells 5946 a constraint handler to output the reason for a possible infeasibility of the solution to be checked using 5947 SCIPinfoMessage(). Have a look at one of the constraint handlers implemented in SCIP to see how it works. This 5948 methodology makes it possible to output the reason of a violation in human readable form, for instance, for the check 5949 at the end of a SCIP run, where the obtained best solution is checked against the original formulation.\n This change 5950 often has little effect on C-implementations, since this parameter can be safely ignored with respect to the 5951 correctness of the code. The corresponding C++ method scip::ObjConshdlr::scip_check(), however, has to be extended 5952 and will not compile otherwise. 5953- added new LPI pricing option `SCIP_PRICING_LPIDEFAULT`, such that every LP interface can set the default pricing 5954 strategy on its own (`auto` is not useful for this, because for CPLEX, for example, SCIP seems to be worse with `auto` 5955 then with `steepest edge`) 5956- Added user pointer to callback methods of hash table, see pub_misc.h. 5957 5958### Deleted and changed API methods 5959 5960- SCIPgetVarRedcost() now returns 0 for variables that have been aggregated out or removed in presolving. 5961 reduced cost in case of infeasible LPs) 5962- new parameter `maxfrac` for SCIPcalcStrongCG() 5963- new parameter `maxmksetcoefs` for SCIPcalcMIR() and SCIPcalcStrongCG() methods 5964- new parameter `conshdlrname` in SCIPincludeLinconsUpgrade() 5965 5966- Problem: 5967 - new parameters `extension` in SCIPreadProb() defining a desired file format or `NULL` if file extension should be use 5968 - New parameters `extension` and `genericnames` in SCIPprintTransProblem(), SCIPprintOrigProblem(), 5969 SCIPwriteOrigProblem(), and SCIPwriteTransProblem() defining the requested format or `NULL` for default CIP format 5970 and using generic names for the variables and constraints. Examples are 5971 - SCIPprintTransProblem(scip, NULL, NULL, TRUE) displays the transformed problem in CIP format with 5972 generic variables and constraint names 5973 - SCIPprintOrigProblem(scip, NULL, `lp`, FALSE) displays the original problem in LP format with 5974 original variables and constraint names. 5975 5976- Sorting: 5977 - expand sorttpl.c by some parameters 5978 - changed some names for sorting methods 5979 - replaced sorting methods SCIPbsort...() by faster (quicksort/shellsort) algorithms SCIPsort...() Note that the order 5980 of the parameters has been changed to simplify the template code in sorttpl.c! 5981 5982- Checking: 5983 - SCIPcheckSolOrig() is restructured. The last two parameters have changed. They are now bools indicating 5984 whether the reason for the violation should be printed to the standard output and whether all violations should be 5985 printed. This reflects the changes in the constraint handlers above, which allow the automation of the feasibility 5986 test. The pointers to store the constraint handler or constraint are not needed anymore. 5987 - the parameter list of the method SCIPcheckCons() (scip.h) has changed; the new advatage is, that SCIP can print the 5988 reason for the violation of a constraint as for as the constraint handler supports that 5989 - the parameter list of the method scip_check() (objconshdlr.h) has an additional parameter `printreason` see for 5990 explanation the previous point 5991 5992### New API functions 5993 5994- LPI now has a function SCIPlpiGetSolverPointer() that returns a solver dependent pointer. This can be used to directly 5995 access the LP solver. This should, of course, only be used by people that know exactly what they are doing. 5996- added capabilities to avoid multi-aggregation of a single variable by setting a corresponding flag (SCIPmarkDoNotMultaggrVar()) 5997- SCIPgetProbvarLinearSum() 5998- SCIPgetResultantAnd() which returns the resultant variable of an `and` constraint 5999- SCIPchgChildPrio() to change the node selection priority of the given child 6000- SCIPconsGetPos() 6001- SCIPrepropagateNode() to mark a node for repropagation 6002- SCIPcount() (in cons_countsols.h) for counting all feasible solution of a given CIP 6003- SCIPcreateRootDialog() (in dialog_default.h) which creates a root dialog 6004- SCIPgetVectorEfficacyNorm() 6005- SCIPseparateRelaxedKnapsack() in cons_knapsack.h 6006- SCIPgetCutoffdepth() which returns the depth of first node in active path that is marked being cutoff 6007- SCIPflattenVarAggregationGraph() 6008- SCIPclockGetLastTime() 6009- SCIPcalcHashtableSize() to get a reasonable hash table size 6010- SCIPgetVarFarkasCoef() and SCIPgetColFarkasCoef() to get the farkas coefficient of a variable (analogon of 6011- SCIPgetRepropdepth() to get the depth of first node in active path that has to be propagated again 6012- SCIPmajorVersion(), SCIPminorVersion() and SCIPtechVersion() returning the corresponding version 6013 6014- Read, Write and Print: 6015 - SCIPprintSysError() which encapsulates the strerror_r calls, the NO_STRERROR_R flag switches between the use 6016 of strerror_r and strerror inside 6017 - SCIPsnprintf() safe version of snprintf (and sprintf) 6018 - SCIPreaderCanRead() and SCIPreaderCanWrite() in pub_reader.h, these return TRUE if the corresponding 6019 reader is capable to read or write, respectively 6020 - SCIPwriteOrigProblem(), e.g., SCIPwriteOrigProblem(scip, `orig.lp`, NULL, FALSE) prints the original 6021 problem in LP format in the file `orig.lp` 6022 - SCIPwriteTransProblem(), e.g., SCIPwriteTransProblem(scip, NULL, NULL, FALSE) displays the transformed problem in CIP format 6023 6024- Heuristics: 6025 - SCIPcutGenerationHeuristicCmir() in sepa_cmir.h 6026 - SCIPheurGetTimingmask() and SCIPheurSetTimingmask() 6027 6028- Sorting: 6029 - added some downwards-sorting methods 6030 - SCIPbsortInd() 6031 - SCIPsortedvecInsert...(), SCIPsortedvecInsertDown...(), SCIPsortedvecDelPos...(), 6032 SCIPsortedvecDelPosDown...(), SCIPsortedvecFind...() and SCIPsortedvecFindDown...() to manage sorted vectors or 6033 groups of vectors of various data types that are sorted w.r.t. the first vector 6034 6035### Command line interface 6036 6037- advanced reading and writing dialog in interactive shell 6038 6039### Interfaces to external software 6040 6041- Many changes in the SoPlex interface: The current one is tailored towards SoPlex 1.4 (aka 1.3.3). All SoPlex functions 6042 (where applicable) should now have an exception handling. The Bugfix for adding columns has been moved to SoPlex. One 6043 can use ROW representation. Reading/writing of a basis has been implemented. 6044 6045### Changed parameters 6046 6047- changed default frequency parameters for RINS, Local Branching, Crossover and Mutation heuristic This should not 6048 change the performance but happened just for consistency reasons 6049- changed parameter default values for the priority of presolver `dualfix` and `inttobinary` 6050- removed parameter `separating/cmir/maxtestdeltaroot` 6051- new value `l` for parameter `lp/pricing`, which is the new default 6052 6053### New parameters 6054 6055- `constraints/and/linearize` to enable linearization of all <and> constraints (in presolving), 6056- `constraints/and/initiallp` to turn on, off, or `auto` that the LP relaxation of the AND constraints are in the initial LP; 6057- `constraints/countsols/collect` to enable the storing of the solutions; default value FALSE; 6058- `constraints/indicator/addCoupling` to enable generation of relaxation 6059- `constraints/indicator/branchIndicators` to decide whether it is branched on indicator constraints in enforcing 6060- `constraints/indicator/genLogicor` to decide whether logicor constraints instead of cuts are generated 6061- `constraints/indicator/sepaAlternativeLP` to decide whether separation takes place using the alternative LP 6062- `constraints/linear/aggregatevariables` to search for aggregations in equations in the presolving step 6063- `constraints/linear/dualpresolving` to disable dual presolving step in the linear constraint handler; default value is TRUE 6064- `constraints/linear/simplifyinequalities` to enable a simplification step for inequalities; default value is set to FALSE = disabled 6065- `constraints/linear/upgrade/binpack` to enable or disable the linear upgrading process 6066- `constraints/linear/upgrade/eqknapsack` to enable or disable the linear upgrading process 6067- `constraints/linear/upgrade/invarknapsack` to enable or disable the linear upgrading process 6068- `constraints/linear/upgrade/knapsack` to enable or disable the linear upgrading process 6069- `constraints/linear/upgrade/logicor` to enable or disable the linear upgrading process 6070- `constraints/linear/upgrade/setppc` to enable or disable the linear upgrading process 6071- `constraints/linear/upgrade/varbound` to enable or disable the linear upgrading process 6072- `constraints/linear/presolusehashing` to use hashing comparison in cons_linear.c; default value is TRUE 6073- `constraints/logicor/presolusehashing` to use hashing comparison in cons_logicor.c; default value is TRUE 6074- `constraints/setppc/presolusehashing` to use hashing comparison in cons_setppc.c; default value is TRUE 6075- `constraints/SOS1/branchNonzeros` to decide whether SOS1 constraint with largest number of nonzero variables is picked for branching 6076- `constraints/SOS1/branchSOS` to enable or disable branching on SOS1 constraints 6077- `heuristics/feaspump/beforecuts` to allow the feaspump to be called before cut separation 6078- `heuristics/mutation/minimprove` 6079- `presol/donotmultaggr` which disables multiaggregation for all variables of the problem 6080- `separating/cmir/densityoffset` to allow for more c-MIR cuts on small models 6081- `separating/orthofunc` to choose function for scalar product computation in orthogonality test 6082 6083Testing 6084------- 6085 6086- updated mmm.{test,solu}, mittelmann.{test,solu}, miplib3.solu, miplib.solu, shortmiplib.test and added 6087 mittelmann_current.test, mittelmann_old.test 6088- added test scripts for testing counting (make testcount) 6089- removed tag make testpre (useless without corresponding scripts) 6090- added tag testcount (make testcount); this allows for testing counting problem 6091- replaced tcsh by bash and gawk by awk in all check scripts to achieve higher compatibility 6092 6093Build system 6094------------ 6095 6096### Makefile 6097 6098- added `make/make.project` as default make include for external projects using SCIP 6099- added possibility to compile shared libraries in makefiles (and added `make/make.linux.x86.gnu.opt-shared`) 6100- replaced <string> by <cstring> in all C++-interfaces to get `strlen()` included (gcc-4.3 gave an error) 6101- Moved -rpath option for ld to linux-specific Makefiles. 6102- Re-activated readline library on darwin/ppc. 6103 6104- Flags: 6105 - added in all `make/make.*` `GMP_FLAGS` and `GMP_LDFLAGS` 6106 - new flag GMP with values (`auto`, `true and `false`); in case of `auto` the library gmp is linked if ZIMPL is 6107 included 6108 - adapted all makefiles of the examples accordingly 6109 6110- LP: 6111 - modified makefiles to accept ZIMPLOPT and LPSOPT flags (with values `opt` or `dbg` and default being `opt`), and 6112 removed `LPS=spxdbg` and `LPS=clpdbg` 6113 - added target spx132 for SoPlex version 1.3.2 6114 6115Fixed bugs 6116---------- 6117 6118- fixed CTRL-C if NO_SIGACTION is set (e.g., for MinGW) 6119- added checks whether a plugin (handler) has already been included to avoid later complications e.g. with parameters. 6120- fixed bug with wrong `tightened` return value of some of the change bounds methods 6121- forced full propagation in presolving -> this fixes a bug that implied that variable locks became inconsistent 6122- replaced calls to perror() by SCIP error message using strerror(errno); this avoids problems with the error output 6123 stream 6124- fixed bug in method SCIPgetProbvarLinearSum() 6125- fixed bug with errors occurring in sub-MIPs. Search is only aborted in dbg mode, in opt mode a warning will be printed 6126- fixed bug in tclique-graph datastructure concerning insertion of edges into nonempty graph 6127- corrected bug in SCIPtreeBranchVar() (tree.c): several comparison functions needed a `feas`. 6128- fixed bug in SCIPtightenVarLb/Ub() in scip.c concering forcing a bound change (bound improvement is checked now) 6129- improved stage checking for bound computation 6130- fixed usage of command test for string comparison in check-scripts (now compatible with ubuntu) 6131- replaced sprintf and snprintf by SCIPsnprintf() fixed potential bug with overlong strings 6132- corrected bug in the case when soplex threw an exception in autopricing 6133- fixed bug in SCIPvarGetOrigvarSum() concerning the corner case the a negated variable has no parent variable in 6134 original problem 6135 6136- Aggregation: 6137 - avoid aggregation of implicit integers with fractional aggregation scalars 6138 - fixed bug in aggregateActiveIntVars(): If a < 0, multiply a*x + b*y == c by -1 (algo for finding initial solution does 6139 only work for a > 0). 6140 - avoiding aggregation that removes information about implicitly integer variables (removes bug) 6141 - fixed bug with exponential running times due to complicated recursive multi-aggregation 6142 - corrected bug in var.c occuring during applying boundchanges in varUpdateAggregationBounds method 6143 6144- Constraints: 6145 - fixed bug that a missing CONSTRANS in constraint handler leads to `NULL` pointer as constraint data for the copied 6146 constraints instead of pointer copies of the consdata (as explained in the constraint handler `HowTo`) 6147 - fixed bugs in second part of consdataTightenCoefs(): Removed min/maxleftactisinfinity (definition was not correct), 6148 fixed calculation of min/maxleftactivity and removed asserts concerning whether all redundant vars were deleted (led 6149 to different behavior in debug and opt mod). 6150 - fixed typo in documentation: default value for `dynamic` parameter is FALSE for all constraint handlers! 6151 - fixed bug in preprocessing of SOS2 constraints (cons_sos2.c) 6152 - fixed bug in cons_countsols.c concerning variable locking 6153 - fixed bug in cons_varbounds.c, concerning SCIPaddVarVlb() and SCIPaddVarVub() 6154 - fixed bug in applyFixings() in cons_varbound.c concerning tightening the bound of a variable left in a redundant 6155 constraint (bound change is forced now) 6156 6157- Heuristics: 6158 - fixed bug with useless objective cutoff in LNS heuristics 6159 - removed bug for values greater than (-)infinity, heur_shifting.c, heur_intshifting.c, heur_rounding.c, heur_oneopt.c 6160 - fixed bug with errors occurring in heuristic LPs. In opt mode a warning will be printed, abort in dbg mode 6161 6162- Linear Constraints: 6163 - fixed bug with wrong update of activities in linear constraints after global upper bound changes 6164 - fixed bug in preprocessConstraintPairs() in cons_linear.c concerning updating the flags of the constraint that stayes 6165 in the problem (nonredundant information were lost before) 6166 - fixed bug in cons_linear.c caused by comparing two infinity values during checking of using variable as slackvariable 6167 - removed bug for rhs/lhs greater than (-)infinity, cons_linear.c 6168 - removed bug caused by hashcomparison for non-sorted constraints, cons_linear.c 6169 - fixed bugs with wrong presolving due to cancellation in (res-)activities in cons_linear.c 6170 - removed BOUNDSCALETOL adjustment in cons_linear.c. This fixes bug with slightly infeasible variable fixings in 6171 presolving; reliable resactivities should make the BOUNDSCALETOL relaxation redundant. 6172 - removed `epsilontic` bug in cons_linear.c due to adjusting left/right hand side in applyfixing 6173 - fixed bug with multi-aggregated variables in cons_logicor: instead of fixing them, a linear constraint will be created 6174 - corrected bug in cons_linear.c:applyFixings() [if variable was fixed to infinity the rhs/lhs were wrong] 6175 - fixed bugs in pairwise presolving of cons_linear.c concerning deletion of upgraded constraints and inconsistent update 6176 of nchgsides in case of coefsequal and coefsnegated 6177 - fixed false assert and corrected a bug caused by deleting a constraint on `firstchanged` position in pairwise 6178 presolving with hashing in cons_linear.c 6179 6180- LP: 6181 - fixed handling of unbounded variables with 0 objective in SCIPlpGetModifiedPseudo[Proved]Objval() (lp.c) 6182 - fixed bug with uncatched LPSOLSTAT after hitting a time or iteration limit 6183 - corrected bug in SCIPlpGetState() if the LP is empty 6184 - fixed bug in SCIPlpSolveAndEval(): added extra simplex step if objlimit reached, fastmip and pricers enabled in order 6185 to get dual solution for pricing. 6186 - weakened two too strong asserts in lp.c concerning the LP result OBJLIMIT 6187 - fixed bug in SCIPlpSolveAndEval(): allow more than one extra simplex step for getting an objlimit exceeding solution 6188 with fastmip 6189 6190- Memory: 6191 - corrected invalid memory access in tcliqueIsEdge: added check whether node1 has no neighbors (tclique_graph.c) 6192 - removed memory leak detected with the help of coverity in dialog.c 6193 - fixed bug with memory reallocation in SCIPgetProbvarLinearSum() 6194 - tried to fix memory leak in dialog.c occuring from different versions of the readline/history libraries 6195 - removed possible memory leak in objdialog.cpp 6196 6197- Numerical: 6198 - fixed numerical issue in linear constraint propagation: need slightly more aggressive tightening such that probing 6199 does not choose a wrong value for fixing inside an epsilon interval 6200 - fixed numerical bug in dual presolving of linear constraint handler 6201 - avoid fixing variables to infinity in order to get rid of numerical inconsistencies in the original model 6202 6203- Objective: 6204 - added handling of the case of roundable variables with 0 objective in presol_dualfix.c 6205 - fixed bug with writing the MIP relaxation to a file concerning the objective function; in case the original objective 6206 function is requested, the transformed objective function gets re-transformed (scaling, offset) 6207 - fixed bug with wrong objective sense output for transformed problem. The transformed problem is always a minimization 6208 problem! 6209 - fixed bug with objective scaling after restart 6210 6211- Reading: 6212 - fixed bug with reading empty lines in TSP example 6213 - fixed bug with non-conformal parameter name in reader_ppm 6214 - fixed infinite loop in LP file reader if a line exceeds the character limit 6215 - fixed bug in reader_ppm while appending strings for output file 6216 - fixed some `SCIP_RETCODE` bugs in reader_fix.c, reader_sol.c, reader_sos.c and reader_zpl.c 6217 - fixed docu in type_reader.h 6218 - fixed bug with multi-aggregated variables which are de facto aggregated or fixed after flattening the aggregation tree 6219 - fixed bug with bound changes of variables in modifiable constraints during full dual presolving of linear conshdlr 6220 - increased compiler compatibility for C++ wrapper classed by adding extern `C` in obj*.cpp files and changing strlen 6221 calls to std::strlen 6222 6223- Separation: 6224 - corrected bug in priceAndCutLoop(): separation was aborted if domain reduction was applied 6225 - fixed bug in sepa_mir.c: size of testeddeltas-array was too small 6226 - corrected imlementation of SCIPlpiGetBasisInd() in lpi_clp.cpp (this fixes the bug that almost no Gomory cuts are 6227 found with Clp). 6228 6229- Sorting: 6230 - fixed bugs in sorttpl.c: fixed wrong arraysize in shellsort; in case an has at most one element, then no sorting is 6231 applied 6232 - fixed wrong if condition for function call in sorttpl.c 6233 - fixed obvious bug in linear constraint data sorting. Most part of the code assumed pure index sorting, but in fact, it 6234 was sorted by variable type as first criterion and index as second criterion. 6235 6236@page RN10 Release notes for SCIP 1.0 6237 6238@section RN100 SCIP 1.0.0 6239************************* 6240 6241Features 6242-------- 6243 6244- SCIP now has a couple of specialized settings, all called scip_*.set 6245- SCIP is now compatible to the Exception branch of SoPlex 6246- if possible, objective function is scaled to make objective value integral with gcd 1 6247- slightly modified automatic constraint aging strategy 6248- new C templates disp_xxx.h and dialog_xxx.h and C++ wrapper classes objdisp.h and objdialog.h, respectively 6249- modified reader `sol`, st. files which where created via typing the order of commands `set log *.sol`, 6250 `disp sol var -`, `set log cplex.log` in Cplex can now be read 6251- new dummy LP interface `lpi_none.c`; useful for running SCIP without a LP solver 6252 6253- Presolver: 6254 - modified probing presolver to do multiple cycles if called in subsequent runs 6255 - changed sort algorithm in probing presolver 6256 6257- Node selection: 6258 - new node selection rule `estimate` (best estimate search) 6259 - new node selection rule `hybridestim` 6260 6261- Documentation: 6262 - the doxygen documentation now has HowTo's for all plugin types 6263 - the doxygen documentation now contains a FAQ 6264 - the documentation has now a TAB Modules; there you can find list of available constraint handles, presolvers, 6265 propagators, lpi interfaces, file readers and so on 6266 6267- Time: 6268 - time limit is now forwarded to lp solving algorithm 6269 - presolving, cut separation, primal heuristics and strong branching now better respect time limit 6270 6271- Heuristics: 6272 - best estimate search is now used in all large neighborhood search heuristics 6273 - new improvement heuristic `oneopt` 6274 - new heuristic `actconsdiving` following an idea of John Chinneck 6275 6276- Separation and Cuts: 6277 - modified cut selection code 6278 - cut conversion into linear constraints after a restart now works better 6279 - added flow cover separator 6280 - gomory cuts are now also separated for integral slack variables 6281 - less aggressive in Gomory cut separation 6282 - strong CG cuts are now also separated for integral slack variables 6283 6284Performance improvements 6285------------------------ 6286 6287- greatly improved performance of LP file reader by replacing string copies with pointer copies 6288- removed performance bottleneck with non-bfs based node selectors and large leaf queues at the cost of a small memory 6289 overhead (2 ints per node in the leaf queue); this improves performance quite a bit on instances that take a large 6290 number of branching nodes 6291- improved performance of linear constraint propagation by delaying some floor/ceil calculations 6292- improved performance of clique cut separator 6293 6294Interface changes 6295----------------- 6296 6297### New and changed callbacks 6298 6299- new callback method SCIPdialogFree() 6300 6301### Deleted and changed API methods 6302 6303- slightly modified bound substitution heuristic in SCIPcalcMIR() and SCIPcalcStrongCG() 6304- slightly less conservative in numerics for SCIPmakeRowIntegral() 6305- linear and knapsack constraint handler may now deal with coefficients of value zero 6306- new parameter `maxbounddist` for SCIPincludeSepa() and constructor ObjSepa() 6307- new parameter `restart` for method SCIPfreeSolve() 6308- calling SCIPwriteLP() is now possible in Solved Stage 6309- SCIPwrite{LP,MIP} may no longer be called after solving, since the LP data structures may not be valid 6310- All functions SCIP<datatype>Param() got a new parameter `isadvanced`. 6311 This does not influence the performance of SCIP, but the position of the parameter in the settings menu. 6312 Hence, if you do not care about this, you can assign any value to it. 6313 You should add the corresponding flag to the SCIP<datatype>Param() calls in your own source code. 6314 6315- Version: 6316 - modified `SCIP_SUBVERSION` to be a number instead of a string (to be able to use `SCIP_SUBVERSION >= ...`) 6317 - SCIPsubversion() now returns an int instead of a const char* 6318 6319- Tree and Nodes: 6320 - new parameter `estimate` for SCIPcreateChild() giving an estimate for value of best feasible solution in the subtree to 6321 be created. One possibility is to use SCIPgetLocalOrigEstimate() for this value. 6322 - removed method SCIPnodeGetPriority() 6323 - removed parameter `lowestboundfirst` from SCIPincludeNodesel() 6324 6325- Branching: 6326 - removed parameter `branchdir` from SCIPbranchVar() 6327 - new parameters `leftchild`, `eqchild` and `downchild` for SCIPbranchVar() 6328 - SCIPgetVarStrongbranch() now also returns lperror == TRUE if the solving process should be stopped, e.g., because of a 6329 time limit 6330 6331- Variable tightening: 6332 - replaced methods SCIPvarGetClosestVlb() and SCIPvarGetClosestVub() from pub_var.h by new methods 6333 SCIPgetVarClosestVlb() and SCIPgetVarClosestVlb() in scip.h 6334 - new parameter `force` for SCIPtightenVarLb() and SCIPtightenVarUb() 6335 6336### New API functions 6337 6338- SCIPreadSol() 6339- SCIPwriteMIP() 6340- SCIPgetLocalOrigEstimate() and SCIPgetLocalTransEstimate() 6341- SCIPisStopped() 6342- SCIProwIsInGlobalCutpool() 6343- SCIPresetParams() 6344- SCIPgetVarRedcost() 6345- SCIPtightenVarLbGlobal() and SCIPtightenVarUbGlobal() 6346- SCIPsepaGetMaxbounddist() 6347- SCIPboundchgGetNewbound(), SCIPboundchgGetVar(), SCIPboundchgGetBoundchgtype(), 6348 SCIPboundchgGetBoundtype(), SCIPboundchgIsRedundant(), SCIPdomchgGetNBoundchgs(), SCIPdomchgGetBoundchg() 6349- SCIPnodeUpdateLowerboundLP() 6350- SCIPcalcNodeselPriority() 6351- SCIPnodeGetEstimate() 6352- SCIPnodeGetDomchg() 6353- SCIPgetRootNode() (in combination with SCIPcutoffNode(), this allows the immediate finishing of the optimization) 6354 6355### Command line interface 6356 6357- default dialog menu now includes the commands `set default` and `display parameters` 6358- added option to write node LP and MIP relaxations to LP file from interactive shell 6359 6360### Changed parameters 6361 6362- parameters are now separated into basic and advanced, the latter ones have been moved to extra submenus 6363- priority parameters are now restricted to be in [INT_MIN/4,INT_MAX/4] to avoid overflow errors in comparison methods 6364- increased priority of `estimate` node selector, such that this is the new default node selector 6365- changed meaning of parameter setting `nodeselection/childsel = l`; old meaning is now called `r` 6366- changed default value of `conflict/maxvarsfac` to 0.1 6367- changed default value of `conflict/useprop` to TRUE 6368- changed default value of `conflict/useinflp` to TRUE 6369- changed default value of `conflict/usepseudo` to TRUE 6370- changed default value of `conflict/maxlploops` to 2 6371- changed default value of `conflict/lpiterations` to 10 6372- changed default value of `conflict/interconss` to -1 6373- changed default value of `conflict/reconvlevels` to -1 6374- changed default value of `conflict/settlelocal` to FALSE 6375- changed default value of `constraints/linear/propfreq` to 1 6376- changed default values of `heuristics/*diving/backtrack` to TRUE 6377- changed default value of `nodeselection/restartdfs/stdpriority` to 10000 6378- changed default value of `numerics/boundstreps` to 0.05 in order to avoid very long propagation loops on continuous variables 6379- changed default value of `presolving/restartfac` to 0.05 6380- changed default value of `presolving/restartminred` to 0.10 6381- changed default value of `separating/objparalfac` to 0.01 for performance reasons 6382- changed default value of global `separating/maxbounddist` to 1.0 6383- changed default value of `separating/objparalfac` to 0.0001 6384 6385### New parameters 6386 6387- `conflict/enable` to globally enable or disable conflict analysis 6388- `constraints/linear/maxcardbounddist` and `constraints/knapsack/maxcardbounddist` 6389- `heuristics/*diving/backtrack` to activate 1-level backtracking for most of the diving heuristics 6390- `heuristics/feaspump/maxstallloops` 6391- `nodeselection/childsel` to control the child selection 6392- `presolving/immrestartfac` 6393- `separating/*/maxbounddist` to have individual maxbounddist parameters per separator 6394- `separating/clique/backtrackfreq` to speed up clique cut separation in heuristic fashion 6395- `separating/redcost/continuous` 6396 6397Build system 6398------------ 6399 6400### Makefile 6401 6402- added version numbers to library files (There will be a softlink generated in the lib/ and bin/ directories without 6403 version number that point to the latest compiled version.) 6404- added .exe extension to binaries of MinGW 6405- removed the `.static` extension associated to the LINK variable from the Makefile system (If you want to build 6406 makefiles for shared library generation, use the OPT variable. For example, you could create a makefile 6407 `make/make.linux.x86.gnu.opt-shared` and compile it with `make OPT=opt-shared`.) 6408 6409- Defaults and Options: 6410 - modified the default LP solver to be SoPlex instead of CPLEX 6411 - added `LPS=none` for compiling SCIP without a LP solver 6412 - made `ZIMPL=true` the default; if you do not want to include ZIMPL support, call `make ZIMPL=false` 6413 6414Fixed bugs 6415---------- 6416 6417- fixed bug in rowScale() concerning deletion of almost zero coefficients 6418- weakened assert in primal.c in order to avoid numerical troubles 6419- fixed bug with too long variable names 6420- fixed bug with strange user descriptions of plugins 6421- changed position of some asserts to prevent segmentation faults 6422- SCIPgetAvgPseudocostCount() and SCIPgetAvgPseudocostCountCurrentRun() now return the average over all integer 6423 variables instead of all variables, since pseudo costs are not recorded for continuous variables 6424- fixed wrong sorting of plugins with priorities close to INT_MIN or INT_MAX 6425- replaced `line` by `read` in Makefile, since `line` is non-standard 6426- fixed bug with branching rules that produce only one child with no changes to the problem 6427- fixed bug that external relaxator is not reset appropriately for a new problem instance 6428- removed wrong assert in function paramWrite() 6429- fixed bug with uninitialized in check.awk 6430- fixed bug in ZIMPL file reader for multiple occurrences of a single variable in the objective function 6431- fixed bug with deleting variables from the transformed problem that are contained in the implication graph 6432- fixed bug in root reduced cost fixing propagator that leads to an empty domain for a variable as a proof of optimality 6433 of the current incumbent 6434- fixed bug with fractional coefficients of binary variables in cont --> impl int upgrading 6435 6436- Solution: 6437 - fixed bug with aggregated variables in debug solution test 6438 - now it is possible to add original solutions 6439 - fixed bugs with SCIPgetBestsol() returning `NULL` after a restart with user objective limit 6440 - fixed wrong status code in presence of user objective limit and a feasible solution that is not better than the limit 6441 6442- Bounds: 6443 - fixed bug with wrong bound changes of loose variables 6444 - changed wrong assert in SCIPnodeAddBoundinfer() 6445 - fixed bug in variable bounds search and insertion method 6446 - fixed bug regarding modifying bounds in original problem if negated original variables exist 6447 - fixed bug with multiple pending bound changes on some variable 6448 6449- Separator: 6450 - fixed bug in integer objective separator with restarts 6451 - fixed bug in integer objective separator with dynamic columns 6452 6453- Cuts: 6454 - fixed bug that cut age was not reset to zero for violated cuts 6455 - fixed bug in SCIPcutpoolAddNewRow() concerning update of minidx and maxidx of added row 6456 - fixed numerical bug in rowScaling of lp.c, which possibly cut off feasible solutions 6457 - significantly improved performance of c-MIR and Gomory cuts by caching closest VLB and VUB info 6458 6459- LP: 6460 - fixed numerical buf with slightly different LP optimum after resolving due to probing/diving 6461 - fixed bug in cmir and flowcover separator with variables which are currently not in the LP 6462 - fixed bug with LP size management in probing if column generation is used 6463 - fixed bug in LP file reader with row names identical to section keywords 6464 - fixed potential bugs due to errors in resolving the LP after diving or probing 6465 - fixed potential bugs in SCIPpriceLoop() and priceAndCutLoop(), st. now all LP solution stati are handled appropriately 6466 - fixed potential bug with non-existent LP in SCIPwrite{LP,MIP} 6467 6468- Constraint handler: 6469 - removed wrong assert in bounddisjunction constraint enforcement 6470 - fixed numerical bug in propagator of varbound constraint handler 6471 - fixed bug in variable bound constraint handler with changing bounds on multi-aggregated variables 6472 - fixed bug in linear constraint handler: only tight cuts are transformed into linear constraints after restart 6473 - fixed bug in bounddisjunction constraint handler with propagation of multi-aggregated variables 6474 - fixed bug with numerics in linear constraint handler due to non-representable `BOUNDSCALETOL` 6475 - fixed bug with almost integral multi-aggregation in dual presolve of linear constraint handler 6476 - fixed bug with numerics in update of min/maxactivity in linear constraint handler 6477 6478- Heuristics: 6479 - fixed bug in intshifting and oneopt heuristic with variables which are currently not in the LP 6480 - fixed bug with primal heuristics reducing the cutoff bound such that the current node is cut off 6481 - fixed bug in oneopt heuristic: must not be called on pseudo nodes if continuous variables are present 6482 6483@page RN09 Release notes for SCIP 0.9 6484 6485@section RN090 SCIP 0.9.0 6486************************* 6487 6488Features 6489-------- 6490 6491- the EXITSOL callback of the plugins is now called before the LP and the global cut pool are freed 6492 6493- Primal Heuristics: 6494 - new primal heuristics `rens`, `mutation` and `veclendiving` 6495 - primal heuristics that run before the node is solved now know already whether the LP will be solved at the current 6496 node or not 6497 6498- Heuristics: 6499 - new heuristic `intshifting` (ID character `i`) 6500 - in the root node of the very first run, heuristics with timing `AFTERNODELPNODE`, `AFTERLPPLUNGE`, `AFTERPSEUDONODE`, and 6501 `AFTERPSEUDOPLUNGE` are now called before the enforcement of the constraint handlers, in particular before the branching 6502 rules; in this way, the branching rule can already benefit from a tighter primal bound 6503 - if a heuristic found a better solution after the LP loop (and in particular the `AFTERNODE` heuristics in the root node 6504 of the very first run, see above), domain propagation and LP solving is triggered again; this allows for additional 6505 reduced cost tightening and other dual propagations 6506 - slightly modified `crossover` and `rins` heuristics 6507 - improved performance of intdiving heuristic 6508 - improved heuristic `octane` and `shifting` 6509 - slightly modified rens and localbranching heuristics 6510 - modified guided diving heuristic such that it equals the original version of the heuristic (i.e., round in direction of the 6511 current incumbent solution instead of the average of all primal feasible solutions) 6512 - ID character for intdiving heuristic is now `I` 6513 6514- Separation and Cuts: 6515 - c-MIR cuts try now to scale the cut to integral values; however, cuts are still generated if this fails 6516 - hard-coded relative objective gain to consider a separation loop to be stalling is now changed from 1e-3 to 1e-4, 6517 which means that separation is not aborted as early as before 6518 - modified c-MIR cut separator to more closely resemble the original version of Marchand and Wolsey 6519 6520- Constraint: 6521 - possibility of SAT-like restarts after a number of conflict constraints have been found 6522 - improved presolving of and, or and xor constraints 6523 - implemented additional dual presolving in linear constraint handler 6524 - slightly modified presolving of varbound constraint handler 6525 6526Interface changes 6527----------------- 6528 6529### New and changed callbacks 6530 6531- new parameter `solinfeasible` for constraint handler callback methods `ENFOLP` and `ENFOPS` 6532- replaced callback parameter `inlploop` and `inplunging` by `heurtiming` in `SCIP_DECL_HEUREXEC` 6533- slightly changed the meaning of the result codes returned by external relaxators: if they modify the LP or tighten 6534 bounds of variables, they are not automatically be called again (it is assumed that they already made use of these 6535 changes). They are only called again, if they returned `SCIP_SUSPENDED` or if some other plugin modified the LP. 6536 6537### Deleted and changed API methods 6538 6539- new parameter `escapecommand` for SCIPdialoghdlrAddHistory() 6540- removed method SCIPgetVarData(); use SCIPvarGetData() from pub_var.h instead 6541- new calls SCIPgetLPBInvCol() and SCIPgetLPBInvACol() to access the basis inverse and simplex tableau columnwise 6542- new parameter `ndomredsfound` of SCIPpropagateProbing() 6543- new parameters `fixintegralrhs`, `maxfrac`, `mksetcoefs` and `fracnotinrange` in SCIPcalcMIR() 6544- modified SCIPfixVar() such that in problem creation stage it will change the bounds as requested even if the fixing 6545 value is outside of the current bounds 6546- replaced parameters `pseudonodes`, `duringplunging`, `duringlploop` and `afternode` by `timingmask` in 6547 SCIPincludeHeur() and constructor of ObjHeur() class use the following table to translate old settings into the new 6548 timingmask: 6549 6550| PSEUDONODES | DURINGPLUNGING | DURINGLPLOOP | AFTERNODE | timingmask | 6551|-------------|----------------|--------------|-----------|---------------------------------------------------------------| 6552| FALSE | FALSE | FALSE | FALSE | SCIP_HEURTIMING_BEFORENODE | 6553| TRUE | FALSE | FALSE | FALSE | SCIP_HEURTIMING_BEFORENODE | 6554| FALSE | TRUE | FALSE | FALSE | SCIP_HEURTIMING_BEFORENODE | 6555| TRUE | TRUE | FALSE | FALSE | SCIP_HEURTIMING_BEFORENODE | 6556| FALSE | FALSE | TRUE | FALSE | SCIP_HEURTIMING_BEFORENODE \| SCIP_HEURTIMING_DURINGLPLOOP | 6557| TRUE | FALSE | TRUE | FALSE | SCIP_HEURTIMING_BEFORENODE \| SCIP_HEURTIMING_DURINGLPLOOP | 6558| FALSE | TRUE | TRUE | FALSE | SCIP_HEURTIMING_BEFORENODE \| SCIP_HEURTIMING_DURINGLPLOOP | 6559| TRUE | TRUE | TRUE | FALSE | SCIP_HEURTIMING_BEFORENODE \| SCIP_HEURTIMING_DURINGLPLOOP | 6560| FALSE | FALSE | FALSE | TRUE | SCIP_HEURTIMING_AFTERLPPLUNGE | 6561| TRUE | FALSE | FALSE | TRUE | SCIP_HEURTIMING_AFTERPLUNGE | 6562| FALSE | TRUE | FALSE | TRUE | SCIP_HEURTIMING_AFTERLPNODE | 6563| TRUE | TRUE | FALSE | TRUE | SCIP_HEURTIMING_AFTERNODE | 6564| FALSE | FALSE | TRUE | TRUE | SCIP_HEURTIMING_AFTERLPPLUNGE \| SCIP_HEURTIMING_DURINGLPLOOP | 6565| TRUE | FALSE | TRUE | TRUE | SCIP_HEURTIMING_AFTERPLUNGE \| SCIP_HEURTIMING_DURINGLPLOOP | 6566| FALSE | TRUE | TRUE | TRUE | SCIP_HEURTIMING_AFTERLPNODE \| SCIP_HEURTIMING_DURINGLPLOOP | 6567| TRUE | TRUE | TRUE | TRUE | SCIP_HEURTIMING_AFTERNODE \| SCIP_HEURTIMING_DURINGLPLOOP | 6568 6569- Constraints: 6570 - renamed all occurences of `removeable` by the correct English word `removable`: SCIPconsIsRemovable(), 6571 SCIPsetConsRemovable(), SCIPvarIsRemovable(), SCIPcolIsRemovable(), SCIProwIsRemovable() 6572 - new parameter `sticktonode` in SCIPcreateCons(), SCIPcreateConsAnd(), SCIPcreateConsBounddisjunction(), 6573 SCIPcreateConsKnapsack(), SCIPcreateConsLinear(), SCIPcreateConsLogicor(), SCIPcreateConsOr(), 6574 SCIPcreateConsVarbound(), SCIPcreateConsXor(), SCIPcreateConsSetpart(), SCIPcreateConsSetpack(), 6575 SCIPcreateConsSetcover(): usually, you should set this to FALSE; if you want to add constraints as node markers with 6576 node data and, e.g., use the `activate` and `deactivate` callbacks to get informed about the activation and 6577 deactivation of the node, you should set this flag to TRUE in order to make sure, that the constraint will always be 6578 associated to the node and not moved to a more global node if this would be possible 6579 - slightly changed semantics of SCIPaddConsNode() and SCIPaddConsLocal(), such that a constraint which is added to the 6580 root node now enters the global problem (and is still existing after a restart) 6581 6582### New API functions 6583 6584- SCIPgetVerbLevel() 6585- SCIPescapeString() 6586- SCIPgetGlobalCutpool(), SCIPgetPoolCuts(), SCIPcutpoolGetCuts(), SCIPcutGetRow() and SCIPcutGetAge() 6587- SCIPconsGetNLocksPos() and SCIPconsGetNLocksNeg() 6588 6589### Command line interface 6590 6591- command shell now understands escape characters `\``,`'` and `\` which makes it possible to read in files with spaces in the 6592 name 6593 6594### Interfaces to external software 6595 6596- updated XPress interface to XPress-MP 17 (contributed by Michael Perregaard) 6597 6598### Changed parameters 6599 6600- changed default value of `heuristics/octane/usediffray` to FALSE 6601- removed parameter `heuristics/octane/usediffbwray` 6602- renamed parameter `heuristics/octane/useavgray` to `heuristics/octane/useavgnbray` 6603- changed default value of `heuristics/rens/binarybounds` to TRUE 6604- changed default value of `heuristics/octane/freq` to -1 in order to deactivate Octane 6605- parameter `heuristics/feaspump/maxsols` is now strict, i.e., if n solutions were already found, the feasibility pump 6606 starts to work only if `maxsols <= n`, instead of `maxsols < n` 6607 6608### New parameters 6609 6610- `conflict/restartnum` and `conflict/restartfac` 6611- `heuristics/octane/useavgray` 6612- `heuristics/octane/useavgwgtray` 6613- `limits/absgap` to define an absolute gap limit 6614- `separating/cmir/aggrtol` 6615- `separating/cmir/densityscore` 6616- `separating/cmir/fixintegralrhs` 6617- `separating/maxruns` 6618- `presolving/restartminred` which forbids another restart if the last one was not successful enough 6619- `propagating/abortoncutoff` 6620- `reading/zplreader/changedir` to control behavior of path switching of ZIMPL file reader 6621- `reading/zplreader/parameters` to pass additional parameters to ZIMPL 6622 6623Build system 6624------------ 6625 6626### Makefile 6627 6628- added ncurses to the readline entries in the `make/make.*` files 6629- added quotes to sed expressions in Makefile (needed under Windows) 6630- modified makefiles for Windows/Intel 6631- added automatic query script in the Makefile for soft-link names 6632 6633Fixed bugs 6634---------- 6635 6636- fixed bug with string pointer copy instead of string content duplication in constructors of C++ wrapper classes 6637- fixed bug in CPLEX interface with basis access methods that dualopt has to be called for more error status codes 6638- fixed bug with inserting two variable bounds of the same type on the same variable with the same bounding variable but 6639 with different sign of coefficient (e.g., `x <= 10*z + 5` and `x <= -5*z + 10`); in previous version, one of the two was 6640 removed, although both have a useful meaning; now, we keep both and detect a stronger global bound in the implication graph presolving 6641- objective function is now also checked for integrality after problem transformation (fixed a bug that a solution which 6642 was generated between transformation and presolving for an integral objective function did not reduce the cutoff bound by one) 6643- fixed a bug with cmir cut efficacy calculation (however, on my first tests, the performance reduced slightly!) 6644- fixed bug that SCIPvarGetAvgSol() always returned the upper bound (affected guided diving heuristic) 6645- fixed bug in RENS, RINS, Local Branching, Crossover and Mutation heuristics with wrong variable-subvariable assignments 6646- fixed bug in infeasible/bound-exceeding LP conflict analysis if the bounds were relaxed in diving (happens in intshifting heuristic) 6647 6648- Separation: 6649 - fixed bug with adding constraints with `INITIAL=true` and separating them afterwards, which lead to a second addition of 6650 the constraint's relaxation in the child node 6651 - separation LPs are now immediately resolved after a bound change was generated by a cut separator; before, the 6652 separation round was prematurely aborted, which means that a separation round limit was sometimes reached very quickly 6653 and some of the separators were not even called a single time 6654 6655- Cmir Cut Separator: 6656 - too large deltas are now also rejected in c-MIR cut separation 6657 - fixed bug in cmir cut separator, that 8*delta was not tried 6658 - fixed bug in cmir cut separator with wrong sign of slack in row score function 6659 - fixed bug in cmir cut separator with weights fixed to zero, thus making the current aggregation invalid 6660 - fixed bug in cmir cut separator with wrong calculation of cut efficacies 6661 6662@page RN08 Release notes for SCIP 0.8 6663 6664@section RN082 SCIP 0.8.2 6665************************* 6666 6667Features 6668-------- 6669 6670- additional flag `delay` for pricers 6671- new propagator `rootredcost` which applies reduced cost fixing at the root node whenever a best new primal solution was found 6672- new separator `redcost` which replaces the internal reduced cost strengthening 6673 6674- LP: 6675 - extensions to the LP are kept even if the LP is not solved at the current node; however, if the LP turned out to be 6676 numerically instable, the extensions of the current node are still discarded 6677 - added removal of bound-redundant rows from the LP during root node LP solving loop 6678 - new display column `lpobj` 6679 6680- Constraints: 6681 - slightly changed priorities of constraint handlers 6682 - now, conflict constraints are also created if they were generated in strong branching or diving with insertion depth 6683 equal to the current depth 6684 - new constraint handler `bounddisjunction` 6685 6686- Readers: 6687 - renamed `sol` file reader to `fix` file reader (reads partial solution files and fixes variables to the given values) 6688 - added `sol` file reader which reads complete solution files and adds the solutions to the solution pool 6689 - LP and MPS file readers are now able to parse lazy constraints and user cuts sections 6690 6691- Presolver: 6692 - knapsack presolver now generates cliques in the clique table (this essentially solves `neos1.mps`) 6693 - new presolver `inttobinary` 6694 6695- Heuristics: 6696 - new primal heuristic `shifting` 6697 - diving heuristics abort earlier (did not come back in reasonable time on `fast0507`) 6698 6699Interface changes 6700----------------- 6701 6702- new solution status code `SCIP_STATUS_STALLNODELIMIT` 6703 6704### New and changed callbacks 6705 6706- slightly modified semantics of the `CONSINITLP` callback in the constraint handlers 6707 6708### Deleted and changed API methods 6709 6710- methods SCIPisLbBetter() and SCIPisUbBetter() have an additional parameter and slightly different meaning (they now 6711 compare the bound improvement *relatively* to the width of the domain and the bound itself) 6712- SCIPgetNSols() now returns an int instead of `SCIP_Longint` 6713- method SCIPreadProb() does not call SCIPfreeTransform() anymore; file readers that want to extend the existing problem 6714 must now call SCIPfreeTransform() themselves before modifying the original problem 6715- method SCIPgetBinvarRepresentative() can now also be called in problem creation stage 6716- additional parameter `maxpricerounds` in method SCIPsolveProbingLPWithPricing() 6717- changed name of method SCIPpresolGetNVarTypes() to SCIPpresolGetNChgVarTypes() 6718- method SCIPsplitFilenames() now treats both versions of slashes, `/` and `\`, as directory delimiters (under MinGW and 6719 CygWin, both are valid; so, we cannot treat file names anymore where the other slash is used as a regular character) 6720 6721- Constraints: 6722 - marking a constraint to be `initial` now means in addition, that if the constraint is added to a local node it will 6723 enter the LP at the time the node is first processed, even if parameters forbid separation at this node 6724 - changed name of method SCIPconshdlrGetNVarTypes() to SCIPconshdlrGetNChgVarTypes() 6725 6726- Conflicts: 6727 - method SCIPgetNConflictClausesFound() renamed to SCIPgetNConflictConssFound() 6728 - method SCIPgetNConflictClausesFoundNode() renamed to SCIPgetNConflictConssFoundNode() 6729 - method SCIPgetNConflictClausesApplied() renamed to SCIPgetNConflictConssApplied() 6730 6731### New API functions 6732 6733- SCIPsolveProbingLPWithPricing() 6734- SCIPchgVarLbRoot() and SCIPchgVarUbRoot() 6735- SCIPinRepropagation() 6736- SCIPaddDialogInputLine() and SCIPaddDialogHistoryLine() 6737- SCIPtransformProb() to create the transformed problem; enables the user, e.g., to add primal solutions before the presolving begins 6738- SCIPcreateSolCopy() 6739- SCIPareSolsEqual() 6740 6741- Getters: 6742 - SCIPgetRowKnapsack(), SCIPgetRowLinear(), SCIPgetRowLogicor(), SCIPgetRowSetppc(), and 6743 SCIPgetRowVarbound() for obtaining the linear relaxation of a corresponding constraint 6744 - SCIPgetLhsVarbound(), SCIPgetRhsVarbound(), SCIPgetVarVarbound(), SCIPgetVbdvarVarbound(), and 6745 SCIPgetVbdcoefVarbound() 6746 - SCIPgetLPRootObjval(), SCIPgetLPRootColumnObjval() and SCIPgetLPRootLooseObjval() 6747 - SCIPcolGetMinPrimsol() and SCIPcolGetMaxPrimsol() 6748 - SCIPgetFocusDepth() 6749 6750- Score: 6751 - SCIPgetAvgPseudocostScore() 6752 - SCIPgetAvgPseudocostScoreCurrentRun() 6753 - SCIPgetAvgConflictScore() 6754 - SCIPgetAvgConflictScoreCurrentRun() 6755 - SCIPgetAvgInferenceScore() 6756 - SCIPgetAvgInferenceScoreCurrentRun() 6757 - SCIPgetAvgCutoffScore() 6758 - SCIPgetAvgCutoffScoreCurrentRun() 6759 6760- Reduced Cost: 6761 - SCIPgetColRedcost() 6762 - SCIPvarGetRootRedcost() 6763 6764- Variables: 6765 - SCIPgetNVarsAnd() and SCIPgetVarsAnd() 6766 - SCIPgetWeightsKnapsack(), SCIPgetNVarsKnapsack(), SCIPgetVarsKnapsack() and SCIPgetWeightsKnapsack() 6767 - SCIPgetNVarsLinear(), SCIPgetVarsLinear() and SCIPgetValsLinear() 6768 - SCIPgetNVarsOr() and SCIPgetVarsOr() 6769 - SCIPgetNVarsXor() and SCIPgetVarsXor() 6770 6771### Command line interface 6772 6773- command line syntax changed to support batch modus without piping stdin with `<` or `|` operators 6774- advanced command line syntax: 6775 - `-l <logfile> `: copy output into log file 6776 - `-q `: suppress screen messages 6777 - `-s <settings> `: load parameter settings (.set) file 6778 - `-f <problem> `: load and solve problem file 6779 - `-b <batchfile>`: load and execute dialog command batch file (can be used multiple times) 6780 - `-c <command> `: execute single line of dialog commands (can be used multiple times) 6781 6782### Interfaces to external software 6783 6784### Changed parameters 6785 6786- removed parameter `propagating/redcostfreq`, because reduced cost strengthening is now an external separator plugin 6787- removed parameter `conflict/maxunfixed` 6788- parameter `conflict/maxclauses` renamed to `conflict/maxconss` 6789- parameter `conflict/interclauses` renamed to `conflict/interconss` 6790- parameter `conflict/reconvclauses` replaced by `conflict/reconvlevels` 6791- parameter `conflict/uselp` replaced by `conflict/useinflp` and `conflict/useboundlp` 6792- changed default value of `constraints/obsoleteage` to -1 6793- changed default value of `branching/relpscost/conflictweight` to 0.01 6794- changed default value of `branching/relpscost/inferenceweight` to 0.0001 6795- changed default value of `branching/relpscost/cutoffweight` to 0.0001 6796- in bfs node selector, parameter `minplungedepth` is now stronger than `maxplungedepth` if they conflict 6797 6798### New parameters 6799 6800- `constraints/linear/separateall` 6801- `conflict/lpiterations` 6802- `conflict/keepreprop` 6803- `branching/relpscost/conflictweight`, `branching/relpscost/inferenceweight`, 6804 `branching/relpscost/cutoffweight` and `branching/relpscost/pscostweight` 6805- `conflict/settlelocal` 6806- `conflict/depthscorefac` 6807- `limits/stallnodes` 6808 6809Build system 6810------------ 6811 6812### Makefile 6813 6814- removed ncurses and pthread libraries from the Makefile; pthread is now only linked if CPLEX is used 6815 6816Fixed bugs 6817---------- 6818 6819- fixed numerical bug in SCIPrealToRational() [thanks to Anders Schack-Nielsen] 6820- fixed bug in crossover heuristic with negative timelimit 6821- removed bug in conflict analysis with wrong redundancy check 6822- fixed bug that unexpected end of stdin (Ctrl-D or piped-in file without `quit` command) gives a segmentation fault 6823- fixed bug with inconsistent data structures after a global bound was changed at a local subproblem and the local 6824 bounds are not contained anymore in the new global bounds 6825- fixed dependency generation in example Makefiles 6826 6827- Knapsack: 6828 - fixed bug in knapsack presolving with redundancy check after applyFixings() [thanks to Anders Schack-Nielsen] 6829 - fixed bug in knapsack separator with empty initial covers 6830 - fixed bug in knapsack constraint disaggregation that may lead to acceptance of infeasible solutions 6831 - fixed bug in knapsack constraint handler where a modifiable constraint may be declared redundant 6832 6833- LP: 6834 - fixed bug with missing LP size updates after pricing or cut separation in probing [thanks to Marc Nuenkesser] 6835 - fixed bug in CPLEX interface with getting basis information after the LP was modified and restored 6836 - fixed bug with updating LP size in probing 6837 - fixed bug that SCIPgetLPSolstat() returns a valid status code even if the LP was not yet constructed for the current node 6838 6839- Variables: 6840 - fixed bug with invalid lazy updates after a restart where the LP is not solved again (e.g., due to all variables being fixed) 6841 - fixed bugs resulting from inactive general integer variables being member of the variable bounds array of a variable 6842 - fixed bug in updatePseudocost() with wrong lpgain distribution on multiple branching variables [thanks to Anders Schack-Nielsen] 6843 - fixed bug in objconshdlr.h where member variable scip_maxprerounds_ was declared as an `SCIP_Bool` instead of an int 6844 - branching on nearly-integral variables is now avoided in relpscost branching, which lead to a numerical assertion 6845 6846- Implication: 6847 - fixed bug with adding implications that fix the implication variable to the opposite value (due to the bug, it was 6848 returned that the whole problem is infeasible) 6849 - removed wrong assert in varRemoveImplicsVbs() 6850 6851- Cliques: 6852 - fixed bug in SCIPcliqueSearchVar() [thanks to Anders Schack-Nielsen] 6853 - fixed bug in SCIPcliqueAddVar() [thanks to Anders Schack-Nielsen] 6854 6855- Readers: 6856 - fixed bug in MPS file reader with `OBJSENSE` 6857 - fixed bug in LP reader with potentially uninitialized pointers [thanks to Martin Mueller] 6858 6859- Constraints: 6860 - it is now possible to branch on constraints without the risk of going into an infinite loop, because constraints marked as `initial` 6861 will be put to the LP relaxation (of the child nodes) even if separation is prohibited by the parameter settings 6862 - fixed bug that locally valid varbound constraints produce VLB/VUB entries [thanks to Anders Schack-Nielsen] 6863 6864@section RN081 SCIP 0.8.1 6865************************* 6866 6867Features 6868-------- 6869 6870- improved performance of the priority queue in conflict analysis 6871- slightly modified restartdfs node selector 6872 6873- Presolving: 6874 - new presolver `implics` to find bound changes and aggregations out of the implication graph 6875 - modified probing order in probing presolver 6876 6877- Constraints: 6878 - changed handling of added constraints in separation calls 6879 - modified bookkeeping of locally added and disabled constraints such that the order of enabling and disabling constraints stays the same 6880 - logic or constraint handler now adds implications on clauses with 2 literals to the implication graph 6881 - and/or constraint handlers now add implications to the implication graph 6882 - xor constraint handler now uses stronger LP relaxation without auxiliary variable for xor constraint with 2 operands 6883 6884- Heuristics: 6885 - added preliminary version of `intdiving` heuristic (disabled in default settings) 6886 - added crossover heuristic 6887 6888- Readers: 6889 - LP file reader now accepts the keyword `Integer` for defining the start of the integer variables section 6890 - new file reader for (partial) solutions 6891 6892Examples and applications 6893------------------------- 6894 6895- added two small pricer examples (for C and C++) 6896- updated example code (s.t. it compiles again) 6897 6898Interface changes 6899----------------- 6900 6901### New and changed callbacks 6902 6903- callback method `CONSSEPA` of constraint handler was split into two methods `CONSSEPALP` and `CONSSEPASOL` 6904- callback method `SEPAEXEC` of separator was split into two methods `SEPAEXECLP` and `SEPAEXECSOL` 6905 6906### Deleted and changed API methods 6907 6908- replaced method SCIPsepaWasDelayed() by SCIPsepaWasLPDelayed() and SCIPsepaWasSolDelayed() 6909- additional parameter `sol` for methods SCIPaddCut(), SCIPgetCutEfficacy() and SCIPisCutEfficacious() 6910- additional parameter `sol` for method SCIPseparateKnapsackCover() 6911- primal solutions may now contain values marked to be unknown (value is `SCIP_UNKNOWN`); unknown values don't contribute 6912 to the objective value of the solution; an unknown solution value should be treated as an arbitrary value in the 6913 variable's bounds, e.g., in the calculation of the feasibility of a constraint, a value inside the variable's bounds 6914 should be selected that makes the constraint as feasible as possible 6915- new parameter `printzeros` for methods SCIPprintSol(), SCIPprintTransSol(), SCIPprintBestSol() and SCIPprintBestTransSol() 6916 6917- Constraints: 6918 - replaced method SCIPconshdlrWasSeparationDelayed() by two methods SCIPconshdlrWasLPSeparationDelayed() and 6919 SCIPconshdlrWasSolSeparationDelayed() 6920 - renamed method SCIPgetNGlobalConss() to SCIPgetNConss() 6921 6922### New API functions 6923 6924- SCIPgetCuts() 6925- SCIPgetVarConflictScore() and SCIPgetVarConflictScoreCurrentRun() 6926- SCIPvarSetData() 6927- SCIPcreateUnknownSol() 6928- SCIPgetNConflictClausesFoundNode() 6929- SCIPvarSetDelorigData(), SCIPvarSetTransData() and SCIPvarSetDeltransData() 6930- SCIPvarHasBinaryImplic() 6931- SCIPgetFixedVars() and SCIPgetNFixedVars() 6932- SCIPgetConss(), SCIPgetNOrigConss() and SCIPgetOrigConss() 6933- SCIPsepaGetNConssFound() and SCIPsepaGetNDomredsFound() 6934- SCIPconstructLP() to force constructing the LP of the current node 6935- SCIPisLPConstructed() 6936 6937### Command line interface 6938 6939- added `write statistics` command to default user dialogs 6940 6941### Changed parameters 6942 6943- modified meaning of parameter `presolving/probing/maxtotaluseless` 6944- heuristics with `freq = 0` and `freqofs > 0` are now called in depth level freqofs instead of being called in the root 6945 node 6946- added some parameters in local branching and RINS heuristic 6947- new parameter values `p`rimal simplex and `d`ual simplex in `lp/initalgorithm` and `lp/resolvealgorithm` 6948 6949### New parameters 6950 6951- `branching/inference/conflictweight` 6952 6953Build system 6954------------ 6955 6956### Makefile 6957 6958- included version number in binary file name 6959- tried to make the code Windows compatible 6960 6961Fixed bugs 6962---------- 6963 6964- also removed history_length, if `NO_REMOVE_HISTORY` is defined to support older versions of the readline library 6965- hopefully fixed bug with wrong path slash `/` under Windows 6966- fixed bug with aggregating fixed variables 6967 6968- Implications: 6969 - fixed bug in transitive implication addition 6970 - fixed wrong assert with implications that imply a fixed variable 6971 - removed bug in implication addition 6972 6973- Readers: 6974 - fixed bug in ZIMPL model reader with wrong chdir, if .zpl file is in current directory 6975 - fixed bug in LP file reader with signed values without space between sign and value (e.g. `+2x` instead of `+ 2x`) 6976 - fixed various bugs in LP file reader 6977 - fixed bug in LP file reader with explicit zero coefficients 6978 6979- Numerics: 6980 - fixed numerics in probing and linear constraint handler (rentacar was detected to be infeasible in presolving) 6981 - fixed numerics in check method of linear constraint handler 6982 - fixed bug with numerical error in LP resolve after probing or diving 6983 6984- Heuristics: 6985 - fixed bug with calling heuristics in depths smaller than their frequency offset 6986 - fixed bugs in local branching and RINS heuristic 6987 6988Known bugs 6989---------- 6990 6991- if one uses column generation and restarts, a solution that contains variables that are only present in the 6992 transformed problem (i.e., variables that were generated by a pricer) is not pulled back into the original space 6993 correctly, since the priced variables have no original counterpart 6994 6995@section RN080 SCIP 0.8.0 6996************************* 6997 6998Features 6999-------- 7000 7001- adding variable bounds automatically adds the corresponding implication 7002- changed restart dfs nodeselector to sort leaves by node number instead of node depth to aviod jumping around in the 7003 search tree after a restart was applied and the current dive ended due to infeasibility 7004- new Message Handler plugin 7005- added file reader for LP format 7006- introduced subversion string 7007- replaced all abort() calls by SCIPABORT(); this is defined in def.h to be `assert(FALSE)` 7008- added possibility to disable certain features by using `make USRFLAGS=-DNO_REMOVE_HISTORY`, `make 7009 USRFLAGS=-DNO_SIGACTION`, `make USRFLAGS=-DNO_RAND_R`, or `make USRFLAGS=-DNO_STRTOK_R` 7010- improved preprocessing abort criteria 7011- added zlib support 7012 7013- Conflict Analysis: 7014 - conflict clauses are now collected in a conflict store, redundant clauses are eliminated and only the best `conflict/maxclauses` 7015 clauses are added permanently to the problem; the remaining clauses are only added temporarily, if they can be used for repropagation 7016 - modified the influence of the depth level in conflict analysis 7017 - slightly changed LP resolving loop in conflict analysis 7018 - if CPLEX returns that the LP exceeds the bound and if no additional LP solves are allowed in conflict analysis, we 7019 have to perform one additional simplex iteration to get the dual solution that actually violates the objective limit 7020 7021- Constraints: 7022 - reactivated multiaggregation in cons_linear.c on binary variables again (possible due to bug fix below) 7023 - improved preprocessing of variable bounds constraints 7024 - linear constraint handler now catches events of variables after the problem was completely transformed in order to 7025 avoid the whole bunch of `LOCKSCHANGED` events that are generated at problem transformation stage 7026 - added redundancy detection for pairs of constraints in setppc constraint handler 7027 7028- Presolving and Cliques: 7029 - changed linear constraint presolving s.t. redundant sides are not removed if constraint is an equality 7030 - new event type `SCIP_EVENTTYPE_PRESOLVEROUND` 7031 - modified probing presolver to not add implications that are already included in the implication graph and clique table 7032 - incorporated clique and implication information in knapsack constraint presolving 7033 - removed transitive clique generation, because this produces way too many cliques 7034 7035- Heuristics: 7036 - diving heuristics now apply propagation at each step 7037 - removed `objfeaspump` heuristic, because the functionality can be achieved by using the `feaspump` heuristic 7038 - diving heuristics are now applying propagation after each bound change 7039 - new primal heuristic `octane` 7040 - slightly changed feaspump heuristic, s.t. after finding a new best solution the target integral solution is modified randomly 7041 7042- Separation and Cuts: 7043 - improved debugging for infeasible cuts and propagations, given a primal feasible solution 7044 - improved knapsack cover separation 7045 - improved performance of c-MIR separator 7046 - cut pool is now also separated in root node (to find cuts again that were removed from the LP due to aging) 7047 7048Interface changes 7049----------------- 7050 7051- new event type `SCIP_EVENTTYPE_VARDELETED` 7052- new event `SCIP_EVENTTYPE_IMPLADDED` 7053- new event types `SCIP_EVENTTYPE_GLBCHANGED` and `SCIP_EVENTTYPE_GUBCHANGED` 7054 7055### New and changed callbacks 7056 7057- new callback parameter `validnode` for the `CONFLICTEXEC` method of conflict handlers, which should be passed to 7058 SCIPaddConsNode() 7059 7060### Deleted and changed API methods 7061 7062- additional parameter `validnode` for SCIPaddConsLocal() and SCIPaddConsNode() 7063- SCIPhashtableRemove() can now also be called, if the element does not exist in the table 7064- SCIPhashmapRemove() can now also be called, if the element does not exist in the map 7065- additional parameter `branchdir` for SCIPbranchVar() 7066- replaced method SCIPmessage() by SCIPverbMessage() with additional parameter `file` 7067- put block memory shell and tclique algorithm into separate subdirectories 7068- new parameter `duringlploop` of SCIPincludeHeur(): heuristics can now run during the price-and-cut loop at a node 7069 7070### New API functions 7071 7072- SCIPgetNConflictClausesApplied() 7073- SCIPgetNConflictClausesApplied() 7074- SCIPhashtableExists() 7075- SCIPhashmapExists() 7076- SCIPnodeGetNumber() 7077- SCIPsolveProbingLP() to solve the LP in a probing node (enables mixing of propagation and LP solving for diving heuristics) 7078- SCIProwGetDualfarkas() 7079- SCIPgetCurrentNode() 7080- SCIPinterruptSolve() 7081- SCIPpropagateProbingImplications() 7082- SCIPgetLPI() which makes all methods in scip/lpi.h available to the user 7083- SCIPgetRandomInt() and SCIPgetRandomReal() 7084- SCIPstrtok() 7085- SCIPheurGetNBestSolsFound() 7086 7087- Variables: 7088 - SCIPdelVar() 7089 - SCIPgetVarStrongbranchLPAge() 7090 - SCIPvarIsTransformedOrigvar() 7091 - SCIPvarIsDeleted() 7092 7093- Messages and IO: 7094 - SCIPerrorMessage() 7095 - SCIPwarningMessage() 7096 - SCIPdialogMessage() 7097 - SCIPinfoMessage() 7098 - SCIPsetMessagehdlr() 7099 - SCIPsetDefaultMessagehdlr() 7100 - SCIPgetMessagehdlr() 7101 - new file i/o methods SCIPfopen(), SCIPfclose(), SCIPfprintf(), ... that operate on the data type `SCIPFILE`; these 7102 methods automatically use zlib methods if the zlib is enabled 7103 7104- Cliques: 7105 - SCIPvarGetNCliques() 7106 - SCIPvarGetCliques() 7107 - SCIPvarsHaveCommonClique() 7108 - SCIPvarHasImplic() 7109 - SCIPcliqueGetNVars() 7110 - SCIPcliqueGetVars() 7111 - SCIPcliqueGetValues() 7112 - SCIPcliqueGetId() 7113 - SCIPaddClique() 7114 - SCIPcalcCliquePartition() 7115 7116- Constraint handler: 7117 - SCIPgetDualfarkasLinear() of linear constraint handler 7118 - SCIPgetDualfarkasLogicor() of logicor constraint handler 7119 - SCIPgetDualfarkasSetppc() of setppc constraint handler 7120 - SCIPgetDualsolKnapsack() of knapsack constraint handler 7121 - SCIPgetDualfarkasKnapsack() of knapsack constraint handler 7122 - SCIPgetDualsolVarbound() of varbound constraint handler 7123 - SCIPgetDualfarkasVarbound() of varbound constraint handler 7124 - SCIPconsGetValidDepth() 7125 - SCIPsetConsInitial() 7126 - SCIPsetConsSeparated() 7127 - SCIPsetConsEnforced() 7128 - SCIPsetConsChecked() 7129 - SCIPsetConsPropagated() 7130 - SCIPsetConsLocal() 7131 - SCIPsetConsDynamic() 7132 - SCIPsetConsRemoveable() 7133 7134### Command line interface 7135 7136- added command `write solution` to default dialog 7137- added commands `write problem` and `write transproblem` to default dialog 7138 7139### Changed parameters 7140 7141- additional setting `SCIP_VERBLEVEL_DIALOG` in `display/verblevel` parameter 7142- additional LP pricing setting `partial` 7143- replaced parameter `presolving/restartbdchgs` with parameters `presolving/maxrestarts` and `presolving/restartfac` 7144- replaced parameter `constraints/linear/maxpresolaggrrounds` with `constraints/linear/maxpresolpairrounds` 7145- parameters `constraints/agelimit` and `constraints/obsoleteage` now iterprete the value 0 as a dynamic setting 7146- number of fractional variables included in parameter `separating/maxstallrounds` 7147 7148- Changed default values: 7149 - changed default values of `heuristics/*/maxdiveavgquot` and `heuristics/*/maxdiveavgquotnosol` to 0 7150 - changed default values of `constraints/agelimit` and `constraints/obsoleteage` to 0 7151 - changed default values of `heuristics/objpscostdiving/maxsols` and `heuristics/rootsoldiving/maxsols` to -1 7152 - changed default value of `separating/strongcg/maxroundsroot` to 20 7153 - changed default value of `separating/cmir/maxroundsroot` to 10 7154 - changed default value of `constraints/linear/maxaggrnormscale` to 0.0, which means to not apply aggregation 7155 - changed default value of `separating/maxstallrounds` to 5 7156 - changed default value of `presolving/probing/maxfixings` to 50 7157 - changed default parameter values to MIP settings: 7158 + `conflict/useprop` = FALSE 7159 + `conflict/usepseudo` = FALSE 7160 + `display/verblevel` = 4 7161 + `separating/poolfreq` = 0 7162 + `constraints/linear/sepafreq` = 0 7163 + `constraints/and/sepafreq` = 0 7164 + `constraints/conjunction/sepafreq` = 0 7165 + `constraints/knapsack/sepafreq` = 0 7166 + `constraints/knapsack/sepacardfreq` = 0 7167 + `constraints/logicor/sepafreq` = 0 7168 + `constraints/or/sepafreq` = 0 7169 + `constraints/setppc/sepafreq` = 0 7170 + `constraints/varbound/sepafreq` = 0 7171 + `constraints/xor/sepafreq` = 0 7172 + `separating/clique/freq` = 0 7173 + `separating/cmir/freq` = 0 7174 + `separating/gomory/freq` = 0 7175 + `separating/impliedbounds/freq` = 0 7176 + `separating/strongcg/freq` = 0 7177 7178### New parameters 7179 7180- `branching/fullstrong/reevalage` 7181- `conflict/maxclauses` 7182- `conflict/allowlocal` 7183- `constraints/knapsack/disaggregation` 7184- `presolving/probing/maxtotaluseless` 7185- `separating/cmir/maxfails`, `separating/cmir/maxfailsroot` and `separating/cmir/trynegscaling` 7186 7187### Data structures 7188 7189- MAJOR CHANGE: preceeded all data types with `SCIP_`: you may use shell script reptypes_scip.sh to rename the SCIP 7190 data types in your own source code (But use with care! Create a backup copy of your source first!) 7191 7192Build system 7193------------ 7194 7195### Makefile 7196 7197- modified the Makefile to accept an additional parameter `VERBOSE={true,false}` 7198- added flags `READLINE=true/false`, `ZLIB=true/false`, `ZIMPL=true/false` to Makefile 7199 7200Fixed bugs 7201---------- 7202 7203- fixed minor bugs in debug code of primal.c and sol.c 7204- variables that are being multiaggregated are now automatically removed from all other variables' variable bound and 7205 implication arrays; this fixes bugs with methods, that rely on the fact, that the entries in the variable bound and 7206 implication arrays are active variables only 7207- aggregations are now always performed in a way, such that the variable of more general type is aggregated (with type 7208 generality being cont > implint > int > bin); in this way, a binary variable's representant is always binary (which 7209 was not the case before and resulted in a bug in SCIPgetBinvarRepresentative()) 7210- removed bug in presol_probing.c: the vars of the sorted variables array have to be captured 7211- fixed bug in the output of solutions with priced variables 7212- fixed bug in propagation with parameters prop_maxrounds and prop_maxroundsroot 7213- conflict analysis can now handle errors in LP solving calls 7214- removed bug in SCIPvarAddVlb() and SCIPvarAddVub() with fractional vlb/vubcoefs 7215- fixed bug that primal or dual rays might not be available because the wrong solver was used 7216- included message.o in LPI library, s.t. one can link this library indepentent of SCIP 7217- fixed bug that if diving heuristic that changes the objective values finds a solution, the cutoff is reinstalled in 7218 the LP solver (although the objective value has no meaning due to the objective function modification) 7219 7220- Feasibiltiy: 7221 - LP primal feasibility for bounds is now defined as absolute measure (was relative to the bound before); this fixes a bug (see alu8_9.mps), 7222 that an LP with an integral variable fixed to a large value yields an accepted solution with that variable slightly different than the fixed 7223 value; the integrality feasibility condition is measured with absolute differences, which leads to the fixed integer variable being fractional; 7224 this leads to an error if branching is performed on this variable 7225 - fixed bug with redundant self implications that wrongly lead to the detection of infeasibility 7226 - fixed bug with potential infinite loop if a separator is delayed and the LP is infeasible 7227 7228- Asserts: 7229 - removed wrong asserts from lpi_cpx.c 7230 - removed wrong assertion in varAddImplic() 7231 7232- Numerics: 7233 - locally fixed variables are no longer used as branching candidates even if their LP solution value is fractional (due 7234 to numerical reasons, see above) 7235 - fixed numerical bug in pseudo objective propagator with only slightly tightened bounds 7236 - removed bug that an LP might be declared to be solved even if it was marked erroneous due to numerical problems 7237 7238- Constraint Handlers: 7239 - fixed bug in linear constraint handler with variables fixed to infinity 7240 - fixed bug with constraint handlers that can only enforce their constraints by adding cuts, but the maximal number of 7241 cuts to separate is set to 0; now, cuts that are generated in the constraint enforcement are used in any case 7242 - fixed bug in knapsack constraint presolving with tightening coefficients and capacity 7243 - fixed bug with modifiable constraints in linear constraint handler preprocessing 7244 - fixed bug in linear constraint handler that global activities are not updated after global bound changes 7245 7246- Separation and Cuts: 7247 - global bound changes now lead to the removal of redundant implications (such that the asserts in sepa_implbounds.c are now correct) 7248 - due to usage of variable bounds, SCIPcalcMIR() may return LOOSE variables in the cut -> modified sepa_cmir.c, sepa_gomory.c and 7249 sepa_strongcg.c to use SCIPcreateEmptyRow() and SCIPaddVarsToRow() instead of SCIPcreateRow() which only works for COLs 7250 - fixed bug in clique separator that reduced performance 7251 - increased performance of clique separator by allowing only a certain number of zero-weighted fill ins 7252 7253@page RN07 Release notes for SCIP 0.7 7254 7255@section RN079 SCIP 0.7.9 7256************************* 7257 7258Features 7259-------- 7260 7261- aging and cleanup now only remove non-basic columns and basic rows, s.t. resolving can be applied with 0 simplex iterations 7262- it is now possible to create subnodes in probing and use backtracking to undo probing changes 7263- bounds of variables are included in the feasibility checks for solutions 7264- support for barrier algorithm 7265- changed implementation of automatic minplungedepth and maxplungedepth calculation in bfs node selector 7266 7267- Presolving: 7268 - new plugin: probing presolver 7269 - probing is now also possible in presolving stage 7270 - it is now possible to interrupt and continue presolving 7271 7272- Separation and Cuts: 7273 - new plugin: clique separator for clique cuts with at least 3 elements 7274 - new plugin: implied bound cuts separator 7275 - included debugging module to check whether cutting planes cut off the optimal solution 7276 7277- Branching: 7278 - changed implementation of reliability value calculation in reliability branching; slightly modified influence of 7279 maximal total number of strong branching LP iterations in reliability branching 7280 - changed implementation of maximal strong branching iterations calculation in reliability branching 7281 7282- Constraints: 7283 - if verblevel is at least `NORMAL`, an automatical check of the best solution is performed in the original problem, and 7284 an error message is displayed, if it violates an original constraint 7285 - due to the new constraint handler `cons_cumulative.{c,h}` SCIP can resource-constraint scheduling problem 7286 - during probing, propagation of bounds is now always performed in linear constraint handler, ignoring the parameter `tightenboundsfreq` 7287 - new implementation of the clique graph construction method in clique separator 7288 - new constraint handler `cons_cumulative.{c,h}` 7289 7290- Heuristics: 7291 - new implementation of the feasibility pump heuristic by Timo Berthold (replaces old implementation); old 7292 implementation is now called `objfeaspump`; parameter names have been changed accordingly 7293 - diving heuristics now compare their number of LP iterations with the number of node LP iterations instead of the total 7294 number (including their own) LP iterations 7295 - modified the automatic objfactor setting of feaspump heuristic to let the objective function have stronger influence 7296 7297Examples and applications 7298------------------------- 7299 7300- added TSP example in `examples/TSP` 7301 7302Interface changes 7303----------------- 7304 7305### New and changed callbacks 7306 7307- new callback methods `INITSOL` and `EXITSOL` for variable pricers, primal heuristics, conflict handlers, relaxators, 7308 separators, propagators, event handlers, node selectors and display columns 7309- callback method `CONFLICTEXEC` of conflict handlers receive additional parameters `dynamic` and `removeable` 7310- constraint handler callback methods `CONSLOCK` and `CONSUNLOCK` are replaced by a single method `CONSLOCK` with the number 7311 of locks being positive or negative 7312 7313### Deleted and changed API methods 7314 7315- calling SCIPaddCut() with `forcecut=TRUE` will add the cut to the LP even if it is redundant 7316- SCIPreadProb() does not free the current problem, this is done in SCIPcreateProb() now, which is usually 7317 called by a problem reader; in this way, a reader can generate `extra information` for the current problem, s.t. the 7318 full problem information can be distributed to different files read by different readers 7319- SCIPgetVarStrongbranch() and SCIPgetVarStrongbranchLast() now have two additional parameters that can be used 7320 to check, whether the returned values are correct dual bounds 7321- SCIPgetBinvarRepresentative() now returns the fixed or multi-aggregated variable instead of returning `NULL` or 7322 aborting with an error message 7323- SCIPdispDecimal() is replaced by SCIPdispInt() and SCIPdispLongint() 7324- additional parameter `maxproprounds` in SCIPpropagateProbing() 7325- changed memory interface (see memory.h), `MEMHDR` is now called `BLKMEM` 7326- source code was moved into subdirectories: replace includes `scip.h` by `scip/scip.h` and 7327 `objscip.h` by `objscip/objscip.h`; This should allow a user to have include files of the same name as the ones 7328 of SCIP, e.g. `tree.h` or `var.h`. 7329- event handlers are now available as C++ wrapper class 7330- new flag `afterrelaxation` for primal heuristics 7331 7332- Solution: 7333 - removed method SCIPsolGetObj(), use SCIPgetSolOrigObj() or SCIPgetSolTransObj() instead 7334 - additional parameter `checkbounds` for SCIPtrySol(), SCIPtrySolFree(), SCIPcheckSol() 7335 7336- Variables: 7337 - SCIPvarLock(), SCIPvarLockDown(), SCIPvarLockUp(), SCIPvarLockBoth(), SCIPvarUnlock(), SCIPvarUnlockDown(), 7338 SCIPvarUnlockUp() and SCIPvarUnlockBoth() are replaced by SCIPaddVarLocks() which returns a `RETCODE` 7339 - SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), SCIPvarGetLbLocal() and SCIPvarGetUbLocal() now return the 7340 corresponding values of the transformed problem or current subproblem even for original problem variables 7341 - SCIPvarGetProbvar(), SCIPvarGetProbvarBinary() now return the fixed or multi-aggregated variable instead of 7342 returning `NULL` or aborting with an error message; in SCIPvarGetProbvarBinary(), the fixing of a fixed variable does 7343 not influence the negation status anymore 7344 - SCIPvarGetProbvarBound() returns the multi-aggregated variable instead of aborting with an error message 7345 - SCIPvarGetProbvarSum() does not set *var to `NULL` for fixed variables anymore; it may also return a 7346 multi-aggregated variable instead of aborting with an error message 7347 - SCIPaddVarImplication() now also adds variable lower and upper bounds, if the implied variable is non-binary 7348 - additional parameter `aggregated` in SCIPmultiaggregateVars() 7349 7350- Constraints: 7351 - SCIPvarLockDownCons(), SCIPvarLockUpCons(), SCIPvarUnlockDownCons() and SCIPvarUnlockUpCons() are replaced by 7352 SCIPlockVarCons() and SCIPunlockVarCons() which return a `RETCODE` 7353 - SCIPlockConsVars() and SCIPunlockConsVars() replaced with method SCIPaddConsLocks() 7354 - SCIPconshdlrGetNConss() is replaced by SCIPconshdlrGetNActiveConss() (returning the number of active 7355 constraints); method SCIPconshdlrGetNConss() does now return the total number of existing constraints, active and inactive 7356 - SCIPconshdlrGetStartNConss() is now called SCIPconshdlrGetStartNActiveConss() 7357 - SCIPconshdlrGetMaxNConss() is now called SCIPconshdlrGetMaxNActiveConss() 7358 - SCIPdisableConsNode() is replaced by SCIPdelConsNode() 7359 - SCIPdisableConsLocal() is replaced by SCIPdelConsLocal() 7360 - added new parameter `dynamic` to SCIPcreateCons() and all plugin methods SCIPcreateCons...() 7361 7362### New API functions 7363 7364- SCIPgetObjNorm() 7365- SCIPcreateOrigSol() 7366- SCIPwriteImplicationConflictGraph() 7367- SCIPinProbing() 7368- SCIPgetProbName() 7369- SCIPgetVarNStrongbranchs() 7370- SCIPcolGetNStrongbranchs() 7371- SCIPfindSimpleRational() 7372- SCIPselectSimpleValue() 7373 7374- Variables: 7375 - SCIPvarGetLbOriginal() 7376 - SCIPvarGetUbOriginal() 7377 - SCIPvarGetImplIds() 7378 - SCIPvarGetOrigvarSum() 7379 7380- Constraints: 7381 - SCIPenableCons() 7382 - SCIPdisableCons() 7383 - SCIPenableConsSeparation() 7384 - SCIPdisableConsSeparation() 7385 - SCIPconsIsSeparationEnabled() 7386 7387- Averages: 7388 - SCIPgetAvgPseudocost() 7389 - SCIPgetAvgPseudocostCurrentRun() 7390 - SCIPgetAvgPseudocostCount() 7391 - SCIPgetAvgPseudocostCountCurrentRun() 7392 - SCIPgetAvgInferences() 7393 - SCIPgetAvgInferencesCurrentRun() 7394 - SCIPgetAvgCutoffs() 7395 - SCIPgetAvgCutoffsCurrentRun() 7396 7397- LPs: 7398 - SCIPisLPSolBasic() to check, whether the current LP solution is basic (i.e. due to a simplex algorithm or barrier with crossover) 7399 - SCIPgetNPrimalLPs() 7400 - SCIPgetNPrimalLPIterations() 7401 - SCIPgetNDualLPs() 7402 - SCIPgetNDualLPIterations() 7403 - SCIPgetNBarrierLPs() 7404 - SCIPgetNBarrierLPIterations() 7405 - SCIPgetNPrimalResolveLPs() 7406 - SCIPgetNPrimalResolveLPIterations() 7407 - SCIPgetNDualResolveLPs() 7408 - SCIPgetNDualResolveLPIterations() 7409 7410- Delayed: 7411 - SCIPsepaIsDelayed() 7412 - SCIPsepaWasDelayed() 7413 - SCIPpropIsDelayed() 7414 - SCIPpropWasDelayed() 7415 - SCIPpresolIsDelayed() 7416 - SCIPpresolWasDelayed() 7417 - SCIPconshdlrIsSeparationDelayed() 7418 - SCIPconshdlrIsPropagationDelayed() 7419 - SCIPconshdlrIsPresolvingDelayed() 7420 - SCIPconshdlrWasSeparationDelayed() 7421 - SCIPconshdlrWasPropagationDelayed() 7422 - SCIPconshdlrWasPresolvingDelayed() 7423 7424### Command line interface 7425 7426- command line history in interactive shell now only stores useful commands 7427 7428### Interfaces to external software 7429 7430- removed storing of dual norms in LPI state of CPLEX interface (too memory consuming) 7431 7432### Changed parameters 7433 7434- default frequency offset of fracdiving heuristic changed to 3 7435- default frequency offset of (new) feaspump heuristic changed to 0 7436- default frequency offset of objfeaspump heuristic changed to 8 7437- changed default priority of primal heuristics 7438- renamed parameter `limits/sol` to `limits/solutions` 7439- changed default check priority of knapsack constraint handler to -600000 7440- changed default priority of Gomory cut separator to -1000 (will now be called after constraint handlers!) 7441- changed default priority of strong CG cut separator to -2000 7442- changed default priority of cmir cut separator to -3000 7443- changed default of parameter `lp/pricing` to `s`teepest edge pricing 7444- default parameter `branching/relpscost/minreliable` changed to 1.0 7445- default parameter `branching/relpscost/maxlookahead` changed to 8 7446- default parameter `branching/relpscost/sbiterofs` changed to 100000 7447- default parameter `heuristics/coefdiving/maxlpiterquot` changed to 0.05 7448- default parameter `heuristics/fracdiving/maxlpiterquot` changed to 0.05 7449- default parameter `heuristics/guideddiving/maxlpiterquot` changed to 0.05 7450- default parameter `heuristics/linesearchdiving/maxlpiterquot` changed to 0.05 7451- default parameter `heuristics/pscostdiving/maxlpiterquot` changed to 0.05 7452- default parameter `heuristics/feaspump/freq` changed to 20 7453- default parameter `heuristics/objfeaspump/freq` changed to 20 7454- default parameter `heuristics/objpscostdiving/freq` changed to 20 7455- default parameter `heuristics/rootsoldiving/freq` changed to 20 7456- default parameter `separating/clique/maxtreenodes` changed to -1 7457 7458### New parameters 7459 7460- new parameter delay for presolvers 7461- new parameter delaypresol for constraint handlers 7462- `branching/scorefunc` 7463- `constraints/.../delaypresol` 7464- `constraints/.../delayprop` 7465- `constraints/.../delaysepa` 7466- `conflict/dynamic` 7467- `conflict/removeable` 7468- `heuristics/coefdiving/maxlpiterofs` 7469- `heuristics/feaspump/maxlpiterofs` 7470- `heuristics/feaspump/maxsols` 7471- `heuristics/fracdiving/maxlpiterofs` 7472- `heuristics/guideddiving/maxlpiterofs` 7473- `heuristics/linesearchdiving/maxlpiterofs` 7474- `heuristics/objfeaspump/maxlpiterofs` 7475- `heuristics/objfeaspump/maxsols` 7476- `heuristics/objpscostdiving/maxlpiterofs` 7477- `heuristics/objpscostdiving/maxsols` 7478- `heuristics/pscostdiving/maxlpiterofs` 7479- `heuristics/rootsoldiving/maxlpiterofs` 7480- `heuristics/rootsoldiving/maxsols` 7481- `heuristics/fixandinfer/proprounds` and `heuristics/fixandinfer/minfixings` 7482- `lp/cleanupcolsroot` and `lp/cleanuprowsroot` to distinguish cleanup settings between root node and other nodes 7483- `lp/checkstability` to disable stability check of LP solver's result code 7484- `lp/initalgorithm` and `lp/resolvealgorithm` for switching between simplex and barrier algorithm 7485- `lp/pricing` to set the pricing strategy used in the LP solver 7486- `numerics/barrierconvtol` to set the convergence tolerance in the barrier algorithm 7487- `presolving/.../delay` 7488- `propagating/.../delay` 7489- `reading/cnfreader/dynamicconss` 7490- `reading/mpsreader/dynamicconss` 7491- `separating/.../delay` 7492 7493### Data structures 7494 7495- new possible result `SCIP_DELAYED` for `EXEC` method of separators, presolvers and propagators and `SEPA`, `PROP` and 7496 `PRESOL` methods of constraint handlers 7497 7498Fixed bugs 7499---------- 7500 7501- fixed bug in MPS file reader 7502- removed bug with applying reduced cost strengthening before pricing in all necessary variables 7503- negated variables must also be reset in SCIPvarInitSolve() 7504- fixed documentation of `CONSLOCK`-method (missing parameter `scip` in SCIPaddVarLocks()) 7505- included missing `objrelax.h` in includes of objscip.h 7506- fixed bug that after a resolve and further preprocessing, existing primal solutions may get corrupted due to 7507 aggregations or fixings that are possible due to the primal bound (given by the best solution) 7508- fixed bug with primal bound becoming wrong, if in a prior run the optimal solution was found and the cutoff bound was 7509 thereby reduced due to further domain propagation w.r.t. the objective function 7510- fixed bug in SCIPisObjIntegral() 7511- fixed bug in SCIPprintError() with `file == NULL` 7512- heuristic's display character is now only shown the first time, the new solution was found 7513- fixed bug that SCIPreadProb() doesn't discard the transformed problem 7514- fixed bug with wrong euclidean norm calculation of row, if multiple coefficients for the same variable are added and 7515 the sorting of the row was delayed with SCIProwDelaySort() 7516- fixed bug with adding implications: wrong insertion position, if only the lower bound change was present but not the 7517 upper bound change 7518- fixed bug in SCIPvarAddImplics() with wrong variable used in varAdjustBd() 7519- fixed bug in method reduced() of tclique_branch.c with sorting nodes in V 7520 7521- LP: 7522 - removed bug with objective norm calculation and column variables not in the LP (pricing) 7523 - LP error on forced LP resolve (due to 0 unfixed integers) now leads to an error (instead of accepting the pseudo 7524 solution as feasible) 7525 - fixed bug in CPLEX LP interface with dual norms 7526 7527- Presolving: 7528 - fixed bug that presolving time is not counted to solving time, if presolving is called explicitly with SCIPpresolve() 7529 - fixed bug where presolving fixings are counted even if the variable was already fixed 7530 - removed bug with dual presolver, that declared a problem to be unbounded or infeasible, if it could fix a variable to 7531 infinity even if its objective value is zero 7532 - fixed bug in knapsack constraint handler that fixed variables are sometimes not removed in presolving 7533 7534- Numerics: 7535 - fixed bug with unresolved numerical troubles in LP that don't render the LP useless at the current node 7536 - fixed numerical bugs in rounding heuristic and rootsoldiving heuristic 7537 7538- Separator: 7539 - fixed bugs in separation store with single coefficient cuts that are converted into bound changes 7540 - at least one cut per separation round is added to the LP to avoid cycling, even if the cut is redundant 7541 - fixed bug in SCIProwCalcIntegralScalar() with rows consisting of only continuous variables (appeared in gomory cut 7542 separator on miplib/dcmulti.mps) 7543 - fixed bug in linear constraint handler's knapsack relaxation separator 7544 - fixed bugs in intobj separator 7545 - fixed bug in cmir separator with empty rows 7546 - fixed bug in implied bound cut separator: only implications between binary variables were generated before 7547 7548- Constraint Handlers: 7549 - removed bug in knapsack constraint handler with merging multiple items if more than two items of the same variable 7550 appear in the constraint 7551 - removed bug in knapsack constraint handler with merging negated variables of equal weight at the end of the variables' array 7552 - fixed bug in linear constraint handler with eventdatas, if the original constraint has no variables 7553 - fixed bug that `CONSLOCK` method of constraint handlers that don't need constraints is not called 7554 - fixeg bug in setppc constraint handler with pairs of aggregated variables in the same constraint 7555 - fixed bug with globally deleting constraints, that have attached rows which are therefore not released in exitsol methods 7556 7557- Conflict analysis: 7558 - removed conflict analysis of infeasible diving LP if pricing is activated 7559 - made conflict analysis available in presolving stage (for probing conflicts) 7560 7561@section RN078 SCIP 0.7.8 7562************************* 7563 7564Features 7565-------- 7566 7567- changed SCIProwCalcIntegralScalar() to a slightly different algorithm 7568- improved knapsack relaxation in linear constraint handler separator to scale the constraint in order to get integral 7569 coefficients instead of just rounding down all coefficients 7570- improved presolving of linear constraint handler: aggregation of two constraints with equal coefficient vector into 7571 single constraint 7572- improved presolving of knapsack constraint handler: aggregation of equal or negated variables in same constraint 7573 7574- Plugins: 7575 + priority of separators, propagators and presolvers decide whether the plugin is called before the corresponding 7576 constraint handler methods or after: plugins with nonnegative priorities are called before, plugins with negative 7577 priorities are called after the constraint handlers 7578 + new plugin class for relaxators (external relaxations, that can be used in parallel with LP relaxations) 7579 + if more than one result code applies to a plugin's execution, it should return the one that is higher in the call's 7580 documentation list 7581 7582Interface changes 7583----------------- 7584 7585- even in optimized mode, the simple functions that are implemented as defines in the include files exist in the 7586 library, s.t. one can include the include files without `NDEBUG` and use the optimized library 7587 7588### New and changed callbacks 7589 7590- new branching rule plugin methods `INITSOL` and `EXITSOL` 7591 7592### Deleted and changed API methods 7593 7594- removed SCIPisFeasible(); use !SCIPisFeasNegative() instead 7595- SCIPisIntegral(), SCIPisFracIntegral(), SCIPfloor(), SCIPceil() and SCIPfrac() don't use the feasibility 7596 tolerance anymore (default: 1e-06); instead, they are using epsilon (default: 1e-09); instead, for handling 7597 integrality of a variable `in feasibility tolerances`, new methods SCIPisFeasIntegral(), SCIPisFeasFracIntegral(), 7598 SCIPfeasFloor(), SCIPfeasCeil() and SCIPfeasFrac() should be used 7599- in LPI, the semantics of SCIPlpiHasPrimalRay() and SCIPlpiHasDualRay() changed: methods return TRUE, if a ray exists 7600 and the solver can return it; new methods SCIPlpiExistsPrimalRay() and SCIPlpiExistsDualRay() check whether a ray 7601 exists without checking, if the solver knows and can return the ray 7602 7603### New API functions 7604 7605- SCIPvarIsInLP() 7606- SCIPgetLPColumnObjval() and SCIPgetLPLooseObjval() 7607- SCIPcalcIntegralScalar() with arbitrary array of Real values 7608- SCIPaddCoefKnapsack() in knapsack constraint handler 7609- SCIPisScalingIntegral() to check, whether the scaling of a value would lead to an integral value, measured 7610 against epsilon which is also scaled by the same scalar 7611- SCIPgetRealarrayMinIdx(), SCIPgetRealarrayMaxIdx(), SCIPgetIntarrayMinIdx(), SCIPgetIntarrayMaxIdx(), 7612 SCIPgetBoolarrayMinIdx(), SCIPgetBoolarrayMaxIdx(), SCIPgetPtrarrayMinIdx() and SCIPgetPtrarrayMaxIdx() 7613- SCIPbsortPtrInt() and SCIPbsortPtrIntInt() 7614- SCIPvarWasFixedAtIndex() 7615- SCIPaddConflictBd() 7616- SCIPprintMemoryDiagnostic() 7617- SCIPfindObj...() and SCIPgetObj...() in C++ wrapper interface to get the corresponding plugin object 7618 7619### Changed parameters 7620 7621- slightly changed the meaning of parameter `presolving/abortfac` a value of 0 now means to abort presolving only after 7622 no more change has been found 7623 7624Fixed bugs 7625---------- 7626 7627- assigning a value to a fixed variable in a solution with SCIPsetSolVal() does not return an error anymore, if the 7628 value is equal to the fixed value of the variable 7629- removed bug in SCIPisScalingIntegral() 7630- removed bugs with calling SCIPtightenVarLb(), SCIPtightenVarUb(), SCIPinferVarLbCons(), SCIPinferVarUbCons(), 7631 SCIPinferVarLbProp() and SCIPinferVarUbProp() in `PROBLEM` stage 7632 7633- (Re)solving: 7634 - solving loop is now immediately aborted, if a node on the active path is marked to be cut off 7635 - removed bug in resolving an interrupted problem, after the last solved node was cut off 7636 - removed bug with infinite solving loop if LP solving is turned off 7637 - removed bug with aborted solving in root node (e.g. due to time limit) that is tagged to be restarted 7638 7639- Branching: 7640 - fixed bug in all-fullstrong branching with getting strong branching information for columns not in current LP 7641 - implemented missing case in solve.c with branching rules that add constraints 7642 7643- Numerics: 7644 - changed numerics for integrality check of coefficients (fixed bug with accumulated errors in rows s.t. the row's 7645 activity is no longer integral although the row is marked being integer) 7646 - slightly changed numerics in linear constraint handler presolving to fix a bug with coefficients detected to be scaled 7647 to an integral value, that are not integral after scaling due to a large scalar that increased the integrality gap to 7648 a value larger than epsilon 7649 7650- Constraint handlers: 7651 - fixed bugs in consdataSwitchWatchedVars() of `or` and `and` constraint handlers 7652 - fixed wrong assertion in xor constraint handler with switching both watched variables to unwatched 7653 - fixed bugs in constraint handlers (and, logicor, or, setppc, xor) with calling conflict analysis during presolving 7654 - removed bug in knapsack constraint handler that appears if a variable is fixed to zero in knapsack presolving, which 7655 triggers a variable of the same knapsack to be fixed to one due to aggregation 7656 7657- Presolving: 7658 - removed bug in knapsack presolver 7659 - fixed bug in presolving with wrong number of newly fixed/aggregated/... variables/bounds/... after a restart 7660 7661@section RN077 SCIP 0.7.7 7662************************* 7663 7664Features 7665-------- 7666 7667- infeasible LPs in diving now produce conflict clauses (if LP conflict analysis is enabled) 7668- conflict analysis was slightly modified 7669- slightly changed aging strategy of logic or constraint handler 7670 7671Interface changes 7672----------------- 7673 7674### Deleted and changed API methods 7675 7676- method SCIPgetGap() and SCIPgetTransGap() now return infinity, if primal and dual bound have opposite sign (this 7677 removes the oddness with the gap increasing while the dual bound approaches zero) 7678 7679### New API functions 7680 7681- added methods SCIPgetVarsLogicor() and SCIPgetNVarsLogicor() in logic or constraint handler 7682 7683### Changed parameters 7684 7685- `lp/colagelimit` and `lp/rowagelimit` may now be set to -1 to disable deletion of columns/rows due to aging 7686 7687Build system 7688------------ 7689 7690### Makefile 7691 7692- the file names in the archive file are now preceeded with a directory `scip-<version>/` 7693- the compiler is now also represented in the LP solver library names (e.g. you have to rename the softlink 7694 `libcplex.linux.x86.a` to `libcplex.linux.x86.gnu.a`) 7695 7696Fixed bugs 7697---------- 7698 7699- removed bug in conflict analysis that appears if the conflict is only active at the current depth level 7700- missing SCIPlpiIsPrimalFeasible() and SCIPlpiIsDualFeasible() implemented in lpi_spx.cpp and lpi_spx121.cpp 7701- removed preprocessing of linear constraint pairs with modifiable constraints 7702 7703- Asserts: 7704 - removed wrong assert `assert(eventfilter->len == 0 || eventfilter->eventmask != 0x00000000)` from event.c 7705 - removed wrong assert in conflict analysis (appeared on analyzing diving LP conflicts with both bounds of a non-binary variable changed) 7706 7707@section RN076 SCIP 0.7.6 7708************************* 7709 7710Features 7711-------- 7712 7713- creation of reconvergence clauses in conflict analysis 7714- first node of each plunging is not treated as plunging node w.r.t. calling primal heuristics 7715- improved performance of logic or constraint handler due to better watched variables handling 7716 7717Interface changes 7718----------------- 7719 7720### Deleted and changed API methods 7721 7722- changed SCIPcatchVarEvent() and SCIPdropVarEvent() 7723- SCIPstage() is now called SCIPgetStage() 7724- SCIPprintStatus() is now called SCIPprintStage() 7725 7726### New API functions 7727 7728- SCIPgetActivityLinear() in linear constraint handler 7729- SCIPgetFeasibilityLinear() in linear constraint handler 7730- SCIPchgVarBranchDirection() 7731- SCIPvarGetBranchDirection() 7732- SCIPgetStatus() returns the solution status 7733- SCIPprintStatus() outputs the solution status (beware, that the old SCIPprintStatus() method is now called SCIPprintStage()) 7734 7735### Changed parameters 7736 7737- changed default frequency offset of pscostdiving `heuristics/pscostdiving/freqofs` to 2 and frequency offset of fracdiving 7738 `heuristics/feaspump/freqofs` to 0 in order to not call pscostdiving in root node, where nearly all pseudo costs are uninitialized. 7739 7740### New parameters 7741 7742- new parameter `separating/efficacynorm` to choose between Euclidean, maximum, sum and discrete norm in efficacy 7743 calculation 7744 7745### Data structures 7746 7747- new possible result code `SCIP_DELAYED` for primal heuristics 7748 7749Fixed bugs 7750---------- 7751 7752- removed bugs in CLP Solver interface 7753- SCIP returned `gap limit reached` even if the problem was solved to optimality, if the optimal solution was found at a 7754 node with lower bound equal to the global lower bound 7755- after conversion of the focus node into a junction (e.g. in case of numerical troubles while solving the node's LP), the child 7756 nodes got the wrong LP fork attached (the common LP fork of the old and new focus node instead of the old focus node's LP fork) 7757 7758- Variables: 7759 - bug reconvergence clauses in conflict analysis if bounds on non-binary variables were the reason for the fixing of the 7760 uip to create a reconvergence clause for 7761 - wrong sub calls in SCIPvarGet...CurrentRun() for aggregated variables 7762 - variables' conflict set counter was not reset when the problem was resolved again 7763 7764Known bugs 7765---------- 7766 7767- unbounded models lead to an error 7768- air04 and air05 return wrong optimal value (1 too large): possibly due to strong branching or setppc propagation? 7769 7770@section RN075 SCIP 0.7.5 7771************************* 7772 7773Miscellaneous 7774------------- 7775 7776- started change log 7777