Gecode 6.4.0

Optional sparse optimization models, backends and owning results. More...

Namespaces

namespace  Detail

Classes

struct  AllDifferentData
struct  BackendCapabilities
struct  BoundRelaxation
class  CancellationToken
struct  CircuitData
class  CompiledFlatZinc
struct  ConflictGroup
struct  ConflictOptions
struct  ConflictResult
struct  Constraint
struct  CumulativeData
struct  ElementData
struct  FlatZincCompileOptions
struct  FlatZincCompileResult
struct  FlatZincValidation
struct  FlatZincVariableMapping
struct  GlobalConstraint
struct  GlobalData
struct  Indicator
struct  IndicatorData
struct  IndicatorDomain
struct  IndicatorFormulation
struct  LexicographicObjective
struct  LexicographicResult
struct  LexicographicStage
class  LpBasis
struct  LpBasisData
struct  LpBasisSolveOptions
struct  LpBasisSolveResult
struct  LpBasisSubmission
struct  LpCheckTolerances
struct  LpColumnObservation
struct  LpEqualityRhsParameter
class  LpEvidence
struct  LpEvidenceColumn
struct  LpEvidenceGroup
struct  LpEvidenceLimits
struct  LpEvidenceOptions
struct  LpEvidenceResult
struct  LpEvidenceStage
struct  LpEvidenceTolerances
struct  LpFarkasEntry
struct  LpFarkasEvidence
struct  LpIntervalCheckReport
struct  LpKktReport
struct  LpObjectiveParameter
struct  LpObservationCapabilities
struct  LpObservationGroup
struct  LpObservationOptions
class  LpObservations
struct  LpObservedResult
struct  LpParameterInterval
struct  LpPrimalEvidence
struct  LpRangeEnd
struct  LpRowObservation
class  LpSensitivity
struct  LpSensitivityEntry
struct  LpSensitivityGroup
struct  LpSensitivityLimiter
struct  LpSensitivityLimits
struct  LpSensitivityOptions
struct  LpSensitivityReferenceChecks
struct  LpSensitivityResult
struct  LpSensitivityTolerances
struct  LpSensitivityWork
class  Model
class  ModelError
struct  ModelSnapshot
struct  NativeBranchingSettings
struct  NativeBranchingStatistics
struct  NativeFrontierStatistics
struct  NativeLpOptions
struct  NativeLpResult
struct  NativeLpSettings
struct  NativeLpStatistics
struct  NativeNeighborhoodOptions
struct  NativeNeighborhoodResult
struct  NativeNeighborhoodSettings
struct  NativeNeighborhoodStatistics
struct  NativeRootCoverSettings
struct  NativeRootCoverStatistics
struct  NativeSearchOptions
struct  NativeSearchResult
struct  ObjectiveData
struct  PoolAttempt
struct  PoolEntry
struct  PoolOptions
struct  PoolResult
struct  PostsolveResult
struct  PresolveBoundChange
class  PresolvedModel
struct  PresolveOptions
struct  PresolveResult
struct  PresolveRowMap
struct  PresolveVariableMap
class  QuadraticModel
struct  QuadraticOptions
struct  QuadraticResult
class  QuadraticSnapshot
struct  QuadraticValidation
struct  RegularData
struct  RegularTransition
struct  RelaxationItem
struct  RelaxationOptions
struct  RelaxationResult
struct  RowData
struct  RowRelaxation
struct  RowSpec
class  ScenarioBatch
struct  ScenarioBatchOptions
struct  ScenarioBatchResult
struct  ScenarioCheck
struct  ScenarioDefinition
struct  ScenarioId
struct  ScenarioOutcome
struct  ScenarioRowBounds
struct  ScenarioVariableBounds
struct  SessionStatistics
class  SolveBudget
struct  SolveOptions
struct  SolveResult
class  SolveSession
struct  SparseRowBatch
struct  StartValue
struct  TableData
struct  Term
struct  ValidationReport
struct  Variable
struct  VariableData
struct  VariableSpec
struct  WeightedSquare

Typedefs

using LpSensitivityParameter = std::variant<LpObjectiveParameter,LpEqualityRhsParameter>
using LpSensitivityEntity = std::variant<Variable,Constraint>
using GlobalPayload
using ModelId = std::uint64_t
using Revision = std::uint64_t

Enumerations

enum class  ConflictStatus {
  Unknown , Feasible , Irreducible , Incomplete ,
  Unsupported , InvalidModel , Error
}
enum class  ConflictGroupKind {
  Row , LowerBound , UpperBound , Integrality ,
  VariableDomain , IndicatorComponent
}
enum class  FlatZincCompileStatus {
  Complete , Unsupported , InvalidInput , ResourceLimit ,
  TimeLimit , Cancelled , Error
}
enum class  LpBasisOrigin { Caller , Observations }
enum class  LpBasisSubmissionState {
  NotAttempted , Accepted , Repaired , Rejected ,
  Interrupted
}
enum class  LpEvidenceRequest { Automatic , PrimalRay , Farkas , Both }
enum class  LpEvidenceState { NotRequested , Available , Unavailable , Rejected }
enum class  LpEvidenceReason {
  None , NotRequested , Unsupported , NoFeasibleBase ,
  NoImprovingDirection , NoContradiction , Stopped , InvalidBackendData ,
  FailedOriginalChecks , InconsistentEvidence , InvalidModel , ResourceLimit ,
  AllocationFailure
}
enum class  LpEvidencePhase { FeasibleBase , Recession , Farkas }
enum class  LpEvidenceSide { Lower , Upper }
enum class  LpEvidenceColumnKind { SourceVariable , RowSide , VariableSide }
enum class  LpEvidenceCompletion { Complete , Interrupted , Rejected }
enum class  LpObservationState { NotRequested , Available , Unavailable , Rejected }
enum class  LpObservationReason {
  None , NotRequested , Unsupported , NoBackendSolve ,
  NoPrimalPoint , NotOptimal , NoDualPoint , NoBasis ,
  ElidedConstantRows , Interrupted , InvalidBackendData , FailedChecks ,
  AllocationFailure , InvalidModel
}
enum class  LpBasisStatus {
  Lower , Basic , Upper , Zero ,
  NonbasicUnspecified
}
enum class  LpDualSource { None , Backend , DerivedConstantRow }
enum class  LpSensitivityState { NotRequested , Available , Unavailable , Rejected }
enum class  LpSensitivityReason {
  None , NotRequested , Unsupported , NotOptimal ,
  NoBasis , InvalidSource , InvalidBasis , ChangedBasis ,
  FailedReferenceChecks , FailedLinearSolveChecks , FailedIntervalChecks , ResourceLimit ,
  Stopped , AllocationFailure , BackendFailure
}
enum class  LpRangeEndKind { Finite , NegativeInfinity , PositiveInfinity }
enum class  LpSensitivitySide { Lower , Upper , Fixed , Free }
enum class  LpSensitivityCompletion { Complete , Partial , Interrupted , Rejected }
enum class  NativeLpFrequency { Root , AfterBoundChanges }
enum class  NativeRootCoverCompletion {
  NotRequested , NotStarted , NoNewCuts , RoundLimit ,
  WorkLimit , StorageLimit , SeparationLimit , Cancelled ,
  TimeLimit , NoPrimalSuggestion , InvalidSuggestion , CallbackError ,
  BackendError , AllocationFailure
}
enum class  NativeNeighborhoodPolicy { BinaryHamming }
enum class  NativeNeighborhoodCompletion {
  NotStarted , NoIncumbent , ProofCompletedBeforeAttempt , NoEligibleBinary ,
  NonrestrictingRadius , FormulationLimit , SourceLimit , WorkLimit ,
  StatusLimit , SharedNodeReserve , LocalStorageLimit , LocalTimeLimit ,
  NoImprovement , Improved , GlobalStop , Error
}
enum class  NativeSearchOrder { DepthFirst , BestBound }
enum class  NativeBranchingPolicy { BinaryReliability }
enum class  PoolCompletion { Incomplete , RequestedLimit , Exhausted }
enum class  PresolveStatus {
  Fixpoint , Incomplete , Infeasible , Unsupported ,
  InvalidModel , Error
}
enum class  PresolveBoundSide { Lower , Upper }
enum class  RelaxationSide { Lower , Upper }
enum class  Termination {
  Unknown , Optimal , Infeasible , Unbounded ,
  InfeasibleOrUnbounded , TimeLimit , NodeLimit , MemoryLimit ,
  IterationLimit , SolutionLimit , ObjectiveLimit , Cancelled ,
  NumericalFailure , Unsupported , InvalidModel , BackendError
}
enum class  ScenarioReuse { Automatic , Cold }
enum class  ScenarioRunState { NotStarted , Attempted }
enum class  ScenarioBatchCompletion { Rejected , Interrupted , Complete }
enum class  VariableType {
  Continuous , Integer , Binary , SemiContinuous ,
  SemiInteger
}
enum class  ObjectiveSense { Minimize , Maximize }
enum class  Guarantee { Numerical , Exact , Certified }
enum class  Backend { Auto , Highs , Native }

Functions

IndicatorFormulation add_indicator (Model &model, Variable activator, bool active_value, const std::vector< Term > &terms, double lower, double upper, std::string name={})
void remove_indicator (Model &model, Indicator indicator)
std::vector< Constraintadd_boolean_and (Model &model, Variable result, const std::vector< Variable > &inputs, std::string name={})
std::vector< Constraintadd_boolean_or (Model &model, Variable result, const std::vector< Variable > &inputs, std::string name={})
ConflictResult analyze_conflict (const ModelSnapshot &model, const ConflictOptions &options={})
ConflictResult analyze_conflict (const Model &model, const ConflictOptions &options={})
FlatZincCompileResult compile_flatzinc (const FlatZinc::Capture::Records &source, const FlatZincCompileOptions &options={})
FlatZincValidation validate_flatzinc (const CompiledFlatZinc &, const SolveResult &, double integrality_tolerance=1e-6)
std::string format_flatzinc_solution (const CompiledFlatZinc &, const SolveResult &, double integrality_tolerance=1e-6)
GlobalConstraint add_all_different (Model &, const std::vector< Variable > &, std::string name={})
 Retain pairwise inequality of the supplied integer-variable slots.
GlobalConstraint add_element (Model &, Variable index, const std::vector< Variable > &elements, Variable result, std::int64_t index_base=0, std::string name={})
 Retain result == elements[index-index_base], including repeated handles.
GlobalConstraint add_table (Model &, const std::vector< Variable > &, const std::vector< std::vector< std::int64_t > > &, std::string name={})
GlobalConstraint add_cumulative (Model &, const std::vector< Variable > &starts, const std::vector< std::int64_t > &durations, const std::vector< std::int64_t > &heights, std::int64_t capacity, std::string name={})
GlobalConstraint add_circuit (Model &, const std::vector< Variable > &successors, std::int64_t index_base=0, std::string name={})
GlobalConstraint add_regular (Model &, const std::vector< Variable > &variables, std::uint64_t state_count, std::uint64_t initial_state, const std::vector< RegularTransition > &transitions, const std::vector< std::uint64_t > &final_states, std::string name={})
std::shared_ptr< const LpBasismake_lp_basis (const LpBasisData &)
std::shared_ptr< const LpBasismake_lp_basis (const LpObservations &)
LpBasisSolveResult solve_lp_with_basis (const ModelSnapshot &, const LpBasisSolveOptions &)
LpBasisSolveResult solve_lp_with_basis (const Model &, const LpBasisSolveOptions &)
LpEvidenceResult analyze_lp_evidence (const ModelSnapshot &, const LpEvidenceOptions &={})
LpEvidenceResult analyze_lp_evidence (const Model &, const LpEvidenceOptions &={})
LpObservationCapabilities lp_observation_capabilities ()
LpObservedResult solve_lp_observed (const ModelSnapshot &, const LpObservationOptions &={})
LpObservedResult solve_lp_observed (const Model &, const LpObservationOptions &={})
LpSensitivityResult analyze_lp_sensitivity (const LpObservedResult &, const LpSensitivityOptions &)
BackendCapabilities native_capabilities ()
SolveResult solve_native (const ModelSnapshot &model, const SolveOptions &options={})
SolveResult solve_native (const Model &model, const SolveOptions &options={})
BackendCapabilities native_lp_capabilities ()
NativeLpResult solve_native_lp (const ModelSnapshot &model, const NativeLpOptions &options={})
NativeLpResult solve_native_lp (const Model &model, const NativeLpOptions &options={})
NativeNeighborhoodResult solve_native_neighborhoods (const ModelSnapshot &, const NativeNeighborhoodOptions &={})
NativeNeighborhoodResult solve_native_neighborhoods (const Model &, const NativeNeighborhoodOptions &={})
NativeSearchResult solve_native_search (const ModelSnapshot &model, const NativeSearchOptions &options={})
NativeSearchResult solve_native_search (const Model &model, const NativeSearchOptions &options={})
PoolResult solve_pool (const ModelSnapshot &model, const PoolOptions &options={})
PoolResult solve_pool (const Model &model, const PoolOptions &options={})
PresolveResult presolve_integer (const ModelSnapshot &model, const PresolveOptions &options={})
PresolveResult presolve_integer (const Model &model, const PresolveOptions &options={})
QuadraticValidation validate_quadratic (const QuadraticSnapshot &, const std::vector< double > &, double feasibility_tolerance=1e-7)
QuadraticResult solve_quadratic (const QuadraticSnapshot &, const QuadraticOptions &={})
QuadraticResult solve_quadratic (const QuadraticModel &, const QuadraticOptions &={})
BackendCapabilities quadratic_capabilities ()
RelaxationResult relax_feasibility (const ModelSnapshot &model, const RelaxationOptions &options={})
RelaxationResult relax_feasibility (const Model &model, const RelaxationOptions &options={})
const char * to_string (Termination termination) noexcept
ScenarioBatchResult solve_scenarios (const ModelSnapshot &, const std::vector< ScenarioDefinition > &, const ScenarioBatchOptions &={})
ScenarioBatchResult solve_scenarios (const Model &, const std::vector< ScenarioDefinition > &, const ScenarioBatchOptions &={})
BackendCapabilities capabilities (Backend backend=Backend::Auto)
SolveResult solve (const ModelSnapshot &model, const SolveOptions &options={})
SolveResult solve (const Model &model, const SolveOptions &options={})
Model read_model (const std::string &filename)
void write_model (const ModelSnapshot &model, const std::string &filename)
void write_model (const Model &model, const std::string &filename)
void validate_structure (const ModelSnapshot &model)
ValidationReport validate (const ModelSnapshot &model, const std::vector< double > &slot_values, double feasibility_tolerance=1e-7, double integrality_tolerance=1e-6)
LexicographicResult solve_lexicographic (const ModelSnapshot &model, const std::vector< LexicographicObjective > &objectives, const SolveOptions &options={})
LexicographicResult solve_lexicographic (const Model &model, const std::vector< LexicographicObjective > &objectives, const SolveOptions &options={})

Detailed Description

Optional sparse optimization models, backends and owning results.

See Optimize: sparse optimization and native integer search for backend scope and Model ownership, logical constraints and results for model ownership, result guarantees and validation.

Typedef Documentation

◆ LpSensitivityParameter

◆ LpSensitivityEntity

◆ GlobalPayload

Initial value:
Definition model.hpp:100
Definition model.hpp:117
Definition model.hpp:111
Definition model.hpp:101
Definition model.hpp:126
Definition model.hpp:107

◆ ModelId

using Gecode::Optimize::ModelId = std::uint64_t

◆ Revision

using Gecode::Optimize::Revision = std::uint64_t

Enumeration Type Documentation

◆ ConflictStatus

Enumerator
Unknown 
Feasible 
Irreducible 
Incomplete 
Unsupported 
InvalidModel 
Error 

◆ ConflictGroupKind

Enumerator
Row 
LowerBound 
UpperBound 
Integrality 
VariableDomain 
IndicatorComponent 

◆ FlatZincCompileStatus

Enumerator
Complete 
Unsupported 
InvalidInput 
ResourceLimit 
TimeLimit 
Cancelled 
Error 

◆ LpBasisOrigin

Enumerator
Caller 
Observations 

◆ LpBasisSubmissionState

Enumerator
NotAttempted 
Accepted 
Repaired 
Rejected 
Interrupted 

◆ LpEvidenceRequest

Enumerator
Automatic 
PrimalRay 
Farkas 
Both 

◆ LpEvidenceState

Enumerator
NotRequested 
Available 
Unavailable 
Rejected 

◆ LpEvidenceReason

Enumerator
None 
NotRequested 
Unsupported 
NoFeasibleBase 
NoImprovingDirection 
NoContradiction 
Stopped 
InvalidBackendData 
FailedOriginalChecks 
InconsistentEvidence 
InvalidModel 
ResourceLimit 
AllocationFailure 

◆ LpEvidencePhase

Enumerator
FeasibleBase 
Recession 
Farkas 

◆ LpEvidenceSide

Enumerator
Lower 
Upper 

◆ LpEvidenceColumnKind

Enumerator
SourceVariable 
RowSide 
VariableSide 

◆ LpEvidenceCompletion

Enumerator
Complete 
Interrupted 
Rejected 

◆ LpObservationState

Enumerator
NotRequested 
Available 
Unavailable 
Rejected 

◆ LpObservationReason

Enumerator
None 
NotRequested 
Unsupported 
NoBackendSolve 
NoPrimalPoint 
NotOptimal 
NoDualPoint 
NoBasis 
ElidedConstantRows 
Interrupted 
InvalidBackendData 
FailedChecks 
AllocationFailure 
InvalidModel 

◆ LpBasisStatus

Enumerator
Lower 
Basic 
Upper 
Zero 
NonbasicUnspecified 

◆ LpDualSource

enum class Gecode::Optimize::LpDualSource
strong
Enumerator
None 
Backend 
DerivedConstantRow 

◆ LpSensitivityState

Enumerator
NotRequested 
Available 
Unavailable 
Rejected 

◆ LpSensitivityReason

Enumerator
None 
NotRequested 
Unsupported 
NotOptimal 
NoBasis 
InvalidSource 
InvalidBasis 
ChangedBasis 
FailedReferenceChecks 
FailedLinearSolveChecks 
FailedIntervalChecks 
ResourceLimit 
Stopped 
AllocationFailure 
BackendFailure 

◆ LpRangeEndKind

Enumerator
Finite 
NegativeInfinity 
PositiveInfinity 

◆ LpSensitivitySide

Enumerator
Lower 
Upper 
Fixed 
Free 

◆ LpSensitivityCompletion

Enumerator
Complete 
Partial 
Interrupted 
Rejected 

◆ NativeLpFrequency

Enumerator
Root 
AfterBoundChanges 

◆ NativeRootCoverCompletion

Enumerator
NotRequested 
NotStarted 
NoNewCuts 
RoundLimit 
WorkLimit 
StorageLimit 
SeparationLimit 
Cancelled 
TimeLimit 
NoPrimalSuggestion 
InvalidSuggestion 
CallbackError 
BackendError 
AllocationFailure 

◆ NativeNeighborhoodPolicy

Enumerator
BinaryHamming 

◆ NativeNeighborhoodCompletion

Enumerator
NotStarted 
NoIncumbent 
ProofCompletedBeforeAttempt 
NoEligibleBinary 
NonrestrictingRadius 
FormulationLimit 
SourceLimit 
WorkLimit 
StatusLimit 
SharedNodeReserve 
LocalStorageLimit 
LocalTimeLimit 
NoImprovement 
Improved 
GlobalStop 
Error 

◆ NativeSearchOrder

Enumerator
DepthFirst 
BestBound 

◆ NativeBranchingPolicy

Enumerator
BinaryReliability 

◆ PoolCompletion

Enumerator
Incomplete 
RequestedLimit 
Exhausted 

◆ PresolveStatus

Enumerator
Fixpoint 
Incomplete 
Infeasible 
Unsupported 
InvalidModel 
Error 

◆ PresolveBoundSide

Enumerator
Lower 
Upper 

◆ RelaxationSide

Enumerator
Lower 
Upper 

◆ Termination

enum class Gecode::Optimize::Termination
strong

The reason a solve stopped, independent of whether it found a solution.

Enumerator
Unknown 
Optimal 
Infeasible 
Unbounded 
InfeasibleOrUnbounded 
TimeLimit 
NodeLimit 
MemoryLimit 
IterationLimit 
SolutionLimit 
ObjectiveLimit 
Cancelled 
NumericalFailure 
Unsupported 
InvalidModel 
BackendError 

◆ ScenarioReuse

Enumerator
Automatic 
Cold 

◆ ScenarioRunState

Enumerator
NotStarted 
Attempted 

◆ ScenarioBatchCompletion

Enumerator
Rejected 
Interrupted 
Complete 

◆ VariableType

enum class Gecode::Optimize::VariableType
strong
Enumerator
Continuous 
Integer 
Binary 
SemiContinuous 
SemiInteger 

◆ ObjectiveSense

Enumerator
Minimize 
Maximize 

◆ Guarantee

enum class Gecode::Optimize::Guarantee
strong
Enumerator
Numerical 
Exact 
Certified 

◆ Backend

enum class Gecode::Optimize::Backend
strong
Enumerator
Auto 
Highs 
Native 

Function Documentation

◆ add_indicator()

IndicatorFormulation Gecode::Optimize::add_indicator ( Model & model,
Variable activator,
bool active_value,
const std::vector< Term > & terms,
double lower,
double upper,
std::string name = {} )

Add activator == active_value => lower <= sum(terms) <= upper. The activator must have Binary type. Every required inactive activity bound must be finite. M is derived conservatively; no guessed constant is used. The returned gate keeps original coefficients and row bounds unchanged. Original logical metadata is retained for independent solution validation. Successful posting is one revision; errors leave the model unchanged.

◆ remove_indicator()

void Gecode::Optimize::remove_indicator ( Model & model,
Indicator indicator )

Remove logical metadata and all its generated rows in one revision. The auxiliary gate remains a model variable and can be removed once unused.

◆ add_boolean_and()

std::vector< Constraint > Gecode::Optimize::add_boolean_and ( Model & model,
Variable result,
const std::vector< Variable > & inputs,
std::string name = {} )

result == AND(inputs); AND(empty) is true. All variables must be Binary.

◆ add_boolean_or()

std::vector< Constraint > Gecode::Optimize::add_boolean_or ( Model & model,
Variable result,
const std::vector< Variable > & inputs,
std::string name = {} )

result == OR(inputs); OR(empty) is false. All variables must be Binary.

◆ analyze_conflict() [1/2]

ConflictResult Gecode::Optimize::analyze_conflict ( const ModelSnapshot & model,
const ConflictOptions & options = {} )

Deterministic deletion filtering with numerical LP/MILP feasibility oracles. The original objective is replaced privately by zero. All calls share one end-to-end time/cancellation budget. Starts are ignored and gaps forced zero. Any node limit, Exact or Certified request is explicitly Unsupported. See DIAGNOSTICS.md for group granularity and indicator domain ownership. Irreducible means deletion-minimal at that granularity, not minimum size or an exact infeasibility certificate. Interrupted or ambiguous oracles never establish infeasibility or irreducibility.

◆ analyze_conflict() [2/2]

ConflictResult Gecode::Optimize::analyze_conflict ( const Model & model,
const ConflictOptions & options = {} )

◆ compile_flatzinc()

FlatZincCompileResult Gecode::Optimize::compile_flatzinc ( const FlatZinc::Capture::Records & source,
const FlatZincCompileOptions & options = {} )

Compiles authoritative raw_variables/raw_domains/raw_constraints. Normalized parser records are audit data, never a replacement for an original predicate. Only a fully admitted model is published. No backend is called here. Admits bounded integer/Boolean linear/Boolean relations, <= reification and implication, integer equality implication, AllDifferent, 1-based integer Element, positive-arity gecode_table_int and bounded finite integer domains with holes; explicit-offset nonempty Circuit, fixed four-argument Cumulative, and six-argument Regular with literal automaton parameters are also admitted. Equality reification, other global/signature forms, floats/sets and unknown controls remain Unsupported. Invalid literal schemas are InvalidInput. Private gates and fixed literal slots are not source outputs.

◆ validate_flatzinc()

FlatZincValidation Gecode::Optimize::validate_flatzinc ( const CompiledFlatZinc & ,
const SolveResult & ,
double integrality_tolerance = 1e-6 )

Recheck identity, all model slots and every original source relation exactly after tolerance-qualified integer rounding. Does not certify the solve bound.

◆ format_flatzinc_solution()

std::string Gecode::Optimize::format_flatzinc_solution ( const CompiledFlatZinc & ,
const SolveResult & ,
double integrality_tolerance = 1e-6 )

Buffered assignments and a solution separator; never an optimality or enumeration-completion marker. Rejects invalid full-model witnesses.

◆ add_all_different()

GlobalConstraint Gecode::Optimize::add_all_different ( Model & ,
const std::vector< Variable > & ,
std::string name = {} )

Retain pairwise inequality of the supplied integer-variable slots.

◆ add_element()

GlobalConstraint Gecode::Optimize::add_element ( Model & ,
Variable index,
const std::vector< Variable > & elements,
Variable result,
std::int64_t index_base = 0,
std::string name = {} )

Retain result == elements[index-index_base], including repeated handles.

◆ add_table()

GlobalConstraint Gecode::Optimize::add_table ( Model & ,
const std::vector< Variable > & ,
const std::vector< std::vector< std::int64_t > > & ,
std::string name = {} )

Retain membership in a positive integer tuple table with matching arity. An empty tuple list is false. A zero-variable table containing an empty tuple is true; the separate FlatZinc compiler requires positive arity.

◆ add_cumulative()

GlobalConstraint Gecode::Optimize::add_cumulative ( Model & ,
const std::vector< Variable > & starts,
const std::vector< std::int64_t > & durations,
const std::vector< std::int64_t > & heights,
std::int64_t capacity,
std::string name = {} )

Mandatory fixed-duration tasks, half-open intervals; zero duration/height uses no resource.

◆ add_circuit()

GlobalConstraint Gecode::Optimize::add_circuit ( Model & ,
const std::vector< Variable > & successors,
std::int64_t index_base = 0,
std::string name = {} )

One cycle through a nonempty successor array, with explicit index base.

◆ add_regular()

GlobalConstraint Gecode::Optimize::add_regular ( Model & ,
const std::vector< Variable > & variables,
std::uint64_t state_count,
std::uint64_t initial_state,
const std::vector< RegularTransition > & transitions,
const std::vector< std::uint64_t > & final_states,
std::string name = {} )

Retain membership in a deterministic finite automaton's language. States are in [0,state_count); missing transitions reject. Transition keys (from,symbol) must be unique; repeated final states have set semantics. Empty words accept exactly when initial_state is final. No epsilon edges. Posting validates original metadata; native solving applies additional integer, array-size and automaton-storage limits before compilation.

◆ make_lp_basis() [1/2]

std::shared_ptr< const LpBasis > Gecode::Optimize::make_lp_basis ( const LpBasisData & )

Throw ModelError for malformed/unsupported source or status data.

◆ make_lp_basis() [2/2]

std::shared_ptr< const LpBasis > Gecode::Optimize::make_lp_basis ( const LpObservations & )

Requires an Available complete original basis; copies historical source.

◆ solve_lp_with_basis() [1/2]

LpBasisSolveResult Gecode::Optimize::solve_lp_with_basis ( const ModelSnapshot & ,
const LpBasisSolveOptions &  )

Numerical HiGHS ordinary continuous LP only; active constant rows unsupported. Accepted/Repaired describe setBasis before optimization, not final status. Repaired means statuses changed during submission. No faster-solve, checkpoint, independent nonsingularity, or certificate claim. A rejected backend submission returns without cold fallback, invalidating the session for a clean next load. Factorization/repair is cooperatively budgeted and may be uninterruptible.

◆ solve_lp_with_basis() [2/2]

LpBasisSolveResult Gecode::Optimize::solve_lp_with_basis ( const Model & ,
const LpBasisSolveOptions &  )

◆ analyze_lp_evidence() [1/2]

LpEvidenceResult Gecode::Optimize::analyze_lp_evidence ( const ModelSnapshot & ,
const LpEvidenceOptions & = {} )

Fresh private auxiliary solves; no input model, session or historical result is changed. Numerical continuous LPs only, Auto/HiGHS. Unsupported source is never relaxed. Explicit Farkas needs one call; Automatic at most two; Both at most three. All share one time/cancel allowance and deterministic work caps. Complete describes requested analysis, not source-model optimality/status. A checked source base point is required with a primal direction. A feasible point plus accepted contradiction rejects both as inconsistent evidence. Cleanup/factorization is cooperative; a final expired budget clears evidence availability, retaining diagnostics and private-stage provenance only.

◆ analyze_lp_evidence() [2/2]

LpEvidenceResult Gecode::Optimize::analyze_lp_evidence ( const Model & ,
const LpEvidenceOptions & = {} )

◆ lp_observation_capabilities()

LpObservationCapabilities Gecode::Optimize::lp_observation_capabilities ( )

◆ solve_lp_observed() [1/2]

LpObservedResult Gecode::Optimize::solve_lp_observed ( const ModelSnapshot & ,
const LpObservationOptions & = {} )

HiGHS Numerical only, on original Continuous linear models without active indicators or globals. No automatic relaxation or fallback. The whole-call cooperative budget includes snapshot copying, conversion and checking. Duals require a timely optimal primal/dual point; basis absence does not invalidate a validated primal solution. No ray/ranging work occurs.

◆ solve_lp_observed() [2/2]

LpObservedResult Gecode::Optimize::solve_lp_observed ( const Model & ,
const LpObservationOptions & = {} )

◆ analyze_lp_sensitivity()

LpSensitivityResult Gecode::Optimize::analyze_lp_sensitivity ( const LpObservedResult & ,
const LpSensitivityOptions &  )

Additional private factorization/linear algebra, zero optimization runs. HiGHS/Auto only; a timely optimal solve_lp_observed() result on a Continuous linear source with checked duals and complete basis. Empty row/column systems, active indicators/globals, elided constant rows, automatic relaxation, replacement bases and stale-revision transplants are unsupported. Only objective coefficients and equality common RHS are supported parameter kinds. Factorization/triangular solves are cooperatively budgeted. A final whole-call limit, cancellation, resource or cleanup failure clears every availability; original solve provenance and completed diagnostics remain historical data.

◆ native_capabilities()

BackendCapabilities Gecode::Optimize::native_capabilities ( )

◆ solve_native() [1/2]

SolveResult Gecode::Optimize::solve_native ( const ModelSnapshot & model,
const SolveOptions & options = {} )

Solve the supported finite integer subset with native Gecode propagation/BAB. Original indicators use native reification, not their numerical big-M rows. Exact requests use integer arithmetic checks; Certified is unsupported. Interrupted results have no global bound. See NATIVE.md for numeric limits. This explicit entry point accepts backend Auto or Native. Complete exact starts are supported, including deterministic completion of omitted live indicator inactivity gates. Unresolved partial starts, multiple workers and nonzero random seeds are unsupported. The Model overload includes snapshotting in its deadline and translates moved-from model errors to InvalidModel.

◆ solve_native() [2/2]

SolveResult Gecode::Optimize::solve_native ( const Model & model,
const SolveOptions & options = {} )

◆ native_lp_capabilities()

BackendCapabilities Gecode::Optimize::native_lp_capabilities ( )

◆ solve_native_lp() [1/2]

NativeLpResult Gecode::Optimize::solve_native_lp ( const ModelSnapshot & model,
const NativeLpOptions & options = {} )

Explicit opt-in: ordinary solve()/Auto/Native defaults are unchanged. Native propagation enforces every original constraint. Only ordinary linear rows enter the sparse relaxation; semivariables use their convex-hull box. LP bounds and interval cuts require checked integer certificates. This is exact discrete solving, not a complete independently checkable solve proof. Missing native/HiGHS/checked-wide-integer support is Unsupported, never a fallback. Original identities, limits and native arithmetic guards apply. Deadlines are cooperative: an LP attempt has a 0.2-second/10,000-iteration backend limit, but neither that limit nor native propagation is preemptive. See NATIVE-LP.md for scope, scheduling and interrupted-bound semantics.

◆ solve_native_lp() [2/2]

NativeLpResult Gecode::Optimize::solve_native_lp ( const Model & model,
const NativeLpOptions & options = {} )

◆ solve_native_neighborhoods() [1/2]

NativeNeighborhoodResult Gecode::Optimize::solve_native_neighborhoods ( const ModelSnapshot & ,
const NativeNeighborhoodOptions & = {} )

Run at most one global BinaryHamming improvement attempt after a checked incumbent, at a stable main-parent boundary. Distance counts active nonfixed original Binary slots without indicator_origin; all other original variables and native constraints remain in the isolated subproblem. There is no partial start repair, current-node LP suggestion, local proof sharing or recursive heuristic. Only a timely exact original-model-validated improvement is shared.

Shared node attempts = ordinary frontier admissions + reliability probe attempts + neighborhood status attempts. Optional admissions reserve two ordinary child slots. Local caps end only the heuristic; global limits stop the solve. Main queued/active regions continue to define any interrupted global bound. Native propagation/posting/checking is cooperative, not hard-preemptible. Existing NativeSearch option/result layouts and existing APIs are unchanged.

◆ solve_native_neighborhoods() [2/2]

NativeNeighborhoodResult Gecode::Optimize::solve_native_neighborhoods ( const Model & ,
const NativeNeighborhoodOptions & = {} )

◆ solve_native_search() [1/2]

NativeSearchResult Gecode::Optimize::solve_native_search ( const ModelSnapshot & model,
const NativeSearchOptions & options = {} )

Explicit opt-in; solve(), solve_native() and solve_native_lp() are unchanged. Existing finite native integer/global/indicator semantics and limits apply. Stable propagated nodes use normalized minimization bounds. Every unfinished region remains represented, including a parent during partial expansion. Interrupted global bounds aggregate all unresolved regions and an incumbent; they are absent if compilation did not establish the initial objective box. max_open_nodes exhaustion returns MemoryLimit; this is not a byte guarantee. Node quotas restrict admission, allowing the final admitted node to finish when time/cancellation permits. Complete exact starts are supported; no partial starts, parallel workers or gap stopping. An optional relaxation requires native checked LP capability explicitly. BinaryReliability charges probe status attempts to the shared node quota, separately reported from admitted frontier nodes. Probes select a split; they never publish incumbents or pruning evidence. Limits are cooperative around native propagation, which itself runs to fixpoint or failure.

◆ solve_native_search() [2/2]

NativeSearchResult Gecode::Optimize::solve_native_search ( const Model & model,
const NativeSearchOptions & options = {} )

◆ solve_pool() [1/2]

PoolResult Gecode::Optimize::solve_pool ( const ModelSnapshot & model,
const PoolOptions & options = {} )

Repeated optimization plus safe no-good exclusions. Returns one representative per finite Integer/Binary projection assignment, ranked by its best original objective when each remaining-model solve completes. Continuous and unbounded non-projected Integer recourse are allowed by the HiGHS backend. Real-valued completions of a projection are not enumerated. Ties have unspecified order. An interrupted timely candidate may be a final unranked entry. Only definite infeasibility of the remaining model establishes projection exhaustion. Exhaustion is a workflow Optimal status; the last oracle attempt is Infeasible. RequestedLimit uses SolutionLimit and never asserts exhaustion. Numerical completion is tolerance-qualified; Exact requires explicit Native support. Semis, active indicators/globals, Certified, and multistage node budgets are explicitly Unsupported. No original model edits occur. See POOLS.md.

◆ solve_pool() [2/2]

PoolResult Gecode::Optimize::solve_pool ( const Model & model,
const PoolOptions & options = {} )

◆ presolve_integer() [1/2]

PresolveResult Gecode::Optimize::presolve_integer ( const ModelSnapshot & model,
const PresolveOptions & options = {} )

◆ presolve_integer() [2/2]

PresolveResult Gecode::Optimize::presolve_integer ( const Model & model,
const PresolveOptions & options = {} )

◆ validate_quadratic()

QuadraticValidation Gecode::Optimize::validate_quadratic ( const QuadraticSnapshot & ,
const std::vector< double > & ,
double feasibility_tolerance = 1e-7 )

Independent original primal/objective/gradient check; no optimality claim.

◆ solve_quadratic() [1/2]

QuadraticResult Gecode::Optimize::solve_quadratic ( const QuadraticSnapshot & ,
const QuadraticOptions & = {} )

◆ solve_quadratic() [2/2]

QuadraticResult Gecode::Optimize::solve_quadratic ( const QuadraticModel & ,
const QuadraticOptions & = {} )

◆ quadratic_capabilities()

BackendCapabilities Gecode::Optimize::quadratic_capabilities ( )

◆ relax_feasibility() [1/2]

RelaxationResult Gecode::Optimize::relax_feasibility ( const ModelSnapshot & model,
const RelaxationOptions & options = {} )

Minimize the sum of positive finite penalties times selected side violations. Unselected sides, integrality and intrinsic binary/semi domains remain hard. Binary bound selection relaxes a narrower stored bound only as far as [0,1]. Selected semi bounds, generated indicator rows, indicator-participating variable bounds, active globals and primal starts are explicitly Unsupported. Optional phase two optimizes the original objective with zero requested degradation of minimum weighted violation. All completion is numerical and tolerance-qualified; no original feasible SolveResult is manufactured. The original model is not mutated. See RELAXATION.md for support/limits.

◆ relax_feasibility() [2/2]

RelaxationResult Gecode::Optimize::relax_feasibility ( const Model & model,
const RelaxationOptions & options = {} )

◆ to_string()

const char * Gecode::Optimize::to_string ( Termination termination)
noexcept

◆ solve_scenarios() [1/2]

ScenarioBatchResult Gecode::Optimize::solve_scenarios ( const ModelSnapshot & ,
const std::vector< ScenarioDefinition > & ,
const ScenarioBatchOptions & = {} )

Ordinary Continuous/Integer/Binary linear models only. All patches are admitted before any solve; nonempty indicator/global metadata and primal starts are Unsupported. Auto/HiGHS use private session reuse or Cold solves; explicit Native uses its ordinary one-shot route and exact admission. One whole-batch time/cancel allowance. Positive node limits with >1 scenario are Unsupported until consumed-node accounting exists. Zero stops before any solve; one scenario preserves the ordinary backend node-limit contract. No caller model/session is changed. Materializations and results own history.

◆ solve_scenarios() [2/2]

ScenarioBatchResult Gecode::Optimize::solve_scenarios ( const Model & ,
const std::vector< ScenarioDefinition > & ,
const ScenarioBatchOptions & = {} )

◆ capabilities()

BackendCapabilities Gecode::Optimize::capabilities ( Backend backend = Backend::Auto)

Query one backend without inspecting a model. Auto reports HiGHS here; solve() separately routes models with active native globals to Native. Other explicit operations have their own capability queries and contracts.

◆ solve() [1/2]

SolveResult Gecode::Optimize::solve ( const ModelSnapshot & model,
const SolveOptions & options = {} )

Solve an owning original-model snapshot. HiGHS is explicitly a numerical backend, not the legacy certified Gecode binary-LP propagation engine. Auto selects Native for models with active native globals, HiGHS otherwise. HiGHS cannot meet Exact/Certified requests. Explicit Native selects the bounded exact-integer Gecode bridge; see native.hpp for its subset and guarantee contract. Returned incumbents pass the independent original-model numerical checker. Time/cancel limits are cooperative; elapsed_seconds includes compilation and checking. A late candidate is excluded unless captured by an internal HiGHS observation callback before the deadline. This does not expose a user callback API.

◆ solve() [2/2]

SolveResult Gecode::Optimize::solve ( const Model & model,
const SolveOptions & options = {} )

◆ read_model()

Model Gecode::Optimize::read_model ( const std::string & filename)

Backend-independent, strict numerical LP/free-MPS I/O. Unsupported dialects, quadratic models, and exporting active original indicators/globals are rejected. Writes preserve double values and atomically replace only after a checked semantic round trip. See docs/solver-parity/IO.md for the supported syntax.

◆ write_model() [1/2]

void Gecode::Optimize::write_model ( const ModelSnapshot & model,
const std::string & filename )

◆ write_model() [2/2]

void Gecode::Optimize::write_model ( const Model & model,
const std::string & filename )
inline

◆ validate_structure()

void Gecode::Optimize::validate_structure ( const ModelSnapshot & model)

Check a complete original snapshot before a backend or workflow uses it. Throws ModelError for malformed IDs, domains, expressions or references. Expression terms must have ascending unique slot IDs and finite nonzero coefficients, matching the canonical form produced by Model. Semi-variable domains are {0} union [lower, upper], with finite lower > 0. A mathematically infeasible integer interval is not a structural error. Active original indicators require complete lowerings, safe M values, intact generated rows/gates and valid captured-domain dependencies. Typed global payloads and their referenced variable domains are checked too; backend-specific numerical/native admission remains a separate operation.

◆ validate()

ValidationReport Gecode::Optimize::validate ( const ModelSnapshot & model,
const std::vector< double > & slot_values,
double feasibility_tolerance = 1e-7,
double integrality_tolerance = 1e-6 )

Independently evaluate original domains, rows, indicators, globals and cost. Values use original slot indexing: exactly one entry per variable slot; unreferenced deleted slots may contain NaN and are ignored. Tolerances must be finite and nonnegative, in absolute original-model units. Linear arithmetic uses compensated long double accumulation. This is numerical validation, not a proof of optimality or infeasibility. Original indicators are checked after rounding their binary activator; passing their big-M rows alone never establishes logical feasibility. Globals check tolerance-qualified integer values against original payloads. Malformed models, options and assignments return an invalid report rather than throwing ModelError. Allocation failures may still propagate.

◆ solve_lexicographic() [1/2]

LexicographicResult Gecode::Optimize::solve_lexicographic ( const ModelSnapshot & model,
const std::vector< LexicographicObjective > & objectives,
const SolveOptions & options = {} )

Optimize ordered linear objectives on private snapshot copies. Degradation after stage i is absolute_degradation + relative_degradation * abs(value_i). Both native MIP gap targets are forced to zero. Completion is numerical and tolerance-qualified, never an exact certificate of lexicographic optimality. All candidates are independently checked against original constraints, accumulated lock rows and original objective retention thresholds.

A shared outer clock/token covers copying, validation and every solve. Time/cancellation remains cooperative; a stage returned after the outer deadline is not promoted. Node-limited multi-stage requests are Unsupported. Terms must use the canonical ascending unique slots of ModelSnapshot.

◆ solve_lexicographic() [2/2]

LexicographicResult Gecode::Optimize::solve_lexicographic ( const Model & model,
const std::vector< LexicographicObjective > & objectives,
const SolveOptions & options = {} )