Changeset 742 for cpp/frams/_demos/genomanipulation.cpp
- Timestamp:
- 02/26/18 19:55:01 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/_demos/genomanipulation.cpp
r549 r742 1 1 // This file is a part of Framsticks SDK. http://www.framsticks.com/ 2 // Copyright (C) 1999-201 5Maciej Komosinski and Szymon Ulatowski.2 // Copyright (C) 1999-2018 Maciej Komosinski and Szymon Ulatowski. 3 3 // See LICENSE.txt for details. 4 4 … … 15 15 @file 16 16 Sample code: Accessing model elements 17 */17 */ 18 18 19 19 void printNiceBanner(const char* title) 20 20 { 21 printf(" #############################################\n"22 23 24 25 " #############################################\n",title);21 printf(" #############################################\n" 22 " ## ##\n" 23 " ## %-37s ##\n" 24 " ## ##\n" 25 " #############################################\n", title); 26 26 } 27 27 void printProperties(Param &pi) 28 28 { 29 printf(" # id type name group (%d properties)\n",pi.getPropCount());30 for (int i=0;i<pi.getPropCount();i++)31 { 32 const char* type=pi.type(i);33 if (*type=='p') continue;34 printf("%2d. %8s = %-20s %-3s %-10s %-10s\n",i,pi.id(i),pi.get(i).c_str(),pi.type(i),pi.name(i),pi.grname(pi.group(i)));29 printf(" # id type name group (%d properties)\n", pi.getPropCount()); 30 for (int i = 0; i < pi.getPropCount(); i++) 31 { 32 const char* type = pi.type(i); 33 if (*type == 'p') continue; 34 printf("%2d. %8s = %-20s %-3s %-10s %-10s\n", i, pi.id(i), pi.get(i).c_str(), pi.type(i), pi.name(i), pi.grname(pi.group(i))); 35 35 } 36 36 } … … 40 40 void changeOneProperty(Param &pi) 41 41 { 42 if (pi.getPropCount()<=0) return;43 int i=rand() % pi.getPropCount();44 double maxprop=1,minprop=0,def;45 pi.getMinMax(i,minprop,maxprop,def);46 printf(" Change property #%d to random value from range [%g..%g]\n",i,minprop,maxprop);47 printf(" Current value of '%s' (%s) is '%s'\n",pi.id(i),pi.name(i),pi.get(i).c_str());48 char t[100];49 sprintf(t,"%g",minprop+(rnd01)*(maxprop-minprop));50 printf(" Setting new value... [ using ParamInterface::set() ]\n");51 pi.set(i,t);52 printf(" The value is now '%s'\n",pi.get(i).c_str());42 if (pi.getPropCount() <= 0) return; 43 int i = rand() % pi.getPropCount(); 44 double maxprop = 1, minprop = 0, def; 45 pi.getMinMaxDouble(i, minprop, maxprop, def); 46 printf(" Change property #%d to random value from range [%g..%g]\n", i, minprop, maxprop); 47 printf(" Current value of '%s' (%s) is '%s'\n", pi.id(i), pi.name(i), pi.get(i).c_str()); 48 char t[100]; 49 sprintf(t, "%g", minprop + (rnd01)*(maxprop - minprop)); 50 printf(" Setting new value... [ using ParamInterface::set() ]\n"); 51 pi.setFromString(i, t); 52 printf(" The value is now '%s'\n", pi.get(i).c_str()); 53 53 } 54 54 … … 57 57 void moreAboutPart(Part* p) 58 58 { 59 printf("Here is the full listing of properties as they are printed in f0\n"60 61 62 63 64 PRINT_PROPERTIES(p->properties());65 printf("\nHowever, there is a subset of properties which may be modified more freely.\n"66 67 68 69 70 PRINT_PROPERTIES(p->extraProperties());71 printf("\nThis set of properties can vary from release to release,\n"72 73 74 75 76 p->getModel().open();77 CHANGE_ONE_PROPERTY(p->extraProperties());78 p->getModel().close();79 printf("\nLet's see f0... (check out part #%d !)\n\n%s\n", p->refno, p->getModel().getF0Geno().getGenes().c_str());59 printf("Here is the full listing of properties as they are printed in f0\n" 60 " (please compare with f0 genotype).\n" 61 "Some properties have special meaning (eg. geometry and connections groups)\n" 62 "and should be handled with care, because they influence other elements of the model.\n\n" 63 " [this data is provided by Part::properties() ]\n"); 64 PRINT_PROPERTIES(p->properties()); 65 printf("\nHowever, there is a subset of properties which may be modified more freely.\n" 66 "Properties on this list are related only to this part and can be changed\n" 67 "without much consideration. They are guaranteed to be always valid; any inconsistencies\n" 68 "will be silently repaired.\n" 69 "\n [this data is provided by Part::extraProperties() ]\n"); 70 PRINT_PROPERTIES(p->extraProperties()); 71 printf("\nThis set of properties can vary from release to release,\n" 72 "but can be safely accessed by using extraProperties() call.\n" 73 "This method accesses the full set of properies (even those\n" 74 "which appear in future releases).\n" 75 "Now we will try to change some of properties:\n\n"); 76 p->getModel().open(); 77 CHANGE_ONE_PROPERTY(p->extraProperties()); 78 p->getModel().close(); 79 printf("\nLet's see f0... (check out part #%d !)\n\n%s\n", p->refno, p->getModel().getF0Geno().getGenes().c_str()); 80 80 } 81 81 82 82 void playWithAbsolute(Joint *j) 83 83 { 84 printf("\nAbsolute Joints adapt to its Parts' positions.\n"85 86 87 j->getModel().open();88 j->part1->p.y-=0.1;89 j->getModel().close();90 printf("The Part's position is changed, but everything else stays intact:\n\n%s\n",91 84 printf("\nAbsolute Joints adapt to its Parts' positions.\n" 85 "We can move a Part, and it does not influence the second part, nor the Joint.\n" 86 "Let's move the first Part along y axis by -0.1...\n"); 87 j->getModel().open(); 88 j->part1->p.y -= 0.1; 89 j->getModel().close(); 90 printf("The Part's position is changed, but everything else stays intact:\n\n%s\n", 91 j->getModel().getF0Geno().getGenes().c_str()); 92 92 } 93 93 94 94 void playWithDelta(Joint *j) 95 95 { 96 printf("\nDelta fields (dx,dy,dz) describe relative location of the second part.\n"97 98 "Let's move the first Part (#%d) along y axis (+0.1) and change delta.z (dz) by 0.1.\n",j->part1->refno);99 j->getModel().open();100 j->part1->p.y+=0.1;101 j->d.z+=0.1;102 j->getModel().close();103 printf("Position of the second Part referenced by this joint (part #%d) is now changed:\n\n%s\n",104 105 printf("If no delta fields are defined, they will be computed automatically.\n"106 107 108 j->getModel().open();109 j->part2->p.z-=0.2;110 j->resetDelta();111 j->getModel().close();112 printf("As you can see, Joint's delta fields have altered:\n\n%s\n", j->getModel().getF0Geno().getGenes().c_str());96 printf("\nDelta fields (dx,dy,dz) describe relative location of the second part.\n" 97 "This joint will change the second Part's positions to preserve delta distance.\n" 98 "Let's move the first Part (#%d) along y axis (+0.1) and change delta.z (dz) by 0.1.\n", j->part1->refno); 99 j->getModel().open(); 100 j->part1->p.y += 0.1; 101 j->d.z += 0.1; 102 j->getModel().close(); 103 printf("Position of the second Part referenced by this joint (part #%d) is now changed:\n\n%s\n", 104 j->part2->refno, j->getModel().getF0Geno().getGenes().c_str()); 105 printf("If no delta fields are defined, they will be computed automatically.\n" 106 "You can always delete existing delta values by using Joint::resetDelta().\n" 107 "Now we will change the second Part's z position by -0.2 and call resetDelta()...\n"); 108 j->getModel().open(); 109 j->part2->p.z -= 0.2; 110 j->resetDelta(); 111 j->getModel().close(); 112 printf("As you can see, Joint's delta fields have altered:\n\n%s\n", j->getModel().getF0Geno().getGenes().c_str()); 113 113 } 114 114 115 115 void switchDelta(Joint *j) 116 116 { 117 int option=!j->isDelta();118 printf("How would this joint look like with delta option %s?\n[ by calling Joint::useDelta(%d) ]\n",option?"enabled":"disabled",option);119 j->getModel().open();120 j->useDelta( ! j->isDelta());121 j->getModel().close();122 printf("f0 is now:\n\n%s\n...so this is %s joint.\n",123 j->getModel().getF0Geno().getGenes().c_str(), option?"a delta":"an absolute");117 int option = !j->isDelta(); 118 printf("How would this joint look like with delta option %s?\n[ by calling Joint::useDelta(%d) ]\n", option ? "enabled" : "disabled", option); 119 j->getModel().open(); 120 j->useDelta(!j->isDelta()); 121 j->getModel().close(); 122 printf("f0 is now:\n\n%s\n...so this is %s joint.\n", 123 j->getModel().getF0Geno().getGenes().c_str(), option ? "a delta" : "an absolute"); 124 124 125 125 } … … 127 127 void moreAboutJoint(Joint* j) 128 128 { 129 printf("Similarly as with Part, the full list of properties comes first:\n\n");130 PRINT_PROPERTIES(j->properties());131 printf("\nActually, there are two kinds of Joints: delta and absolute.\n"132 133 j->isDelta(),j->isDelta()?"delta":"absolute");134 if (j->isDelta())135 { 136 playWithDelta(j);137 switchDelta(j);138 playWithAbsolute(j);139 } 140 else141 { 142 playWithAbsolute(j);143 switchDelta(j);144 playWithDelta(j);145 } 146 147 printf("Part references and delta fields are the 'core' properties of the Joint.\n"148 149 150 PRINT_PROPERTIES(j->extraProperties());151 printf("\nThey can be changed just like Part's extra properties:\n");152 j->getModel().open();153 CHANGE_ONE_PROPERTY(j->extraProperties());154 j->getModel().close();155 printf("And after that we have this genotype:\n\n%s\n", j->getModel().getF0Geno().getGenes().c_str());129 printf("Similarly as with Part, the full list of properties comes first:\n\n"); 130 PRINT_PROPERTIES(j->properties()); 131 printf("\nActually, there are two kinds of Joints: delta and absolute.\n" 132 "For this object, Joint::isDelta() returns %d, so this is the %s Joint.\n", 133 j->isDelta(), j->isDelta() ? "delta" : "absolute"); 134 if (j->isDelta()) 135 { 136 playWithDelta(j); 137 switchDelta(j); 138 playWithAbsolute(j); 139 } 140 else 141 { 142 playWithAbsolute(j); 143 switchDelta(j); 144 playWithDelta(j); 145 } 146 147 printf("Part references and delta fields are the 'core' properties of the Joint.\n" 148 "The other properties are available from Joint::extraProperties()\n" 149 "and at the moment are defined as follows:\n\n"); 150 PRINT_PROPERTIES(j->extraProperties()); 151 printf("\nThey can be changed just like Part's extra properties:\n"); 152 j->getModel().open(); 153 CHANGE_ONE_PROPERTY(j->extraProperties()); 154 j->getModel().close(); 155 printf("And after that we have this genotype:\n\n%s\n", j->getModel().getF0Geno().getGenes().c_str()); 156 156 } 157 157 … … 160 160 void moreAboutNeuro(Neuro* n) 161 161 { 162 printf("Basic features of Neuro object are similar to those of Part and Joint.\n" 163 "We can request a property list:\n\n"); 164 PRINT_PROPERTIES(n->properties()); 165 printf("\n...and extra properties (which are designed to be always valid and easy to change):\n\n"); 166 PRINT_PROPERTIES(n->extraProperties()); 167 printf("\nAs usual, we will change something:\n"); 168 n->getModel().open(); 169 CHANGE_ONE_PROPERTY(n->extraProperties()); 170 n->getModel().close(); 171 printf("Each neuron can have any number of inputs = weighted connections\n with other neurons.\n" 172 "According to Neuro::getInputCount(), this one has %d inputs.\n",n->getInputCount()); 173 printf("Standard API is provided for accessing those inputs (getInput(int)),\n" 174 "adding inputs (addInput(Neuro*)) and removing them (removeInput(int)).\n\n"); 175 176 printf("\nThe most unusual thing is 'details' field (d).\n" 177 "It is something like separate object with its own set of properties.\n" 178 "Currently the value of 'd' is '%s'.\n",n->getDetails().c_str()); 179 180 { 181 NeuroClass* cl=n->getClass(); 182 if (!cl) 183 printf("It should contain the class name but the meaning of '%s' is unknown\n",n->getDetails().c_str()); 184 else 185 { 186 187 printf("'%s' is the class name (Neuro::getClassName() == '%s') and means '%s'.\n", 188 cl->getName().c_str(),cl->getName().c_str(),cl->getLongName().c_str()); 189 printf("Neuro::getClass() gives you information about basic characteristic\n" 190 "of the class, that can be analyzed automatically.\n"); 191 printf("For the current object we can learn that it supports "); 192 if (cl->getPreferredInputs()<0) printf("any number of inputs"); 193 else if (cl->getPreferredInputs()==0) printf("no inputs"); 194 else printf("%d inputs",cl->getPreferredInputs()); 195 printf(" (getPreferredInputs()) "); 196 printf(cl->getPreferredOutput()?"and provides meaningful output signal (getPreferredOutput()==1).\n":"and doesn't provide useful output signal (getPreferredOutput()==0).\n"); 197 198 SyntParam p=n->classProperties(); 199 if (p.getPropCount()>0) 200 { 201 printf("The class defines its own properties:\n\n [ data provided by Neuro::classProperties() ]\n"); 202 printProperties(p); 203 printf("and they can be changed:\n"); 162 printf("Basic features of Neuro object are similar to those of Part and Joint.\n" 163 "We can request a property list:\n\n"); 164 PRINT_PROPERTIES(n->properties()); 165 printf("\n...and extra properties (which are designed to be always valid and easy to change):\n\n"); 166 PRINT_PROPERTIES(n->extraProperties()); 167 printf("\nAs usual, we will change something:\n"); 204 168 n->getModel().open(); 205 changeOneProperty(p); 206 p.update(); 169 CHANGE_ONE_PROPERTY(n->extraProperties()); 207 170 n->getModel().close(); 208 printf("After that, 'details' contains the new object: '%s'.\n",n->getDetails().c_str()); 209 } 210 else 211 printf("(This class does not have its own properties\n" 212 " - Neuro::classProperties().getPropCount()==0)\n"); 213 } 214 } 215 216 printf("The class of this object can be changed using Neuro::setClassName()\n" 217 "The following classes are available:\n" 218 " [ data provided by Neuro::getClassInfo()->getProperties() ]\n\n"); 219 printf(" # class description properties\n"); 220 for (int i=0;i<n->getClassCount();i++) 221 { 222 NeuroClass* cl=n->getClass(i); 223 Param p=cl->getProperties(); 224 printf("%2d.%6s %-20s %2d\n",i,cl->getName().c_str(),cl->getLongName().c_str(),p.getPropCount()); 225 } 226 int cl=rand() % n->getClassCount(); 227 printf("\nLet's change the Neuro's class to '%s'...\n",n->getClassName(cl).c_str()); 228 n->getModel().open(); 229 n->setClass(n->getClass(cl)); 230 { 231 SyntParam p=n->classProperties(); 232 if (p.getPropCount()>0) 233 { 234 printProperties(p); 235 changeOneProperty(p); 236 p.update(); 237 } 238 } 239 240 if (n->getInputCount()>0) 241 { 242 printf("Info for input #0 = \"%s\"\n",n->getInputInfo(0).c_str()); 243 printf("Info for input #0, field \"%s\" = \"%s\"\n", "abc", n->getInputInfo(0,"abc").c_str()); 244 n->setInputInfo(0,"test",44); 245 n->setInputInfo(0,"abc","yeah"); 246 } 247 248 n->getModel().close(); 249 printf("The final object description will be then: '%s'\nAnd the full f0 genotype:\n\n%s\n", 250 n->getDetails().c_str(), n->getModel().getF0Geno().getGenes().c_str()); 171 printf("Each neuron can have any number of inputs = weighted connections\n with other neurons.\n" 172 "According to Neuro::getInputCount(), this one has %d inputs.\n", n->getInputCount()); 173 printf("Standard API is provided for accessing those inputs (getInput(int)),\n" 174 "adding inputs (addInput(Neuro*)) and removing them (removeInput(int)).\n\n"); 175 176 printf("\nThe most unusual thing is 'details' field (d).\n" 177 "It is something like separate object with its own set of properties.\n" 178 "Currently the value of 'd' is '%s'.\n", n->getDetails().c_str()); 179 180 { 181 NeuroClass* cl = n->getClass(); 182 if (!cl) 183 printf("It should contain the class name but the meaning of '%s' is unknown\n", n->getDetails().c_str()); 184 else 185 { 186 187 printf("'%s' is the class name (Neuro::getClassName() == '%s') and means '%s'.\n", 188 cl->getName().c_str(), cl->getName().c_str(), cl->getLongName().c_str()); 189 printf("Neuro::getClass() gives you information about basic characteristic\n" 190 "of the class, that can be analyzed automatically.\n"); 191 printf("For the current object we can learn that it supports "); 192 if (cl->getPreferredInputs() < 0) printf("any number of inputs"); 193 else if (cl->getPreferredInputs() == 0) printf("no inputs"); 194 else printf("%d inputs", cl->getPreferredInputs()); 195 printf(" (getPreferredInputs()) "); 196 printf(cl->getPreferredOutput() ? "and provides meaningful output signal (getPreferredOutput()==1).\n" : "and doesn't provide useful output signal (getPreferredOutput()==0).\n"); 197 198 SyntParam p = n->classProperties(); 199 if (p.getPropCount() > 0) 200 { 201 printf("The class defines its own properties:\n\n [ data provided by Neuro::classProperties() ]\n"); 202 printProperties(p); 203 printf("and they can be changed:\n"); 204 n->getModel().open(); 205 changeOneProperty(p); 206 p.update(); 207 n->getModel().close(); 208 printf("After that, 'details' contains the new object: '%s'.\n", n->getDetails().c_str()); 209 } 210 else 211 printf("(This class does not have its own properties\n" 212 " - Neuro::classProperties().getPropCount()==0)\n"); 213 } 214 } 215 216 printf("The class of this object can be changed using Neuro::setClassName()\n" 217 "The following classes are available:\n" 218 " [ data provided by Neuro::getClassInfo()->getProperties() ]\n\n"); 219 printf(" # class description properties\n"); 220 for (int i = 0; i < n->getClassCount(); i++) 221 { 222 NeuroClass* cl = n->getClass(i); 223 Param p = cl->getProperties(); 224 printf("%2d.%6s %-20s %2d\n", i, cl->getName().c_str(), cl->getLongName().c_str(), p.getPropCount()); 225 } 226 int cl = rand() % n->getClassCount(); 227 printf("\nLet's change the Neuro's class to '%s'...\n", n->getClassName(cl).c_str()); 228 n->getModel().open(); 229 n->setClass(n->getClass(cl)); 230 { 231 SyntParam p = n->classProperties(); 232 if (p.getPropCount()>0) 233 { 234 printProperties(p); 235 changeOneProperty(p); 236 p.update(); 237 } 238 } 239 240 if (n->getInputCount() > 0) 241 { 242 printf("Info for input #0 = \"%s\"\n", n->getInputInfo(0).c_str()); 243 printf("Info for input #0, field \"%s\" = \"%s\"\n", "abc", n->getInputInfo(0, "abc").c_str()); 244 n->setInputInfo(0, "test", 44); 245 n->setInputInfo(0, "abc", "yeah"); 246 } 247 248 n->getModel().close(); 249 printf("The final object description will be then: '%s'\nAnd the full f0 genotype:\n\n%s\n", 250 n->getDetails().c_str(), n->getModel().getF0Geno().getGenes().c_str()); 251 251 252 252 … … 255 255 void findingConverters() 256 256 { 257 GenoConverter *gc=Geno::getConverters()->findConverters(0,'1');258 if (gc) printf("found converter accepting f1: \"%s\"\n",gc->name);259 SListTempl<GenoConverter*> found;260 Geno::getConverters()->findConverters(&found,-1,'0');261 printf("found %d converter(s) producing f0\n",found.size());262 } 263 264 int main(int argc, char*argv[])265 { 266 LoggerToStdout messages_to_stdout(LoggerBase::Enable); //redirect model-related errors to stdout267 PreconfiguredGenetics genetics;268 269 srand(time(0));270 printNiceBanner("Welcome to Genotype Manipulation App!");271 272 findingConverters();273 274 SString gen(argc>1?argv[1]:"X[|G:1.23]");275 if (!strcmp(gen.c_str(),"-"))276 { 277 gen=0;278 StdioFILEDontClose in(stdin);279 loadSString(&in,gen);280 } 281 Geno g(gen);282 printf("\nSource genotype: '%s'\n",g.getGenes().c_str());283 printf(" ( format %c %s)\n",284 285 286 Model m(g);//.getConverted('0'));287 288 if (!m.isValid())289 { 290 printf("Cannot build Model from this genotype!\n");291 return 2;292 } 293 printf("Converted to f0:\n%s\n",m.getF0Geno().getGenes().c_str());294 295 printf("Model contains: %d part(s)\n"296 297 " %d neuron(s)\n",m.getPartCount(),m.getJointCount(),m.getNeuroCount());298 299 printf("\nInvestigating details...\n");300 301 if (m.getPartCount()>0)302 { 303 int p=rand()%m.getPartCount();304 printNiceBanner("P A R T O B J E C T");305 printf(" (part # %d)\n",p);306 moreAboutPart(m.getPart(p));307 } 308 309 if (m.getJointCount()>0)310 { 311 int j=rand()%m.getJointCount();312 printNiceBanner("J O I N T O B J E C T");313 printf(" (joint # %d)\n",j);314 moreAboutJoint(m.getJoint(j));315 } 316 317 if (m.getNeuroCount()>0)318 { 319 int n=rand()%m.getNeuroCount();320 printNiceBanner("N E U R O O B J E C T");321 printf(" (neuro # %d)\n",n);322 moreAboutNeuro(m.getNeuro(n));257 GenoConverter *gc = Geno::getConverters()->findConverters(0, '1'); 258 if (gc) printf("found converter accepting f1: \"%s\"\n", gc->name); 259 SListTempl<GenoConverter*> found; 260 Geno::getConverters()->findConverters(&found, -1, '0'); 261 printf("found %d converter(s) producing f0\n", found.size()); 262 } 263 264 int main(int argc, char*argv[]) 265 { 266 LoggerToStdout messages_to_stdout(LoggerBase::Enable); //redirect model-related errors to stdout 267 PreconfiguredGenetics genetics; 268 269 srand(time(0)); 270 printNiceBanner("Welcome to Genotype Manipulation App!"); 271 272 findingConverters(); 273 274 SString gen(argc > 1 ? argv[1] : "X[|G:1.23]"); 275 if (!strcmp(gen.c_str(), "-")) 276 { 277 gen = 0; 278 StdioFILEDontClose in(stdin); 279 loadSString(&in, gen); 280 } 281 Geno g(gen); 282 printf("\nSource genotype: '%s'\n", g.getGenes().c_str()); 283 printf(" ( format %c %s)\n", 284 g.getFormat(), g.getComment().c_str()); 285 286 Model m(g);//.getConverted('0')); 287 288 if (!m.isValid()) 289 { 290 printf("Cannot build Model from this genotype!\n"); 291 return 2; 292 } 293 printf("Converted to f0:\n%s\n", m.getF0Geno().getGenes().c_str()); 294 295 printf("Model contains: %d part(s)\n" 296 " %d joint(s)\n" 297 " %d neuron(s)\n", m.getPartCount(), m.getJointCount(), m.getNeuroCount()); 298 299 printf("\nInvestigating details...\n"); 300 301 if (m.getPartCount() > 0) 302 { 303 int p = rand() % m.getPartCount(); 304 printNiceBanner("P A R T O B J E C T"); 305 printf(" (part # %d)\n", p); 306 moreAboutPart(m.getPart(p)); 307 } 308 309 if (m.getJointCount() > 0) 310 { 311 int j = rand() % m.getJointCount(); 312 printNiceBanner("J O I N T O B J E C T"); 313 printf(" (joint # %d)\n", j); 314 moreAboutJoint(m.getJoint(j)); 315 } 316 317 if (m.getNeuroCount() > 0) 318 { 319 int n = rand() % m.getNeuroCount(); 320 printNiceBanner("N E U R O O B J E C T"); 321 printf(" (neuro # %d)\n", n); 322 moreAboutNeuro(m.getNeuro(n)); 323 323 } 324 324 325 325 #ifdef MODEL_V1_COMPATIBLE 326 printNiceBanner("Old Neuro/NeuroItem view");327 int nc=m.old_getNeuroCount();328 printf("Model::old_getNeuroCount() = %d\n",nc);329 for (int i=0;i<nc;i++)330 { 331 Neuro *n=m.old_getNeuro(i);332 printf("neuron #%d: p=%d, j=%d, force=%g, inertia=%g, sigmoid=%g\n",333 i,n->part_refno,n->joint_refno,334 n->force,n->inertia,n->sigmo);335 int nicount=n->getItemCount();336 printf(" %d items\n",nicount);337 for (int j=0;j<nicount;j++)326 printNiceBanner("Old Neuro/NeuroItem view"); 327 int nc = m.old_getNeuroCount(); 328 printf("Model::old_getNeuroCount() = %d\n", nc); 329 for (int i = 0; i < nc; i++) 330 { 331 Neuro *n = m.old_getNeuro(i); 332 printf("neuron #%d: p=%d, j=%d, force=%g, inertia=%g, sigmoid=%g\n", 333 i, n->part_refno, n->joint_refno, 334 n->force, n->inertia, n->sigmo); 335 int nicount = n->getItemCount(); 336 printf(" %d items\n", nicount); 337 for (int j = 0; j < nicount; j++) 338 338 { 339 NeuroItem *ni=n->getNeuroItem(j);340 printf(" item #%d - '%s', conn=%d, weight=%g\n",341 j,ni->getDetails().c_str(),ni->conn_refno,ni->weight);339 NeuroItem *ni = n->getNeuroItem(j); 340 printf(" item #%d - '%s', conn=%d, weight=%g\n", 341 j, ni->getDetails().c_str(), ni->conn_refno, ni->weight); 342 342 } 343 343 } 344 printf("end.\n");344 printf("end.\n"); 345 345 #endif 346 346 347 printf("\n######### THE END ###########\n\n"348 349 350 351 352 353 354 355 return 0;356 } 347 printf("\n######### THE END ###########\n\n" 348 "Hints:\n" 349 " 1. You can redirect output: genomanipulation >filename.txt\n" 350 " 2. Each run can yield different results, because some\n" 351 " values are randomly generated.\n" 352 " 3. This application will use custom genotype passed as\n" 353 " a commandline parameter: genomanipulation XX\n" 354 "\n"); 355 return 0; 356 }
Note: See TracChangeset
for help on using the changeset viewer.