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();
}
Exemple #3
0
	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;
	}