Gecode 6.4.0
Native search, starts and optional enhancements

Exact subset and complete starts

The native bridge admits finite Integer/Binary/SemiInteger domains and integral coefficients/finite row sides within native integer limits. SemiInteger keeps its zero alternative. Conservative sums of absolute products bound row, indicator and objective activities; cancellation is not used to evade those guards. Objective offsets and all attainable objective values must remain exactly representable in result doubles. Unsupported fractions, ranges or native-global storage limits fail before search; they never imply infeasibility.

Complete primal_start entries use original handles and exact integral values. Every active ordinary slot must be supplied. Only live indicator inactivity gates may be completed from their exact activators; explicitly supplied gates must agree. Removed indicators do not imply a retained gate's value. Other private/fixed slots are not inferred. Unresolved partial starts are Unsupported, and invalid/infeasible complete assignments are InvalidModel. No near-integral rounding or permanent fixing is performed. A timely checked start seeds the incumbent and an unfixed original root with a strict improvement cutoff.

Native routes require threads=1 and random_seed=0. Gap tolerances do not enable early gap stopping. Existing native CP search options remain available through their original APIs independently of these facade limitations.

Ordinary native search recognizes a bounded exact binary capacity case: all active variables are Binary with domains [0,1], and one same-sign integral row covers them all, with one capacity side and no indicators or globals. Positive upper rows and their negative lower-row equivalents are supported. A capacity-indexed dynamic program is limited to capacity 65536 and one million table cells. Its completed, reconstructed witness supplies a branch preference and its exact optimum supplies a one-sided objective bound. Existing search still checks and publishes the solution and termination. Other model shapes or size-cap misses use the existing brancher. Time and cancellation checks remain active during preprocessing. Explicit checked-LP and local-neighborhood construction do not enable this optimization. The DP preference follows the engine's actual descent order. BestBound favors the region containing that witness only when objective bounds tie. Generic smallest-domain/minimum-first branching and non-DP frontier order are unchanged.

Explicit native entry points

API Behavior and evidence
Gecode::Optimize::solve_native Native propagation and BAB. An interrupted incumbent may be returned, but no unfinished-frontier global bound is exposed.
Gecode::Optimize::solve_native_lp Native constraints plus a sparse ordinary-row relaxation. LP bounds/domain deductions require checked integer certificates; numerical LP infeasibility alone never prunes. Native, HiGHS and checked-wide-integer support are required.
Gecode::Optimize::solve_native_search DepthFirst or BestBound frontier with explicit storage cap. Every queued/active region remains represented during partial expansion; interrupted bounds aggregate all unresolved regions and the incumbent when initial compilation established a bound.
Gecode::Optimize::solve_native_neighborhoods The same frontier plus at most one bounded BinaryHamming incumbent improvement attempt. See below.

NativeLpSettings can schedule root or after-bound-change relaxations and explicitly enable root_cover_cuts. Covers are independently verified against immutable original ordinary rows and global domains. An augmentation and its exact evidence retain their owning source. LP suggestions select candidates; they are not original feasible witnesses or proof. Local-scope cuts are not promoted into the global root pool.

NativeSearchOptions::branching enables BinaryReliability. Only completed finite paired propagation probes update solve-local history. These gains are not LP pseudocosts. Probes choose a split; they publish neither incumbents nor pruning evidence. General-integer reliability and LP-informed branching are not implemented in this slice.

One bounded incumbent neighborhood

NativeNeighborhoodOptions wraps the ordinary search options without enabling any existing default route. BinaryHamming waits for a checked incumbent and a surviving stable parent. It posts a fresh original native model, a strict original objective cutoff and a Hamming radius. Distance counts all eligible original nonfixed Binary slots without indicator_origin. It counts slots, not independent mathematical decisions; equality-linked slots count separately. Other original variables and constraints remain, including globals and semis.

The neighborhood may find an improvement outside the active parent. Only a timely exact original-model-validated assignment is published after local cleanup. Local bounds, infeasibility and exhaustion never become global proof. The main frontier remains represented throughout the attempt. This operation cannot create the first incumbent of a cold solve and is not RINS, RENS, partial-start repair or an automatic heuristic portfolio.

Settings cap status attempts, source entries, coordinator work, retained Spaces, distance-variable count and local elapsed time. These are not byte or CPU-instruction guarantees. Local caps stop optional work; outer limits stop the whole solve. With reliability and neighborhoods enabled, the shared node count equals frontier admissions + probe status attempts + neighborhood status attempts. The statistics' budget_nodes fields repeat that total; do not add them again. Optional local admissions reserve two ordinary child slots.