20 #ifndef CLASP_SMODELS_CONSTRAINTS_H_INCLUDED
21 #define CLASP_SMODELS_CONSTRAINTS_H_INCLUDED
24 #pragma warning (disable : 4200) // nonstandard extension used : zero-sized array
49 bool sat()
const {
return bound <= 0; }
51 bool open()
const {
return bound > 0 && bound <=
reach;}
92 CPair() { con[0] = con[1] = 0; }
144 uint32
size()
const {
return lits_->size(); }
153 WL(uint32
s,
bool shared,
bool w);
154 bool shareable()
const {
return rc != 0; }
155 bool unique()
const {
return rc == 0 || refCount() == 1; }
156 bool weights()
const {
return w != 0; }
157 uint32
size()
const {
return sz; }
158 Literal
lit(uint32 i)
const {
return lits[(i<<w)]; }
159 Var var(uint32 i)
const {
return lits[(i<<w)].
var(); }
161 uint32 refCount()
const;
170 WeightConstraint(Solver&
s, SharedContext* ctx, Literal W,
const WeightLitsRep& , WL*
out, uint32 act = 3u);
171 WeightConstraint(Solver&
s,
const WeightConstraint& other);
174 static const uint32 NOT_ACTIVE = 3u;
182 explicit UndoInfo(uint32
d = 0) : data(
d) {}
183 uint32 idx()
const {
return data >> 2; }
188 bool litSeen(uint32 idx)
const {
return (undo_[idx].data & 1) != 0; }
190 void toggleLitSeen(uint32 idx) { undo_[idx].data ^= 1; }
197 uint32 undoStart()
const {
return isWeight(); }
198 UndoInfo undoTop()
const { assert(up_ != undoStart());
return undo_[up_-1]; }
201 uint32 highestUndoLevel(Solver&)
const;
202 void setBpIndex(uint32 n);
bool open() const
Definition: weight_constraint.h:51
WeightConstraint * first() const
Definition: weight_constraint.h:94
weight_t weight(uint32 i) const
Returns the weight of the i'th literal or 1 if constraint is a cardinality constraint.
Definition: weight_constraint.h:142
weight_t bound
Definition: weight_constraint.h:55
Definition: weight_constraint.h:88
Definition: solver_types.h:845
Definition: weight_constraint.h:90
void undoLevel(Solver &s)
Called when the solver undid a decision level watched by this constraint.
Definition: weight_constraint.cpp:497
std::pair< Literal, weight_t > WeightLiteral
Definition: literal.h:197
ActiveConstraint
Definition: weight_constraint.h:131
static WeightLitsRep create(Solver &s, WeightLitVec &lits, weight_t bound)
Transforms the given literals to the normal form expected by WeightConstraint.
Definition: weight_constraint.cpp:34
void reason(Solver &, Literal p, LitVec &lits)
Definition: weight_constraint.cpp:463
bool propagate(Solver &s, Literal W)
Propagates the constraint W == *this.
Definition: weight_constraint.cpp:109
Base class for (boolean) constraints to be used in a Solver.
Definition: constraint.h:85
Definition: weight_constraint.h:87
CPair()
Definition: weight_constraint.h:92
bool unsat() const
Definition: weight_constraint.h:50
tuple s
Definition: server.py:45
uint32 Var
A variable is currently nothing more but an integer in the range [0..varMax).
Definition: literal.h:42
WeightLiteral * lits
Definition: weight_constraint.h:53
Type used as return type for Constraint::propagate.
Definition: constraint.h:88
Definition: weight_constraint.h:132
Definition: weight_constraint.h:82
PodVector< Literal >::type LitVec
Definition: literal.h:193
Definition: weight_constraint.h:84
static Literal fromIndex(uint32 idx)
Creates a literal from an index.
Definition: literal.h:105
static CPair create(Solver &s, Literal W, WeightLitVec &lits, weight_t bound, uint32 creationFlags=0)
Creates a new weight constraint from the given weight literals.
Definition: weight_constraint.cpp:162
Definition: weight_constraint.h:81
uint32 size
Definition: weight_constraint.h:54
std::tuple< T...> clone(const std::tuple< T...> &x, seq< S...>)
Definition: utility.hh:376
uint32 estimateComplexity(const Solver &s) const
Returns an estimate of the constraint's complexity relative to a clause (complexity = 1)...
Definition: weight_constraint.cpp:574
bool hasWeights() const
Definition: weight_constraint.h:52
int32 weight_t
A signed integer type used to represent weights.
Definition: literal.h:66
Bound & bound
Definition: output.cc:122
Class implementing smodels-like cardinality- and weight constraints.
Definition: weight_constraint.h:78
weight_t reach
Definition: weight_constraint.h:56
bool isWeight() const
Returns false if constraint is a cardinality constraint.
Definition: weight_constraint.h:146
bool minimize(Solver &s, Literal p, CCMinRecursive *r)
Definition: weight_constraint.cpp:478
tuple p
Definition: server.py:49
WeightConstraint * second() const
Definition: weight_constraint.h:95
bool sat() const
Definition: weight_constraint.h:49
tuple c
Definition: visualize.py:132
bool simplify(Solver &s, bool=false)
Definition: weight_constraint.cpp:517
Definition: weight_constraint.h:86
ScriptLiteralShared & shared
Definition: literals.cc:128
uint32 getBpIndex() const
Definition: weight_constraint.h:148
bool ok() const
Definition: weight_constraint.h:93
tuple d
Definition: pyclingo.py:49
Definition: weight_constraint.h:83
Constraint * cloneAttach(Solver &)
Returns a clone of this and adds necessary watches to the given solver.
Definition: weight_constraint.cpp:310
unsigned flags
Definition: program_options.cpp:588
uint32 size() const
Returns the number of literals in this constraint (including W).
Definition: weight_constraint.h:144
Value var
Definition: output.cc:70
Literal lit(uint32 i, ActiveConstraint c) const
Definition: weight_constraint.h:140
void destroy(Solver *, bool)
Default is to call delete this.
Definition: weight_constraint.cpp:354
Primitive representation of weight constraint literals in normal form.
Definition: weight_constraint.h:33
A literal is a variable or its negation.
Definition: literal.h:80
CreationFlags
Definition: weight_constraint.h:80
PodVector< WeightLiteral >::type WeightLitVec
Definition: literal.h:198
Definition: weight_constraint.h:133
PropResult propagate(Solver &s, Literal p, uint32 &data)
Definition: weight_constraint.cpp:415
LparseOutputter & out
Definition: output.cc:685
clasp's Solver class.
Definition: solver.h:82
Definition: weight_constraint.h:85