Exemple #1
0
    bool NeuralGas::trainOneEpoch(const std::vector<std::shared_ptr<wv::Point>>& points, double epsilon)
    {
        //create vector with order of iterating by points
        std::vector<uint32_t> order;
        for (uint32_t i = 0; i < points.size(); i++)
            order.push_back(i);
        
        std::random_shuffle(order.begin(), order.end());
        uint32_t iteration = 1;
        alr::AdaptLearnRateNeuralGas alrn(0, m_AdaptLearnRateWinner, m_AdaptLearnRateNotWinner);
        double error_before = getErrorOnNeuron();

        for (uint32_t i = 0; i < order.size(); i++)
        {
            findWinners(points[order[i]].get());
            updateWeights(points[order[i]].get(), &alrn);
            incrementEdgeAgeFromWinner();
            updateEdgeWinSecWin();
            deleteOldEdges();
            
            if (iteration % m_Lambda == 0)
            {
                insertNode(); 
            }
            
            decreaseAllErrors();
            iteration++;
        }
        double error_after = getErrorOnNeuron();
        
        log_netw->info((boost::format("Error before %g. Error after %g") % error_before % error_after).str());
        log_netw->info((boost::format("Network size: %d neurons") % m_Neurons.size()).str()); 
        return (error_before - getErrorOnNeuron() > epsilon);
    }
void GraphDrawingScene::notify(Subject *subject)
{
    _graph = (Graph*)subject;
    // get the last added nodes, only these nodes have to be linked with observers
    addNewNodes(_graph->getLastAddedNodes());
    // add all the new edges and link these with observers
    addNewEdges(_graph->getLastAddedEdges());
    // remove old nodes and edges
    deleteOldNodes();
    deleteOldEdges();
    _cachedNode = NULL;
}