本文整理汇总了C++中CoinPackedVector::reserve方法的典型用法代码示例。如果您正苦于以下问题:C++ CoinPackedVector::reserve方法的具体用法?C++ CoinPackedVector::reserve怎么用?C++ CoinPackedVector::reserve使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CoinPackedVector
的用法示例。
在下文中一共展示了CoinPackedVector::reserve方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: scale
/** scale the cut passed as argument*/
void scale(OsiRowCut &cut)
{
double rhs = fabs(cut.lb());
CoinPackedVector row;
row.reserve(cut.row().getNumElements());
for (int i = 0 ; i < cut.row().getNumElements() ; i++)
{
row.insert(cut.row().getIndices()[i], cut.row().getElements()[i]/rhs);
}
cut.setLb(cut.lb()/rhs);
cut.setRow(row);
}
示例2: bf
//@{
template <class BinaryFunction> void
binaryOp(CoinPackedVector& retVal,
const CoinPackedVectorBase& op1, double value,
BinaryFunction bf)
{
retVal.clear();
const int s = op1.getNumElements();
if (s > 0) {
retVal.reserve(s);
const int * inds = op1.getIndices();
const double * elems = op1.getElements();
for (int i=0; i<s; ++i ) {
retVal.insert(inds[i], bf(value, elems[i]));
}
}
}
示例3: quadCuts
//.........这里部分代码省略.........
CouNumber
xi = colsol [ind],
lb = lower [ind],
ub = upper [ind],
delta = ub-lb;
if (fabs (delta) > COUENNE_EPS) {
CouNumber normlambda = lambda / (delta*delta),
coeff = normlambda * (lb + ub - 2. * xi);
a0 += normlambda * (lb*ub - xi*xi);
//a0 += coeff * xi - normlambda * (xi - lb) * (ub - xi);
//a0 += normlambda * lb * ub;
Qxs [ind] += coeff;
//Qxs [ind] += normlambda * (lb + ub);
}// else coeff = 0.;
// a0 += lambda [k] * lower [ind] * upper [ind];
// a0 -= lambda [k] * colsol [ind] * colsol [ind];
//Qxs [ind] -= lambda [k] * (colsol [ind]) * 2;
}
// Count the number of non-zeroes
int nnz = 0;
for (int i=0; i < numcols ; i++)
if (fabs (Qxs [i]) > COUENNE_EPS)
nnz++;
#ifdef DEBUG
printf ("2Qx = (");for(int i=0;i<numcols;i++)printf("%g ",Qxs[i]);printf (")[%g], %d nz\n",a0,nnz);
#endif
// Pack the vector into a CoinPackedVector and generate the cut.
CoinPackedVector a (false);
a.reserve (nnz);
#ifdef DEBUG
CouNumber lhs = 0, lhsc = 0,
*optimum = cg -> Problem () -> bestSol (),
*current = cg -> Problem () -> X ();
#endif
for (int i=0; i < numcols; i++)
if (fabs (Qxs [i]) > 1.0e-21) { // why 1.0e-21? Look at CoinPackedMatrix.cpp:2188
// compute violation
#ifdef DEBUG
if (optimum) {
printf ("%+g * %g ", Qxs [i], optimum [i]);
lhs += Qxs [i] * optimum [i];
}
lhsc += Qxs [i] * current [i];
#endif
a.insert (i, Qxs [i]);
}
OsiRowCut cut;
cut.setRow (a);
delete [] Qxs;
if (varVal < exprVal) { //(lambda == dCoeffLo_) {
cut.setUb (a0);
#ifdef DEBUG
if (optimum && (lhs - a0 > COUENNE_EPS)) {
printf ("cut violates optimal solution: %g > %g\n", lhs, a0);
cut.print ();
}
if (lhsc < a0 + COUENNE_EPS){
printf ("cut (+) is not cutting: ");
cut.print ();
}
#endif
// cut.setLb(-COUENNE_INFINITY);
}
else {
cut.setLb (a0);
#ifdef DEBUG
if (optimum && (lhs - a0 < -COUENNE_EPS)) {
printf ("cut violates optimal solution: %g < %g\n", lhs, a0);
cut.print ();
}
if (lhsc > a0 - COUENNE_EPS){
printf ("cut (-) is not cutting: ");
cut.print ();
}
#endif
// cut.setUb(COUENNE_INFINITY);
}
cs.insert (cut);
}