本文整理汇总了C++中UpdateInfo::nonbasicDelta方法的典型用法代码示例。如果您正苦于以下问题:C++ UpdateInfo::nonbasicDelta方法的具体用法?C++ UpdateInfo::nonbasicDelta怎么用?C++ UpdateInfo::nonbasicDelta使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UpdateInfo
的用法示例。
在下文中一共展示了UpdateInfo::nonbasicDelta方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: updateAndSignal
void FCSimplexDecisionProcedure::updateAndSignal(const UpdateInfo& selected, WitnessImprovement w){
ArithVar nonbasic = selected.nonbasic();
static bool verbose = false;
Debug("updateAndSignal") << "updateAndSignal " << selected << endl;
stringstream ss;
if(verbose){
d_errorSet.debugPrint(ss);
if(selected.describesPivot()){
ArithVar leaving = selected.leaving();
ss << "leaving " << leaving
<< " " << d_tableau.basicRowLength(leaving)
<< " " << d_linEq.debugBasicAtBoundCount(leaving)
<< endl;
}
if(degenerate(w) && selected.describesPivot()){
ArithVar leaving = selected.leaving();
Message()
<< "degenerate " << leaving
<< ", atBounds " << d_linEq.basicsAtBounds(selected)
<< ", len " << d_tableau.basicRowLength(leaving)
<< ", bc " << d_linEq.debugBasicAtBoundCount(leaving)
<< endl;
}
}
if(selected.describesPivot()){
ConstraintP limiting = selected.limiting();
ArithVar basic = limiting->getVariable();
Assert(d_linEq.basicIsTracked(basic));
d_linEq.pivotAndUpdate(basic, nonbasic, limiting->getValue());
}else{
Assert(!selected.unbounded() || selected.errorsChange() < 0);
DeltaRational newAssignment =
d_variables.getAssignment(nonbasic) + selected.nonbasicDelta();
d_linEq.updateTracked(nonbasic, newAssignment);
}
d_pivots++;
increaseLeavingCount(nonbasic);
vector< pair<ArithVar, int> > focusChanges;
while(d_errorSet.moreSignals()){
ArithVar updated = d_errorSet.topSignal();
int prevFocusSgn = d_errorSet.popSignal();
if(d_tableau.isBasic(updated)){
Assert(!d_variables.assignmentIsConsistent(updated) == d_errorSet.inError(updated));
if(Debug.isOn("updateAndSignal")){debugPrintSignal(updated);}
if(!d_variables.assignmentIsConsistent(updated)){
if(checkBasicForConflict(updated)){
reportConflict(updated);
Assert(debugUpdatedBasic(selected, updated));
}
}
}else{
Debug("updateAndSignal") << "updated nonbasic " << updated << endl;
}
int currFocusSgn = d_errorSet.focusSgn(updated);
if(currFocusSgn != prevFocusSgn){
int change = currFocusSgn - prevFocusSgn;
focusChanges.push_back(make_pair(updated, change));
}
}
if(verbose){
Message() << "conflict variable " << selected << endl;
Message() << ss.str();
}
if(Debug.isOn("error")){ d_errorSet.debugPrint(Debug("error")); }
Assert(debugSelectedErrorDropped(selected, d_errorSize, d_errorSet.errorSize()));
adjustFocusAndError(selected, focusChanges);
}