00001 #include "ECF.h" 00002 00003 // Za svaki primjer je potrebno: 00004 // a) definirati odgovarajuci EvaluateOp objekt koji se primjenjuje za evaluaciju jedinke 00005 // b) definirati genotip (po zelji i druge parametre) u konf fajlu 00006 // 00007 // Svaki primjer ima posebnu funkciju main() - otkomentirati 00008 00009 00010 // 0. primjer: kako ispitati fitnes jedinke (spremljene u ind.txt) 00011 00012 00013 00014 00015 00016 // 1. primjer: GA OneMax problem 00017 /* 00018 #include "examples/GAonemax/OneMaxEvalOp.h" 00019 int main(int argc, char **argv) 00020 { 00021 argc = 2; // hard coded za lakse isprobavanje :) 00022 argv[1] = "./examples/GAOneMax/parametri.txt"; 00023 00024 StateP state (new State); 00025 00026 //state->setEvalOp(static_cast<EvaluateOpP> (new OneMaxEvalOp)); 00027 state->setEvalOp(new OneMaxEvalOp); 00028 00029 state->initialize(argc, argv); 00030 state->run(); 00031 00032 return 0; 00033 } 00034 */ 00035 00036 00037 00038 00039 00040 // 2. primjer: GA minimizacija funkcije 00041 00042 #include "examples/GAFunctionMin/FunctionMinEvalOp.h" 00043 int main(int argc, char **argv) 00044 { 00045 // argc = 2; 00046 // argv[1] = "./examples/GAFunctionMin/parametri.txt"; 00047 00048 // PSO algoritam: 00049 //argv[1] = "./examples/GAFunctionMin/parameters_DE.txt"; 00050 00051 StateP state (new State); 00052 state->setEvalOp(new FunctionMinEvalOp); 00053 00054 state->initialize(argc, argv); 00055 state->run(); 00056 00057 return 0; 00058 00059 // 00060 // ispis populacije u txt fajl, za potrebe landscape analysis 00061 // 00062 ofstream fajl("popis.txt"); 00063 for(uint i = 0; i < state->getPopulation()->getLocalDeme()->getSize(); i++) { 00064 IndividualP ind = state->getPopulation()->getLocalDeme()->at(i); 00065 fajl << ind->fitness->getValue() << "\t"; 00066 FloatingPointP fp = boost::static_pointer_cast<FloatingPoint::FloatingPoint> (ind->getGenotype()); 00067 for(uint dim = 0; dim < fp->realValue.size(); dim++) 00068 fajl << fp->realValue[dim] << "\t"; 00069 fp = boost::static_pointer_cast<FloatingPoint::FloatingPoint> (ind->getGenotype(2)); 00070 fajl << fp->realValue[0]; 00071 fajl << "\n"; 00072 } 00073 00074 return 0; 00075 } 00076 00077 00078 00079 00080 00081 00082 namespace Tree { 00083 00084 // primjer tipa podataka 00085 struct my_type 00086 { 00087 double v; 00088 bool b; 00089 }; 00090 00091 // terminal za doticni tip 00092 class MyTerminal : public Primitives::Primitive 00093 { 00094 public: 00095 my_type value_; 00096 00097 MyTerminal() 00098 { 00099 nArguments_ = 0; 00100 } 00101 void execute(void* result, Tree& tree) 00102 { 00103 my_type& res = *(my_type*)result; 00104 res = value_; 00105 } 00106 void setValue(void* value) 00107 { 00108 value_ = *(my_type*)value; 00109 } 00110 ~MyTerminal() 00111 { } 00112 }; 00113 00114 // primjer funkcije za korisnicki tip podataka 00115 class MyFunc : public Primitives::Primitive 00116 { 00117 public: 00118 MyFunc() 00119 { 00120 nArguments_ = 2; 00121 name_ = "func"; 00122 } 00123 void execute(void* result, Tree& tree) 00124 { 00125 my_type first, second; 00126 my_type& func = *(my_type*)result; 00127 00128 getNextArgument(&first, tree); 00129 getNextArgument(&second, tree); 00130 00131 func.b = first.b && second.b; 00132 func.v = first.v + second.v; 00133 } 00134 ~MyFunc() 00135 { } 00136 }; 00137 00138 } 00139 00140 00141 00142 // 3. primjer: GP simbolicka regresija 00143 /* 00144 #include "examples/GPSymbReg/SymbRegEvalOp.h" 00145 #include "examples/GPSymbReg/zbr.h" 00146 int main(int argc, char **argv) 00147 { 00148 // argc = 2; 00149 // argv[1] = "./examples/GPSymbReg/parametri.txt"; 00150 00151 StateP state = static_cast<StateP> (new State); 00152 00153 state->setEvalOp(static_cast<EvaluateOpP> (new SymbRegEvalOp)); 00154 00155 // primjer: dodavanje korisnickog operatora 00156 // MyOpP myOp = (MyOpP) (new MyOp); 00157 // state->addOperator(myOp); 00158 00159 // primjer: dodavanje korisnickog algoritma 00160 // MyAlgP myAlg = (MyAlgP) (new MyAlg); 00161 // state->addAlgorithm(myAlg); 00162 00163 // primjer: dodavanje korisnickog genotipa 00164 // MyGenotypeP myGenotype = (MyGenotypeP) (new MyGenotype); 00165 // state->addGenotype(myGenotype); 00166 00167 // primjer: dodavanje korisnicke funkcije za stablo 00168 TreeP tree = (TreeP) new Tree::Tree; 00169 Tree::PrimitiveP zbr = (Tree::PrimitiveP) new Tree::Ad; 00170 tree->addFunction(zbr); 00171 00172 Tree::PrimitiveP myFunc = (Tree::PrimitiveP) new Tree::MyFunc; 00173 tree->addFunction(myFunc); 00174 00175 Tree::PrimitiveP myTerm = (Tree::PrimitiveP) new Tree::MyTerminal; 00176 myTerm->setName("term"); 00177 tree->addTerminal(myTerm); 00178 00179 00180 state->addGenotype(tree); 00181 00182 //for(int i = 0; i < 100; i++) { 00183 state->initialize(argc, argv); 00184 state->run(); 00185 //} 00186 00187 //std::vector<IndividualP> vec = state->getPopulation()->hof_->getBest(); 00188 //IndividualP ind = vec[0]; 00189 //state->getAlgorithm()->evaluate(ind); 00190 //XMLNode out; 00191 //ind->write(out); 00192 //std::cout << out.createXMLString() << std::endl; 00193 00194 std::vector<IndividualP> vec = state->getPopulation()->getHof()->getBest(); 00195 IndividualP ind = vec[0]; 00196 XMLNode xml2 = XMLNode::parseString("<Individual size=""1"" gen=""77""><FitnessMin value=""4.26326e-14""/><Tree size=""36"">+ + * * X * X X - * X X + X X + sin X * X * X X / - * X X X / / X X + X X </Tree></Individual>", "Individual"); 00197 ind->read(xml2); 00198 state->getAlgorithm()->evaluate(ind); 00199 std::cout << ind->toString(); 00200 00201 return 0; 00202 } 00203 */ 00204 00205 00206 //4. primjer: GA problem trgovackog putnika, 29 gradova 00207 /* 00208 #include "examples/GATSP/TSPEvalOp.h" 00209 int main(int argc, char **argv) 00210 { 00211 // argc = 2; 00212 // argv[1] = "./examples/GATSP/parameters.txt"; 00213 00214 StateP state = static_cast<StateP> (new State); 00215 00216 state->setEvalOp(static_cast<EvaluateOpP> (new TSPEvalOp)); 00217 00218 state->initialize(argc, argv); 00219 //state->getFitnessObject(); 00220 00221 state->run(); 00222 00223 return 0; 00224 } 00225 */ 00226 00227 00228 00229 //5. primjer: GA problem aproksimacije funkcije 00230 /* 00231 #include "examples/GAApprox/ApproxEvalOp.h" 00232 int main(int argc, char **argv) 00233 { 00234 // argc = 2; 00235 // argv[1] = "./examples/GAApprox/parameters.txt"; 00236 00237 StateP state(new State); 00238 00239 state->setEvalOp(EvaluateOpP (new AproxEvalOp)); 00240 00241 state->initialize(argc, argv); 00242 state->run(); 00243 00244 return 0; 00245 } 00246 */ 00247 00248 00249 00250 //6. primjer: GP evolucija pravila rasporedjivanja 00251 /* 00252 #include "examples/GPScheduling/SchedulingEvalOp.h" 00253 int main(int argc, char **argv) 00254 { 00255 argc = 2; 00256 //argv[1] = "./examples/GPScheduling/parameters.txt"; 00257 argv[1] = "./parameters.txt"; 00258 00259 StateP state = static_cast<StateP> (new State); 00260 00261 state->setEvalOp(static_cast<EvaluateOpP> (new SchedulingEvalOp)); 00262 00263 state->initialize(argc, argv); 00264 state->run(); 00265 00266 // XMLNode xInd = XMLNode::parseFile("./ind.txt", "Individual"); 00267 // IndividualP ind = (IndividualP) new Individual(state); 00268 // ind->read(xInd); 00269 // state->getAlgorithm()->evaluate(ind); 00270 // std::cout << ind->toString(); 00271 00272 return 0; 00273 } 00274 */ 00275 00276 00277 //7. primjer: XCS 00278 /* 00279 #include "examples/XCSmux/MuxEvalOp.h" 00280 #include "examples/XCSmaze/SingleObjMazeEnv.h" 00281 #include "examples/XCSmaze/SeqObjMazeEnv.h" 00282 #include "examples/XCSmaze/TwoObjMazeEnv.h" 00283 #include "examples/XCSmaze/ThreeObjMazeEnv.h" 00284 00285 int main(int argc, char **argv) 00286 { 00287 argc = 2; 00288 StateP state = static_cast<StateP> (new State); 00289 MazeEnvP maze; 00290 00291 //Multistep: 00292 00293 // - sigle-objective maze: 00294 //argv[1] = "examples/XCSmaze/single-obj params.txt"; 00295 //maze = static_cast<MazeEnvP> (new SingleObjMazeEnv(state)); 00296 //maze->setMazeFile("examples/XCSmaze/Environments/single-objective/Maze1.txt"); 00297 00298 // - multi-objective maze: 00299 //argv[1] = "examples/XCSmaze/seq-obj params.txt"; 00300 //maze = static_cast<MazeEnvP> (new SeqObjMazeEnv(state)); 00301 //maze->setMazeFile("examples/XCSmaze/Environments/multi-objective/Maze1k.txt"); 00302 00303 argv[1] = "examples/XCSmaze/three-obj params.txt"; 00304 maze = static_cast<MazeEnvP> (new ThreeObjMazeEnv(state,0)); 00305 maze->setMazeFile("examples/XCSmaze/Environments/multi-objective/Maze1em.txt"); 00306 00307 maze->setResultsFile("examples/XCSmaze/Maze1k results.txt"); 00308 state->setEvalOp(maze); 00309 00310 //Singlestep: 00311 00312 // - 6-multiplexor problem: 00313 // argv[1] = "./examples/XCSmux/parametri.txt"; 00314 // state->setEvalOp(static_cast<EvaluateOpP> (new MuxEvalOp(state))); 00315 00316 state->initialize(argc, argv); 00317 00318 state->run(); 00319 00320 int a; 00321 cin >> a; 00322 return 0; 00323 } 00324 */ 00325 00326 00327 00328 //8. primjer: Kartezijski GP - feedforward 00329 /* 00330 #include "examples/CGPFeedForward/FeedForwardEvalOp.h" 00331 #include "examples/CGPFeedForward/CGPEvalOp.h" 00332 #include "cartesian/Cartesian.h" 00333 using namespace cart; 00334 00335 int main(int argc, char **argv) 00336 { 00337 argc = 2; 00338 argv[1] = "./examples/CGPFeedForward/parameters.txt"; 00339 00340 StateP state (new State); 00341 00342 CartesianP cart (new Cartesian); 00343 00344 state->addGenotype(cart); 00345 00346 state->setEvalOp(new FunctionMinEvalOp); 00347 00348 00349 // izabrati koji tip 00350 //state->setEvalOp(new cart::FeedForwardEvalOpInt); 00351 //state->setEvalOp(static_cast<EvaluateOpP> (new cart::FeedForwardEvalOpDouble)); 00352 //state->setEvalOp(static_cast<EvaluateOpP> (new cart::CircuitEvalOpUint)); 00353 00354 state->initialize(argc, argv); 00355 state->run(); 00356 00357 return 0; 00358 } 00359 */