Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members  

SIG_GPSimpleFitnessFunction.cpp

00001 #include "SIGEL_GP/SIG_GPSimpleFitnessFunction.h"
00002 
00003 #include "SIGEL_Simulation/SIG_Simulation.h"
00004 #include "SIGEL_Tools/SIG_IO.h"
00005 #include "SIGEL_GP/SIG_GPSimpleRecorder.h"
00006 #include "SIGEL_Tools/SIG_Exception.h"
00007 
00008 #include <qdatetime.h>
00009 
00010 SIGEL_GP::SIG_GPSimpleFitnessFunction::SIG_GPSimpleFitnessFunction(SIGEL_Program::SIG_Program & program,
00011                                                                    SIGEL_Robot::SIG_Robot & rob,
00012                                                                    SIGEL_Environment::SIG_Environment & environment,
00013                                                                    SIGEL_Simulation::SIG_SimulationParameters & simparameter)
00014   : SIG_GPFitnessFunction(program,
00015                           rob,
00016                           environment,
00017                           simparameter,
00018                           "SimpleFitnessFunction")
00019 { };
00020 
00021 SIGEL_GP::SIG_GPSimpleFitnessFunction::~SIG_GPSimpleFitnessFunction()
00022 { };
00023 
00024 double SIGEL_GP::SIG_GPSimpleFitnessFunction::evalFitness()
00025 {
00026 
00027   SIGEL_GP::SIG_GPSimpleRecorder recorder;
00028 
00029   SIGEL_Simulation::SIG_Simulation *simulation = new SIGEL_Simulation::SIG_Simulation( rob,
00030                                                                                        environment,
00031                                                                                        program,
00032                                                                                        simparameter,
00033                                                                                        recorder );
00034 
00035   double fitness = 0;
00036 
00037   try
00038     {
00039       simulation->start();
00040     }
00041   catch (SIGEL_Tools::SIG_Exception &e)
00042     { };
00043 
00044   // delete simulation;
00045 
00046   DL_vector startPosition = normalizeRobotPosition( recorder.start,
00047                                                     recorder.startRotation );
00048 
00049   DL_vector endPosition = normalizeRobotPosition( recorder.end,
00050                                                   recorder.endRotation );
00051 
00052   if (isValid( endPosition.x ) && isValid( endPosition.y ) && isValid( endPosition.z ))
00053     {
00054       DL_vector distanceVector = endPosition;
00055 
00056       distanceVector.minusis( &startPosition );
00057 
00058       double distance = distanceVector.norm();
00059 
00060       int simulatedSeconds = QTime().secsTo( simparameter.getTimeToSimulate() );
00061 
00062       fitness = distance / simulatedSeconds;
00063     }
00064   else
00065     fitness = 0;
00066 
00067   return fitness;
00068 };

Generated at Mon Sep 3 01:32:25 2001 for PG 368 - SIGEL by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000