Esempio n. 1
0
void CutOffPlaneSolver::_buildSubgradient( Vector &x )
{
   NumberSet I;

   _findMax(x, I);

   Vector subgradient;

   int i_max = I[0];

   if (i_max == -1)
   {
      subgradient = _helpfulFuncGrad(x);
   }
   else
   {
      subgradient = _T._phi_grad[i_max]->eval(x);
   }

   double b;
   
   if (i_max == -1)
      b = -_helpfulFunc(x) + subgradient * x;
   else
      b = -_T._phi[i_max]->eval(x) + subgradient * x;

   _Sk.b.pushBack(b);

   Vector new_vec(_Sk.m + 1);

   new_vec[new_vec.size() - 1] = 1.0;

   _Sk.A << new_vec;

   for (int i = 0; i != _Sk.n; i++)
   {
      double b = 0;
      _Sk.A[i].pushBack(b);
   }

   for (int i = 0; i != subgradient.size(); i++)
   {
      _Sk.A[i][_Sk.A.m() - 1] = subgradient[i];
      _Sk.A[i + subgradient.size()][_Sk.A.m() - 1] = -subgradient[i];
   }

   b = 0;
   _Sk.c.pushBack(b);

   _Sk.n = _Sk.A.n();
   _Sk.m = _Sk.A.m();

//   cout << _Sk;
}
Esempio n. 2
0
TCBinaryTreeNode* TCGenBinaryTree::prev(TCBinaryTreeNode* node) const
/****************************************************************************
*
* Function:     TCGenBinaryTree::prev
* Parameters:   node    - Current node to find predecessor of
* Returns:      Predecessor node to the specified node, NULL if none.
*
* Description:  Finds the previous node in the binary tree defined by an
*               inorder traversal of the tree. If there is no predecessor,
*               this routine returns NULL.
*
****************************************************************************/
{
    if (node->left != z)
        return _findMax(node->left);
    TCBinaryTreeNode *p = node->parent;
    while (p != root && p->left == node) {
        node = p;
        p = p->parent;
        }
    return (p == root) ? NULL : p;
}
Esempio n. 3
0
			TCBinaryTreeNode* findMax() const
				{ return _findMax(root->right); };