int register_all_quick_manual(lua_State* tolua_S) { if (nullptr == tolua_S) return 0; extendFunctions(tolua_S); extendNode(tolua_S); CCLOG("Quick-Cocos2d-x C++ support ready."); return 0; }
void LuaEngine::extendLuaObject() { if ( NULL == _stack || NULL == _stack->getLuaState()) return; lua_State* lua_S = _stack->getLuaState(); extendNode(lua_S); extendMenuItem(lua_S); extendLayer(lua_S); extendControl(lua_S); extendWebsocket(lua_S); extendGLNode(lua_S); extendScrollView(lua_S); extendDrawNode(lua_S); _stack->clean(); }
AlphaReal TreeLearner::run() { set< int > tmpIdx, idxPos, idxNeg, origIdx; //ScalarLearner* pCurrentBaseLearner = 0; ScalarLearner* pTmpBaseLearner = 0; int ib = 0; vector< int > tmpVector( 2, -1 ); _pTrainingData->getIndexSet( origIdx ); _pScalaWeakHypothesisSource->setTrainingData(_pTrainingData); //train the first learner NodePoint parentNode, nodeLeft, nodeRight; parentNode._idx = 0; parentNode._parentIdx = -1; parentNode._learnerIdxSet = origIdx; calculateEdgeImprovement( parentNode ); // insert the root if ( parentNode._edgeImprovement <= 0.0 ) // the constant is the best, in this case the treelearner is equivalent to the constant learner { _baseLearners.push_back( parentNode._constantLearner ); _idxPairs.push_back( tmpVector ); this->_alpha = parentNode._constantLearner->getAlpha(); ib++; delete parentNode._learner; return parentNode._constantEnergy; } _baseLearners.push_back( parentNode._learner ); _idxPairs.push_back( tmpVector ); ib++; // put the first two children into the priority queue extendNode( parentNode, nodeLeft, nodeRight ); calculateEdgeImprovement( nodeLeft ); calculateEdgeImprovement( nodeRight ); priority_queue< NodePoint, vector<NodePoint>, greater_first_tree<NodePoint> > pq; pq.push(nodeLeft); pq.push(nodeRight); while ( ! pq.empty() ) { NodePoint currentNode = pq.top(); pq.pop(); if ( _verbose > 3 ) { cout << "Current edge imporvement: " << currentNode._edgeImprovement << endl; } if (currentNode._edgeImprovement>0) { _baseLearners.push_back( currentNode._learner ); _idxPairs.push_back( tmpVector ); //_baseLearners[ib] = currentNode._learner; delete currentNode._constantLearner; } else { _baseLearners.push_back(currentNode._constantLearner); _idxPairs.push_back( tmpVector ); //_baseLearners[ib] = currentNode._constantLearner; delete currentNode._learner; continue; } _idxPairs[ currentNode._parentIdx ][ currentNode._leftOrRightChild ] = ib; currentNode._idx = ib; ib++; if (ib >= _numBaseLearners) break; extendNode( currentNode, nodeLeft, nodeRight ); calculateEdgeImprovement( nodeLeft ); calculateEdgeImprovement( nodeRight ); pq.push(nodeLeft); pq.push(nodeRight); } while ( ! pq.empty() ) { NodePoint currentNode = pq.top(); pq.pop(); if (_verbose>3) cout << "Discarded node's edge improvement: " << currentNode._edgeImprovement << endl; if (currentNode._learner) delete currentNode._learner; delete currentNode._constantLearner; } _id = _baseLearners[0]->getId(); for(int ib = 1; ib < _baseLearners.size(); ++ib) _id += "_x_" + _baseLearners[ib]->getId(); //calculate alpha this->_alpha = 0.0; AlphaReal eps_min = 0.0, eps_pls = 0.0; //_pTrainingData->clearIndexSet(); _pTrainingData->loadIndexSet( origIdx ); for( int i = 0; i < _pTrainingData->getNumExamples(); i++ ) { vector< Label> l = _pTrainingData->getLabels( i ); for( vector< Label >::iterator it = l.begin(); it != l.end(); it++ ) { AlphaReal result = this->classify( _pTrainingData, i, it->idx ); if ( ( result * it->y ) < 0 ) eps_min += it->weight; if ( ( result * it->y ) > 0 ) eps_pls += it->weight; } } // set the smoothing value to avoid numerical problem // when theta=0. setSmoothingVal( (AlphaReal)(1.0 / _pTrainingData->getNumExamples() * 0.01 ) ); this->_alpha = getAlpha( eps_min, eps_pls ); // calculate the energy (sum of the energy of the leaves AlphaReal energy = this->getEnergy( eps_min, eps_pls ); return energy; }