Clingo C API
C API for clingo providing high level functions to control grounding and solving.
|
An instance of this struct has to be registered with a solver to implement a custom propagator.
Not all callbacks have to be implemented and can be set to NULL if not needed.
Public Attributes | |
bool(* | init )(clingo_propagate_init_t *control, void *data) |
This function is called once before each solving step. More... | |
bool(* | propagate )(clingo_propagate_control_t *control, clingo_literal_t const *changes, size_t size, void *data) |
Can be used to propagate solver literals given a partial assignment. More... | |
bool(* | undo )(clingo_propagate_control_t *control, clingo_literal_t const *changes, size_t size, void *data) |
Called whenever a solver undoes assignments to watched solver literals. More... | |
bool(* | check )(clingo_propagate_control_t *control, void *data) |
This function is similar to clingo_propagate_control_propagate() but is only called on total assignments without a change set. More... | |
bool(* clingo_propagator::check) (clingo_propagate_control_t *control, void *data) |
This function is similar to clingo_propagate_control_propagate() but is only called on total assignments without a change set.
[in] | control | control object for the target solver |
[in] | data | user data for the callback |
bool(* clingo_propagator::init) (clingo_propagate_init_t *control, void *data) |
This function is called once before each solving step.
It is used to map relevant program literals to solver literals, add watches for solver literals, and initialize the data structures used during propagation.
[in] | control | control object for the target solver |
[in] | data | user data for the callback |
bool(* clingo_propagator::propagate) (clingo_propagate_control_t *control, clingo_literal_t const *changes, size_t size, void *data) |
Can be used to propagate solver literals given a partial assignment.
Called during propagation with a non-empty array of watched solver literals that have been assigned to true since the last call to either propagate, undo, (or the start of the search) - the change set. Only watched solver literals are contained in the change set. Each literal in the change set is true w.r.t. the current assignment. clingo_propagate_control_add_clause() can be used to add clauses. If a clause is unit resulting, it can be propagated using clingo_propagate_control_propagate(). If the result of either of the two methods is false, the propagate function must return immediately.
The following snippet shows how to use the methods to add clauses and propagate consequences within the callback. The important point is to return true (true to indicate there was no error) if the result of either of the methods is false.
[in] | control | control object for the target solver |
[in] | changes | the change set |
[in] | size | the size of the change set |
[in] | data | user data for the callback |
bool(* clingo_propagator::undo) (clingo_propagate_control_t *control, clingo_literal_t const *changes, size_t size, void *data) |
Called whenever a solver undoes assignments to watched solver literals.
This callback is meant to update assignment dependent state in the propagator.
[in] | control | control object for the target solver |
[in] | changes | the change set |
[in] | size | the size of the change set |
[in] | data | user data for the callback |