Ignore:
Timestamp:
07/03/20 00:32:23 (4 years ago)
Author:
Maciej Komosinski
Message:
  • separate "0" and "0s" formats (for SHAPE_BALL_AND_STICK and SHAPE_SOLIDS, respectively)
  • converting to format list (Geno::F0_FORMAT_LIST = "0,0s")
  • (optional) declaring Model as SHAPE_BALL_AND_STICK or SHAPE_SOLIDS (or SHAPE_UNKNOWN)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/_demos/neuro_test.cpp

    r391 r972  
    11// This file is a part of Framsticks SDK.  http://www.framsticks.com/
    2 // Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
     2// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
    33// See LICENSE.txt for details.
    44
     
    1818#ifndef SDK_WITHOUT_FRAMS
    1919#include <frams/mech/creatmechobj.h>
    20 int CreatMechObject::modeltags_id=0;
    21 int CreatMechObject::mechtags_id=0;
     20int CreatMechObject::modeltags_id = 0;
     21int CreatMechObject::mechtags_id = 0;
    2222#endif
    2323
    24 ParamEntry creature_paramtab[]={0};
     24ParamEntry creature_paramtab[] = { 0 };
    2525
    2626#ifdef VEYETEST
     
    3333#define LEARNINGSTEPS 50
    3434
    35 void veyeStep(Model &m,int step)
     35void veyeStep(Model &m, int step)
    3636{
    37   static float angle=0;
     37        static float angle = 0;
    3838
    39   NeuroNetImpl::getImpl(m.getNeuro(N_Mode))->setState(step>=LEARNINGSTEPS); //0 (learning) or 1 (normal)
     39        NeuroNetImpl::getImpl(m.getNeuro(N_Mode))->setState(step >= LEARNINGSTEPS); //0 (learning) or 1 (normal)
    4040
    41         NeuroImpl *ni=NeuroNetImpl::getImpl(m.getNeuro(N_VEye));
    42   ((NI_VectorEye*)ni)->relpos.y=0;
    43   ((NI_VectorEye*)ni)->relpos.z=0;
    44   if (NeuroNetImpl::getImpl(m.getNeuro(N_Mode))->getNewState()<0.5)
    45   { //learning
    46     ((NI_VectorEye*)ni)->relpos.x=5.0*sin(2*M_PI*step/LEARNINGSTEPS);
    47   }
    48   else
    49   { //VMotor controls location of VEye
    50     angle+=NeuroNetImpl::getImpl(m.getNeuro(N_VMotor))->getState();
    51     angle=fmod((double)angle,M_PI*2.0);
    52     ((NI_VectorEye*)ni)->relpos.x=5*sin(angle);
    53   }
     41        NeuroImpl *ni = NeuroNetImpl::getImpl(m.getNeuro(N_VEye));
     42        ((NI_VectorEye*)ni)->relpos.y = 0;
     43        ((NI_VectorEye*)ni)->relpos.z = 0;
     44        if (NeuroNetImpl::getImpl(m.getNeuro(N_Mode))->getNewState() < 0.5)
     45        { //learning
     46                ((NI_VectorEye*)ni)->relpos.x = 5.0 * sin(2 * M_PI * step / LEARNINGSTEPS);
     47        }
     48        else
     49        { //VMotor controls location of VEye
     50                angle += NeuroNetImpl::getImpl(m.getNeuro(N_VMotor))->getState();
     51                angle = fmod((double)angle, M_PI * 2.0);
     52                ((NI_VectorEye*)ni)->relpos.x = 5 * sin(angle);
     53        }
    5454
    55   NeuroNetImpl::getImpl(m.getNeuro(N_Fitness))->setState(angle); //wymaga poprawy
    56   //oraz trzeba przemyslec kolejnosc get/set'ow neuronow zeby sygnal sie dobrze propagowal.
     55        NeuroNetImpl::getImpl(m.getNeuro(N_Fitness))->setState(angle); //wymaga poprawy
     56        //oraz trzeba przemyslec kolejnosc get/set'ow neuronow zeby sygnal sie dobrze propagowal.
    5757}
    5858#endif
    5959
    60 int main(int argc,char*argv[])
     60int main(int argc, char*argv[])
    6161{
    62 LoggerToStdout messages_to_stdout(LoggerBase::Enable);
    63 PreconfiguredGenetics genetics;
     62        LoggerToStdout messages_to_stdout(LoggerBase::Enable);
     63        PreconfiguredGenetics genetics;
    6464
    65 if (argc<=1)
     65        if (argc <= 1)
    6666        {
    6767                puts("Parameters: <genotype> [number of simulation steps]");
    68           return 10;
     68                return 10;
    6969        }
    70 SString gen(argv[1]);
    71 if (!strcmp(gen.c_str(),"-"))
     70        SString gen(argv[1]);
     71        if (!strcmp(gen.c_str(), "-"))
    7272        {
    73         gen=0;
    74         StdioFILEDontClose in(stdin);
    75         loadSString(&in,gen);
     73                gen = 0;
     74                StdioFILEDontClose in(stdin);
     75                loadSString(&in, gen);
    7676        }
    77 Geno g(gen);
    78 if (!g.isValid()) {puts("invalid genotype");return 5;}
    79 Model m(g);
    80 if (!m.getNeuroCount()) {puts("no neural network");return 1;}
    81 printf("%d neurons,",m.getNeuroCount());
    82 NeuroFactory neurofac;
    83 neurofac.setStandardImplementation();
    84 NeuroNetConfig nn_config(&neurofac);
    85 NeuroNetImpl *nn=new NeuroNetImpl(m,nn_config);
    86 int i; Neuro *n;
    87 if (!nn->getErrorCount()) printf(" no errors\n");
    88 else
     77        Geno g(gen);
     78        if (!g.isValid()) { puts("invalid genotype"); return 5; }
     79        Model m(g, Model::SHAPE_UNKNOWN);
     80        if (!m.getNeuroCount()) { puts("no neural network"); return 1; }
     81        printf("%d neurons,", m.getNeuroCount());
     82        NeuroFactory neurofac;
     83        neurofac.setStandardImplementation();
     84        NeuroNetConfig nn_config(&neurofac);
     85        NeuroNetImpl *nn = new NeuroNetImpl(m, nn_config);
     86        int i; Neuro *n;
     87        if (!nn->getErrorCount()) printf(" no errors\n");
     88        else
    8989        {
    90         printf(" %d errors:",nn->getErrorCount());
    91         int no_impl=0; SString no_impl_names;
    92         int init_err=0; SString init_err_names;
    93         for(i=0;i<m.getNeuroCount();i++)
     90                printf(" %d errors:", nn->getErrorCount());
     91                int no_impl = 0; SString no_impl_names;
     92                int init_err = 0; SString init_err_names;
     93                for (i = 0; i < m.getNeuroCount(); i++)
    9494                {
    95                 n=m.getNeuro(i);
    96                 NeuroImpl *ni=NeuroNetImpl::getImpl(n);
    97                 if (!ni)
     95                        n = m.getNeuro(i);
     96                        NeuroImpl *ni = NeuroNetImpl::getImpl(n);
     97                        if (!ni)
    9898                        {
    99                         if (no_impl) no_impl_names+=',';
    100                         no_impl_names+=SString::sprintf("#%d.%s",i,n->getClassName().c_str());
    101                         no_impl++;
     99                                if (no_impl) no_impl_names += ',';
     100                                no_impl_names += SString::sprintf("#%d.%s", i, n->getClassName().c_str());
     101                                no_impl++;
    102102                        }
    103                 else if (ni->status==NeuroImpl::InitError)
     103                        else if (ni->status == NeuroImpl::InitError)
    104104                        {
    105                         if (init_err) init_err_names+=',';
    106                         init_err_names+=SString::sprintf("#%d.%s",i,n->getClassName().c_str());
    107                         init_err++;
     105                                if (init_err) init_err_names += ',';
     106                                init_err_names += SString::sprintf("#%d.%s", i, n->getClassName().c_str());
     107                                init_err++;
    108108                        }
    109109                }
     110                printf("\n");
     111                if (no_impl) printf("%d x missing implementation (%s)\n", no_impl, no_impl_names.c_str());
     112                if (init_err) printf("%d x failed initialization (%s)\n", init_err, init_err_names.c_str());
     113        }
     114        int steps = 1;
     115        if (argc > 2) steps = atol(argv[2]);
     116        int st;
     117        printf("step");
     118        for (i = 0; i < m.getNeuroCount(); i++)
     119        {
     120                n = m.getNeuro(i);
     121                printf("\t#%d.%s", i, n->getClassName().c_str());
     122        }
    110123        printf("\n");
    111         if (no_impl) printf("%d x missing implementation (%s)\n",no_impl,no_impl_names.c_str());
    112         if (init_err) printf("%d x failed initialization (%s)\n",init_err,init_err_names.c_str());
    113         }
    114 int steps=1;
    115 if (argc>2) steps=atol(argv[2]);
    116 int st;
    117 printf("step");
    118 for(i=0;i<m.getNeuroCount();i++)
    119         {
    120         n=m.getNeuro(i);
    121         printf("\t#%d.%s",i,n->getClassName().c_str());
    122         }
    123 printf("\n");
    124 for(st=0;st<=steps;st++)
     124        for (st = 0; st <= steps; st++)
    125125        {
    126126#ifdef VEYETEST
    127   veyeStep(m,st);
     127                veyeStep(m, st);
    128128#endif
    129         printf("%d",st);
    130         for(i=0;i<m.getNeuroCount();i++)
     129                printf("%d", st);
     130                for (i = 0; i < m.getNeuroCount(); i++)
    131131                {
    132                 n=m.getNeuro(i);
    133                 printf("\t%g",n->state);
     132                        n = m.getNeuro(i);
     133                        printf("\t%g", n->state);
    134134                }
    135         printf("\n");
    136         nn->simulateNeuroNet();
     135                printf("\n");
     136                nn->simulateNeuroNet();
    137137        }
    138 neurofac.freeImplementation();
     138        neurofac.freeImplementation();
    139139}
Note: See TracChangeset for help on using the changeset viewer.