Gecode 6.4.0
Repeated solves, diagnostics and model exchange
API Meaning and current scope
Gecode::Optimize::SolveSession Persistent numerical backend state, compatible LP basis reuse and revalidated previous MIP hints; supports observed/basis solves. Reuse is reported, not assumed to improve runtime.
Gecode::Optimize::solve_lexicographic Highest-priority-first linear objectives, checked retention rows and explicit degradation. Unfinished stages are not a lexicographic optimum.
Gecode::Optimize::analyze_conflict Numerical deletion-filter conflict groups over original rows/bounds/domains; irreducibility is relative to the documented groups, not a minimum-cardinality conflict or exact proof.
Gecode::Optimize::relax_feasibility Selected row/bound sides with positive L1 penalties in a private model; repair residuals do not make the unchanged original model feasible.
Gecode::Optimize::solve_pool One representative per finite discrete projection; established ranked prefix is separate from a final unranked candidate and from projection exhaustion.
Gecode::Optimize::presolve_integer Explicit checked bounded-integer reductions with owning reconstruction. A presolve fixpoint is not original optimality; postsolve returns a checked original witness without transferring a reduced-model global bound.
Gecode::Optimize::solve_scenarios Serial sparse objective/bound overrides on ordinary Continuous/Integer/Binary linear models under one batch allowance; no shared search tree. Explicit Native uses its one-shot route.
Gecode::Optimize::solve_quadratic Separate weighted-square continuous convex/concave model and original-coordinate checks; see QuadraticModel and QuadraticOptions.

Workflow support is narrower than the base Model vocabulary. Consult each entry point before combining semis, globals, indicators, guarantees, starts or multistage node limits. Unsupported combinations fail explicitly; a sequence of solves does not imply a global consumed-node or proof contract it does not implement. Private model results retain explicit mappings to original slots.

Files and FlatZinc

Gecode::Optimize::read_model and Gecode::Optimize::write_model support a strict numerical LP/free-MPS subset. Unsupported dialect/metadata is rejected. Export performs a checked semantic round trip before atomic replacement; it does not silently omit indicators or globals. This is not full support for every vendor extension.

The opt-in fzn-gecode-optimize driver uses immutable raw FlatZinc capture, Gecode::Optimize::compile_flatzinc and an independent original-source checker before publishing output. Its admitted integer linear, Boolean, reified and typed-global subset includes all-different, element, table/holey domains, explicit-offset circuit, fixed four-argument cumulative and literal-parameter six-argument Regular. Predicate signatures, annotation forms, alias/domain semantics and finite resource admission are checked explicitly. Other predicates or parameter forms may be rejected even when the original fzn-gecode driver supports them.

The separate experimental MiniZinc registration invokes this driver in –minizinc mode. Its compiler library lowers supported forms and preserves explicit rejections elsewhere; it does not change the default registration. The standard -t milliseconds convention belongs to that mode: -t 0 means no limit, whereas the direct –time-limit 0 option requests an immediate limit. Ordinary incomplete MiniZinc output uses protocol status and exit zero; malformed/unsupported inputs remain errors.

C and Python

The installed gecode/optimize/c_api.h and shared Gecode::optimize_c target provide a versioned C surface. The Python 3.9+ ctypes package is in python/; it loads a built library and does not download a solver at runtime. Delivered bindings cover model/bulk edits, logic/globals including Regular, sessions, complete native starts, solution pools, feasibility repair, scenarios and LP observations/basis/evidence/sensitivity. C++ API availability alone does not imply a matching binding: standalone lexicographic objectives, conflict analysis, integer presolve and the explicit native neighborhood API remain C++ only in this checkpoint. C handles and owning result objects have explicit close/destroy lifetimes; follow the header's counted-buffer and version fields.