本文整理汇总了C++中Aggregate::getID方法的典型用法代码示例。如果您正苦于以下问题:C++ Aggregate::getID方法的具体用法?C++ Aggregate::getID怎么用?C++ Aggregate::getID使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Aggregate
的用法示例。
在下文中一共展示了Aggregate::getID方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: add
/**
* From P <=> Agg
* go to
*
* P <=> (Pnew | M1) & M2
* Pnew <=> Agg
* and M1 assumed false, M2 assumed true
*/
void OneShotUnsatCoreExtraction::add(const Aggregate& agg) {
Aggregate extended(agg);
auto oldhead = extended.head;
auto newhead = getRemapper()->getNewVar();
auto truemarker = getRemapper()->getNewVar();
auto falsemarker = getRemapper()->getNewVar();
auto tseitin = getRemapper()->getNewVar();
extended.head = mkPosLit(newhead);
switch (agg.sem) {
case AggSem::DEF: {
Rule impl(agg.getID(), tseitin, { mkPosLit(newhead), mkPosLit(falsemarker) }, false, agg.defID, agg.onlyif);
Rule impl2(agg.getID(), var(oldhead), { mkPosLit(tseitin), mkPosLit(truemarker) }, true, agg.defID, agg.onlyif);
space->add(impl);
space->add(impl2);
break;
}
case AggSem::COMP: {
Implication impl(agg.getID(), mkPosLit(tseitin), ImplicationType::EQUIVALENT, { mkPosLit(newhead), mkPosLit(falsemarker) }, false);
Implication impl2(agg.getID(), oldhead, ImplicationType::EQUIVALENT, { mkPosLit(tseitin), mkPosLit(truemarker) }, true);
space->add(impl);
space->add(impl2);
break;
}
case AggSem::OR: {
Implication impl2(agg.getID(), ~oldhead, ImplicationType::IMPLIES, { mkPosLit(newhead), mkPosLit(falsemarker) }, false);
space->add(impl2);
break;
}
}
markerAssumptions.push_back(mkNegLit(falsemarker));
markerAssumptions.push_back(mkPosLit(truemarker));
id2constr[agg.getID()] = new Aggregate(agg);
marker2ids[truemarker].push_back(agg.getID());
marker2ids[falsemarker].push_back(agg.getID());
space->add(extended);
}