-
Notifications
You must be signed in to change notification settings - Fork 64
/
CHANGELOG
9674 lines (8040 loc) · 596 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
@page RN10 Release notes for SCIP 10
@section RN1000 SCIP 10.0.0
***************************
Features
--------
- Added new fields in history to store ancestral pseudo cost updates, used in the pseudo costs branching rule to compute discounted pseudo costs.
- Copy variable data pointer if no copy routine was supplied.
- added more techniques to handle reflection symmetries, in particular, for orbitopes with column reflections and matrices whose rows and columns can be permuted by a symmetry
- implemented symmetry detection callbacks for cons_disjunction and cons_superindicator
- detailed information about applied symmetry handling techniques can be printed to the terminal
- added a new separator sepa_multilinear to generate flower cuts from AND constraints nonlinear product expressions.
- added functionality to deal with hypergraphs by means of efficient access to vertices, edges and intersections edges.
- added support for (transposed) network matrix detection in pub_network.h
- added a new presolver presol_implint which detects implied integers by detecting (transposed) network submatrices in the problem. For now, this plugin is disabled by default.
Performance improvements
------------------------
Examples and applications
-------------------------
- Coloring: new parameter branching/coloring/strategy to choose the least/most fractional variable for branching
Interface changes
-----------------
### New and changed callbacks
### Deleted and changed API methods
- SCIPcreateRow*(), SCIPaddVarToRow(), SCIPaddVarsToRow(), SCIPaddVarsToRowSameCoef() can now only be called in the solving stage,
because otherwise the LP is not yet available and the row data is invalid.
- intvar removed from arguments for SCIPcreateConsPseudobooleanWithConss(), SCIPcreateConsPseudoboolean(), and SCIPcreateConsBasicPseudoboolean() due to dysfunctionality of non-linear objective reformulation with pseudoboolean constraint
### New API functions
- SCIPhistoryUpdateAncPseudocost(), SCIPvarUpdateAncPseudocost() for updating the ancestral pseudo cost fields in variable history
- SCIPhistoryGetAncPseudocost(), SCIPhistoryGetAncPseudocostCount(), SCIPhistoryIsAncPseudocostEmpty(), SCIPgetVarAncPseudocostVal(),
SCIPvarGetAncPseudocost() for retrieving the values related to ancestral pseudo cost fields in variable history
- SCIPgetAvgDPseudocostScore(), SCIPgetVarDPseudocostScore() for computing the discounted pseudo cost scores using ancestral pseudo costs
- SCIPboundchgGetLPSolVal() for accessing the LP solution value in the branching data of the bound change
- SCIPclearSymgraph() and SCIPcopySymgraphAsSubgraph() to clear and copy as symmetry detection graph, respectively
- SCIPincludeSepaMultilinear() to include the new multilinear cut separator
- SCIPhypergraphCreate(), SCIPhypergraphClear(), SCIPhypergraphFree(), SCIPhypergraphAddVertex(), SCIPhypergraphAddEdge(), SCIPhypergraphIsValid() and SCIPhypergraphComputeVerticesEdges() for building and deleting hypergraphs, SCIPhypergraphComputeOverlaps(), SCIPhypergraphOverlapFind(), SCIPhypergraphIntersectEdges(), SCIPhypergraphComputeOverlapsEdges(), SCIPhypergraphComputeVerticesOverlaps(), SCIPhypergraphOverlapsDisjoint() to deal with pair-wise intersections of hyperedges, SCIPhypergraphIterInit(), SCIPhypergraphIterClear(), SCIPhypergraphIterStart(), SCIPhypergraphIterValid(), SCIPhypergraphIterNext(), SCIPhypergraphIterBase(), SCIPhypergraphIterAdjacent(), SCIPhypergraphIterMinVertex(), SCIPhypergraphIterOverlap() for iterating over adjacent edges, SCIPhypergraphHasVertexEdges() SCIPhypergraphHasOverlaps(), SCIPhypergraphHasOverlapsEdges(), SCIPhypergraphHasVertexOverlaps(), SCIPhypergraphGetNVertices(), SCIPhypergraphGetNEdges(), SCIPhypergraphBlkmem(), SCIPhypergraphGetNOverlaps(), SCIPhypergraphVertexData(), SCIPhypergraphEdgeData(), SCIPhypergraphEdgeSize(), SCIPhypergraphEdgeVertices(), SCIPhypergraphVertexEdgesFirst(), SCIPhypergraphVertexEdgesBeyond(), SCIPhypergraphVertexEdgesGetAtIndex(), SCIPhypergraphOverlapData(), SCIPhypergraphOverlapSize(), SCIPhypergraphOverlapVertices() SCIPhypergraphEdgesOverlapsFirst(), SCIPhypergraphEdgesOverlapsBeyond(), SCIPhypergraphEdgesOverlapsGetAtIndex(), SCIPhypergraphOverlapsEdgesFirst(), SCIPhypergraphOverlapsEdgesBeyond(), SCIPhypergraphOverlapsEdgesGetAtIndex(), SCIPhypergraphVertexOverlapsFirst(), SCIPhypergraphVertexOverlapsBeyond() and SCIPhypergraphVertexOverlapsGetAtIndex() to query information about vertices, edges and overlaps as well as their incidences.
- SCIPdebugClearSol() for clearing the debug solution
- Renamed XML functions to avoid name clash with libxml2 by adding "SCIP": SCIPxmlProcess(), SCIPxmlNewNode(), SCIPxmlNewAttr(), SCIPxmlAddAttr(), SCIPxmlAppendChild(), SCIPxmlFreeNode(), SCIPxmlShowNode(), SCIPxmlGetAttrval(), SCIPxmlFirstNode(), SCIPxmlNextNode(), SCIPxmlFindNode(), SCIPxmlFindNodeMaxdepth(), SCIPxmlNextSibl(), SCIPxmlPrevSibl(), SCIPxmlFirstChild(), SCIPxmlLastChild(), SCIPxmlGetName(), SCIPxmlGetLine(), SCIPxmlGetData(), SCIPxmlFindPcdata().
- SCIPincludePresolImplint() to include the new implied integer presolver
- SCIPnetmatdecCreate() and SCIPnetmatdecFree() for creating and deleting a network matrix decomposition. SCIPnetmatdecTryAddCol() and SCIPnetmatdecTryAddRow() are used to add columns and rows of the matrix to the decomposition. SCIPnetmatdecContainsRow() and SCIPnetmatdecContainsColumn() check if the decomposition contains the given row or columns. SCIPnetmatdecRemoveComponent() can remove connected components from the decomposition. SCIPnetmatdecCreateDiGraph() can be used to expose the underlying digraph. SCIPnetmatdecIsMinimal() and SCIPnetmatdecVerifyCycle() check if certain invariants of the decomposition are satisfied and are used in tests.
### Changes in preprocessor macros
- removed `#define` of `strcasecmp` and `strncasecmp` (in case of Windows builds) in scip/def.h;
use SCIPstr(n)casecmp() (scip/pub_misc.h) instead
### Command line interface
### Interfaces to external software
### Changed parameters
### New parameters
- branching/pscost/discountfactor, branching/relpscost/discountfactor as the discount factor for ancestral pseudo costs in pscost and relpscost branching rules
- branching/discountedpscost to enable/disable recording ancestral pseudo costs
- new parameter "propagating/symmetry/handlesignedorbitopes" to control whether special symmetry handling techniques for orbitopes whose columns can be (partially) reflected shall be applied
- new parameter "propagating/symmetry/usesimplesgncomp" to control whether symmetry components all of whose variables are simultaneously reflected by a symmetry shall be handled by a special inequality
- new parameter "propagating/symmetry/dispsyminfo" to control whether information about which symmetry handling methods are applied are printed
- new parameter "presolving/implint/columnrowratio" indicates the ratio of rows/columns where the row-wise network matrix detection algorithm is used instead of the column-wise network matrix detection algorithm
- new parameter "presolving/implint/numericslimit" determines the limit for absolute integral coefficients beyond which the corresponding rows and variables are excluded from implied integer detection
### Data structures
Deleted files
-------------
Testing
-------
Build system
------------
- changed the default for TPI to tny
### Makefile
### Cmake
Fixed bugs
----------
Miscellaneous
-------------
Known bugs
----------
@page RN9 Release notes for SCIP 9
@section RN930 SCIP 9.3.0
*************************
Features
--------
Performance improvements
------------------------
Examples and applications
-------------------------
Interface changes
-----------------
### New and changed callbacks
### New API functions
### Command line interface
### Interfaces to external software
### Changed parameters
### New parameters
### Data structures
Unit tests
----------
Testing
-------
Build system
------------
### Cmake
### Makefile
Fixed bugs
----------
Miscellaneous
-------------
Known bugs
----------
@section RN920 SCIP 9.2.0
*************************
Features
--------
- added check for absolute and relative gap limits at end of synchronization in concurrent solving mode, in order to terminate earlier;
note that if the concurrent solve is stopped due to a gap limit, the "winner" solver will have an interrupted solution status and
its primal and dual bounds may not be the best possible ones (use SCIPgetConcurrentPrimalbound() and SCIPgetConcurrentDualbound() instead)
- parse pseudoboolean constraint from CIP format (and add linear-"and"-reformulation)
Performance improvements
------------------------
- reoptimization now also stores propagations from propagators if reoptimization/saveconsprop is enabled;
the parameter will be renamed to reoptimization/saveprop in a next major release
- imposed stricter limits on the size of disconnected components which may be solved separately during presolve
- use individual slack variables also for constraints indicated by a common binary variable to use tighter formulation by default
- when computing symmetries using Nauty, iteration limits are now available to terminate Nauty early
Fixed bugs
----------
- Benders' decomposition subproblems that are always infeasible are correctly handled and the complete problem is declared infeasible
- skip linear constraint propagation if the residual activity bound cancels the side precision
- correct bound tracking to make the evaluation of primal-dual-integrals work
- skip aggregations on fixed variables in milp presolver to avoid errors for earlier versions of PaPILO
- use indices of negation counterparts and accept fixings when ordering and-resultants of pseudoboolean constraints
- update locks on model variables before removing pseudoboolean constraints in presolve
- reformulate soft pseudoboolean constraints with linear constraints if the indicator decomposition is disabled
- add workaround for recent HiGHS versions resetting the model status when changing the presolve option after a solve
- avoid hashmap key error in removal of doubletons and singletons in dual presolve of setppc constraints by updating constraints and corresponding hashmaps after each multi-aggregation
Interface changes
-----------------
### New API functions
- added SCIPtpiIsAvailable() to check whether a working task processing interface is available (TPI != none)
- added SCIPtpiGetLibraryName() and SCIPtpiGetLibraryDesc()
- SCIPdelCons() can now also be called in SCIP_STAGE_TRANSFORMED
- added SCIPstrcasecmp() and SCIPstrncasecmp() for case-insensitive string comparison
- added SCIPbendersSubproblemsAreInfeasible() to return if at least one subproblem has been identified as being
infeasible prior to performing any variable fixing
### New parameters
- presolving/milp/abortfacexhaustive to control the abort threshold for exhaustive presolving in PAPILO
- presolving/milp/abortfacmedium to control the abort threshold for medium presolving in PAPILO
- presolving/milp/abortfacfast to control the abort threshold for fast presolving in PAPILO
- constraints/components/maxcompweight to determine the maximum weight for a disconnected component that is solved during presolve
- constraints/components/contfactor counts the contributing factor of a single continuous variables with respect to the weight limit specified by constraints/components/maxcompweight
- constraints/indicator/usesameslackvar to decide whether the same slack variable should be used for indicators constraints with common binary variable
- propagating/symmetry/nautymaxncells and propagating/symmetry/nautymaxnnodes to set iteration limits in Nauty (only available if build with SYM=nauty or SYM=snauty)
### Changed parameters
- presolving/milp/threads is now only available if PaPILO is built with TBB
- changed default of numerics/recomputefac to 1e+6 to aim at relative epsilon precision
Build system
------------
### Cmake
- attempted to fix detection of CPLEX library on macOS and Windows systems
Testing
-------
- added parameter FILTER for tests/Makefile to run only tests with a specific pattern (ctest with -R FILTER)
Miscellaneous
-------------
- adjusted Gurobi interface for Gurobi 12
- reordered events: BESTSOLFOUND/NODE_FEASIBLE are now processed before the nodes are cut off and before NODE_DELETE events are processed
- removed `#define` of `getcwd` (in case of Windows builds) in scip/def.h
- the `#define` of `strcasecmp` and `strncasecmp` (in case of Windows builds) in scip/def.h will be removed with SCIP 10;
use `SCIPstr(n)casecmp()` (scip/pub_misc.h) instead
@section RN911 SCIP 9.1.1
*************************
Fixed bugs
----------
- fix bug in separator aggregation that caused incorrect terminations when for an integral objective the objective limit was set to a fractional value
- fix bug in memory management of doublelex matrices where indices were set beyond array bounds
- store relevance flags in consdataTightenCoefs() of cons_linear.c to avoid dropping variables unintentionally due to numerical changes
- fix possible segmentation fault when resetting local and global bounds of original variables after abnormal termination
- compare coefficient scales to detect parallelism to avoid integral relaxations in detectRedundantConstraints() of cons_linear.c
- remove coefficient information from linear constraint hashes in order to compare keys with tolerances
- fixed NULL pointer dereference in SCIPtpiGetNumThreads() of TinyCThread interface if called before SCIPtpiInit(); now returns 0 in this case
- calling SCIPsolveConcurrent() when SCIP was compiled without a TPI now results in a plugin-not-found error
- fixed LPI status functions of lpi_cpx if the barrier is called
- check cuts for redundancy after scaling in cutTightenCoefs() and cutTightenCoefsQuad() of cuts.c
- maintain definition of artificial integral variables in xor constraints to avoid invalidation of conflict constraints
- free childless nodes only after the deactivation of the old focus path in treeSwitchPath() of tree.c
- only normalize rows for column norm evaluations in shift-and-propagate heuristic to avoid unscaled violations
- expression handler for absolute value computes now also a cut when one of the bounds is infinite as long as the sign of the argument is known
- check for more data to be freed before modifying nonlinear constraints in SCIPaddExprNonlinear()
- allow for terms with zero coefficients when checking sum in SCIPexprCheckQuadratic()
- do not abort writing of constraints to lp/pip files (and forget to free buffer memory) when encountering unsupported nonlinear constraint
- fixed that strings with names and descriptions of the LPI's were not null-terminated
- fixed decision on when to enforce nonlinear constraints on relaxation solutions if integer variables are present
- fixed reading of very long lines (>78000 characters) in FlatZinc reader
- fixed write of strings with at least 1024 characters when compiling with MSVS 2015 (14.0) or later (still an issue with earlier MSVS, which will not be fixed)
- keep epsilon coefficients in applyFixings() of cons_linear.c until multiples are merged to avoid loss of relevant contributions
- fixed that some variable type changes were not accounted correctly in presolve of linear constraints
- fix constraint sorting in setpp-orbitope upgrade in symmetry code
- fixed that SCIPnodeGetConsProps() also counted bound changes from propagators
- use original and-constraints of an untransformed pseudoboolean constraint when copying original problems to avert segmentation faults
- sort and-constraints of a pseudoboolean constraint with respect to the resultant problem indices to avoid shuffled copies
- treat pseudoboolean constraints as nonlinear constraints in OPB reader to prevent duplication mistakes
Examples and applications
-------------------------
- in example Binpacking implement Farkas pricing for packings because branching can actually lead to infeasible restricted master LPs
Testing
-------
- allow unknown parameters to let tests pass if only optional dependencies are missing
Build system
------------
### Cmake
- fixed compilation and linking with HiGHS; to use HiGHS, cmake now requires to specify the directory containing the `highs-config.cmake` file via `-DHIGHS_DIR`
- extended identification of Ipopt library on Windows to also look for ipopt.dll.lib, as this is used since Ipopt 3.13.0 (2019)
@section RN910 SCIP 9.1.0
*************************
Features
--------
- added constraint handler that checks and enforces bounds on original variables which have been fixed or aggregated in the transformed problem
- allow for implicit integer variables in xor constraints
- implemented symmetry detection callbacks for pseudoboolean constraints
- added option to consider enforcement of nonlinear constraints (including spatial branching) before integrality has been enforced
Fixed bugs
----------
- make sure that, in dual proof analysis, upgraded constraints can report their number of variables
- check knapsack constraints as linear constraints to avoid violations based on implicit integrality
- make sure that symmetry detection callbacks report success
- make arithmetics in cuts.c more robust to avoid invalid scg cuts due to numerical rounding sensitivity
- allow to copy pseudoboolean constraints even if no AND constraints are present in order to avoid a warning
- set value for variable that is introduced to reformulate nonlinear objective function when reading .nl files with initial solution
- fixed that multi-aggregations from PaPILO were accepted without ensuring that their bounds hold
Examples and applications
-------------------------
- TSP: removed `gzstream.h/hpp` and parse gzipped files differently
Interface changes
-----------------
### New callbacks
- SCIP_DECL_NLHDLRENFO takes additional parameter branchcandonly to indicate whether only branching candidates should be registered,
without looking for cuts or boundchanges
### New API functions
- new function SCIPgetExprActivityNonlinear() to get activity of nonlinear constraint
- new function SCIPincludeConshdlrFixedvar() to include new constraint handler that checks bounds on fixed original variables
### New parameters
- limits/primal to terminate the solve as soon as the primal bound is at least as good as this value, same as limits/objectivestop (deprecated)
- limits/dual to terminate the solve as soon as the dual bound is at least as good as this value
- presolving/milp/internalmaxrounds to control the maximal rounds for each call of the milp presolver (PaPILO)
- constraints/fixedvar/* to control the new constraint handler that checks bounds on fixed original variables
- constraints/nonlinear/branching/mixfractional to specify minimal average pseudo cost count for discrete variables
at which to start considering spatial branching before branching on fractional integer variables
(default infinity means that integrality is always enforced before nonlinear constraints)
- constraints/nonlinear/branching/fracweight to specify weight of fractionality of integer variables in spatial branching
### New data structures
- enum SCIP_Status has been extended by SCIP_STATUS_PRIMALLIMIT and SCIP_STATUS_DUALLIMIT to indicate termination at limits/primal and limits/dual respectively
Build system
------------
- changed the default symmetry computation package from sassy+bliss to sassy+nauty
- bliss source is no longer included in the source tree, but can be linked as external library (https://github.com/ds4dm/Bliss)
- cmake now automatically downloads and installs the latest release version of SoPlex from GitHub if it is not found directly
Miscellaneous
-------------
- updated nauty to version 2.8.8
@section RN901 SCIP 9.0.1
*************************
Fixed bugs
----------
- fixed bug in detection of double lex matrices due to wrong memory allocation
- fixed bug where parameter `limits/objectivestop` was copied to subscips in plugins which have different objectives
- in count mode respect empty solution when problem is solved in presolving
- fixed that SCIP may have tried to pass a negative random seed to an LP solver
- fixed bug where conflict analysis in strong branching tried to analyze an unsuccessful LP solve
- enable parameter limits/restarts by allowing to reach the restart limit in restartAllowed()
- handle normalizing linear constraints in presolving with more caution to avoid numerical difficulties for integer variables with large coefficients
- use quad precision to calculate residual activity bounds to reduce numerical errors for large variable bounds in cons_linear.c
- in SCIPsolveProbingLP() when objective has been changed do not return cutoff due to exceeding the cutoff bound
- set probing LP to be a relaxation only when objective has not been changed
- declare contradicting infinities in getMinActivity() and getMaxActivity() as non-tight
- reject farkas solution with large values to bound magnification of errors in SCIPgetFarkasProof()
- if all variables are fixed, apply relative feasibility tolerance to avoid invalid infeasibility in applyFixings() of cons_linear.c
- delete empty redundant knapsack and linear constraints after cleanup in SCIPmatrixCreate()
- cleanup first constraints in SCIPcleanupConssVarbound(), SCIPcleanupConssSetppc(), and SCIPcleanupConssLogicor()
- symmetry handling methods have not been added immediately after computing symmetries, which has been fixed
- delay checking node limits after presolving to correctly continue up to the exceeding main node
- simplified the objective sense assumption for the subproblems in the Lagromory separator
- update effective root depth iteratively to avoid trapping it at a single child node
- fixed that dualsparsify presolver did not always check do-not-multiaggregate variable flag
- fixed bug in computing elements of orbits in orbital reduction
Miscellaneous
-------------
- redefine isrelax to istight in cons_linear.c
Build system
------------
### Cmake
- A file cmake.log containing the changed options is written to the cmake build directory.
- removed replacement of the settings of RelWithDebInfo
- add compile option -ffp-contract=off or /fp:precise to enhance reproducibility across different systems
### Makefile
- add flags -ffp-contract=off and /fp:precise to enhance reproducibility across different systems
Interface changes
-----------------
### New parameters
- added parameter "propagating/symmetry/symtiming" to determine when symmetries are computed and handled
### Changed parameters
- Disabled "propagating/symmetry/addconsstiming" since it is not used anymore.
- Disabled "propagating/symmetry/ofsymcomptiming" since it is not used anymore.
@section RN900 SCIP 9.0.0
*************************
Features
--------
- added simplification of abs(x)^n to x^n when n is even (simplify rule POW12)
- in expression simplification, added possibility to expand power of sum with exponents larger than 2 (simplify rule POW7)
- in expression simplification, added possibility to expand products with sums as factor when there are more than two factors (simplify rule SP12b)
- in expression simplification, added possibility to allow expanding power of products with fractional exponent (simplify rule POW5a)
- can now build with Lapack (used for solving nonlinear problems) explicitly; if IPOPT is used, then Lapack is accessed through it;
an interface to Lapack is available in lapack_calls.h
- added support for logical constraints in binary variables and basic logical operators (and, or, not, equal) to AMPL .nl reader
- indicator constraints now use the same slack variable for the linear constraints if binary variables are used multiple times
for indicator constraints
- new diving heuristic indicatordiving that focuses on indicator variables which control semicontinuous variables
- updated statistics on NLP relaxation; information on convexity of NLP has been added
- added new bandit method (EXP.3-IX) that is the new default of the ALNS heuristic
- added dialog to display recognized permutation symmetries ("display symmetry")
- The symmetry detection code has been completely restructured. Instead of completely encoding symmetry information in
prop_symmetry.c, there is a new callback for constraint handlers, which returns symmetry relevant information by
encoding a constraint as a node and edge colored graph. This way, also custom constraint handlers can provide
symmetry information.
- added special presolving step for logicor and set covering/packing for constraints with two variables and one independent variable
- increased the depth field of the tree structure from 16 to 30 bits and the max depth of the search tree from 65534 to 1073741822
- added new cut selector plugin called cutsel_ensemble. Performs a superset of hybrid cutsel. Implements new filtering methods and scoring options.
- added new branching rule based on Gomory mixed-integer cuts
- added new branching score to the reliability pseudo-cost branching rule
- added new cut selector plugin called cutsel_dynamic. Performs a superset of hybrid cutsel. Implements new filtering methods and scoring options.
- added monoidal strengthening to intersection cut generation of nlhdlr_quadratic
- extended heuristic dps to run after processing the node and to use strict limits for the reoptimization step
- extended obbt propagator to handle variables of the linear constraints corresponding to indicator constraints
- added new heuristic heur_scheduler that models the selection of LNS and diving heuristics as a multi-armed bandit problem
- added nonlinear handler for signomial expressions: adds cuts based on a difference of convex functions representation
- Delayed separators are now called if no other cuts have been found. Previously, such separators were only called near stalling or when the separation rounds limit was reached.
- added a new separator sepa_lagromory to generate Lagromory cuts in a relax-and-cut framework, i.e., GMI cuts generated
at different bases that are explored in the process of solving the Lagrangian dual problem at a node. This separator
is OFF by default.
- when parsing nonlinear constraints from CIP files, the * after the number in a term is now optional if followed by a variable,
i.e., instead of 3*<x>*<y>, now also 3<x>*<y> can be read, but 3<x><y> is not supported;
this allows to read some CIP files that were written with SCIP < 8
- when running bliss, we now limit the number of actually created generators and not the ones considered by bliss
Performance improvements
------------------------
- Variable conflict-based addition of Schreier-Sims cuts for symmetry handling in prop_symmetry.c does no longer use
an expensive explicit conflict graph construction.
- Only run propagation of indicator constraints if relevant variables have changed.
- Propagation of indicator constraints propagates maximal activity of linear constraint to upper bound of slack variable.
- Added initialization of LP relaxation for SOC constraints.
- Avoided some numerical issues when separating SOC constraints.
- If differentation of convex expression fails in convex nlhdlr, then a perturbed point is tried.
- Use sassy/bliss as default symmetry computation package.
- No longer linearize indicator constraints in undercover heuristic by default.
- Deactivate pre-root heuristic zeroobj in undercover heuristic.
- Added new branching score tiebreaker for reliability pseudo-cost branching rule
- Try nearest bound if zero solution value is out of bounds in heuristic trivial.
Interface changes
-----------------
### New and changed callbacks
- Added solution linearization callback for nonlinear handlers.
The nonlinear handler may use this callback to add tight cuts that use the given solution as reference point to the cutpool.
The callback is called if option constraints/nonlinear/linearizeheursol is enabled.
- The callback for copying problem data SCIP_DECL_PROBCOPY() now has a parameter "original" indicating whether the original
or transformed problem should be copied. Similarly, SCIPprobCopy() in prob.h/c has such a parameter.
- Added CONSGETPERMSYMGRAPH and CONSGETSIGNEDPERMSYMGRAPH callback for constraint handlers, which provides symmetry information about constraints to SCIP.
### Deleted and changed API methods
- SCIPtpiInitLock(), SCIPtpiDestroyLock(), SCIPtpiInitCondition(), SCIPtpiDestroyCondition() now take a double
pointer to SCIP_LOCK/SCIP_CONDITION, respectively.
- Renamed SCIPtpiSumbitJob() to SCIPtpiSubmitJob().
- SCIPcreateConsIndicatorLinCons(), SCIPcreateConsIndicatorGenericLinCons() do not allow binvar to be NULL anymore
- Replaced SCIPnlrowSetCurvature() by SCIPsetNlRowCurvature().
- SCIPsnprintf() now returns the required string length in case reallocation is necessary.
- SCIPcomputeCoverUndercover() receives three more arguments which nonlinearities to cover
- removed definition of SQRT
- SCIPincludeObjConshdlr(), SCIPincludeConshdlr(), SCIPconshdlrCreate() receive two more arguments for the
conshdlr callbacks CONSGETPERMSYMGRAPH and CONSGETSIGNEDPERMSYMGRAPH
- removed SYM_VARTYPE, SYM_OPTYPE, SYM_CONSTTYPE, SYM_RHSTYPE, SYM_MATRIXDATA
- new parameter issigned for SCIPcomputeOrbitsSym()
- new parameter symtype for SCIPcomputeComponentsSym()
- new parameter symtype and permvardomaincenter for SCIPlexicographicReductionAddPermutation()
- replaced parameters matrixdata and exprdata of SYMcomputeSymmetryGenerators() by graph
### New API functions
- new functions for interfacing with Lapack: SCIPlapackIsAvailable(), SCIPlapackIsAvailable(), SCIPlapackComputeEigenvalues(), and SCIPlapackSolveLinearEquations
These functions should be used instead of SCIPisIpoptAvailableIpopt(), SCIPcallLapackDsyevIpopt(), and
SCIPsolveLinearEquationsIpopt() in the context of computing eigenvalues or solving linear equations.
If IPOPT is available, the calls will be passed on to Ipopt's interface to Lapack.
- SCIPmultiplyBySumExprSum(), SCIPpowerExprSum()
- SCIPsetParam()
- SCIPgetPrimalDualIntegral() returns the primal dual integral stored in the statistics
- new functions SCIPcreateConsIndicatorLinConsPure() and SCIPcreateConsIndicatorGenericLinConsPure() that
create indicator constraints from a linear constraint without a slack variable
- SCIPgetNLPNlRowsStat() to retrieve counts on linear, convex, and nonconvex rows in NLP
- SCIPnlhdlrSetSollinearize(), SCIPnlhdlrHasSollinearize()
- SCIPbendersGetNLPParam()
- new API functions SCIPlexicographicReductionGetStatistics(), SCIPlexicographicReductionPrintStatistics(),
SCIPlexicographicReductionPropagate(), SCIPlexicographicReductionAddPermutation(), SCIPlexicographicReductionReset(),
SCIPlexicographicReductionFree(), SCIPincludeLexicographicReduction(), for lexicographic reduction.
- new API functions SCIPorbitopalReductionGetStatistics(), SCIPorbitopalReductionPrintStatistics(),
SCIPorbitopalReductionPropagate(), SCIPorbitopalReductionAddOrbitope(), SCIPorbitopalReductionReset(),
SCIPorbitopalReductionFree(), SCIPincludeOrbitopalReduction(), SCIPorbitopalReductionGetDefaultColumnOrdering(),
for orbitopal fixing.
- new API functions SCIPorbitalReductionGetStatistics(), SCIPorbitalReductionPrintStatistics(),
SCIPorbitalReductionPropagate(), SCIPorbitalReductionAddComponent(), SCIPorbitalReductionReset(),
SCIPorbitalReductionFree(), SCIPincludeOrbitalReduction(), for orbital fixing.
- new API functions SCIPgetShadowTreeEventHandlerExecutionTime(), SCIPshadowTreeGetShadowNodeFromNodeNumber(),
SCIPshadowTreeGetShadowNode(), SCIPgetShadowTree(), SCIPactivateShadowTree(), SCIPincludeEventHdlrShadowTree(),
for managing a copy of the branch-and-bound tree for symmetry handling purposes.
- SCIPdotWriteOpening(), SCIPdotWriteNode(), SCIPdotWriteArc(), SCIPdotWriteClosing()
- SCIPincludeCutselEnsemble(), SCIPselectCutsEnsemble() to include cutsel_ensemble or use the selection algorithm
- SCIPincludeBranchruleGomory() includes new gomory cut based branching rule
- SCIPgetVarAvgGMIScore(), SCIPincVarGMISumScore(), SCIPgetVarLastGMIScore(), SCIPsetVarLastGMIScore() set historical values used by SCIP's default branching rule
- SCIPincludeNlhdlrSignomial() includes the signomial nonlinear handler
- SCIPgetExprMonomialData() returns a monomial representation of a product expression
- SCIPestimateRoot() computes estimators for roots with exponent in [0,1]
- SCIPincludeCutselDynamic(), SCIPselectCutsDynamic() to include cutsel_dynamic or use the selection algorithm
- SCIPincludeSepaLagromory() to include the new Lagromory separator
- SCIPconsCompCheck() to compare two constraints based on their check priority
- SCIPgetConsPermsymGraph() and SCIPgetConsSignedPermsymGraph() to access the (signed) permutation symmetry detection graph of a constraint
- SCIPsetConshdlrGetPermsymGraph() and SCIPsetConshdlrGetSignedPermsymGraph() to set the (signed) permutation symmetry detection graph of a constraint
- SCIPconshdlrSupportsPermsymDetection() and SCIPconshdlrSupportsSignedPermsymDetection() to access whether a conshdlr supports detection of (signed) permutation symmetries
- new API functions for creating and manipulating a symmetry detection graph: SCIPcreateSymgraph(), SCIPfreeSymgraph(), SCIPcopySymgraph(), SCIPextendPermsymDetectionGraphLinear(),
SCIPaddSymgraphVarAggregation(), SCIPaddSymgraphOpnode(), SCIPaddSymgraphValnode(), SCIPaddSymgraphConsnode(), SCIPgetSymgraphVarnodeidx(), SCIPgetSymgraphNegatedVarnodeidx(),
SCIPupdateSymgraphLhs(), SCIPupdateSymgraphRhs(), SCIPfixSymgraphVarnode(), SCIPaddSymgraphEdge(), SCIPcomputeSymgraphColors(), SCIPgetSymgraphSymtype(), SCIPgetSymgraphVars(),
SCIPgetSymgraphNVars(), SCIPgetSymgraphNConsnodes(), SCIPgetSymgraphNNodes(), SCIPgetSymgraphNEdges(), SCIPgetSymgraphEdgeFirst(), SCIPgetSymgraphEdgeSecond(),
SCIPgetSymgraphVarnodeColor(), SCIPgetSymgraphNodeType(), SCIPgetSymgraphNodeColor(), SCIPisSymgraphEdgeColored(), SCIPgetSymgraphEdgeColor(), SCIPgetSymgraphNVarcolors(),
SCIPhasGraphUniqueEdgetype(), SCIPallocateSymgraphConsnodeperm(), SCIPcreateSymgraphConsnodeperm(), SCIPgetSymgraphConsnodeperm(), SCIPfreeSymgraphConsnodeperm(),
SCIPgetSymActiveVariables(), SCIPfreeSymDataExpr(), SCIPgetSymExprdataNConstants(), SCIPgetSymExprdataConstants(), SCIPgetCoefSymData(),
SCIPcreateSymOpNodeType(), SCIPgetSymOpNodeType()
- SCIPexprhdlrSetGetSymdata(), SCIPexprhdlrHasGetSymData(), SCIPgetSymDataExpr(), SCIPcallExprGetSymData() to access symmetry data of expressions
- SYMcheckGraphsAreIdentical() to check whether two symmetry detection graphs are identical
- new functions SYMbuildSassyGraph(), SYMbuildSassyGraphCheck()
- new type SYM_GRAPH
- new definitions SCIP_DECL_CONSGETPERMSYMGRAPH, SCIP_DECL_EXPRGETSYMDATA
- new member SYM_NODETYPE_CONS in SYM_NODETYPE enum
- new members SYM_CONSOPTYPE_SUM, SYM_CONSOPTYPE_SLACK, SYM_CONSOPTYPE_COEF, SYM_CONSOPTYPE_RHS, SYM_CONSOPTYPE_LAST in SYM_CONSOPTYPE enum
- new defintion SCIP_DECL_EXPRGETSYMDATA
- new function SCIPdetectSingleOrDoubleLexMatrices()
### Command line interface
- Added optional parameter -i when calling SCIP in AMPL-mode (-AMPL parameter).
If -i is specified, a SCIP shell is started where normally SCIPsolve() would be called.
### Interfaces to external software
- added interface to nauty/traces for symmetry computation
- added interface to sassy, a preprocessor for symmetry computation
- The directory src/sassy contains the source code of sassy.
- Added interface to Lapack (used for solving nonlinear problems).
- The AMPL interface now supports parameters specified in AMPL command scripts via option scip_options.
The value of scip_options is expected to be a sequence of parameter names and values, separated by a space, e.g.,
`option scip_options 'limits/time 10 display/verblevel 1';`.
String values should not be quoted and spaces in string values are not supported.
- sassy can be used now as preprocessor for nauty/traces
- The solution status codes written to AMPL solution files now match those from https://mp.ampl.com/details.html#_CPPv4N2mp3sol6StatusE.
### Changed parameters
- change default value of parameter separating/filtercutpoolrel to FALSE
- Shrunk range of parameter "propagating/symmetry/sstleaderrule" from [0,3] to [0,2], removed "MAXCONFLICTS"-option.
- Removed reading/gmsreader/freeints. A default upper bound of +inf is now assumed for integer variables in GAMS (which is the case since GAMS 23.1).
- Disabled "propagating/symmetry/symfixnonbinaryvars" since it is not used in the new symmetry code.
- Replaced "propagating/symmetry/onlybinarysymmetry" with "propagating/symmetry/enforcecomputesymmetry" and set to FALSE by default.
- Disabled "propagating/symmetry/performpresolving" since running orbital reduction during presolving is not effective.
- Repurposed "propagating/symmetry/usedynamicprop" since it now also applies to lexicographic reduction.
- Changed default value of parameter "propagating/symmetry/addsymresacks" from FALSE to TRUE.
### New parameters
- separating/maxcutsgenfactor and separating/maxcutsrootgenfactor as factors (w.r.t. separating/maxcuts and
separating/maxcutsroot) for limits on the number of cuts generated (which used to be constants '2')
- expr/pow/expandmaxexponent to specify limit on exponent when to expand power of sum
- expr/pow/distribfracexponent to enable expanding power of products with fractional exponents
- expr/product/expandalways to enable expanding any product with sums as factor (that is, also when more than two factors)
- nlhdlr/convex/maxperturb to specify maximal perturbation of non-differential reference points
- benders/default/nlpiterlimit to adjust iteration limit for NLP solver for Benders' decomposition NLP subproblems
- limits/objectivestop to interrupt the solve as soon as a primal solution is found
that is at least as good as the given value
- heuristics/undercover/{coverand,coverind,covernl} to control which nonlinearities to consider (by default only "and" and nonlinear constraints)
- cutselection/ensemble/* all parameters for new ensemble cut selector
- cutselection/dynamic/* all parameters for new dynamic cut selector
- branching/relpscost/gmiavgeffweight specifies the weight in the relpscost branching score of the normalized efficacy of all generated GMI cuts (for a variable)
branching/relpscost/gmilasteffweight specifies the weight in the elpscost branching score of the normalized efficacy of the last generated GMI cut (for a variable)
- nlhdlr/quadratic/usemonoidal to enable monoidal strengthening when separating quadratics with intersection cuts
- nlhdlr/quadratic/trackmore to collect more statistics for monoidal strengthening when separating quadratics with intersection cuts
- nlhdlr/quadratic/useminrep to use the minimal representation to compute cut coefficients when separating quadratics with intersection cuts
- nlhdlr/quadratic/sparsifycuts to enable sparsification of intersection cuts for quadratics
- heuristics/dps/reoptlimits to set strict limits for the reoptimization step in dps
- heuristics/dps/timing to run dps after processing the node
- heuristics/scheduler/* all parameters for new scheduler heuristic
- nlhdlr/signomial/enabled, nlhdlr/signomial/maxnundervars, nlhdlr/signomial/mincutscale: parameters for the signomial nonlinear handler
- separating/lagromory/freq to denote the frequency for calling Lagromory separator
- separating/lagromory/away to denote the minimal integrality violation of a basis variable to try separation
- separating/lagromory/dynamiccuts to denote whether the generated cuts be removed from LP if they are no longer tight
- separating/lagromory/maxroundsroot to denote the maximal number of separation rounds in the root node
- separating/lagromory/maxrounds to denote the maximal number of separation rounds in a non-root node
- separating/lagromory/nmaxcutsperlproot to denote, in the root node, the maximal number of Lagromory cuts that can be
separated per explored basis of the Lagrangian dual
- separating/lagromory/nmaxcutsperlp to denote, in a non-root node, the maximal number of Lagromory cuts that can be
separated per explored basis of the Lagrangian dual
- separating/lagromory/perroundnmaxlpiters to denote the maximal number of separating LP iterations that are allowed per
separation round
- separating/lagromory/dualdegeneracyratethreshold to denote the minimum dual degeneracy rate for the separator execution
- separating/lagromory/varconsratiothreshold to denote the minimum variable-constraint ratio on the optimal face for the
separator execution
- many other advanced parameters for the Lagromory separator, which are also mentioned under separating/lagromory/*
### Data structures
- new data structure SYM_GRAPH to encode symmetry information from a constraint
- new data structure SYM_EXPRDATA to encode symmetry information from expressions
- replaced enum SYM_SYMTYPE by a complete new one; removed SYM_RHSSENSE, added SYM_NODETYPE and SYM_CONSOPTYPE
Deleted files
-------------
- deleted the now unused files: tpi_none.h, tpi_openmp.h, tpi_tnycthrd.h, type_tpi_none.h, type_tpi_openmp.h, type_tpi_tnycthrd.h
Unit tests
----------
- new unittests for nlhdlr_quadratic that test monoidal strengthening and the use of the minimal representation to compute cut coefficients
- unittests for nlhdlr_signomial
Testing
-------
- changed `set lim obj` to `set lim objective` in ctest since `obj` is no longer unambiguous
Build system
------------
### Cmake
- New flag -DLAPACK=on for linking with Lapack (must be available in the system)
- added flag option "SYM=sbliss" for using sassy/bliss as a graph automorphism package
- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP.
- added flag option "SYM=snauty" for using sassy/nauty as a graph automorphism package
### Makefile
- added flag option "nauty" for SYM variable to specify which graph automorphism package should be used
- added flag option "sbliss" (sassy/bliss) for SYM variable to specify which graph automorphism package should be used
- added flag option "snauty" (sassy/nauty) for SYM variable to specify which graph automorphism package should be used
- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP
- New flag LAPACK for linking with Lapack (must be available in the system)
- A file scip/config.h is created in the build directory ($(OBJDIR)/include) now.
Defining NO_CONFIG_HEADER is no longer necessary and has no effect anymore.
Fixed bugs
----------
- Number of runs in which separation is enabled will now be correct as per "separating/maxruns" parameter. Earlier,
separation was enabled for "maxruns + 1" number of runs, i.e., separation was enabled even when "maxruns = 0" was set.
- add safeguard for number of selected cuts
- use double double precision for delta in activity updates of cons_linear.c
- sort constraints in checkSolOrig() to keep the logic of constraint handlers intact
- fixed make install when SHARED=no and make uninstall
- check absolute coefficients relative to extremal average to avoid invalid unifications in normalizeCons()
- enforce and check symmetry-based constraints to take their locks (in dual reductions) into account
- flush changes at the end of SCIPlpiSetBase() in lpi_grb.c to apply the newly set basis correctly
Miscellaneous
-------------
- The TPI has been changed to become mostly independent from the actual parallel interface during compile time.
For this, the locks and conditions are now pointers to abstract structs.
- fixed that scip/def.h, the header for C preprocessor definition (`#define`'s), included headers for some SCIP type and function definitions
(scip/type_retcode.h, scip/type_message.h, scip/pub_message.h)
@page RN8 Release notes for SCIP 8
@section RN810 SCIP 8.1.0
*************************
Fixed bugs
----------
- fixed that scaling of rows in Gurobi interface (SCIPlpiScaleRow()) changed infinite sides to large finite ones (1e20) when scale factor is negative
- check whether objective limit is truly reached in SCIPlpiIsStable()
- if an objective limit is set and Mosek claims that it is exceeded, check that this is indeed the case in SCIPlpiIsStable()
- the .mps file reader was extended to additionally accept .mps files with the objective sense section on one line
- ensure that delayed cutpool separation does not happen if enough cuts have been found already
- fixed that a Gurobi or Mosek interface (LPI) could not be freed from a thread different than the one it was created in, which lead to problems when, e.g., using the concurrent optimizer
- in cons_varbound if both variables are fixed, instead of propagating the constraint check the feasibility of the constraint since propagating can lead to unnecessary numerical troubles
- fixed memory leak in branching rule "distribution"
- fixed that undercover did not enforce that sufficiently many variables in an and-constraints were fixed to have it linearized in the generated sub-scip
- fixed two bugs in cons_varbound: avoid adding variable bounds if vbdcoef is infinite and unlock/lock variables if lhs/rhs/vbdcoef are changed
- globalize constraint changes before bound changes during the effective root shift in treeSwitchPath() to correctly update variable locks by avoiding global bounds with outstanding bound change events when deleting constraints
- fixed error when attempting to copy SCIP with activated pricers
- remove integrality check for implicit integral variables in cons_integral.c, updated the definition for variable type implicit integer to be more explicit that these variables can take fractional values, and updated FAQ entry
- updated and, or, and pseudoboolean constraint handlers to better handle fractional implicit integer variables in enforcement
- avoid invalid strong Chvatal-Gomory cuts by ceiling with tolerance in the calculation of parameter k and flooring slack coefficients with standard epsilon tolerance as well as quad precision
- add missing row links to columns in SCIPflushRowExtensions() required to maintain correct row norms
- restrict separator intobj to solutions for which there can be no better feasible integral objective values to avoid cutting them off
- delay removal of clique lists from SCIPvarRemoveCliquesImplicsVbs() into cliqueCleanup() to avoid segmentation faults by incomplete cleanups after variable conversions
- reject sub-solutions with invalid objectives in SCIPtranslateSubSols() due to contradicting infinite contributions
- correct column index in getMinMaxActivityResiduals() to make presolver dualinfer work
- copy quiet flag from main scip's message handler to the one of solverscip in concurrent optimization
- avoid bound tightening cycles towards huge redundancy bounds in fullDualPresolve() to avert fatal numerical trouble in representing vertices of linear relaxations with unbounded domains
- fix problem where debug solution did not work if branching constraints are present
- update index of dominating variable on coefficient deletion in dualPresolving() of constraint handler logicor
- pass on flags from a redundant to the implying varbound constraint in preprocessConstraintPairs() to avoid suboptimal fixings by model relaxations
- apply reductions of dualinfer only if a dual solution exists (primal is bounded)
- before presolving is finished check solutions before retransforming them including tiny values to keep check flags consistent
- disable heuristics before and during presolving in benders decomposition to avoid messing up the objective structure in the solution store by dropping auxiliary variables in the required retransformations
- correct local flag of singleton conflict constraints in tightenSingleVar() against invalid bound globalization
- respect unboundedness in the computation of activity bounds in conflict.c to avoid invalid huge bounds due to small coefficients on unbounded variables
- ensure positive sides of a linear constraint when recognizing a set partition in rangedRowSimplify() to account for redundancy issues
- relax numerical conditions for variable aggregations to avert invalid variable fixings
- fixed harmless read of uninitialized data when creating parameters
- fix call of SCIPnlpiOraclePrintProblem in nlpi_worhp
Performance improvements
------------------------
- Use sassy/bliss as default symmetry computation package.
Interface changes
-----------------
### Interfaces to external software
- added interface to nauty/traces for symmetry computation
- added interface to sassy, a preprocessor for symmetry computation
- The directory src/sassy contains the source code of sassy.
Build system
------------
### Cmake
- added flag option "SYM=sbliss" for using sassy/bliss as a graph automorphism package
### Makefile
- added flag option "nauty" for SYM variable to specify which graph automorphism package should be used
- added flag option "sbliss" for SYM variable to specify which graph automorphism package should be used
- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP
Miscellaneous
-------------
- the parameter change callback is no longer called at the moment a parameter is created
@section RN804 SCIP 8.0.4
*************************
Features
--------
- use quad precision in cutsSubstituteMIR() for substituting slack variables into CMIR cuts
- use quad precision for activity computations in cons_linear.c
### Deleted and changed API methods
- SCIPshrinkDisjunctiveVarSet() no longer attempts to cutoff the current node if it finds the
given disjunction to be infeasible; it is now in the responsibility of the caller to act accordingly
### New API functions
- added SCIPskipSpace
- added XML parser routines from src/xml/xml.h
### Interfaces to external software
- updated XPRESS interface to work with XPRESS 41 as well
- new interface to LP solver HiGHS (lpi_highs.cpp)
### Changed parameters
- changed integer parameter "propagating/symmetry/recomputrestart" from range {0, 1, 2} to being fixed at value 0
Unit tests
----------
- added new checks for objective, bounds and sides inside the scaling tests in lpi/change.c
Fixed bugs
----------
- relax condition of assert in lpSolve to hold only if lp/checkstability is true
- OPB reader: dynamically increase the size of the line buffer for reading in getMaxAndConsDim()
- Enabled the solution limit checks in SCIPsolveIsStopped in solve.c when in SCIP_STAGE_PRESOLVING
- fix quad precision comparison for the calculation of knapsackcover constraints.
- force copying of symmetry constraints for concurrent solve
- increase the precision of double multiplications in quad precision environments
- corrected handling of different variable types in symmetry
- orbitope detection: refine computation of overlap structure and fixed bug in finding orbitope generators
- ensure that winner is always determined in concurrent mode
- when a row with invalid index range is added to the global cutpool, update the indices instead of failing with an assert
- update of watched literals in cons_xor.c and ensure that fixed variables are counted in propacateCons()
- avoid some numerical issue in check for redundant variables in linear constraints (introduced with version 8.0.2)
- more rows are treated as being integral in cutsSubstituteMIR() for CMIR cuts
- fixed several relaxations of the rhs of cuts to 0 in cuts.c
- avoid aggregation into a single linear constraint if they should not be upgraded (needed for indicator constraints)
- apply effective root changes before fork is repropagated during treeSwitchPath() in tree.c
- avoid invalid objective value for solutions generated from an unbounded LP relaxation in case of a nonlinear objective function
- disable recomputing symmetries after a restart (constraint removal is not permitted)
- avoid cutting off optimal solutions for small feasibility tolerances in conflict analysis
- initialize variable in presol_dualsparsify.c
- fix in presolving of variable bound constraints to use absolute instead of relative difference
- free variable histories in reoptimization mode
- handle whitespaces in interactive shell history consistently
- check and enforce equalities on which the objective is projected in cons_linear.c
- ensure row feasibilities of solution shiftings in heur_oneopt.c and heur_twoopt.c
- remove rounded row check blocking tolerable primal solutions in cons_varbound.c
- fixed that presolve of logicor-constraints may have attempted to cutoff a root of the not yet existing branch-and-bound tree
- only consider positive slack variables as active in benders.c
- in the feasibility check of and/or constraints, allow for fractional values in operands
- fixed linear outer-approximation for some composite absolute-value expressions
Miscellaneous
-------------
- Extended documentation of the parameter limits/solutions to point out that the limit is first checked in presolving
- Added more information about using SCIPcache- and SCIPflushRowExtensions() to documentation and comments
- Extended the `how to add' sections of the documentation by adding information on how to include default plugins into SCIP
@section RN803 SCIP 8.0.3
*************************
Examples and applications
-------------------------
- Externalize STP and PolySCIP applications
Interface changes
-----------------
### Command line interface
- When running the AMPL interface, the .nl filename extension does not need to be omitted for the input file anymore.
Build system
------------
### Cmake
- Forbid CMAKE_BUILD_TYPE nonstandard values
- Move -I/path/to/src/amplmp/include to front of compiler flags for include directories
### Makefile
Fixed bugs
----------
- fixed an incorrect handling of xor constraints
- the feasibility checker for integrality constraints now uses checkintegrality even for implied integers
- skip integrality check in cons_integral for relaxation-only implicit-integer variables
- fixed an issue caused by aggregated variables not added to a hashmap in the xor constraint handler
- changed function solveRowEchelonGF2 in cons_xor.c to avoid errors if rank is 0
- fixed that the implication presolver tried to aggregate or tighten bounds of multiaggregated variables
- fixed a sign check in detection of linear constraints that are parallel to the objective
- fixed bug in Clp and lpi_clp with missing basis information when calling the barrier with crossover; needs new Clp version
- do not assume aggregation is successful in cons_setppc.c
Miscellaneous
-------------
- Changed license to Apache 2.0, see https://www.apache.org/licenses/LICENSE-2.0.
- When an LP could not be solved accurately, scaling is now turned off as a last fall-back method.
- Methods for using the debug solution mechanism SCIPdebugAddSolVal, SCIPdebugGetSol, SCIPdebugGetSolVal,
SCIPdebugSolIsValidInSubtree, SCIPdebugIsMainscip, SCIPdebugSolEnable, SCIPdebugSolDisable, SCIPdebugSolIsEnabled,
SCIPwithDebugSol are now exported
@section RN802 SCIP 8.0.2
*************************
Interface changes
-----------------
### Deleted and changed API methods
- added input parameter SCIP_Bool initiallp to SCIPcutselsSelect
- changed function type int to SCIP_Longint for SCIPcutpoolGetMaxNCuts
- replaced SCIPsepastoreGetNCutsFound with SCIPsepastoreGetNCutsAdded following the naming convention for the new statistics
- replaced SCIPsepaIncNAppliedCuts with SCIPsepaIncNCutsApplied
### New API functions
- added SCIPsepastoreGetNCutsAdded, SCIPsepastoreGetNCutsAddedViaPool, SCIPsepastoreGetNCutsAddedDirect
- added SCIPsepaIncNCutsAdded, SCIPsepaDecNCutsAdded, SCIPsepaIncNCutsApplied, SCIPsepaGetNRootCalls, SCIPsepaGetNCutsAdded, SCIPsepaGetNCutsAddedViaPool, SCIPsepaGetNCutsAddedDirect, SCIPsepaGetNCutsAppliedViaPool, SCIPsepaGetNCutsAppliedDirect
- added SCIPcutpoolGetNRootCalls, SCIPcutpoolGetNCutsAdded, SCIPcutpoolAddMaxNCuts, SCIPcutpoolSetTime, SCIPcutpoolAddNCalls, SCIPcutpoolAddNRootCalls, SCIPcutpoolAddNCutsFound, SCIPcutpoolAddNCutsAdded,
- added SCIPcutselGetNCalls, SCIPcutselGetNRootCalls, SCIPcutselGetNRootCuts, SCIPcutselGetNRootForcedCuts, SCIPcutselGetNRootCutsFiltered, SCIPcutselGetNLocalCuts, SCIPcutselGetNLocalForcedCuts, SCIPcutselGetNLocalCutsFiltered,
### Interfaces to external software
- Added compatibility with Mosek 10.0.18.
### New parameters
- new parameters to turn on more statistics: misc/showdivingstats (diving heuristics), heuristics/alns/shownbstats (ALNS), estimation/showstats (tree size estimation)
### Data structures
- added nrootcalls and ncutsadded to SCIP_Cutpool
- added fromcutpool flag to SCIP_Row and fixed 33 bit allocation
- added ncalls, nrootcalls, nrootcutsselected, nrootcutsforced, nrootcutsfiltered, nlocalcutsselected, nlocalcutsforced, nlocalcutsfiltered to SCIP_Cutsel
- added ncutsadded, ncutsaddedviapool, ncutsaddeddirect, ncutsappliedviapool, ncutsapplieddirect, nrootcalls to SCIP_Sepa
- added ncutsadded, ncutsaddedviapool, ncutsaddeddirect to SCIP_Sepastore
- fixed statistics of relaxators w.r.t. number of times conss/cuts were added
Build system
------------
### Cmake
- new option `-DAUTOBUILD` that configures scip with dependencies on availability.
Packages like Ipopt, PaPILO, Readline, Zimpl, ZLIB, GMP, Worhp are automatically found and linked, otherwise ignored.
The individual flags for these packages are ignored. This makes a quick build easier. It is by default set to off.
Fixed bugs
----------
- read objective offset from ZIMPL files
- Make sure that objective limit is disabled if not all variables are in the LP. If we would run into
an objective limit in this case, the results of the LP solver are unclear.
- fixed bug in reopt.c, which occured for bounds outside of current valid bounds
- fixed problem with recomputing symmetries after a restart
- fixed bug in SCIPcalcMIR() with wrong order of arguments for removeZerosQuad()
- fixed segmentation fault in update of cut statistic
- fixed bug in presolving of and constraints by merging variables with multiple occurrences before cliquePresolve()
- fixed bug in dual presolving of linear constraints by setting implicit integers to integers in multi-aggregation
- fixed update of presolve statistics on added constraints and changed coefficients in constraint handler for nonlinear constraints
- fixed bug with reading CIP files with large constraints split over several lines
- fixed bug with infinite bounds in the computation of conflict cuts
- fixed check for unbounded solution constructed by SCIPlpGetUnboundedSol(): The constructed solution is very likely infeasible
since scaling increases small numerical feasibility violations. Therefore, the solution is now always accepted. However, the
feasibility of the ray is now checked. This fix now might lead to several rounds of separation in order to resolve unbounded solutions,
whereas previously SCIP started to branch immediately.
- changed to absolute tolerances in all redundancy checks for linear constraints
Miscellaneous
-------------
- Added extended cutselector statistics splitting between root node specific and general statistics
- Added extended and refined cutpool statistics showing the number of cuts added from the cutpool to the sepastore
- Added extended and refined separator statistics to get a better view of the individual generators performance
- turned off output of statistics for the following information by default:
diving heuristics, ALNS neighborhood information and tree size estimation statistics;
they can be turned on using the following new parameters:
misc/showdivingstats (diving heuristics), heuristics/alns/shownbstats (ALNS), estimation/showstats (tree size estimation)
@section RN801 SCIP 8.0.1
*************************
Features
--------
- clique lifting in cons_setppc (parameter enablecliquelifting) is only disabled if it has been applied
- avoid warning if Mosek has reached/exceeded the objective limit
- improved curvature check for quadratic expressions when extended formulations are disabled
Examples and applications
-------------------------
- Fixed handling of enforcing in the TSP example.
Interface changes
-----------------
### Interfaces to external software
- Added compatibility with Mosek 10.0.13.
Build system
------------
- BLISS is now built from the vendored version from https://github.com/ds4dm/Bliss
### Cmake
- avoid warnings about unrecognized compiler warning silencing options when compilation with GCC fails
- adjust mosek find module to version 9.3
- added cmake compatibility for ipopt versions 3.14.x
### Makefile