Changeset 145
- Timestamp:
- 02/26/14 20:21:22 (11 years ago)
- Location:
- cpp
- Files:
-
- 2 added
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/common/nonstd_math.cpp
r135 r145 66 66 67 67 #ifdef __BORLANDC__ 68 // there was once a problem like this: 69 // http://qc.embarcadero.com/wc/qcmain.aspx?d=5128 70 // http://www.delorie.com/djgpp/doc/libc/libc_112.html 71 // ? http://www.c-jump.com/CIS77/reference/Intel/CIS77_24319002/pg_0211.htm 72 // ? http://www.jaist.ac.jp/iscenter-new/mpc/altix/altixdata/opt/intel/vtune/doc/users_guide/mergedProjects/analyzer_ec/mergedProjects/reference_olh/mergedProjects/instructions/instruct32_hh/vc100.htm 73 // ? http://www.plantation-productions.com/Webster/www.artofasm.com/Linux/HTML/RealArithmetica2.html 74 // http://blogs.msdn.com/b/oldnewthing/archive/2008/07/03/8682463.aspx 75 // where each cast of a double into an int would cause an exception. 76 // But it was resolved by restarting windows and cleaning all intermediate compilation files :o (restarting windows was the key element! restarting BC++Builder and deleting files would not help) 68 77 69 78 #include "framsg.h" -
cpp/frams/Makefile-GDK-files
r141 r145 4 4 ALL_DIRS={common,frams,frams/canvas,frams/config,frams/errmgr,frams/genetics,frams/genetics/f0,frams/genetics/f1,frams/genetics/f2,frams/genetics/f3,frams/genetics/f4,frams/genetics/f5,frams/genetics/f6,frams/genetics/f7,frams/genetics/f8,frams/genetics/f9,frams/genetics/fF,frams/model,frams/neuro,frams/neuro/impl,frams/param,frams/test,frams/util,frams/vm/classes,frams/virtfile,frams/_demos} 5 5 6 GENOCONV_GDK_OBJS=frams/genetics/ f1/conv_f1.o frams/genetics/f9/conv_f9.o frams/genetics/fF/conv_fF.o6 GENOCONV_GDK_OBJS=frams/genetics/defgenoconv.o frams/genetics/f1/conv_f1.o frams/genetics/f9/conv_f9.o frams/genetics/fF/conv_fF.o frams/genetics/fF/fF_genotype.o 7 7 8 8 GENMAN_COMMON_OBJS=frams/genetics/genman.o frams/param/mutableparam.o frams/param/mutparamlist.o frams/neuro/geneticneuroparam.o frams/neuro/neurolibparam.o frams/vm/classes/genoobj.o frams/model/autoname.o 9 9 GENMAN_GDK_OBJS=$(GENMAN_COMMON_OBJS) frams/genetics/f9/oper_f9.o frams/genetics/fF/oper_fF.o 10 10 11 GDK_OBJS=frams/util/list.o frams/util/advlist.o frams/param/param.o frams/util/sstring.o frams/util/sstringutils.o frams/util/3d.o frams/vm/classes/3dobject.o frams/model/model.o frams/model/modelparts.o frams/neuro/neurolibrary.o frams/genetics/geno.o frams/genetics/genoconv.o frams/util/extvalue.o frams/vm/classes/collectionobj.o frams/util/hashtable.o common/framsg.o frams/util/callbacks.o frams/param/syntparam.o frams/util/multirange.o frams/util/multimap.o frams/param/paramtabobj.o frams/ genetics/defgenoconv.o frams/errmgr/errmanager.o frams/param/paramobj.o frams/genetics/oper_fx.o common/nonstd_math.o frams/errmgr/stderrors.o common/Convert.o frams/util/rndutil.o11 GDK_OBJS=frams/util/list.o frams/util/advlist.o frams/param/param.o frams/util/sstring.o frams/util/sstringutils.o frams/util/3d.o frams/vm/classes/3dobject.o frams/model/model.o frams/model/modelparts.o frams/neuro/neurolibrary.o frams/genetics/geno.o frams/genetics/genoconv.o frams/util/extvalue.o frams/vm/classes/collectionobj.o frams/util/hashtable.o common/framsg.o frams/util/callbacks.o frams/param/syntparam.o frams/util/multirange.o frams/util/multimap.o frams/param/paramtabobj.o frams/errmgr/errmanager.o frams/param/paramobj.o frams/genetics/oper_fx.o common/nonstd_math.o frams/errmgr/stderrors.o common/Convert.o frams/util/rndutil.o 12 12 13 13 14 14 #### gdk_tests 15 15 16 GDK_TEST_OBJS= frams/_demos/gdk_test.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) 16 GDK_TEST_OBJS= frams/_demos/gdk_test.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS) 17 17 18 MULTILINE_F0_OBJS=frams/_demos/multiline_f0_test.o frams/virtfile/stringfile.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) 18 MULTILINE_F0_OBJS=frams/_demos/multiline_f0_test.o frams/virtfile/stringfile.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS) 19 19 20 20 F0_VARIANTS_OBJS=frams/_demos/f0_variants_test.o frams/virtfile/stringfile.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) … … 28 28 NEURO_TEST_OBJS= frams/_demos/neuro_test.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o \ 29 29 frams/neuro/neuroimpl.o frams/neuro/neurofactory.o frams/neuro/impl/neuroimpl-simple.o frams/neuro/impl/neuroimpl-channels.o \ 30 frams/neuro/impl/neuroimpl-fuzzy.o frams/neuro/impl/neuroimpl-fuzzy-f0.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) 30 frams/neuro/impl/neuroimpl-fuzzy.o frams/neuro/impl/neuroimpl-fuzzy-f0.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS) 31 31 32 FULL_PROPS_OBJS= frams/_demos/full_props.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o frams/virtfile/stdiofile.o common/nonstd_stdio.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) 32 FULL_PROPS_OBJS= frams/_demos/full_props.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o frams/virtfile/stdiofile.o common/nonstd_stdio.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS) 33 33 34 34 SERIAL_TEST_OBJS= frams/_demos/serial_test.o frams/virtfile/virtfile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) … … 36 36 PART_SHAPES_OBJS= frams/_demos/part_shapes.o frams/virtfile/virtfile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) 37 37 38 NEURO_LAYOUT_TEST_OBJS= frams/_demos/neuro_layout_test.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) frams/canvas/nn_layout_model.o frams/canvas/nn_simple_layout.o frams/canvas/nn_smart_layout.o38 NEURO_LAYOUT_TEST_OBJS= frams/_demos/neuro_layout_test.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS) frams/canvas/nn_layout_model.o frams/canvas/nn_simple_layout.o frams/canvas/nn_smart_layout.o 39 39 40 40 GENOOPER_TEST_OBJS=frams/_demos/genooper_test.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS) -
cpp/frams/_demos/f0_variants_test.cpp
r121 r145 8 8 #include <frams/virtfile/stdiofile.h> 9 9 10 #include <frams/genetics/defgenoconv.h> 10 11 #include <frams/model/model.h> 11 #include <frams/genetics/defgenoconv.h>12 12 #include <frams/errmgr/stdouterr.h> 13 14 StdoutErrorHandler err; //redirect model-related errors to stdout15 DefaultGenoConvManager gcm; //without this object the application would only handle "format 0" genotypes16 13 17 14 void save_as_f0(SString &gen,Model &m,bool omit_default_values) … … 77 74 int main(int argc,char*argv[]) 78 75 { 76 StdoutErrorHandler err;//the default ErrorHandler constructor automatically registers this object to receive framsg messages (and in this case, redirect them to standard output) 77 78 //without converters the application would only handle "format 0" genotypes 79 DefaultGenoConvManager gcm; 80 gcm.addDefaultConverters(); 81 Geno::useConverters(gcm); 82 83 ModelGenoValidator model_validator; 84 Geno::addValidator(&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 85 79 86 SString gen(argc>1?argv[1]:"X[|G:1.23]"); 80 87 if (!strcmp(gen,"-")) -
cpp/frams/_demos/full_props.cpp
r121 r145 9 9 10 10 #include <frams/model/model.h> 11 #include <frams/genetics/defgenoconv.h>12 11 #include <frams/errmgr/stdouterr.h> 12 #include <frams/genetics/preconfigured.h> 13 13 14 14 /** … … 47 47 */ 48 48 49 //optional:50 DefaultGenoConvManager gcm; //without this object the application would only handle "format 0" genotypes51 52 49 int main(int argc,char*argv[]) 53 50 { 54 51 StdioFILE::setStdio();//setup VirtFILE::Vstdin/out/err 55 52 StdoutErrorHandler err(ErrorHandlerBase::DontBlock,VirtFILE::Vstderr); //errors -> stderr, don't interfere with stdout 53 54 PreconfiguredGenetics genetics; 56 55 57 56 bool reverse=false; -
cpp/frams/_demos/gdk_test.cpp
r121 r145 9 9 10 10 #include <frams/model/model.h> 11 #include <frams/genetics/ defgenoconv.h>11 #include <frams/genetics/preconfigured.h> 12 12 #include <frams/errmgr/stdouterr.h> 13 13 … … 18 18 19 19 StdoutErrorHandler err; //redirect model-related errors to stdout 20 DefaultGenoConvManager gcm; //without this object the application would only handle "format 0" genotypes 20 PreconfiguredGenetics genetics; 21 21 22 22 void printNiceBanner(const char* title) … … 258 258 void findingConverters() 259 259 { 260 GenoConverter *gc= gcm.findConverters(0,'1');260 GenoConverter *gc=Geno::getConverters().findConverters(0,'1'); 261 261 if (gc) printf("found converter accepting f1: \"%s\"\n",gc->name); 262 262 SListTempl<GenoConverter*> found; 263 gcm.findConverters(&found,-1,'0');263 Geno::getConverters().findConverters(&found,-1,'0'); 264 264 printf("found %d converter(s) producing f0\n",found.size()); 265 265 } -
cpp/frams/_demos/geno_test.cpp
r141 r145 3 3 // Refer to http://www.framsticks.com/ for further information. 4 4 5 #include <frams/genetics/geno.h>6 5 #include <frams/virtfile/stdiofile.h> 7 6 #include <frams/util/sstringutils.h> 8 #include <frams/genetics/defgenoconv.h> 9 #include <frams/genetics/genman.h> 7 #include <frams/genetics/preconfigured.h> 10 8 11 9 /** … … 16 14 */ 17 15 18 DefaultGenoConvManager gcm; //without this object the application would only handle "format 0" genotypes19 20 16 int main(int argc,char*argv[]) 21 17 { 22 GenMan gm; 23 Geno::validators.insert(0,&gm); //GenMan is available in this application so let's use the extended validity checking! 24 // Note: insert() makes it the first validator in the list, this is important for formats that rely on genetic operators to perform reasonable validation, 25 // otherwise the default validator (genotype converter) would "win" and most converters are less strict in detecting invalid genotypes. 18 PreconfiguredGenetics genetics; 19 26 20 if (argc<=1) 27 21 { -
cpp/frams/_demos/genoconv_test.cpp
r136 r145 10 10 #include "printconvmap.h" 11 11 #include <frams/errmgr/stdouterr.h> 12 13 StdoutErrorHandler err;14 12 15 13 /** … … 119 117 int main(int argc,char *argv[]) 120 118 { 119 StdoutErrorHandler err;//the default ErrorHandler constructor automatically registers this object to receive framsg messages (and in this case, redirect them to standard output) 120 121 121 DefaultGenoConvManager gcm; 122 gcm.addDefaultConverters(); 122 123 gcm.addConverter(new GenoConv_Test()); 123 124 gcm.addConverter(new GenoConv_Test2()); 124 125 gcm.addConverter(new GenoConv_Test3()); 126 Geno::useConverters(gcm); 127 128 ModelGenoValidator model_validator; 129 Geno::addValidator(&model_validator); 125 130 126 131 const char* src=(argc>1)?argv[1]:"X"; -
cpp/frams/_demos/genooper_test.cpp
r141 r145 3 3 // Refer to http://www.framsticks.com/ for further information. 4 4 5 #include <frams/genetics/genman.h>6 5 #include <frams/errmgr/stdouterr.h> 7 #include <frams/genetics/defgenoconv.h> 8 9 StdoutErrorHandler err; 10 DefaultGenoConvManager gcm; //without this object the application would only handle "format 0" genotypes 6 #include <frams/genetics/preconfigured.h> 11 7 12 8 void printGen(Geno &g) … … 25 21 int main(int argc, char *argv[]) 26 22 { 27 GenMan gm;28 Geno::validators.insert(0,&gm); //GenMan is available in this application so let's use the extended validity checking!29 // Note: insert() makes it the first validator in the list, this is important for formats that rely on genetic operators to perform reasonable validation, 30 // otherwise the default validator (genotype converter) would "win" and most converters are less strict in detecting invalid genotypes.31 g m.p_report(NULL, NULL);23 StdoutErrorHandler err;//the default ErrorHandler constructor automatically registers this object to receive framsg messages (and in this case, redirect them to standard output) 24 PreconfiguredGenetics genetics; 25 26 rndGetInstance().randomize(); 27 genetics.genman.p_report(NULL, NULL); 32 28 33 29 const char* src = (argc > 1) ? argv[1] : "/*9*/UUU"; 34 30 Geno gsrc(src, -1, "First"); 35 31 printGenAndTitle(gsrc, "source genotype (gsrc)"); 32 char format = gsrc.getFormat(); 36 33 37 Geno gmut = g m.Mutate(gsrc);34 Geno gmut = genetics.genman.Mutate(gsrc); 38 35 printGenAndTitle(gmut, "mutated (gmut)"); 39 36 40 Geno gxover = g m.CrossOver(gsrc, gmut);37 Geno gxover = genetics.genman.CrossOver(gsrc, gmut); 41 38 printGenAndTitle(gxover, "crossed over (gsrc and gmut)"); 42 39 43 Geno gsimplest = g m.GetSimplest('9');40 Geno gsimplest = genetics.genman.GetSimplest(format); 44 41 printGenAndTitle(gsimplest, "simplest"); 45 42 46 Geno ginvalid("IT'S REALLY WRONG", '9');43 Geno ginvalid("IT'S REALLY WRONG", format); 47 44 printGenAndTitle(ginvalid, "invalid"); 48 45 49 Geno gvalidated = g m.Validate(ginvalid);46 Geno gvalidated = genetics.genman.Validate(ginvalid); 50 47 printGenAndTitle(gvalidated, "validated"); 51 48 52 printf("\nHTMLized: %s\n", (const char*)g m.HTMLize((const char*)gvalidated.getGene()));49 printf("\nHTMLized: %s\n", (const char*)genetics.genman.HTMLize((const char*)gvalidated.getGene())); 53 50 54 51 return 0; -
cpp/frams/_demos/multiline_f0_test.cpp
r124 r145 8 8 #include <frams/virtfile/stdiofile.h> 9 9 10 #include <frams/genetics/preconfigured.h> 10 11 #include <frams/model/model.h> 11 #include <frams/genetics/defgenoconv.h>12 12 #include <frams/errmgr/stdouterr.h> 13 13 #include <frams/virtfile/stringfile.h> 14 14 15 StdoutErrorHandler err; //redirect model-related errors to stdout16 DefaultGenoConvManager gcm; //without this object the application would only handle "format 0" genotypes17 18 15 int main(int argc,char*argv[]) 19 16 { 17 StdoutErrorHandler err;//the default ErrorHandler constructor automatically registers this object to receive framsg messages (and in this case, redirect them to standard output) 18 PreconfiguredGenetics genetics; 19 20 20 SString gen(argc>1?argv[1]:"X[|G:1.23]"); 21 21 if (!strcmp(gen,"-")) -
cpp/frams/_demos/neuro_layout_test.cpp
r135 r145 3 3 // Refer to http://www.framsticks.com/ for further information. 4 4 5 #include <frams/genetics/geno.h>6 5 #include <frams/virtfile/stdiofile.h> 7 6 #include <frams/util/sstringutils.h> 8 #include <frams/genetics/ defgenoconv.h>7 #include <frams/genetics/preconfigured.h> 9 8 #include <frams/model/model.h> 10 9 #include <frams/errmgr/stdouterr.h> … … 20 19 loader_test "data/walking.gen" "Walking Lizard" | neuro_layout_test - 21 20 */ 22 23 StdoutErrorHandler err; //redirect model-related errors to stdout24 DefaultGenoConvManager gcm; //without this object the application would only handle "format 0" genotypes25 21 26 22 // stl is fun? ;-) ForwardIterator implementation for element coordinates (required by min_element/max_element) … … 87 83 int main(int argc,char*argv[]) 88 84 { 85 StdoutErrorHandler err;//the default ErrorHandler constructor automatically registers this object to receive framsg messages (and in this case, redirect them to standard output) 86 PreconfiguredGenetics genetics; 87 89 88 if (argc<=1) 90 89 { -
cpp/frams/_demos/neuro_test.cpp
r121 r145 6 6 #include <frams/virtfile/stdiofile.h> 7 7 #include <frams/util/sstringutils.h> 8 #include <frams/genetics/ defgenoconv.h>8 #include <frams/genetics/preconfigured.h> 9 9 #include <frams/neuro/neuroimpl.h> 10 10 #include <frams/neuro/neurofactory.h> … … 15 15 Sample code: Neural network tester (can run your custom neurons) 16 16 */ 17 18 StdoutErrorHandler err; //redirect model-related errors to stdout19 DefaultGenoConvManager gcm; //without this object the application would only handle "format 0" genotypes20 17 21 18 #ifndef GDK_WITHOUT_FRAMS … … 63 60 int main(int argc,char*argv[]) 64 61 { 62 StdoutErrorHandler err;//the default ErrorHandler constructor automatically registers this object to receive framsg messages (and in this case, redirect them to standard output) 63 PreconfiguredGenetics genetics; 64 65 65 if (argc<=1) 66 66 { -
cpp/frams/genetics/defgenoconv.cpp
r139 r145 41 41 #endif 42 42 43 DefaultGenoConvManager::DefaultGenoConvManager()43 void DefaultGenoConvManager::addDefaultConverters() 44 44 { 45 45 #ifdef USE_GENCONV_f10 -
cpp/frams/genetics/defgenoconv.h
r121 r145 8 8 #include "genoconv.h" 9 9 10 /// This GenoConvManager automatically registers the "standard" converters available in the GDK. 11 /// All you have to do is create a single instance of this class somewhere in your application. 12 /// @see genotest.cpp 10 /// This GenoConvManager subclass allows you to add all "standard" converters in one go 13 11 class DefaultGenoConvManager: public GenoConvManager 14 12 { 15 13 public: 16 DefaultGenoConvManager(); 14 void addDefaultConverters();///< add all converters configured in gen-config file 17 15 }; 18 16 -
cpp/frams/genetics/f9/oper_f9.cpp
r120 r145 4 4 5 5 #include "oper_f9.h" 6 #include <frams/genetics/f9/conv_f9.h>6 #include "conv_f9.h" 7 7 #include <common/nonstd.h> //randomN, rnd01 8 8 -
cpp/frams/genetics/fF/fF_genotype.h
r140 r145 8 8 #include <stdio.h> 9 9 #include "common/stl-util.h" 10 10 #include <frams/param/param.h> 11 11 12 12 struct fF_growth_params 13 13 { 14 14 int number_of_chambers; 15 double scalex, scaley, scalez; //scaling factors16 double translation; //translation factor, TF range [−1; 1]15 double scalex, scaley, scalez; 16 double translation; 17 17 double angle1, angle2; 18 18 19 static ParamEntry paramtab[]; 20 Param param; 21 19 22 fF_growth_params() 23 :param(paramtab, this) 20 24 { 21 25 reset(); … … 24 28 void reset() 25 29 { 26 number_of_chambers = 1; 27 scalex = scaley = scalez = 1; 28 translation = 1; 29 angle1 = angle2 = 0; 30 param.setDefault(); 30 31 } 31 32 32 33 bool load(const char* serialized) 33 34 { 34 return sscanf(serialized, "%d %lf %lf %lf %lf %lf %lf", &number_of_chambers, &scalex, &scaley, &scalez, &translation, &angle1, &angle2) == 7; 35 SString s = serialized; 36 int p = 0; //position in string 37 return ((param.load2(s, p)==7) && (p==s.len())); 35 38 } 36 39 37 40 string save() 38 41 { 39 return ssprintf("%d %f %f %f %f %f %f", number_of_chambers, scalex, scaley, scalez, translation, angle1, angle2); 42 SString tmp; 43 param.save2(tmp, NULL/*object containing default values for comparison*/, false/*add CR*/, false/*force field names*/); 44 return string((const char*)tmp); 40 45 } 41 46 }; -
cpp/frams/genetics/fF/oper_fF.cpp
r140 r145 4 4 5 5 #include "oper_fF.h" 6 #include <frams/genetics/f9/conv_f9.h>6 #include "fF_genotype.h" 7 7 #include <common/nonstd.h> //randomN, rnd01 8 8 9 9 10 //THIS FILE NEEDS UPDATE. OLD, UNRELATED SOURCES BELOW (COPIED FROM f9).11 12 10 #define FIELDSTRUCT GenoOper_fF 13 static ParamEntry GENOf 9param_tab[]=11 static ParamEntry GENOfFparam_tab[] = 14 12 { 15 { "Genetics: fF",1,1,},16 { "fF_mut",0,0,"Mutation probability","f 0 1 0.1",FIELD(mut_prob),"How many genes should be mutated during single mutation (1=all genes, 0.1=ten percent)",},17 { 0,},13 { "Genetics: fF", 1, 1, }, 14 { "fF_xover", 0, 0, "Averaging crossover proportion", "f 0 0.5 0.5", FIELD(xover_proportion), "0.5 => children are averaged parents.\n0.2 => children are only 20% different from parents.\n0 => each child is identical to one parent (no crossover).", }, 15 { 0, }, 18 16 }; 19 17 #undef FIELDSTRUCT … … 22 20 GenoOper_fF::GenoOper_fF() 23 21 { 24 par.setParamTab(GENOf 9param_tab);22 par.setParamTab(GENOfFparam_tab); 25 23 par.select(this); 26 24 par.setDefault(); 27 supported_format ='F';25 supported_format = 'F'; 28 26 } 29 27 30 28 int GenoOper_fF::checkValidity(const char* gene) 31 29 { 32 return GENOPER_OK; 33 if (!gene[0]) return 1; //empty is not valid 34 bool ok=true; 35 int i; 36 for(i=0;i<strlen(gene);i++) if (!strchr(turtle_commands_f9,gene[i])) {ok=false; break;} 37 return ok ? GENOPER_OK : i+1; 30 fF_growth_params par; 31 return par.load(gene) ? GENOPER_OK : 1; 38 32 } 39 33 40 ///Remove all invalid letters from the genotype41 34 int GenoOper_fF::validate(char *&gene) 42 35 { 43 SString validated; //new genotype (everything except turtle_commands_f9 is skipped)44 for(int i=0;i<strlen(gene);i++)45 if (strchr(turtle_commands_f9,gene[i])) validated+=gene[i]; //validated contains only turtle_commands_f936 fF_growth_params par; //is initialized with default values 37 par.load(gene); //loads as much as possible, other fields remain with default values 38 string validated = par.save(); 46 39 free(gene); 47 gene =strdup(validated); //reallocate40 gene = strdup(validated.c_str()); //reallocate 48 41 return GENOPER_OK; 49 42 } 50 43 51 // /Very simple mutation52 int GenoOper_fF::mutate(char *&gene, float &chg,int &method)44 //Creep-mutate one property 45 int GenoOper_fF::mutate(char *&gene, float &chg, int &method) 53 46 { 54 method=0; 55 int changes=0,len=strlen(gene); 56 int symbols=strlen(turtle_commands_f9); 57 58 for(int i=0;i<len;i++) 47 method = 0; 48 fF_growth_params par; 49 par.load(gene); 50 int which = randomN(par.param.getPropCount()); 51 bool mutated_ok = GenoOperators::mutatePropertyNaive(par.param, which); 52 if (mutated_ok) 59 53 { 60 if (rnd01<mut_prob) //normalize prob with the length of the genotype 61 { 62 char oldgene=gene[i]; 63 gene[i]=turtle_commands_f9[randomN(symbols)]; 64 if (gene[i]!=oldgene) changes++; 65 } 54 string saved = par.save(); 55 free(gene); 56 gene = strdup(saved.c_str()); //reallocate 57 chg = 1.0f / par.param.getPropCount(); 58 return GENOPER_OK; 66 59 } 67 68 if (rnd01<mut_prob) //add or delete a random char 60 else 69 61 { 70 SString newgeno(gene); 71 if (randomN(2)==0) //add 72 { 73 int symbols=strlen(turtle_commands_f9); 74 int p=randomN(len+1); //random location 75 //printf("before add: %s\n",(const char*)newgeno); 76 newgeno=newgeno.substr(0,p)+SString(turtle_commands_f9+randomN(symbols),1)+newgeno.substr(p); 77 //printf("after add: %s\n",(const char*)newgeno); 78 changes++; 79 } else if (len>1) //delete 80 { 81 int p=randomN(len); //random location 82 //printf("before delete: %s\n",(const char*)newgeno); 83 newgeno=newgeno.substr(0,p)+newgeno.substr(p+1); 84 //printf("after delete: %s\n",(const char*)newgeno); 85 changes++; 86 } 87 free(gene); 88 gene=strdup(newgeno); //reallocate 62 chg = 0; 63 return GENOPER_OPFAIL; 89 64 } 90 91 chg=(float)changes/len;92 return changes>0?GENOPER_OK:GENOPER_OPFAIL; //no changes => OPFAIL so that genman will call mutate again93 65 } 94 66 95 ///A simple one-pointcrossover96 int GenoOper_fF::crossOver(char *&g1, char *&g2,float& chg1,float& chg2)67 ///Averaging crossover 68 int GenoOper_fF::crossOver(char *&g1, char *&g2, float& chg1, float& chg2) 97 69 { 98 int len1=strlen(g1),len2=strlen(g2); 99 int p1=randomN(len1); //random cut point for first genotype 100 int p2=randomN(len2); //random cut point for second genotype 101 char *child1=(char*)malloc(p1+len2-p2+1); 102 char *child2=(char*)malloc(p2+len1-p1+1); 103 strncpy(child1,g1,p1); strcpy(child1+p1,g2+p2); 104 strncpy(child2,g2,p2); strcpy(child2+p2,g1+p1); 105 free(g1); g1=child1; 106 free(g2); g2=child2; 107 chg1=(float)p1/strlen(child1); 108 chg2=(float)p2/strlen(child2); 70 //g1 = strdup("1,0.5,0.5,0.5,0.5,1,1"); //testing... 71 //g2 = strdup("4,1, 1, 1, 1, 2,2"); //testing... 72 //xover_proportion = 0.1; //testing... 73 fF_growth_params par1; 74 par1.load(g1); 75 fF_growth_params par2; 76 par2.load(g2); 77 chg1 = xover_proportion; 78 chg2 = 1 - xover_proportion; 79 for (int i = 0; i < par1.param.getPropCount(); i++) 80 GenoOperators::linearMix(par1.param, i, par2.param, i, xover_proportion); 81 string saved = par1.save(); 82 free(g1); 83 g1 = strdup(saved.c_str()); //reallocate 84 saved = par2.save(); 85 free(g2); 86 g2 = strdup(saved.c_str()); //reallocate 109 87 return GENOPER_OK; 110 88 } … … 113 91 unsigned long GenoOper_fF::style(const char *g, int pos) 114 92 { 115 char ch=g[pos]; 116 unsigned long style=GENSTYLE_CS(0,GENSTYLE_INVALID); //default, should be changed below 117 char *ptr=strchr((char*)turtle_commands_f9,ch); 118 if (ptr) 119 { 120 int pos=ptr-turtle_commands_f9; 121 int axis=pos/2; 122 style=GENSTYLE_RGBS(axis==0?200:0,axis==1?200:0,axis==2?200:0,GENSTYLE_NONE); 123 } 93 char ch = g[pos]; 94 unsigned long style = GENSTYLE_CS(0, GENSTYLE_INVALID); //default, should be changed below 95 if (strchr("-.e 0123456789", ch) != NULL) 96 style = GENSTYLE_CS(GENCOLOR_NUMBER, GENSTYLE_NONE); 97 else if (ch == ',') 98 style = GENSTYLE_RGBS(0, 0, 0, GENSTYLE_BOLD); 124 99 return style; 125 100 } -
cpp/frams/genetics/fF/oper_fF.h
r140 r145 18 18 int crossOver(char *&g1, char *&g2, float& chg1, float& chg2); 19 19 unsigned long style(const char *g, int pos); 20 const char* getSimplest() { return " 5 0.9 0.8 0.7 0.7 0.30.7"; }20 const char* getSimplest() { return "6,0.8,0.85,0.9,0.6,0.3,0.7"; } 21 21 22 double mut_prob; //mutation probability22 double xover_proportion; 23 23 }; 24 24 -
cpp/frams/genetics/genman.cpp
r139 r145 105 105 106 106 #ifdef USE_GENMAN_f0 107 geno_fx_list.push_back(new Geno_f0);107 oper_fx_list.push_back(new Geno_f0); 108 108 #endif 109 109 #ifdef USE_GENMAN_f0FUZZY 110 geno_fx_list.push_back(new Geno_f0Fuzzy);110 oper_fx_list.push_back(new Geno_f0Fuzzy); 111 111 #endif 112 112 #ifdef USE_GENMAN_f1 113 geno_fx_list.push_back(new Geno_f1);113 oper_fx_list.push_back(new Geno_f1); 114 114 #endif 115 115 #ifdef USE_GENMAN_f2 116 geno_fx_list.push_back(new Geno_f2);116 oper_fx_list.push_back(new Geno_f2); 117 117 #endif 118 118 #ifdef USE_GENMAN_f3 119 geno_fx_list.push_back(new Geno_f3);119 oper_fx_list.push_back(new Geno_f3); 120 120 #endif 121 121 #ifdef USE_GENMAN_f4 122 geno_fx_list.push_back(new Geno_f4);122 oper_fx_list.push_back(new Geno_f4); 123 123 #endif 124 124 #ifdef USE_GENMAN_f5 125 geno_fx_list.push_back(new Geno_f5);125 oper_fx_list.push_back(new Geno_f5); 126 126 #endif 127 127 #ifdef USE_GENMAN_f6 128 geno_fx_list.push_back(new Geno_f6);128 oper_fx_list.push_back(new Geno_f6); 129 129 #endif 130 130 #ifdef USE_GENMAN_f7 131 geno_fx_list.push_back(new Geno_f7);131 oper_fx_list.push_back(new Geno_f7); 132 132 #endif 133 133 #ifdef USE_GENMAN_f8 134 geno_fx_list.push_back(new Geno_f8);134 oper_fx_list.push_back(new Geno_f8); 135 135 #endif 136 136 #ifdef USE_GENMAN_f9 137 geno_fx_list.push_back(new GenoOper_f9);137 oper_fx_list.push_back(new GenoOper_f9); 138 138 #endif 139 139 #ifdef USE_GENMAN_fF 140 geno_fx_list.push_back(new GenoOper_fF);141 #endif 142 143 seloper = new int[ geno_fx_list.size()]; //may result in a little overhead if some of the operators on the geno_fx_list concern the same genetic format140 oper_fx_list.push_back(new GenoOper_fF); 141 #endif 142 143 seloper = new int[oper_fx_list.size()]; //may result in a little overhead if some of the operators on the oper_fx_list concern the same genetic format 144 144 int selopercount = 0; 145 for (unsigned int i = 0; i < geno_fx_list.size(); i++)146 { 147 if (operformats.find( geno_fx_list[i]->supported_format) != -1) continue;145 for (unsigned int i = 0; i < oper_fx_list.size(); i++) 146 { 147 if (operformats.find(oper_fx_list[i]->supported_format) != -1) continue; 148 148 char tmp[10]; 149 149 SString id, name, type = "~"; 150 type += geno_fx_list[i]->name;150 type += oper_fx_list[i]->name; 151 151 int dup = 0; 152 for (unsigned int j = i + 1; j < geno_fx_list.size(); j++)153 if ( geno_fx_list[i]->supported_format == geno_fx_list[j]->supported_format)152 for (unsigned int j = i + 1; j < oper_fx_list.size(); j++) 153 if (oper_fx_list[i]->supported_format == oper_fx_list[j]->supported_format) 154 154 { 155 type += "~"; type += geno_fx_list[j]->name; dup++;155 type += "~"; type += oper_fx_list[j]->name; dup++; 156 156 } 157 157 sprintf(tmp, "d 0 %d ", dup); 158 158 type = SString(tmp) + type; 159 sprintf(tmp, "%c", geno_fx_list[i]->supported_format);159 sprintf(tmp, "%c", oper_fx_list[i]->supported_format); 160 160 id = "genoper_f"; id += tmp; 161 161 name = "Operators for f"; name += tmp; 162 162 seloper[selopercount] = 0; 163 operformats += geno_fx_list[i]->supported_format;163 operformats += oper_fx_list[i]->supported_format; 164 164 //printf("%x %s %s %s\n",&seloper[selopercount],(const char*)id,(const char*)type,(const char*)name); 165 165 seloperpar.addProperty(&seloper[selopercount++], id, type, name, "", PARAM_READONLY*(dup == 0)); … … 169 169 par += &seloperpar; 170 170 par += &neuronsparam; 171 for (unsigned int i = 0; i < geno_fx_list.size(); i++)172 if ( geno_fx_list[i]->par.getParamTab()) par += &geno_fx_list[i]->par;171 for (unsigned int i = 0; i < oper_fx_list.size(); i++) 172 if (oper_fx_list[i]->par.getParamTab()) par += &oper_fx_list[i]->par; 173 173 } 174 174 175 175 GenMan::~GenMan() 176 176 { 177 for (unsigned int i = 0; i < geno_fx_list.size(); i++) delete geno_fx_list[i];177 for (unsigned int i = 0; i < oper_fx_list.size(); i++) delete oper_fx_list[i]; 178 178 delete[] seloper; 179 179 } … … 181 181 void GenMan::setDefaults() 182 182 { 183 for (unsigned int i = 0; i < geno_fx_list.size(); i++)184 { 185 geno_fx_list[i]->par.setDefault();186 geno_fx_list[i]->setDefaults();183 for (unsigned int i = 0; i < oper_fx_list.size(); i++) 184 { 185 oper_fx_list[i]->par.setDefault(); 186 oper_fx_list[i]->setDefaults(); 187 187 } 188 188 localpar.setDefault(); … … 194 194 { 195 195 const char *gg = g.getGene(); 196 GenoOperators *gf = get Geno_f(g.getFormat());196 GenoOperators *gf = getOper_f(g.getFormat()); 197 197 int check1; 198 198 if (!gf) { canvalidate = false; return GENOPER_NOOPER; } … … 228 228 { 229 229 char format=geny.getFormat(); 230 GenoOperators *gf=get Geno_f(format);230 GenoOperators *gf=getOper_f(format); 231 231 if (gf==NULL) 232 232 return Geno(SString::empty(),-1,SString::empty(),SString::sprintf("GENOPER_NOOPER: Validate(): don't know how to handle genetic format %c",format)); … … 246 246 int method; //mutation method 247 247 char format=g.getFormat(); 248 GenoOperators *gf=get Geno_f(format);248 GenoOperators *gf=getOper_f(format); 249 249 if (gf==NULL) 250 250 return Geno(SString::empty(),-1,SString::empty(),SString::sprintf("GENOPER_NOOPER: Mutate(): don't know how to handle genetic format %c",format)); … … 292 292 char format = g1.getFormat(); 293 293 if (format != g2.getFormat()) return Geno(SString::empty(), -1, SString::empty(), SString::sprintf("GENOPER_NOOPER: CrossOver() does not know how to handle parents with differing genetic formats (%c and %c)", format, g2.getFormat())); 294 GenoOperators *gf = get Geno_f(format);294 GenoOperators *gf = getOper_f(format); 295 295 if (gf == NULL) 296 296 return Geno(SString::empty(), -1, SString::empty(), SString::sprintf("GENOPER_NOOPER: CrossOver(): don't know how to handle genetic format %c", format)); … … 358 358 char format = g1.getFormat(); 359 359 if (format != g2.getFormat()) return GENOPER_NOOPER; 360 GenoOperators *gf = get Geno_f(format);360 GenoOperators *gf = getOper_f(format); 361 361 if (!gf) return GENOPER_NOOPER; else return gf->similarity(g1.getGene(), g2.getGene()); 362 362 } … … 366 366 Geno G(g); 367 367 if ((pos = G.mapStringToGen(pos)) == -1) return GENSTYLE_COMMENT; 368 GenoOperators *gf = get Geno_f(G.getFormat());368 GenoOperators *gf = getOper_f(G.getFormat()); 369 369 if (!gf) return GENSTYLE_CS(0, 0); //black & valid 370 370 else return gf->style(G.getGene(), pos); … … 374 374 { 375 375 Geno G(g); 376 GenoOperators *gf = get Geno_f(G.getFormat());376 GenoOperators *gf = getOper_f(G.getFormat()); 377 377 SString geny = G.getGene(); 378 378 for (unsigned int pos = 0; pos < strlen(g); pos++) … … 448 448 Geno GenMan::GetSimplest(char format) 449 449 { 450 GenoOperators *gf = get Geno_f(format);450 GenoOperators *gf = getOper_f(format); 451 451 if (!gf) return Geno(); 452 452 SString info = "The simplest genotype of format f"; info += format; … … 458 458 { 459 459 int format = args[0].getInt() + 48; 460 if (!get Geno_f(format))460 if (!getOper_f(format)) 461 461 ret->setEmpty(); 462 462 else … … 466 466 const char *GenMan::GetOpName(char format) 467 467 { 468 GenoOperators *gf = get Geno_f(format);468 GenoOperators *gf = getOper_f(format); 469 469 if (!gf) return "n/a"; else return gf->name; 470 470 } 471 471 472 GenoOperators* GenMan::get Geno_f(char format)472 GenoOperators* GenMan::getOper_f(char format) 473 473 { 474 474 int ind = operformats.find(format); 475 475 if (ind == -1) return NULL; 476 476 int ktoryopformatu = seloper[ind]; 477 for (unsigned int i = 0; i < geno_fx_list.size(); i++)478 if ( geno_fx_list[i]->supported_format == format)479 if (ktoryopformatu == 0) return geno_fx_list[i]; else ktoryopformatu--;477 for (unsigned int i = 0; i < oper_fx_list.size(); i++) 478 if (oper_fx_list[i]->supported_format == format) 479 if (ktoryopformatu == 0) return oper_fx_list[i]; else ktoryopformatu--; 480 480 return NULL; //should never happen 481 481 } … … 519 519 { //should be updated to handle multiple operators for a single format 520 520 char *g, *g2; 521 float f; int m; 521 float f1, f2; 522 int m; 522 523 FramMessage("GenMan", "Report", "The following genetic operators are available:", 0); 523 for (unsigned int i = 0; i < geno_fx_list.size(); i++)524 for (unsigned int i = 0; i < oper_fx_list.size(); i++) 524 525 { 525 526 SString l; 526 if ( geno_fx_list[i]->checkValidity("") != GENOPER_NOOPER) l += " checkValidity";527 if ( geno_fx_list[i]->getSimplest())528 { 529 g = strdup( geno_fx_list[i]->getSimplest());527 if (oper_fx_list[i]->checkValidity("") != GENOPER_NOOPER) l += " checkValidity"; 528 if (oper_fx_list[i]->getSimplest()) 529 { 530 g = strdup(oper_fx_list[i]->getSimplest()); 530 531 g2 = strdup(g); 531 if ( geno_fx_list[i]->validate(g) != GENOPER_NOOPER) l += " validate";532 if ( geno_fx_list[i]->mutate(g, f, m) != GENOPER_NOOPER) l += " mutate";533 if ( geno_fx_list[i]->crossOver(g, g2, f, f) != GENOPER_NOOPER) l += " crossover";532 if (oper_fx_list[i]->validate(g) != GENOPER_NOOPER) l += " validate"; 533 if (oper_fx_list[i]->mutate(g, f1, m) != GENOPER_NOOPER) l += " mutate"; 534 if (oper_fx_list[i]->crossOver(g, g2, f1, f2) != GENOPER_NOOPER) l += " crossover"; 534 535 l += " getSimplest"; 535 536 free(g); free(g2); 536 537 } 537 // if ( geno_fx_list[i]->similarity("","")!=GENOPER_NOOPER) l+=" similarity";538 // if (oper_fx_list[i]->similarity("","")!=GENOPER_NOOPER) l+=" similarity"; 538 539 FMprintf("GenMan", "Report", 0, "format f%c (%s):%s", 539 geno_fx_list[i]->supported_format, (const char*)geno_fx_list[i]->name, (const char*)l);540 oper_fx_list[i]->supported_format, (const char*)oper_fx_list[i]->name, (const char*)l); 540 541 } 541 542 } -
cpp/frams/genetics/genman.h
r138 r145 7 7 8 8 #include <common/nonstd.h> 9 #include <common/nonstd_stl.h> 9 10 #include <frams/param/mutableparam.h> 10 11 #include <frams/param/mutparamlist.h> … … 12 13 #include "geno.h" 13 14 #include "oper_fx.h" 14 #include <string>15 #include <vector>16 15 17 16 #define GENSTYLE_COMMENT GENSTYLE_RGBS(0,150,0,GENSTYLE_BOLD) … … 20 19 { 21 20 int count; 22 st d::string g1, g2;21 string g1, g2; 23 22 float chg; 24 23 float fit; … … 53 52 Geno GetSimplest(char format); ///<returns pointer to the simplest genotype of \e format or empty Geno() 54 53 const char *GetOpName(char format); ///<returns pointer to the active operator set for \e format 54 const vector<GenoOperators*>& GetOperators() const { return oper_fx_list; } ///<returns the list of available genetic operators 55 55 private: 56 std::vector<GenoOperators*> geno_fx_list;57 void saveLink(st d::string prz, std::string pot, float& chg);58 GenoOperators* get Geno_f(char format);56 vector<GenoOperators*> oper_fx_list; 57 void saveLink(string prz, string pot, float& chg); 58 GenoOperators* getOper_f(char format); 59 59 SString HTMLize(const char *g, bool shorten); 60 60 public: 61 std::vector<GenoLink> GenoLinkList;61 vector<GenoLink> GenoLinkList; 62 62 int history; //remember history? 63 63 int hilite; //syntax highlighting (Style) … … 66 66 int valid_m, valid_xo, validated_m, validated_xo, invalid_m, invalid_xo, failed_m, failed_xo; 67 67 double mutchg, xochg; 68 SListTempl<char> operformats; //the list of supported_format, in the order sameas in seloperpar68 SListTempl<char> operformats; //the list of supported_format, in the same order as in seloperpar 69 69 int* seloper; //fields for seloperpar 70 70 Param localpar, localstats; -
cpp/frams/genetics/geno.cpp
r121 r145 4 4 5 5 #include "geno.h" 6 #include "genoconv.h" 6 7 #include <frams/model/model.h> 7 8 8 9 SListTempl<GenoValidator*> Geno::validators; 10 GenoConvManager *Geno::converters=NULL; 9 11 10 12 void Geno::init(const SString& genstring,char genformat,const SString& genname,const SString& comment) … … 209 211 SString Geno::getComment(void) const {return txt;} 210 212 211 class ModelGenoValidator: public GenoValidator212 {213 public:214 ModelGenoValidator();215 int testGenoValidity(Geno& g);216 };217 218 ModelGenoValidator::ModelGenoValidator()219 {220 Geno::validators+=this;221 }222 223 213 int ModelGenoValidator::testGenoValidity(Geno& g) 224 214 { … … 234 224 } 235 225 } 236 237 static ModelGenoValidator default_validator;238 226 239 227 void Geno::validate() … … 256 244 if (otherformat==getFormat()) return *this; 257 245 #ifndef NO_GENOCONVMANAGER 258 if ((otherformat=='0')&&(!m)) 259 { 260 if (!f0gen) 261 f0gen=new Geno(GenoConvManager::globalConvert(*this,otherformat)); 262 return *f0gen; 263 } 264 else 265 return GenoConvManager::globalConvert(*this,otherformat,m); 266 #else 246 if (converters) 247 { 248 if ((otherformat=='0')&&(!m)) 249 { 250 if (!f0gen) 251 f0gen=new Geno(converters->convert(*this,otherformat)); 252 return *f0gen; 253 } 254 else 255 return converters->convert(*this,otherformat,m); 256 } 257 #endif 267 258 return (otherformat==getFormat())?*this:Geno(0,0,0,"GenConvManager not available"); 268 #endif269 259 } 270 260 -
cpp/frams/genetics/geno.h
r121 r145 11 11 class MultiMap; 12 12 class Geno; 13 class GenoConvManager; 13 14 14 15 class GenoValidator … … 18 19 }; 19 20 21 /// basic GenoValidator that works by building a Model from any Geno (by converting to f0) 22 /// validation fails when the model can't be built or the genotype can't be converted 23 class ModelGenoValidator: public GenoValidator 24 { 25 public: 26 int testGenoValidity(Geno& g); 27 }; 28 20 29 /// basic information about a single genotype. 21 30 class Geno: public DestrBase 22 31 { 32 friend class Simulator;//needs to access validators directly 23 33 SString gen; 24 34 SString name; … … 103 113 104 114 void* owner; 115 116 // managing global Geno-related objects (used for validation and conversion) 117 static void addValidator(GenoValidator* gv) {validators+=gv;} 118 static void removeValidator(GenoValidator* gv) {validators-=gv;} 119 static void useConverters(GenoConvManager& gcm) {converters=&gcm;} 120 static GenoConvManager &getConverters() {return *converters;} 121 protected: 122 static GenoConvManager *converters; 105 123 static SListTempl<GenoValidator*> validators; 106 124 }; -
cpp/frams/genetics/genoconv.cpp
r121 r145 82 82 :param(this) 83 83 { 84 if (!globalobject) globalobject=this;85 84 } 86 85 … … 89 88 GenoConverter *gc; 90 89 for (converters.start();gc=(GenoConverter*)converters();) delete gc; 91 if (globalobject==this) globalobject=NULL; 92 } 93 94 GenoConvManager *GenoConvManager::globalobject=NULL; 90 } 95 91 96 92 void GenoConvManager::addConverter(GenoConverter *gc) … … 217 213 return Geno(tmp, format, in.getName(), in.getComment()); 218 214 } 219 220 Geno GenoConvManager::globalConvert(Geno &in,char format,MultiMap *map)221 {222 if (globalobject) return globalobject->convert(in,format,map);223 if (format==in.getFormat()) return in;224 return Geno(0,0,0,"GenConvManager not initialized");225 }226 227 ///////////////////////////////// -
cpp/frams/genetics/genoconv.h
r121 r145 73 73 friend class GenoConvParam; 74 74 SList converters; 75 static GenoConvManager *globalobject;76 75 public: 77 76 GenoConvManager(); 78 77 ~GenoConvManager(); 79 78 class GenoConvParam param; 80 /// select an object for use as global GenoConvManager81 void useManager(GenoConvManager *m) {globalobject=m;}82 /// get global converter83 static GenoConvManager *getGlobalObject() {return globalobject;}84 79 /// make a genotype in other format. genotype will be invalid 85 80 /// if GenoConvManager cannot convert it. 86 81 Geno convert(Geno &in,char format,MultiMap *map=0); 87 /// static conversion function (uses global GenoConvManager) 88 static Geno globalConvert(Geno &in,char format,MultiMap *map=0); 89 /// register GenoConverter 82 /// register GenoConverter, the added object will be automatically deleted when GenoConvManager is destructed (call removeConverter() if this is not desirable) 90 83 void addConverter(GenoConverter *conv); 91 84 /// unregister GenoConverter -
cpp/frams/genetics/oper_fx.h
r139 r145 81 81 public: 82 82 Param par; 83 char supported_format; ///<genotype format which is supported by this class ('6' for Geno _f6, etc.). Must be initialized in constructor83 char supported_format; ///<genotype format which is supported by this class ('6' for GenoOper_f6, 'F' for GenoOper_fF, etc.). Must be initialized in constructor 84 84 SString name; ///<name of this set of genetic operators 85 85 char **mutation_method_names; ///<array of names for mutation methods. If initialized (by new char*[]), must have entries for each method index returned by mutate(geno,chg,METHOD). If initialized, it is automatically freed by this destructor. … … 187 187 static double mutateCreepNoLimit(char type,double current,double mn,double mx); ///<returns \e current value creep-mutated with Gaussian distribution within [ \e mn , \e mx ] interval. Forced precision: 3 digits after comma. \e type must be either 'd' (integer) or 'f' (float/double). 188 188 static double mutateCreep(char type,double current,double mn,double mx); ///<just as mutateCreepNoLimit(), but forces mutated value into the [mn,mx] range using the 'reflect' approach. 189 static void setIntFromDoubleWithProbabilisticDithering(ParamInterface &p, int index, double value); ///<sets a double value in an integer field; when a value is non-integer, applies random "dithering" so that both lower and higher integer value have some chance to be set. 190 static void linearMix(ParamInterface &p1, int i1, ParamInterface &p2, int i2, double proportion); ///<mixes i1'th and i2'th properties of p1 and p2; proportion should be within [0,1]; 0.5 causes both properties to become their average. For integer properties applies random "dithering" when necessary. 189 191 static NeuroClass* getRandomNeuroClass(); ///<returns random neuroclass or NULL when no active classes. 190 192 static NeuroClass* parseNeuroClass(char *&s); ///<returns neuroclass or NULL if the string does not begin with a valid name. Advance \e s pointer.
Note: See TracChangeset
for help on using the changeset viewer.