Constraint
From Dyna
Revision as of 01:44, 4 February 2008; 65.115.69.130 (Talk)
(diff) ←Older revision | Current revision | Newer revision→ (diff)
(diff) ←Older revision | Current revision | Newer revision→ (diff)
trmonc4t boricnoc If you are doing constrained optimization with DynaMITE, your program should specify what the constraints are. You should assert or derive items of the form
constrain(item==value)
or
constrain(item >= value)
For example, suppose you have written a probabilistic CKY parser. You want to require that all the rewrite rules with a given left-hand side sum to one. So you write
sum_lhs(Lhs) += rewrite(Lhs,_). % unary rewrite rule
sum_lhs(Lhs) += rewrite(Lhs,_,_). % binary rewrite rule
constrain(sum_lhs(Lhs)==1) |= ?sum_lhs(Lhs). % we constrain sum_lhs(np) if it was derived,
% i.e., if there were any rules with np as lhs
If your rewrite rule probabilities are in the logarithmic domain, you would write
logsum_lhs(Lhs) log+= rewrite(Lhs,_). logsum_lhs(Lhs) log+= rewrite(Lhs,_,_). constrain(logsum_lhs(Lhs)==0) |= ?sum_lhs(Lhs).
Of course, a given version of DynaMITE can only handle certain kinds of constraints. The current version can handle sum-to-one constraints in the log domain, as shown above.
- At the moment, DynaMITE expects a slightly different form:
constrain_eq(item,value). Also at the moment, you need to explicitly declare:- oldquery(constraints, constrain_eq(_,_)). This will become unnecessary in future (and perhaps even invalid, sinceoldqueryis deprecated).
