EvolvingObjects
eoSigBinaryFlight.h
00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
00002 
00003 //-----------------------------------------------------------------------------
00004 // eoSigBinaryFlight.h
00005 // (c) OPAC 2007, INRIA Futurs DOLPHIN
00006 /*
00007     This library is free software; you can redistribute it and/or
00008     modify it under the terms of the GNU Lesser General Public
00009     License as published by the Free Software Foundation; either
00010     version 2 of the License, or (at your option) any later version.
00011 
00012     This library is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015     Lesser General Public License for more details.
00016 
00017     You should have received a copy of the GNU Lesser General Public
00018     License along with this library; if not, write to the Free Software
00019     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00020 
00021     Contact: thomas.legrand@lifl.fr
00022                  clive.canape@inria.fr
00023  */
00024 //-----------------------------------------------------------------------------
00025 
00026 #ifndef EOSIGBINARYFLIGHT_H
00027 #define EOSIGBINARYFLIGHT_H
00028 
00029 //-----------------------------------------------------------------------------
00030 #include <eoBinaryFlight.h>
00031 //-----------------------------------------------------------------------------
00032 
00033 
00034 
00045 template < class POT > class eoSigBinaryFlight:public eoBinaryFlight < POT >
00046 {
00047 
00048 public:
00049 
00053     eoSigBinaryFlight (){slope = 1;}
00054     eoSigBinaryFlight (unsigned _slope){slope = _slope;}
00055 
00056 
00060     double sigmoid( double _value)
00061     {
00062         return(1/(1+ exp(- _value/slope)));
00063 
00064     }
00065 
00070     void operator  () (POT & _po)
00071     {
00072 
00073         for (unsigned j = 0; j < _po.size (); j++)
00074         {
00075             double sigma=rng.uniform(1);
00076 
00077             if (sigma < sigmoid(_po.velocities[j]))
00078                 _po[j]=1;
00079             else
00080                 _po[j]=0;
00081         }
00082 
00083         // invalidate the fitness because the positions have changed
00084         _po.invalidate();
00085     }
00086 
00087 private :
00088         unsigned slope;
00089 
00090 };
00091 
00092 
00093 
00094 #endif /*EOSIGBINARYFLIGHT_H */
 All Classes Namespaces Files Functions Variables Typedefs Friends