1 /** 2 * Copyright: © 2012-2014 Anton Gushcha 3 * License: Subject to the terms of the MIT license, as written in the included LICENSE file. 4 * Authors: NCrashed <ncrashed@gmail.com>, 5 * LeMarwin <lemarwin42@gmail.com>, 6 * Nazgull09 <nazgull90@gmail.com> 7 */ 8 module devol.individ; 9 10 import std.variant; 11 12 public 13 { 14 import devol.line; 15 } 16 17 interface IndAbstract 18 { 19 void initialize(); 20 @property Line[] program(); 21 @property void program(Line[] val); 22 23 @property Line[] memory(); 24 25 @property double fitness(); 26 @property void fitness(double val); 27 28 @property Line[] invals(); 29 @property Line[] outvals(); 30 @property void invals(Line[] val); 31 @property void outvals(Line[] val); 32 33 @property IndAbstract dup(); 34 } 35 36 class Individ : IndAbstract 37 { 38 this() 39 { 40 mProgram = new Line[0]; 41 mMemory = new Line[0]; 42 } 43 44 @property Line[] program() 45 { 46 return mProgram; 47 } 48 49 @property Line[] memory() 50 { 51 return mMemory; 52 } 53 54 @property void program(Line[] val) 55 { 56 mProgram = val; 57 } 58 59 @property string programString() 60 { 61 auto s = ""; 62 foreach( line; mProgram ) 63 { 64 s ~= line.tostring ~ "\n"; 65 } 66 return s; 67 } 68 69 @property string memoryString() 70 { 71 auto s = ""; 72 foreach( line; mMemory ) 73 { 74 s ~= line.tostring ~ "/0x0A"; 75 } 76 return s; 77 } 78 79 80 @property double fitness() 81 { 82 return mFitness; 83 } 84 85 @property void fitness(double val) 86 { 87 mFitness = val; 88 } 89 90 @property Line[] invals() 91 { 92 return inVals; 93 } 94 95 @property Line[] outvals() 96 { 97 return outVals; 98 } 99 100 @property void invals(Line[] val) 101 { 102 inVals = val; 103 } 104 105 @property void outvals(Line[] val) 106 { 107 outVals = val; 108 } 109 110 @property Individ dup() 111 { 112 auto ind = new Individ(); 113 foreach(line; mProgram) 114 ind.mProgram ~= line.dup; 115 foreach(line; mMemory) 116 ind.mMemory ~= line.dup; 117 foreach(line; inVals) 118 ind.inVals ~= line.dup; 119 foreach(line; outVals) 120 ind.outVals ~= line.dup; 121 return ind; 122 } 123 124 void initialize() {} 125 126 protected 127 { 128 Line[] mProgram; 129 Line[] mMemory; 130 131 Line[] inVals; 132 Line[] outVals; 133 134 double mFitness; 135 } 136 }