source: cpp/frams/_demos/f0_variants_test.cpp @ 1288

Last change on this file since 1288 was 999, checked in by Maciej Komosinski, 4 years ago

More consistent usage of "shapetype" (vs. "shape")

  • Property svn:eol-style set to native
File size: 4.4 KB
RevLine 
[286]1// This file is a part of Framsticks SDK.  http://www.framsticks.com/
[972]2// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
[286]3// See LICENSE.txt for details.
[121]4
[109]5#include <stdlib.h>
6#include <stdio.h>
7#include <time.h>
[382]8#include <common/virtfile/stdiofile.h>
[109]9
[145]10#include <frams/genetics/defgenoconv.h>
[109]11#include <frams/model/model.h>
[391]12#include <common/loggers/loggertostdout.h>
[109]13
[972]14void save_as_f0(SString &gen, Model &m, bool omit_default_values)
[109]15{
[972]16        // copied from Model::makeGeno() (with small changes)
[109]17
[972]18        static Param modelparam(f0_model_paramtab);
19        static Param partparam(f0_part_paramtab);
20        static Param jointparam(f0_joint_paramtab);
21        static Param neuroparam(f0_neuro_paramtab);
22        static Param connparam(f0_neuroconn_paramtab);
[109]23
[972]24        static Part defaultpart;
25        static Joint defaultjoint;
26        static Neuro defaultneuro;
27        static Model defaultmodel;
28        static NeuroConn defaultconn;
[109]29
[972]30        modelparam.select(&m);
31        gen += "m:";
32        modelparam.saveSingleLine(gen, omit_default_values ? &defaultmodel : NULL);
[109]33
[972]34        Part *p;
35        Joint *j;
36        Neuro *n;
[109]37
[972]38        for (int i = 0; p = (Part*)m.getPart(i); i++)
[109]39        {
[972]40                partparam.select(p);
41                gen += "p:";
42                partparam.saveSingleLine(gen, omit_default_values ? &defaultpart : NULL);
[109]43        }
[972]44        for (int i = 0; j = (Joint*)m.getJoint(i); i++)
[109]45        {
[972]46                jointparam.select(j);
47                jointparam.setParamTab(j->usedelta ? f0_joint_paramtab : f0_nodeltajoint_paramtab);
48                gen += "j:";
49                jointparam.saveSingleLine(gen, omit_default_values ? &defaultjoint : NULL);
[109]50        }
[972]51        for (int i = 0; n = (Neuro*)m.getNeuro(i); i++)
[109]52        {
[972]53                neuroparam.select(n);
54                gen += "n:";
55                neuroparam.saveSingleLine(gen, omit_default_values ? &defaultneuro : NULL);
[109]56        }
[972]57        for (int a = 0; n = (Neuro*)m.getNeuro(a); a++)
[109]58        { // inputs
[972]59                for (int b = 0; b < n->getInputCount(); b++)
[109]60                {
[972]61                        double w;
62                        NeuroConn nc;
63                        Neuro* n2 = n->getInput(b, w);
64                        nc.n1_refno = n->refno; nc.n2_refno = n2->refno;
65                        nc.weight = w;
66                        nc.info = n->getInputInfo(b);
67                        connparam.select(&nc);
68                        gen += "c:";
69                        connparam.saveSingleLine(gen, omit_default_values ? &defaultconn : NULL);
[109]70                }
71        }
72}
73
[972]74int main(int argc, char*argv[])
[109]75{
[972]76        LoggerToStdout messages_to_stdout(LoggerBase::Enable);
[145]77
[972]78        //without converters the application would only handle "format 0" genotypes
79        DefaultGenoConvManager gcm;
80        gcm.addDefaultConverters();
81        Geno::useConverters(&gcm);
[145]82
[972]83        Geno::Validators validators;
84        Geno::useValidators(&validators);
85        ModelGenoValidator model_validator;
86        validators += &model_validator; //This simple validator handles all cases where a converter for a particular format is available but there is no genetic operator. Converters may be less strict in detecting invalid genotypes but it is better than nothing
[145]87
[972]88        SString gen(argc > 1 ? argv[1] : "X[|G:1.23]");
89        if (!strcmp(gen.c_str(), "-"))
[109]90        {
[972]91                gen = 0;
92                StdioFILEDontClose in(stdin);
93                loadSString(&in, gen);
[109]94        }
[972]95        Geno g(gen);
96        printf("\nSource genotype: '%s'\n", g.getGenes().c_str());
97        printf("                  ( format %s %s)\n",
98                g.getFormat().c_str(), g.getComment().c_str());
[109]99
[999]100        Model m(g, Model::SHAPETYPE_UNKNOWN);//.getConverted('0'));
[109]101
[972]102        if (!m.isValid())
[109]103        {
[972]104                printf("Cannot build Model from this genotype!\n");
105                return 2;
[109]106        }
107
[986]108        printf("\nThis example shows how to save a f0 genotype using low-level ParamInterface::saveSingleLine() calls\n\n");
[109]109
[972]110        SString f0_skipping_defaults;
111        SString f0_no_skipping_defaults;
[109]112
[972]113        save_as_f0(f0_skipping_defaults, m, true);
114        save_as_f0(f0_no_skipping_defaults, m, false);
[109]115
[986]116        printf("\n==== With defdata (skips default values) ======\n%s\n", f0_skipping_defaults.c_str());
117        printf("\n==== Without defdata (saves all fields) ======\n%s\n", f0_no_skipping_defaults.c_str());
[109]118
[972]119        return 0;
[109]120}
121
122/*********************** EXAMPLE OUTPUT *********************************
123
124Source genotype: 'X[|G:1.23]'
[972]125                                  ( format 1 )
[109]126
[986]127This example shows how to save a f0 genotype using low-level ParamInterface::saveSingleLine() calls
[109]128
[986]129==== With defdata (skips default values) ======
[109]130m:
131p:
132p:1
133j:0, 1, dx=1
134n:p=1, d=N
135n:j=0, d="|:p=0.25,r=1"
136n:j=0, d=G
137c:0, 2, 1.23
138c:1, 0
139
140
[986]141==== Without defdata (saves all fields) ======
[109]142m:se=1, Vstyle=
143p:0, 0, 0, m=1, s=1, dn=1, fr=0.4, ing=0.25, as=0.25, rx=0, 0, 0, i=, Vstyle=part
144p:1, 0, 0, m=1, s=1, dn=1, fr=0.4, ing=0.25, as=0.25, rx=0, 0, 0, i=, Vstyle=part
145j:0, 1, rx=0, 0, 0, dx=1, 0, 0, stif=1, rotstif=1, stam=0.25, i=, Vstyle=joint
146n:p=1, j=-1, d=N, i=, Vstyle=neuro
147n:p=-1, j=0, d="|:p=0.25,r=1", i=, Vstyle=neuro
148n:p=-1, j=0, d=G, i=, Vstyle=neuro
149c:0, 2, 1.23, i=
150c:1, 0, 1, i=
151
152*************************************************************************/
Note: See TracBrowser for help on using the repository browser.