Ignore:
Timestamp:
05/29/20 15:20:29 (4 years ago)
Author:
Maciej Komosinski
Message:

Utility functions that provide a set of all neuron classes fulfilling given criteria now also filter neuron classes by the desired Model shape type (BALL_AND_STICK or SOLIDS)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/genetics/genooperators.cpp

    r899 r935  
    11// This file is a part of Framsticks SDK.  http://www.framsticks.com/
    2 // Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
     2// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
    33// See LICENSE.txt for details.
    44
     
    223223}
    224224
    225 int GenoOperators::getActiveNeuroClassCount()
     225int GenoOperators::getActiveNeuroClassCount(Model::ShapeType for_shape_type)
    226226{
    227227        int count = 0;
    228228        for (int i = 0; i < Neuro::getClassCount(); i++)
    229                 if (Neuro::getClass(i)->genactive)
     229        {
     230                NeuroClass *nc = Neuro::getClass(i);
     231                if (nc->isShapeTypeSupported(for_shape_type) && nc->genactive)
    230232                        count++;
     233        }
    231234        return count;
    232235}
    233236
    234 NeuroClass *GenoOperators::getRandomNeuroClass()
     237NeuroClass *GenoOperators::getRandomNeuroClass(Model::ShapeType for_shape_type)
    235238{
    236239        vector<NeuroClass *> active;
    237240        for (int i = 0; i < Neuro::getClassCount(); i++)
    238                 if (Neuro::getClass(i)->genactive)
    239                         active.push_back(Neuro::getClass(i));
     241        {
     242                NeuroClass *nc = Neuro::getClass(i);
     243                if (nc->isShapeTypeSupported(for_shape_type) && nc->genactive)
     244                        active.push_back(nc);
     245        }
    240246        if (active.size() == 0) return NULL; else return active[rndUint(active.size())];
    241247}
    242248
    243 NeuroClass *GenoOperators::getRandomNeuroClassWithOutput()
     249NeuroClass *GenoOperators::getRandomNeuroClassWithOutput(Model::ShapeType for_shape_type)
    244250{
    245251        vector<NeuroClass *> active;
    246252        for (int i = 0; i < Neuro::getClassCount(); i++)
    247                 if (Neuro::getClass(i)->genactive && Neuro::getClass(i)->getPreferredOutput() != 0)
    248                         active.push_back(Neuro::getClass(i));
     253        {
     254                NeuroClass *nc = Neuro::getClass(i);
     255                if (nc->isShapeTypeSupported(for_shape_type) && nc->genactive && nc->getPreferredOutput() != 0)
     256                        active.push_back(nc);
     257        }
    249258        if (active.size() == 0) return NULL; else return active[rndUint(active.size())];
    250259}
    251260
    252 NeuroClass *GenoOperators::getRandomNeuroClassWithInput()
     261NeuroClass *GenoOperators::getRandomNeuroClassWithInput(Model::ShapeType for_shape_type)
    253262{
    254263        vector<NeuroClass *> active;
    255264        for (int i = 0; i < Neuro::getClassCount(); i++)
    256                 if (Neuro::getClass(i)->genactive && Neuro::getClass(i)->getPreferredInputs() != 0)
    257                         active.push_back(Neuro::getClass(i));
     265        {
     266                NeuroClass *nc = Neuro::getClass(i);
     267                if (nc->isShapeTypeSupported(for_shape_type) && nc->genactive && nc->getPreferredInputs() != 0)
     268                        active.push_back(nc);
     269        }
    258270        if (active.size() == 0) return NULL; else return active[rndUint(active.size())];
    259271}
    260272
    261 NeuroClass *GenoOperators::getRandomNeuroClassWithOutputAndNoInputs()
     273NeuroClass *GenoOperators::getRandomNeuroClassWithOutputAndNoInputs(Model::ShapeType for_shape_type)
    262274{
    263275        vector<NeuroClass *> active;
    264276        for (int i = 0; i < Neuro::getClassCount(); i++)
    265                 if (Neuro::getClass(i)->genactive && Neuro::getClass(i)->getPreferredOutput() != 0 && Neuro::getClass(i)->getPreferredInputs() == 0)
    266                         active.push_back(Neuro::getClass(i));
     277        {
     278                NeuroClass *nc = Neuro::getClass(i);
     279                if (nc->isShapeTypeSupported(for_shape_type) && nc->genactive && nc->getPreferredOutput() != 0 && nc->getPreferredInputs() == 0)
     280                        active.push_back(nc);
     281        }
    267282        if (active.size() == 0) return NULL; else return active[rndUint(active.size())];
    268283}
Note: See TracChangeset for help on using the changeset viewer.