示例#1
0
void Neuron::Push(shared_ptr<Algorithm> alg, NeuroCube & cube)
{
    if(bSetOEC)
        bSetOEC = true;
    if(!bPushed)
    {
        //std::cout << "Pushing " << X << " " << Y << " "<< Z << "\n";
        //bPushed = true;
        //if(bSetOEC)
        //bSetOEC = true;
        if(vInputData.size() > 0)
        {
            for(int i=0; i<vOutputs.size(); i++)
            {
                int ner = cube.getNeuron(vOutputs[i]);
                Neuron * n = &Neuron();
                if(ner == -1)
                {
                    for(int o=0; o<cube.DedicatedOutputs.size(); o++)
                    {
                        if(cube.DedicatedOutputs[o].MyPosition == vOutputs[i])
                        {
                            n = &cube.DedicatedOutputs[o];
                            break;
                        }
                    }
                }
                else
                    n = &cube.Neurons[ner];
                if(n->bSetOEC)
                    int a = 1;
                //if(!n->WasPushed())
                //n->Push(alg, cube);
                //delete &n;
            }
            Outputs = vector<double>();
            alg->CalculateOutputs(vInputData,vOutputs,vOutputWeights,Outputs, cube);
            InputEvent ie = InputEvent(vInputData,vOutputWeights,Outputs);
            vInputEvents.push_back(ie);
            iInputsSinceLastReward++;
            if(bSetOEC)
            {
                oCatcher->onOutput(vInputData);
                vInputData = vector<double>();
            }
            vInputData = vector<double>();
        }

    }
}