diff --git a/trunk/paradiseo-peo/examples/.deps/main.Po b/trunk/paradiseo-peo/examples/.deps/main.Po new file mode 100644 index 000000000..45c757a88 --- /dev/null +++ b/trunk/paradiseo-peo/examples/.deps/main.Po @@ -0,0 +1,1123 @@ +main.o main.o: main.cpp shared/param.h shared/route_init.h \ + /home/adrian/workspace/installs/eo/src/eoInit.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/algorithm \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algobase.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/c++config.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-32.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/cpu_defines.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cstring \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cstddef \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/climits \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/include/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cstdlib \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/c++locale.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cstdio \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/c++io.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/gthr.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/bits/sched.h \ + /usr/include/signal.h /usr/include/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ + /usr/include/bits/confname.h /usr/include/getopt.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cctype \ + /usr/include/ctype.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stringfwd.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/postypes.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cwchar \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ctime \ + /usr/include/stdint.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/functexcept.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/exception_defines.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_pair.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/cpp_type_traits.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator_base_types.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator_base_funcs.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/concept_check.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/debug/debug.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_construct.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/new \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/exception \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_uninitialized.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_heap.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_tempbuf.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/memory \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/allocator.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/c++allocator.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ext/new_allocator.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_raw_storage_iter.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/limits \ + /home/adrian/workspace/installs/eo/src/eoOp.h \ + /home/adrian/workspace/installs/eo/src/eoObject.h \ + /home/adrian/workspace/installs/eo/src/utils/eoData.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iostream \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ostream \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ios \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/char_traits.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/localefwd.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ios_base.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/atomicity.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/atomic_word.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/locale_classes.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/string \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.tcc \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/streambuf \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/streambuf.tcc \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/basic_ios.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/streambuf_iterator.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/locale_facets.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cwctype \ + /usr/include/wctype.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/ctype_base.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/ctype_inline.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/codecvt.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/time_members.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/messages_members.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/basic_ios.tcc \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/locale \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/locale_facets.tcc \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/typeinfo \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/istream \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/istream.tcc \ + /home/adrian/workspace/installs/eo/src/utils/compatibility.h \ + /home/adrian/workspace/installs/eo/src/eoPrintable.h \ + /home/adrian/workspace/installs/eo/src/eoFunctor.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/functional \ + /home/adrian/workspace/installs/eo/src/utils/eoRNG.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/vector \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_bvector.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc \ + /home/adrian/workspace/installs/eo/src/eoPersistent.h \ + /home/adrian/workspace/installs/eo/src/eoPrintable.h \ + /home/adrian/workspace/installs/eo/src/eoSTLFunctor.h \ + /home/adrian/workspace/installs/eo/src/eoFunctor.h \ + /home/adrian/workspace/installs/eo/src/utils/eoRndGenerators.h \ + /home/adrian/workspace/installs/eo/src/utils/eoRNG.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/stdexcept \ + shared/route.h /home/adrian/workspace/installs/eo/src/eoVector.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iterator \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stream_iterator.h \ + /home/adrian/workspace/installs/eo/src/EO.h \ + /home/adrian/workspace/installs/eo/src/eoPersistent.h shared/node.h \ + shared/route_eval.h /home/adrian/workspace/installs/eo/src/eoEvalFunc.h \ + shared/order_xover.h shared/edge_xover.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/set \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_tree.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_set.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_multiset.h \ + shared/partial_mapped_xover.h shared/city_swap.h \ + shared/part_route_eval.h shared/merge_route_eval.h \ + ../src/peoAggEvalFunc.h shared/two_opt_init.h \ + /home/adrian/workspace/installs/mo/src/moMoveInit.h shared/two_opt.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/utility \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_relops.h \ + /home/adrian/workspace/installs/mo/src/moMove.h shared/two_opt_next.h \ + /home/adrian/workspace/installs/mo/src/moNextMove.h \ + shared/two_opt_incr_eval.h \ + /home/adrian/workspace/installs/mo/src/moMoveIncrEval.h \ + ../src/paradiseo ../src/paradiseo.h \ + /home/adrian/workspace/installs/eo/src/eo \ + /home/adrian/workspace/installs/eo/src/eoScalarFitness.h \ + /home/adrian/workspace/installs/eo/src/utils/rnd_generators.h \ + /home/adrian/workspace/installs/eo/src/apply.h \ + /home/adrian/workspace/installs/eo/src/other/eoString.h \ + /home/adrian/workspace/installs/eo/src/utils/eoUniformInit.h \ + /home/adrian/workspace/installs/eo/src/utils/eoRealBounds.h \ + /home/adrian/workspace/installs/eo/src/eoGenOp.h \ + /home/adrian/workspace/installs/eo/src/eoPopulator.h \ + /home/adrian/workspace/installs/eo/src/eoPop.h \ + /home/adrian/workspace/installs/eo/src/eoSelectOne.h \ + /home/adrian/workspace/installs/eo/src/eoFunctorStore.h \ + /usr/include/assert.h \ + /home/adrian/workspace/installs/eo/src/eoCloneOps.h \ + /home/adrian/workspace/installs/eo/src/eoOpContainer.h \ + /home/adrian/workspace/installs/eo/src/eoProportionalCombinedOp.h \ + /home/adrian/workspace/installs/eo/src/eoSGAGenOp.h \ + /home/adrian/workspace/installs/eo/src/eoGenOp.h \ + /home/adrian/workspace/installs/eo/src/eoInvalidateOps.h \ + /home/adrian/workspace/installs/eo/src/eoPropGAGenOp.h \ + /home/adrian/workspace/installs/eo/src/eoPopEvalFunc.h \ + /home/adrian/workspace/installs/eo/src/eoEvalFuncPtr.h \ + /home/adrian/workspace/installs/eo/src/eoCombinedContinue.h \ + /home/adrian/workspace/installs/eo/src/eoContinue.h \ + /home/adrian/workspace/installs/eo/src/eoGenContinue.h \ + /home/adrian/workspace/installs/eo/src/utils/eoParam.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cmath \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/cmath.tcc \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/sstream \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/sstream.tcc \ + /home/adrian/workspace/installs/eo/src/eoSteadyFitContinue.h \ + /home/adrian/workspace/installs/eo/src/eoEvalContinue.h \ + /home/adrian/workspace/installs/eo/src/eoEvalFuncCounter.h \ + /home/adrian/workspace/installs/eo/src/eoFitContinue.h \ + /home/adrian/workspace/installs/eo/src/eoPeriodicContinue.h \ + /home/adrian/workspace/installs/eo/src/eoCtrlCContinue.h \ + /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ + /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ + /usr/include/asm/sigcontext.h /usr/include/asm-i386/sigcontext.h \ + /usr/include/bits/sigstack.h /usr/include/sys/ucontext.h \ + /usr/include/bits/sigthread.h \ + /home/adrian/workspace/installs/eo/src/eoRandomSelect.h \ + /home/adrian/workspace/installs/eo/src/eoSequentialSelect.h \ + /home/adrian/workspace/installs/eo/src/utils/eoData.h \ + /home/adrian/workspace/installs/eo/src/utils/eoRNG.h \ + /home/adrian/workspace/installs/eo/src/eoSelectOne.h \ + /home/adrian/workspace/installs/eo/src/eoDetTournamentSelect.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/numeric \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_numeric.h \ + /home/adrian/workspace/installs/eo/src/utils/selectors.h \ + /home/adrian/workspace/installs/eo/src/eoProportionalSelect.h \ + /home/adrian/workspace/installs/eo/src/eoFitnessScalingSelect.h \ + /home/adrian/workspace/installs/eo/src/eoSelectFromWorth.h \ + /home/adrian/workspace/installs/eo/src/eoPerf2Worth.h \ + /home/adrian/workspace/installs/eo/src/eoLinearFitScaling.h \ + /home/adrian/workspace/installs/eo/src/eoRankingSelect.h \ + /home/adrian/workspace/installs/eo/src/eoRanking.h \ + /home/adrian/workspace/installs/eo/src/eoStochTournamentSelect.h \ + /home/adrian/workspace/installs/eo/src/eoSharingSelect.h \ + /home/adrian/workspace/installs/eo/src/eoSharing.h \ + /home/adrian/workspace/installs/eo/src/utils/eoDistance.h \ + /home/adrian/workspace/installs/eo/src/eoTruncatedSelectOne.h \ + /home/adrian/workspace/installs/eo/src/eoSelect.h \ + /home/adrian/workspace/installs/eo/src/utils/eoHowMany.h \ + /home/adrian/workspace/installs/eo/src/eoSelectPerc.h \ + /home/adrian/workspace/installs/eo/src/eoSelectNumber.h \ + /home/adrian/workspace/installs/eo/src/eoSelectMany.h \ + /home/adrian/workspace/installs/eo/src/eoTruncatedSelectMany.h \ + /home/adrian/workspace/installs/eo/src/eoDetSelect.h \ + /home/adrian/workspace/installs/eo/src/eoGeneralBreeder.h \ + /home/adrian/workspace/installs/eo/src/eoBreed.h \ + /home/adrian/workspace/installs/eo/src/eoTransform.h \ + /home/adrian/workspace/installs/eo/src/eoMergeReduce.h \ + /home/adrian/workspace/installs/eo/src/eoMerge.h \ + /home/adrian/workspace/installs/eo/src/eoReduce.h \ + /home/adrian/workspace/installs/eo/src/eoReplacement.h \ + /home/adrian/workspace/installs/eo/src/eoReduceMerge.h \ + /home/adrian/workspace/installs/eo/src/eoSurviveAndDie.h \ + /home/adrian/workspace/installs/eo/src/eoSGATransform.h \ + /home/adrian/workspace/installs/eo/src/eoInvalidateOps.h \ + /home/adrian/workspace/installs/eo/src/eoParetoRanking.h \ + /home/adrian/workspace/installs/eo/src/eoDominanceMap.h \ + /home/adrian/workspace/installs/eo/src/eoNDSorting.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cassert \ + /home/adrian/workspace/installs/eo/src/eoEasyEA.h \ + /home/adrian/workspace/installs/eo/src/eoAlgo.h \ + /home/adrian/workspace/installs/eo/src/eoPopAlgo.h \ + /home/adrian/workspace/installs/eo/src/eoSGA.h \ + /home/adrian/workspace/installs/eo/src/utils/checkpointing \ + /home/adrian/workspace/installs/eo/src/utils/eoParser.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/map \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_multimap.h \ + /home/adrian/workspace/installs/eo/src/utils/eoParam.h \ + /home/adrian/workspace/installs/eo/src/utils/eoState.h \ + /home/adrian/workspace/installs/eo/src/utils/eoUpdater.h \ + /home/adrian/workspace/installs/eo/src/utils/eoMonitor.h \ + /home/adrian/workspace/installs/eo/src/utils/eoFileMonitor.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/fstream \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/basic_file.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/fstream.tcc \ + /home/adrian/workspace/installs/eo/src/utils/eoStdoutMonitor.h \ + /home/adrian/workspace/installs/eo/src/utils/eoGnuplot1DMonitor.h \ + /home/adrian/workspace/installs/eo/src/utils/eoGnuplot.h \ + /home/adrian/workspace/installs/eo/src/utils/pipecom.h \ + /home/adrian/workspace/installs/eo/src/utils/pipecom.h \ + /home/adrian/workspace/installs/eo/src/utils/eoGnuplot1DSnapshot.h \ + /home/adrian/workspace/installs/eo/src/utils/eoRealVectorBounds.h \ + /home/adrian/workspace/installs/eo/src/utils/eoRealBounds.h \ + /home/adrian/workspace/installs/eo/src/utils/pipecom.h \ + /home/adrian/workspace/installs/eo/src/utils/eoFileSnapshot.h \ + /home/adrian/workspace/installs/eo/src/utils/eoGnuplot.h \ + /home/adrian/workspace/installs/eo/src/utils/eoCheckPoint.h \ + /home/adrian/workspace/installs/eo/src/utils/eoStat.h \ + /home/adrian/workspace/installs/eo/src/eoParetoFitness.h \ + /home/adrian/workspace/installs/eo/src/utils/eoScalarFitnessStat.h \ + /home/adrian/workspace/installs/eo/src/utils/eoRealVectorBounds.h \ + /home/adrian/workspace/installs/eo/src/utils/eoAssembledFitnessStat.h \ + /home/adrian/workspace/installs/eo/src/eoScalarFitnessAssembled.h \ + /home/adrian/workspace/installs/eo/src/utils/eoFDCStat.h \ + /home/adrian/workspace/installs/eo/src/utils/eoMOFitnessStat.h \ + /home/adrian/workspace/installs/eo/src/utils/eoPopStat.h \ + /home/adrian/workspace/installs/eo/src/utils/eoTimeCounter.h \ + /home/adrian/workspace/installs/eo/src/utils/eoIntBounds.h \ + /home/adrian/workspace/installs/eo/src/other/external_eo \ + /home/adrian/workspace/installs/eo/src/other/eoExternalEO.h \ + /home/adrian/workspace/installs/eo/src/other/eoExternalOpFunctions.h \ + /home/adrian/workspace/installs/eo/src/eoCounter.h \ + /home/adrian/workspace/installs/mo/src/mo \ + /home/adrian/workspace/installs/mo/src/mo.h \ + /home/adrian/workspace/installs/mo/src/moAspirCrit.h \ + /home/adrian/workspace/installs/mo/src/moAlgo.h \ + /home/adrian/workspace/installs/mo/src/moBestImprSelect.h \ + /home/adrian/workspace/installs/mo/src/moMoveSelect.h \ + /home/adrian/workspace/installs/mo/src/moCoolSched.h \ + /home/adrian/workspace/installs/mo/src/moEasyCoolSched.h \ + /home/adrian/workspace/installs/mo/src/moFirstImprSelect.h \ + /home/adrian/workspace/installs/mo/src/moGenSolContinue.h \ + /home/adrian/workspace/installs/mo/src/moSolContinue.h \ + /home/adrian/workspace/installs/mo/src/moHC.h \ + /home/adrian/workspace/installs/mo/src/moMoveExpl.h \ + /home/adrian/workspace/installs/mo/src/moHCMoveLoopExpl.h \ + /home/adrian/workspace/installs/mo/src/moMoveLoopExpl.h \ + /home/adrian/workspace/installs/mo/src/moMoveInit.h \ + /home/adrian/workspace/installs/mo/src/moNextMove.h \ + /home/adrian/workspace/installs/mo/src/moMoveIncrEval.h \ + /home/adrian/workspace/installs/mo/src/moImprBestFitAspirCrit.h \ + /home/adrian/workspace/installs/mo/src/moItRandNextMove.h \ + /home/adrian/workspace/installs/mo/src/moRandMove.h \ + /home/adrian/workspace/installs/mo/src/moLSCheckPoint.h \ + /home/adrian/workspace/installs/mo/src/moMove.h \ + /home/adrian/workspace/installs/mo/src/moNoAspirCrit.h \ + /home/adrian/workspace/installs/mo/src/moRandImprSelect.h \ + /home/adrian/workspace/installs/mo/src/moSA.h \ + /home/adrian/workspace/installs/mo/src/moTabuList.h \ + /home/adrian/workspace/installs/mo/src/moTS.h \ + /home/adrian/workspace/installs/mo/src/moTSMoveLoopExpl.h \ + ../src/core/peo_init.h ../src/core/peo_run.h ../src/core/peo_fin.h \ + ../src/core/eoVector_comm.h ../src/core/messaging.h ../src/peoEA.h \ + ../src/peoPopEval.h ../src/core/service.h ../src/core/communicable.h \ + /usr/include/semaphore.h /usr/include/bits/semaphore.h \ + ../src/core/thread.h ../src/peoTransform.h ../src/core/runner.h \ + ../src/core/peo_debug.h ../src/peoSeqTransform.h \ + ../src/peoParaSGATransform.h ../src/core/thread.h \ + ../src/core/messaging.h ../src/peoSeqPopEval.h ../src/peoParaPopEval.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/queue \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/deque \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_deque.h \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/deque.tcc \ + /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_queue.h \ + ../src/peoAggEvalFunc.h ../src/peoNoAggEvalFunc.h \ + ../src/core/ring_topo.h ../src/core/topology.h \ + ../src/core/cooperative.h ../src/core/runner.h \ + ../src/peoAsyncIslandMig.h ../src/core/topology.h \ + ../src/core/cooperative.h ../src/core/eoPop_comm.h \ + ../src/peoSyncIslandMig.h ../src/peoSyncMultiStart.h \ + /home/adrian/workspace/installs/mo/src/moAlgo.h + +shared/param.h: + +shared/route_init.h: + +/home/adrian/workspace/installs/eo/src/eoInit.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/algorithm: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algobase.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/c++config.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-32.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/cpu_defines.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cstring: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cstddef: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/climits: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/include/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/include/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cstdlib: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/c++locale.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cstdio: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/wchar.h: + +/usr/include/gconv.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stdarg.h: + +/usr/include/bits/sys_errlist.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/clocale: + +/usr/include/locale.h: + +/usr/include/bits/locale.h: + +/usr/include/langinfo.h: + +/usr/include/nl_types.h: + +/usr/include/iconv.h: + +/usr/include/libintl.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/c++io.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/gthr.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/bits/sched.h: + +/usr/include/signal.h: + +/usr/include/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/getopt.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cctype: + +/usr/include/ctype.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stringfwd.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/postypes.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cwchar: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ctime: + +/usr/include/stdint.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/functexcept.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/exception_defines.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_pair.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/cpp_type_traits.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator_base_types.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator_base_funcs.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/concept_check.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/debug/debug.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_construct.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/new: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/exception: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_uninitialized.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_heap.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_tempbuf.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/memory: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/allocator.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/c++allocator.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ext/new_allocator.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_raw_storage_iter.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/limits: + +/home/adrian/workspace/installs/eo/src/eoOp.h: + +/home/adrian/workspace/installs/eo/src/eoObject.h: + +/home/adrian/workspace/installs/eo/src/utils/eoData.h: + +/usr/include/math.h: + +/usr/include/bits/huge_val.h: + +/usr/include/bits/huge_valf.h: + +/usr/include/bits/huge_vall.h: + +/usr/include/bits/inf.h: + +/usr/include/bits/nan.h: + +/usr/include/bits/mathdef.h: + +/usr/include/bits/mathcalls.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iostream: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ostream: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ios: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/char_traits.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/localefwd.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ios_base.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/atomicity.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/atomic_word.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/locale_classes.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/string: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.tcc: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/streambuf: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/streambuf.tcc: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/basic_ios.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/streambuf_iterator.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/locale_facets.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cwctype: + +/usr/include/wctype.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/ctype_base.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/ctype_inline.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/codecvt.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/time_members.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/messages_members.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/basic_ios.tcc: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/locale: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/locale_facets.tcc: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/typeinfo: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/istream: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/istream.tcc: + +/home/adrian/workspace/installs/eo/src/utils/compatibility.h: + +/home/adrian/workspace/installs/eo/src/eoPrintable.h: + +/home/adrian/workspace/installs/eo/src/eoFunctor.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/functional: + +/home/adrian/workspace/installs/eo/src/utils/eoRNG.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/vector: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_bvector.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc: + +/home/adrian/workspace/installs/eo/src/eoPersistent.h: + +/home/adrian/workspace/installs/eo/src/eoPrintable.h: + +/home/adrian/workspace/installs/eo/src/eoSTLFunctor.h: + +/home/adrian/workspace/installs/eo/src/eoFunctor.h: + +/home/adrian/workspace/installs/eo/src/utils/eoRndGenerators.h: + +/home/adrian/workspace/installs/eo/src/utils/eoRNG.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/stdexcept: + +shared/route.h: + +/home/adrian/workspace/installs/eo/src/eoVector.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iterator: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stream_iterator.h: + +/home/adrian/workspace/installs/eo/src/EO.h: + +/home/adrian/workspace/installs/eo/src/eoPersistent.h: + +shared/node.h: + +shared/route_eval.h: + +/home/adrian/workspace/installs/eo/src/eoEvalFunc.h: + +shared/order_xover.h: + +shared/edge_xover.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/set: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_tree.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_set.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_multiset.h: + +shared/partial_mapped_xover.h: + +shared/city_swap.h: + +shared/part_route_eval.h: + +shared/merge_route_eval.h: + +../src/peoAggEvalFunc.h: + +shared/two_opt_init.h: + +/home/adrian/workspace/installs/mo/src/moMoveInit.h: + +shared/two_opt.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/utility: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_relops.h: + +/home/adrian/workspace/installs/mo/src/moMove.h: + +shared/two_opt_next.h: + +/home/adrian/workspace/installs/mo/src/moNextMove.h: + +shared/two_opt_incr_eval.h: + +/home/adrian/workspace/installs/mo/src/moMoveIncrEval.h: + +../src/paradiseo: + +../src/paradiseo.h: + +/home/adrian/workspace/installs/eo/src/eo: + +/home/adrian/workspace/installs/eo/src/eoScalarFitness.h: + +/home/adrian/workspace/installs/eo/src/utils/rnd_generators.h: + +/home/adrian/workspace/installs/eo/src/apply.h: + +/home/adrian/workspace/installs/eo/src/other/eoString.h: + +/home/adrian/workspace/installs/eo/src/utils/eoUniformInit.h: + +/home/adrian/workspace/installs/eo/src/utils/eoRealBounds.h: + +/home/adrian/workspace/installs/eo/src/eoGenOp.h: + +/home/adrian/workspace/installs/eo/src/eoPopulator.h: + +/home/adrian/workspace/installs/eo/src/eoPop.h: + +/home/adrian/workspace/installs/eo/src/eoSelectOne.h: + +/home/adrian/workspace/installs/eo/src/eoFunctorStore.h: + +/usr/include/assert.h: + +/home/adrian/workspace/installs/eo/src/eoCloneOps.h: + +/home/adrian/workspace/installs/eo/src/eoOpContainer.h: + +/home/adrian/workspace/installs/eo/src/eoProportionalCombinedOp.h: + +/home/adrian/workspace/installs/eo/src/eoSGAGenOp.h: + +/home/adrian/workspace/installs/eo/src/eoGenOp.h: + +/home/adrian/workspace/installs/eo/src/eoInvalidateOps.h: + +/home/adrian/workspace/installs/eo/src/eoPropGAGenOp.h: + +/home/adrian/workspace/installs/eo/src/eoPopEvalFunc.h: + +/home/adrian/workspace/installs/eo/src/eoEvalFuncPtr.h: + +/home/adrian/workspace/installs/eo/src/eoCombinedContinue.h: + +/home/adrian/workspace/installs/eo/src/eoContinue.h: + +/home/adrian/workspace/installs/eo/src/eoGenContinue.h: + +/home/adrian/workspace/installs/eo/src/utils/eoParam.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cmath: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/cmath.tcc: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/sstream: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/sstream.tcc: + +/home/adrian/workspace/installs/eo/src/eoSteadyFitContinue.h: + +/home/adrian/workspace/installs/eo/src/eoEvalContinue.h: + +/home/adrian/workspace/installs/eo/src/eoEvalFuncCounter.h: + +/home/adrian/workspace/installs/eo/src/eoFitContinue.h: + +/home/adrian/workspace/installs/eo/src/eoPeriodicContinue.h: + +/home/adrian/workspace/installs/eo/src/eoCtrlCContinue.h: + +/usr/include/bits/signum.h: + +/usr/include/bits/siginfo.h: + +/usr/include/bits/sigaction.h: + +/usr/include/bits/sigcontext.h: + +/usr/include/asm/sigcontext.h: + +/usr/include/asm-i386/sigcontext.h: + +/usr/include/bits/sigstack.h: + +/usr/include/sys/ucontext.h: + +/usr/include/bits/sigthread.h: + +/home/adrian/workspace/installs/eo/src/eoRandomSelect.h: + +/home/adrian/workspace/installs/eo/src/eoSequentialSelect.h: + +/home/adrian/workspace/installs/eo/src/utils/eoData.h: + +/home/adrian/workspace/installs/eo/src/utils/eoRNG.h: + +/home/adrian/workspace/installs/eo/src/eoSelectOne.h: + +/home/adrian/workspace/installs/eo/src/eoDetTournamentSelect.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/numeric: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_numeric.h: + +/home/adrian/workspace/installs/eo/src/utils/selectors.h: + +/home/adrian/workspace/installs/eo/src/eoProportionalSelect.h: + +/home/adrian/workspace/installs/eo/src/eoFitnessScalingSelect.h: + +/home/adrian/workspace/installs/eo/src/eoSelectFromWorth.h: + +/home/adrian/workspace/installs/eo/src/eoPerf2Worth.h: + +/home/adrian/workspace/installs/eo/src/eoLinearFitScaling.h: + +/home/adrian/workspace/installs/eo/src/eoRankingSelect.h: + +/home/adrian/workspace/installs/eo/src/eoRanking.h: + +/home/adrian/workspace/installs/eo/src/eoStochTournamentSelect.h: + +/home/adrian/workspace/installs/eo/src/eoSharingSelect.h: + +/home/adrian/workspace/installs/eo/src/eoSharing.h: + +/home/adrian/workspace/installs/eo/src/utils/eoDistance.h: + +/home/adrian/workspace/installs/eo/src/eoTruncatedSelectOne.h: + +/home/adrian/workspace/installs/eo/src/eoSelect.h: + +/home/adrian/workspace/installs/eo/src/utils/eoHowMany.h: + +/home/adrian/workspace/installs/eo/src/eoSelectPerc.h: + +/home/adrian/workspace/installs/eo/src/eoSelectNumber.h: + +/home/adrian/workspace/installs/eo/src/eoSelectMany.h: + +/home/adrian/workspace/installs/eo/src/eoTruncatedSelectMany.h: + +/home/adrian/workspace/installs/eo/src/eoDetSelect.h: + +/home/adrian/workspace/installs/eo/src/eoGeneralBreeder.h: + +/home/adrian/workspace/installs/eo/src/eoBreed.h: + +/home/adrian/workspace/installs/eo/src/eoTransform.h: + +/home/adrian/workspace/installs/eo/src/eoMergeReduce.h: + +/home/adrian/workspace/installs/eo/src/eoMerge.h: + +/home/adrian/workspace/installs/eo/src/eoReduce.h: + +/home/adrian/workspace/installs/eo/src/eoReplacement.h: + +/home/adrian/workspace/installs/eo/src/eoReduceMerge.h: + +/home/adrian/workspace/installs/eo/src/eoSurviveAndDie.h: + +/home/adrian/workspace/installs/eo/src/eoSGATransform.h: + +/home/adrian/workspace/installs/eo/src/eoInvalidateOps.h: + +/home/adrian/workspace/installs/eo/src/eoParetoRanking.h: + +/home/adrian/workspace/installs/eo/src/eoDominanceMap.h: + +/home/adrian/workspace/installs/eo/src/eoNDSorting.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/cassert: + +/home/adrian/workspace/installs/eo/src/eoEasyEA.h: + +/home/adrian/workspace/installs/eo/src/eoAlgo.h: + +/home/adrian/workspace/installs/eo/src/eoPopAlgo.h: + +/home/adrian/workspace/installs/eo/src/eoSGA.h: + +/home/adrian/workspace/installs/eo/src/utils/checkpointing: + +/home/adrian/workspace/installs/eo/src/utils/eoParser.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/map: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_multimap.h: + +/home/adrian/workspace/installs/eo/src/utils/eoParam.h: + +/home/adrian/workspace/installs/eo/src/utils/eoState.h: + +/home/adrian/workspace/installs/eo/src/utils/eoUpdater.h: + +/home/adrian/workspace/installs/eo/src/utils/eoMonitor.h: + +/home/adrian/workspace/installs/eo/src/utils/eoFileMonitor.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/fstream: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/i486-linux-gnu/bits/basic_file.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/fstream.tcc: + +/home/adrian/workspace/installs/eo/src/utils/eoStdoutMonitor.h: + +/home/adrian/workspace/installs/eo/src/utils/eoGnuplot1DMonitor.h: + +/home/adrian/workspace/installs/eo/src/utils/eoGnuplot.h: + +/home/adrian/workspace/installs/eo/src/utils/pipecom.h: + +/home/adrian/workspace/installs/eo/src/utils/pipecom.h: + +/home/adrian/workspace/installs/eo/src/utils/eoGnuplot1DSnapshot.h: + +/home/adrian/workspace/installs/eo/src/utils/eoRealVectorBounds.h: + +/home/adrian/workspace/installs/eo/src/utils/eoRealBounds.h: + +/home/adrian/workspace/installs/eo/src/utils/pipecom.h: + +/home/adrian/workspace/installs/eo/src/utils/eoFileSnapshot.h: + +/home/adrian/workspace/installs/eo/src/utils/eoGnuplot.h: + +/home/adrian/workspace/installs/eo/src/utils/eoCheckPoint.h: + +/home/adrian/workspace/installs/eo/src/utils/eoStat.h: + +/home/adrian/workspace/installs/eo/src/eoParetoFitness.h: + +/home/adrian/workspace/installs/eo/src/utils/eoScalarFitnessStat.h: + +/home/adrian/workspace/installs/eo/src/utils/eoRealVectorBounds.h: + +/home/adrian/workspace/installs/eo/src/utils/eoAssembledFitnessStat.h: + +/home/adrian/workspace/installs/eo/src/eoScalarFitnessAssembled.h: + +/home/adrian/workspace/installs/eo/src/utils/eoFDCStat.h: + +/home/adrian/workspace/installs/eo/src/utils/eoMOFitnessStat.h: + +/home/adrian/workspace/installs/eo/src/utils/eoPopStat.h: + +/home/adrian/workspace/installs/eo/src/utils/eoTimeCounter.h: + +/home/adrian/workspace/installs/eo/src/utils/eoIntBounds.h: + +/home/adrian/workspace/installs/eo/src/other/external_eo: + +/home/adrian/workspace/installs/eo/src/other/eoExternalEO.h: + +/home/adrian/workspace/installs/eo/src/other/eoExternalOpFunctions.h: + +/home/adrian/workspace/installs/eo/src/eoCounter.h: + +/home/adrian/workspace/installs/mo/src/mo: + +/home/adrian/workspace/installs/mo/src/mo.h: + +/home/adrian/workspace/installs/mo/src/moAspirCrit.h: + +/home/adrian/workspace/installs/mo/src/moAlgo.h: + +/home/adrian/workspace/installs/mo/src/moBestImprSelect.h: + +/home/adrian/workspace/installs/mo/src/moMoveSelect.h: + +/home/adrian/workspace/installs/mo/src/moCoolSched.h: + +/home/adrian/workspace/installs/mo/src/moEasyCoolSched.h: + +/home/adrian/workspace/installs/mo/src/moFirstImprSelect.h: + +/home/adrian/workspace/installs/mo/src/moGenSolContinue.h: + +/home/adrian/workspace/installs/mo/src/moSolContinue.h: + +/home/adrian/workspace/installs/mo/src/moHC.h: + +/home/adrian/workspace/installs/mo/src/moMoveExpl.h: + +/home/adrian/workspace/installs/mo/src/moHCMoveLoopExpl.h: + +/home/adrian/workspace/installs/mo/src/moMoveLoopExpl.h: + +/home/adrian/workspace/installs/mo/src/moMoveInit.h: + +/home/adrian/workspace/installs/mo/src/moNextMove.h: + +/home/adrian/workspace/installs/mo/src/moMoveIncrEval.h: + +/home/adrian/workspace/installs/mo/src/moImprBestFitAspirCrit.h: + +/home/adrian/workspace/installs/mo/src/moItRandNextMove.h: + +/home/adrian/workspace/installs/mo/src/moRandMove.h: + +/home/adrian/workspace/installs/mo/src/moLSCheckPoint.h: + +/home/adrian/workspace/installs/mo/src/moMove.h: + +/home/adrian/workspace/installs/mo/src/moNoAspirCrit.h: + +/home/adrian/workspace/installs/mo/src/moRandImprSelect.h: + +/home/adrian/workspace/installs/mo/src/moSA.h: + +/home/adrian/workspace/installs/mo/src/moTabuList.h: + +/home/adrian/workspace/installs/mo/src/moTS.h: + +/home/adrian/workspace/installs/mo/src/moTSMoveLoopExpl.h: + +../src/core/peo_init.h: + +../src/core/peo_run.h: + +../src/core/peo_fin.h: + +../src/core/eoVector_comm.h: + +../src/core/messaging.h: + +../src/peoEA.h: + +../src/peoPopEval.h: + +../src/core/service.h: + +../src/core/communicable.h: + +/usr/include/semaphore.h: + +/usr/include/bits/semaphore.h: + +../src/core/thread.h: + +../src/peoTransform.h: + +../src/core/runner.h: + +../src/core/peo_debug.h: + +../src/peoSeqTransform.h: + +../src/peoParaSGATransform.h: + +../src/core/thread.h: + +../src/core/messaging.h: + +../src/peoSeqPopEval.h: + +../src/peoParaPopEval.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/queue: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/deque: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_deque.h: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/deque.tcc: + +/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_queue.h: + +../src/peoAggEvalFunc.h: + +../src/peoNoAggEvalFunc.h: + +../src/core/ring_topo.h: + +../src/core/topology.h: + +../src/core/cooperative.h: + +../src/core/runner.h: + +../src/peoAsyncIslandMig.h: + +../src/core/topology.h: + +../src/core/cooperative.h: + +../src/core/eoPop_comm.h: + +../src/peoSyncIslandMig.h: + +../src/peoSyncMultiStart.h: + +/home/adrian/workspace/installs/mo/src/moAlgo.h: diff --git a/trunk/paradiseo-peo/examples/Makefile.am b/trunk/paradiseo-peo/examples/Makefile.am new file mode 100644 index 000000000..f22564acb --- /dev/null +++ b/trunk/paradiseo-peo/examples/Makefile.am @@ -0,0 +1,12 @@ +## Makefile.am for paradiseo/examples + + +SUBDIRS = shared lesson1 lesson2 + +doc: + mkdir ../docs/html/lsnshared; cd shared && doxygen paradiseo-peo-lsn-shared.doxyfile && cd .. + for ex in `ls | grep lesson`; do mkdir ../docs/html/$$ex; `cd $$ex && doxygen paradiseo-peo-lsn.doxyfile`; done + +clean-local: + rm -fr ../docs/html/lsnshared; cd shared && rm -fr html latex man && cd .. + for ex in `ls | grep lesson`; do rm -fr ../docs/html/$$ex; `cd $$ex && rm -fr html latex man`; done diff --git a/trunk/paradiseo-peo/examples/Makefile.in b/trunk/paradiseo-peo/examples/Makefile.in new file mode 100644 index 000000000..0bb86c5ad --- /dev/null +++ b/trunk/paradiseo-peo/examples/Makefile.in @@ -0,0 +1,454 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EO_DIR = @EO_DIR@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MOEO_DIR = @MOEO_DIR@ +MO_DIR = @MO_DIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +SUBDIRS = shared lesson1 lesson2 +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-local clean-recursive ctags \ + ctags-recursive distclean distclean-generic \ + distclean-recursive distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-recursive \ + mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-info-am + + +doc: + mkdir ../docs/html/lsnshared; cd shared && doxygen paradiseo-peo-lsn-shared.doxyfile && cd .. + for ex in `ls | grep lesson`; do mkdir ../docs/html/$$ex; `cd $$ex && doxygen paradiseo-peo-lsn.doxyfile`; done + +clean-local: + rm -fr ../docs/html/lsnshared; cd shared && rm -fr html latex man && cd .. + for ex in `ls | grep lesson`; do rm -fr ../docs/html/$$ex; `cd $$ex && rm -fr html latex man`; done +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/trunk/paradiseo-peo/examples/data/eil101.opt.tour b/trunk/paradiseo-peo/examples/data/eil101.opt.tour new file mode 100644 index 000000000..1d3fece5a --- /dev/null +++ b/trunk/paradiseo-peo/examples/data/eil101.opt.tour @@ -0,0 +1,108 @@ +NAME : eil101.opt.tour +COMMENT : Optimum tour for eil101.tsp (Length 629) +TYPE : TOUR +DIMENSION : 101 +TOUR_SECTION +1 +69 +27 +101 +53 +28 +26 +12 +80 +68 +29 +24 +54 +55 +25 +4 +39 +67 +23 +56 +75 +41 +22 +74 +72 +73 +21 +40 +58 +13 +94 +95 +97 +87 +2 +57 +15 +43 +42 +14 +44 +38 +86 +16 +61 +85 +91 +100 +98 +37 +92 +59 +93 +99 +96 +6 +89 +52 +18 +83 +60 +5 +84 +17 +45 +8 +46 +47 +36 +49 +64 +63 +90 +32 +10 +62 +11 +19 +48 +82 +7 +88 +31 +70 +30 +20 +66 +71 +65 +35 +34 +78 +81 +9 +51 +33 +79 +3 +77 +76 +50 +-1 +EOF diff --git a/trunk/paradiseo-peo/examples/data/eil101.tsp b/trunk/paradiseo-peo/examples/data/eil101.tsp new file mode 100644 index 000000000..9672f849e --- /dev/null +++ b/trunk/paradiseo-peo/examples/data/eil101.tsp @@ -0,0 +1,108 @@ +NAME : eil101 +COMMENT : 101-city problem (Christofides/Eilon) +TYPE : TSP +DIMENSION : 101 +EDGE_WEIGHT_TYPE : EUC_2D +NODE_COORD_SECTION +1 41 49 +2 35 17 +3 55 45 +4 55 20 +5 15 30 +6 25 30 +7 20 50 +8 10 43 +9 55 60 +10 30 60 +11 20 65 +12 50 35 +13 30 25 +14 15 10 +15 30 5 +16 10 20 +17 5 30 +18 20 40 +19 15 60 +20 45 65 +21 45 20 +22 45 10 +23 55 5 +24 65 35 +25 65 20 +26 45 30 +27 35 40 +28 41 37 +29 64 42 +30 40 60 +31 31 52 +32 35 69 +33 53 52 +34 65 55 +35 63 65 +36 2 60 +37 20 20 +38 5 5 +39 60 12 +40 40 25 +41 42 7 +42 24 12 +43 23 3 +44 11 14 +45 6 38 +46 2 48 +47 8 56 +48 13 52 +49 6 68 +50 47 47 +51 49 58 +52 27 43 +53 37 31 +54 57 29 +55 63 23 +56 53 12 +57 32 12 +58 36 26 +59 21 24 +60 17 34 +61 12 24 +62 24 58 +63 27 69 +64 15 77 +65 62 77 +66 49 73 +67 67 5 +68 56 39 +69 37 47 +70 37 56 +71 57 68 +72 47 16 +73 44 17 +74 46 13 +75 49 11 +76 49 42 +77 53 43 +78 61 52 +79 57 48 +80 56 37 +81 55 54 +82 15 47 +83 14 37 +84 11 31 +85 16 22 +86 4 18 +87 28 18 +88 26 52 +89 26 35 +90 31 67 +91 15 19 +92 22 22 +93 18 24 +94 26 27 +95 25 24 +96 22 27 +97 25 21 +98 19 21 +99 20 26 +100 18 18 +101 35 35 +EOF diff --git a/trunk/paradiseo-peo/examples/lesson1/Makefile.am b/trunk/paradiseo-peo/examples/lesson1/Makefile.am new file mode 100755 index 000000000..c9af7c9a8 --- /dev/null +++ b/trunk/paradiseo-peo/examples/lesson1/Makefile.am @@ -0,0 +1,29 @@ +EXTRA_DIST = paradiseo-peo-lns.doxyfile foot.html + +CXX=mpicxx + +INCLUDES = \ + -I$(EO_DIR)/src/ \ + -I$(MO_DIR)/src/ \ + -I../../src/ \ + -I../shared/ + +AM_CXXFLAGS = \ + -Wall -g + +bin_PROGRAMS = \ + tspExample + +tspExample_SOURCES = \ + main.cpp + +tspExample_LDFLAGS = \ + -L$(EO_DIR)/src/ \ + -L$(EO_DIR)/src/utils \ + -L../../src/ \ + -L../../src/rmc/mpi/ \ + -L../shared/ \ + `xml2-config --libs` + +tspExample_LDADD = -lparadiseo -lrmc_mpi -leoutils -leo -ltsp_shared + diff --git a/trunk/paradiseo-peo/examples/lesson1/Makefile.in b/trunk/paradiseo-peo/examples/lesson1/Makefile.in new file mode 100644 index 000000000..5922e8f56 --- /dev/null +++ b/trunk/paradiseo-peo/examples/lesson1/Makefile.in @@ -0,0 +1,427 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +bin_PROGRAMS = tspExample$(EXEEXT) +subdir = examples/lesson1 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_tspExample_OBJECTS = main.$(OBJEXT) +tspExample_OBJECTS = $(am_tspExample_OBJECTS) +tspExample_DEPENDENCIES = +DEFAULT_INCLUDES = -I. -I$(srcdir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +SOURCES = $(tspExample_SOURCES) +DIST_SOURCES = $(tspExample_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = mpicxx +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EO_DIR = @EO_DIR@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MOEO_DIR = @MOEO_DIR@ +MO_DIR = @MO_DIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +EXTRA_DIST = paradiseo-peo-lns.doxyfile foot.html +INCLUDES = \ + -I$(EO_DIR)/src/ \ + -I$(MO_DIR)/src/ \ + -I../../src/ \ + -I../shared/ + +AM_CXXFLAGS = \ + -Wall -g + +tspExample_SOURCES = \ + main.cpp + +tspExample_LDFLAGS = \ + -L$(EO_DIR)/src/ \ + -L$(EO_DIR)/src/utils \ + -L../../src/ \ + -L../../src/rmc/mpi/ \ + -L../shared/ \ + `xml2-config --libs` + +tspExample_LDADD = -lparadiseo -lrmc_mpi -leoutils -leo -ltsp_shared +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/lesson1/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/lesson1/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +tspExample$(EXEEXT): $(tspExample_OBJECTS) $(tspExample_DEPENDENCIES) + @rm -f tspExample$(EXEEXT) + $(CXXLINK) $(tspExample_LDFLAGS) $(tspExample_OBJECTS) $(tspExample_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/trunk/paradiseo-peo/examples/lesson1/main.cpp b/trunk/paradiseo-peo/examples/lesson1/main.cpp new file mode 100644 index 000000000..251c063e2 --- /dev/null +++ b/trunk/paradiseo-peo/examples/lesson1/main.cpp @@ -0,0 +1,91 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "main_ga.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "param.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "city_swap.h" + +#include + +#define POP_SIZE 10 +#define NUM_GEN 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + + +int main( int __argc, char** __argv ) { + + // initializing the ParadisEO-PEO environment + peo :: init( __argc, __argv ); + + + // processing the command line specified parameters + loadParameters( __argc, __argv ); + + + // init, eval operators, EA operators ------------------------------------------------------------------------------------------------------------- + + RouteInit route_init; // random init object - creates random Route objects + RouteEval full_eval; // evaluator object - offers a fitness value for a specified Route object + + OrderXover crossover; // crossover operator - creates two offsprings out of two specified parents + CitySwap mutation; // mutation operator - randomly mutates one gene for a specified individual + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // evolutionary algorithm components -------------------------------------------------------------------------------------------------------------- + + eoPop< Route > population( POP_SIZE, route_init ); // initial population for the algorithm having POP_SIZE individuals + peoSeqPopEval< Route > eaPopEval( full_eval ); // evaluator object - to be applied at each iteration on the entire population + + eoGenContinue< Route > eaCont( NUM_GEN ); // continuation criterion - the algorithm will iterate for NUM_GEN generations + eoCheckPoint< Route > eaCheckpointContinue( eaConts ); // checkpoint object - verify at each iteration if the continuation criterion is met + + eoRankingSelect< Route > selectionStrategy; // selection strategy - applied at each iteration for selecting parent individuals + eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration + + // transform operator - includes the crossover and the mutation operators with a specified associated rate + eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE ); + peoSeqTransform< Route > eaTransform( transform ); // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object + + eoPlusReplacement< Route > eaReplace; // replacement strategy - for replacing the initial population with offspring individuals + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // ParadisEO-PEO evolutionary algorithm ----------------------------------------------------------------------------------------------------------- + + peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace ); + + eaAlg( population ); // specifying the initial population for the algorithm, to be iteratively evolved + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + peo :: run( ); + peo :: finalize( ); + // shutting down the ParadisEO-PEO environment + + return 0; +} diff --git a/trunk/paradiseo-peo/examples/lesson1/paradiseo-peo-lsn.doxyfile b/trunk/paradiseo-peo/examples/lesson1/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..4ea832641 --- /dev/null +++ b/trunk/paradiseo-peo/examples/lesson1/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,241 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson1" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../docs/html/lesson1 +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = ../../../paradiseo-mo/docs/eo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../../paradiseo-mo/docs/mo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../docs/paradiseo-peo.doxytag=../../ \ + ../shared/paradiseo-peo-lsn-shared.doxytag=../../lsnshared/html +GENERATE_TAGFILE = ../../docs/paradiseo-peo-lsn.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/trunk/paradiseo-peo/examples/lesson2/Makefile.am b/trunk/paradiseo-peo/examples/lesson2/Makefile.am new file mode 100755 index 000000000..c9af7c9a8 --- /dev/null +++ b/trunk/paradiseo-peo/examples/lesson2/Makefile.am @@ -0,0 +1,29 @@ +EXTRA_DIST = paradiseo-peo-lns.doxyfile foot.html + +CXX=mpicxx + +INCLUDES = \ + -I$(EO_DIR)/src/ \ + -I$(MO_DIR)/src/ \ + -I../../src/ \ + -I../shared/ + +AM_CXXFLAGS = \ + -Wall -g + +bin_PROGRAMS = \ + tspExample + +tspExample_SOURCES = \ + main.cpp + +tspExample_LDFLAGS = \ + -L$(EO_DIR)/src/ \ + -L$(EO_DIR)/src/utils \ + -L../../src/ \ + -L../../src/rmc/mpi/ \ + -L../shared/ \ + `xml2-config --libs` + +tspExample_LDADD = -lparadiseo -lrmc_mpi -leoutils -leo -ltsp_shared + diff --git a/trunk/paradiseo-peo/examples/lesson2/Makefile.in b/trunk/paradiseo-peo/examples/lesson2/Makefile.in new file mode 100644 index 000000000..d1f5975a0 --- /dev/null +++ b/trunk/paradiseo-peo/examples/lesson2/Makefile.in @@ -0,0 +1,427 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +bin_PROGRAMS = tspExample$(EXEEXT) +subdir = examples/lesson2 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_tspExample_OBJECTS = main.$(OBJEXT) +tspExample_OBJECTS = $(am_tspExample_OBJECTS) +tspExample_DEPENDENCIES = +DEFAULT_INCLUDES = -I. -I$(srcdir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +SOURCES = $(tspExample_SOURCES) +DIST_SOURCES = $(tspExample_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = mpicxx +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EO_DIR = @EO_DIR@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MOEO_DIR = @MOEO_DIR@ +MO_DIR = @MO_DIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +EXTRA_DIST = paradiseo-peo-lns.doxyfile foot.html +INCLUDES = \ + -I$(EO_DIR)/src/ \ + -I$(MO_DIR)/src/ \ + -I../../src/ \ + -I../shared/ + +AM_CXXFLAGS = \ + -Wall -g + +tspExample_SOURCES = \ + main.cpp + +tspExample_LDFLAGS = \ + -L$(EO_DIR)/src/ \ + -L$(EO_DIR)/src/utils \ + -L../../src/ \ + -L../../src/rmc/mpi/ \ + -L../shared/ \ + `xml2-config --libs` + +tspExample_LDADD = -lparadiseo -lrmc_mpi -leoutils -leo -ltsp_shared +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/lesson2/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/lesson2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +tspExample$(EXEEXT): $(tspExample_OBJECTS) $(tspExample_DEPENDENCIES) + @rm -f tspExample$(EXEEXT) + $(CXXLINK) $(tspExample_LDFLAGS) $(tspExample_OBJECTS) $(tspExample_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/trunk/paradiseo-peo/examples/lesson2/main.cpp b/trunk/paradiseo-peo/examples/lesson2/main.cpp new file mode 100644 index 000000000..8b1a48a96 --- /dev/null +++ b/trunk/paradiseo-peo/examples/lesson2/main.cpp @@ -0,0 +1,177 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "main_ga.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "param.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "edge_xover.h" +#include "partial_mapped_xover.h" +#include "city_swap.h" +#include "part_route_eval.h" +#include "merge_route_eval.h" +#include "two_opt_init.h" +#include "two_opt_next.h" +#include "two_opt_incr_eval.h" + +#include + +#define POP_SIZE 10 +#define NUM_GEN 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 +#define NUM_PART_EVALS 2 + +#define MIG_FREQ 10 +#define MIG_SIZE 10 +#define HYBRID_SIZE 3 + +int main (int __argc, char * * __argv) { + + peo :: init (__argc, __argv); + + loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled + problem (TSP) */ + + RouteInit route_init; /* Its builds random routes */ + RouteEval full_eval; /* Full route evaluator */ + + MergeRouteEval merge_eval; + + std :: vector *> part_eval; + for (unsigned i = 1 ; i <= NUM_PART_EVALS ; i ++) + part_eval.push_back (new PartRouteEval ((float) (i - 1) / NUM_PART_EVALS, (float) i / NUM_PART_EVALS)); + + OrderXover order_cross; /* Recombination */ + PartialMappedXover pm_cross; + EdgeXover edge_cross; + CitySwap city_swap_mut; /* Mutation */ + + RingTopology topo; + + /** The first EA **/ + + eoPop ox_pop (POP_SIZE, route_init); /* Population */ + + eoGenContinue ox_cont (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint ox_checkpoint (ox_cont); /* Checkpoint */ + peoParaPopEval ox_pop_eval (part_eval, merge_eval); + eoStochTournamentSelect ox_select_one; + eoSelectNumber ox_select (ox_select_one, POP_SIZE); + eoSGATransform ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + peoSeqTransform ox_para_transform (ox_transform); + eoEPReplacement ox_replace (2); + + /* The migration policy */ + eoPeriodicContinue ox_mig_cont (MIG_FREQ); /* Migration occurs periodically */ + eoRandomSelect ox_mig_select_one; /* Emigrants are randomly selected */ + eoSelectNumber ox_mig_select (ox_mig_select_one, MIG_SIZE); + eoPlusReplacement ox_mig_replace; /* Immigrants replace the worse individuals */ + + peoAsyncIslandMig ox_mig (ox_mig_cont, ox_mig_select, ox_mig_replace, topo, ox_pop, ox_pop); + //peoSyncIslandMig ox_mig (MIG_FREQ, ox_mig_select, ox_mig_replace, topo, ox_pop, ox_pop); + + ox_checkpoint.add (ox_mig); + + peoEA ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace); + ox_mig.setOwner (ox_ea); + + ox_ea (ox_pop); /* Application to the given population */ + + /** The second EA **/ + + eoPop pmx_pop (POP_SIZE, route_init); /* Population */ + + eoGenContinue pmx_cont (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint pmx_checkpoint (pmx_cont); /* Checkpoint */ + peoSeqPopEval pmx_pop_eval (full_eval); + eoRankingSelect pmx_select_one; + eoSelectNumber pmx_select (pmx_select_one, POP_SIZE); + eoSGATransform pmx_transform (pm_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + peoSeqTransform pmx_para_transform (pmx_transform); + eoPlusReplacement pmx_replace; + + /* The migration policy */ + eoPeriodicContinue pmx_mig_cont (MIG_FREQ); /* Migration occurs periodically */ + eoRandomSelect pmx_mig_select_one; /* Emigrants are randomly selected */ + eoSelectNumber pmx_mig_select (pmx_mig_select_one, MIG_SIZE); + eoPlusReplacement pmx_mig_replace; /* Immigrants replace the worse individuals */ + peoAsyncIslandMig pmx_mig (pmx_mig_cont, pmx_mig_select, pmx_mig_replace, topo, pmx_pop, pmx_pop); + //peoSyncIslandMig pmx_mig (MIG_FREQ, pmx_mig_select, pmx_mig_replace, topo, pmx_pop, pmx_pop); + pmx_checkpoint.add (pmx_mig); + + /* Hybridization with a Local Search */ + TwoOptInit pmx_two_opt_init; + TwoOptNext pmx_two_opt_next; + TwoOptIncrEval pmx_two_opt_incr_eval; + moBestImprSelect pmx_two_opt_move_select; + moHC hc (pmx_two_opt_init, pmx_two_opt_next, pmx_two_opt_incr_eval, pmx_two_opt_move_select, full_eval); + + eoPeriodicContinue pmx_ls_cont (MIG_FREQ); /* Hybridization occurs periodically */ + eoRandomSelect pmx_ls_select_one; /* ? */ + eoSelectNumber pmx_ls_select (pmx_ls_select_one, HYBRID_SIZE); + eoPlusReplacement pmx_ls_replace; + + peoSyncMultiStart pmx_ls (pmx_ls_cont, pmx_ls_select, pmx_ls_replace, hc, pmx_pop); + pmx_checkpoint.add (pmx_ls); + + peoEA pmx_ea (pmx_checkpoint, pmx_pop_eval, pmx_select, pmx_para_transform, pmx_replace); + pmx_mig.setOwner (pmx_ea); + pmx_ls.setOwner (pmx_ea); + + pmx_ea (pmx_pop); /* Application to the given population */ + + /** The third EA **/ + + eoPop edge_pop (POP_SIZE, route_init); /* Population */ + + eoGenContinue edge_cont (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint edge_checkpoint (edge_cont); /* Checkpoint */ + peoSeqPopEval edge_pop_eval (full_eval); + eoRankingSelect edge_select_one; + eoSelectNumber edge_select (edge_select_one, POP_SIZE); + peoParaSGATransform edge_para_transform (edge_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + eoPlusReplacement edge_replace; + + /* The migration policy */ + eoPeriodicContinue edge_mig_cont (MIG_FREQ); /* Migration occurs periodically */ + eoRandomSelect edge_mig_select_one; /* Emigrants are randomly selected */ + eoSelectNumber edge_mig_select (edge_mig_select_one, MIG_SIZE); + eoPlusReplacement edge_mig_replace; /* Immigrants replace the worse individuals */ + peoAsyncIslandMig edge_mig (edge_mig_cont, edge_mig_select, edge_mig_replace, topo, edge_pop, edge_pop); + //peoSyncIslandMig edge_mig (MIG_FREQ, edge_mig_select, edge_mig_replace, topo, edge_pop, edge_pop); + edge_checkpoint.add (edge_mig); + + peoEA edge_ea (edge_checkpoint, edge_pop_eval, edge_select, edge_para_transform, edge_replace); + + edge_mig.setOwner (edge_ea); + + edge_ea (edge_pop); /* Application to the given population */ + + peo :: run (); + + peo :: finalize (); /* Termination */ + + return 0; +} diff --git a/trunk/paradiseo-peo/examples/lesson2/paradiseo-peo-lsn.doxyfile b/trunk/paradiseo-peo/examples/lesson2/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..953628938 --- /dev/null +++ b/trunk/paradiseo-peo/examples/lesson2/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,241 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson2" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../docs/html/lesson2 +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = ../../../paradiseo-mo/docs/eo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../../paradiseo-mo/docs/mo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../docs/paradiseo-peo.doxytag=../../ \ + ../shared/paradiseo-peo-lsn-shared.doxytag=../../lsnshared/html +GENERATE_TAGFILE = ../../docs/paradiseo-peo-lsn.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/trunk/paradiseo-peo/examples/shared/Makefile.am b/trunk/paradiseo-peo/examples/shared/Makefile.am new file mode 100644 index 000000000..eb7c8cf45 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/Makefile.am @@ -0,0 +1,49 @@ +CXX=mpicxx + +INCLUDES = \ + -I$(EO_DIR)/src/ \ + -I$(MO_DIR)/src/ \ + -I$(MOEO_DIR)/src/ \ + -I../../src/ + +AM_CXXFLAGS = \ + -Wall -g + +lib_LIBRARIES = \ + libtsp_shared.a + +libtsp_shared_a_SOURCES = \ + data.h \ + data.cpp \ + opt_route.h \ + opt_route.cpp \ + param.h \ + param.cpp \ + node.h \ + node.cpp \ + route.h \ + route.cpp \ + route_init.h \ + route_init.cpp \ + route_eval.h \ + route_eval.cpp \ + two_opt.h \ + two_opt.cpp \ + two_opt_init.h \ + two_opt_init.cpp \ + two_opt_incr_eval.h \ + two_opt_incr_eval.cpp \ + two_opt_next.h \ + two_opt_next.cpp \ + order_xover.h \ + order_xover.cpp \ + partial_mapped_xover.h \ + partial_mapped_xover.cpp \ + edge_xover.h \ + edge_xover.cpp \ + city_swap.h \ + city_swap.cpp \ + part_route_eval.h \ + part_route_eval.cpp \ + merge_route_eval.h \ + merge_route_eval.cpp diff --git a/trunk/paradiseo-peo/examples/shared/Makefile.in b/trunk/paradiseo-peo/examples/shared/Makefile.in new file mode 100644 index 000000000..3a441bf88 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/Makefile.in @@ -0,0 +1,495 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = examples/shared +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" +libLIBRARIES_INSTALL = $(INSTALL_DATA) +LIBRARIES = $(lib_LIBRARIES) +AR = ar +ARFLAGS = cru +libtsp_shared_a_AR = $(AR) $(ARFLAGS) +libtsp_shared_a_LIBADD = +am_libtsp_shared_a_OBJECTS = data.$(OBJEXT) opt_route.$(OBJEXT) \ + param.$(OBJEXT) node.$(OBJEXT) route.$(OBJEXT) \ + route_init.$(OBJEXT) route_eval.$(OBJEXT) two_opt.$(OBJEXT) \ + two_opt_init.$(OBJEXT) two_opt_incr_eval.$(OBJEXT) \ + two_opt_next.$(OBJEXT) order_xover.$(OBJEXT) \ + partial_mapped_xover.$(OBJEXT) edge_xover.$(OBJEXT) \ + city_swap.$(OBJEXT) part_route_eval.$(OBJEXT) \ + merge_route_eval.$(OBJEXT) +libtsp_shared_a_OBJECTS = $(am_libtsp_shared_a_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libtsp_shared_a_SOURCES) +DIST_SOURCES = $(libtsp_shared_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = mpicxx +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EO_DIR = @EO_DIR@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MOEO_DIR = @MOEO_DIR@ +MO_DIR = @MO_DIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +INCLUDES = \ + -I$(EO_DIR)/src/ \ + -I$(MO_DIR)/src/ \ + -I$(MOEO_DIR)/src/ \ + -I../../src/ + +AM_CXXFLAGS = \ + -Wall -g + +lib_LIBRARIES = \ + libtsp_shared.a + +libtsp_shared_a_SOURCES = \ + data.h \ + data.cpp \ + opt_route.h \ + opt_route.cpp \ + param.h \ + param.cpp \ + node.h \ + node.cpp \ + route.h \ + route.cpp \ + route_init.h \ + route_init.cpp \ + route_eval.h \ + route_eval.cpp \ + two_opt.h \ + two_opt.cpp \ + two_opt_init.h \ + two_opt_init.cpp \ + two_opt_incr_eval.h \ + two_opt_incr_eval.cpp \ + two_opt_next.h \ + two_opt_next.cpp \ + order_xover.h \ + order_xover.cpp \ + partial_mapped_xover.h \ + partial_mapped_xover.cpp \ + edge_xover.h \ + edge_xover.cpp \ + city_swap.h \ + city_swap.cpp \ + part_route_eval.h \ + part_route_eval.cpp \ + merge_route_eval.h \ + merge_route_eval.cpp + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/shared/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/shared/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + p=$(am__strip_dir) \ + echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \ + $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) +libtsp_shared.a: $(libtsp_shared_a_OBJECTS) $(libtsp_shared_a_DEPENDENCIES) + -rm -f libtsp_shared.a + $(libtsp_shared_a_AR) libtsp_shared.a $(libtsp_shared_a_OBJECTS) $(libtsp_shared_a_LIBADD) + $(RANLIB) libtsp_shared.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/city_swap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/data.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edge_xover.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge_route_eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/node.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opt_route.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/order_xover.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/param.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/part_route_eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/partial_mapped_xover.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/route.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/route_eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/route_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two_opt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two_opt_incr_eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two_opt_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two_opt_next.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-libLIBRARIES + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libLIBRARIES + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-libLIBRARIES install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-info-am uninstall-libLIBRARIES + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/trunk/paradiseo-peo/examples/shared/city_swap.cpp b/trunk/paradiseo-peo/examples/shared/city_swap.cpp new file mode 100644 index 000000000..3777f4f8e --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/city_swap.cpp @@ -0,0 +1,36 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "city_swap.cpp" + +// (c) OPAC Team, LIFL, 2002 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "city_swap.h" + +bool CitySwap :: operator () (Route & __route) { + + std :: swap (__route [rng.random (__route.size ())], + __route [rng.random (__route.size ())]) ; + + __route.invalidate () ; + + return true ; +} diff --git a/trunk/paradiseo-peo/examples/shared/city_swap.h b/trunk/paradiseo-peo/examples/shared/city_swap.h new file mode 100644 index 000000000..2a18d69d1 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/city_swap.h @@ -0,0 +1,41 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "city_swap.h" + +// (c) OPAC Team, LIFL, 2002 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef city_swap_h +#define city_swap_h + +#include + +#include "route.h" + +/** Its swaps two vertices + randomly choosen */ +class CitySwap : public eoMonOp { + +public : + + bool operator () (Route & __route) ; + +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/data.cpp b/trunk/paradiseo-peo/examples/shared/data.cpp new file mode 100644 index 000000000..5eeaf2dcb --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/data.cpp @@ -0,0 +1,113 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "data.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include + +#include + +#include "data.h" +#include "node.h" + +#define MAX_TRASH_LENGTH 1000 +#define MAX_FIELD_LENGTH 1000 +#define MAX_LINE_LENGTH 1000 + +static void getNextField (FILE * __f, char * __buff) { + + char trash [MAX_TRASH_LENGTH]; + + fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ + fscanf (__f, "%[^:\n]", __buff); /* Reading the field */ + fgetc (__f); +} + +static void getLine (FILE * __f, char * __buff) { + + char trash [MAX_TRASH_LENGTH]; + + fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ + fscanf (__f, "%[^\n]", __buff); /* Reading the line */ +} + +void loadData (const char * __filename) { + + FILE * f = fopen (__filename, "r"); + + if (f) { + + printf ("Loading '%s'.\n", __filename); + + char field [MAX_FIELD_LENGTH]; + + getNextField (f, field); /* Name */ + assert (strstr (field, "NAME")); + getNextField (f, field); + printf ("NAME: %s.\n", field); + + getNextField (f, field); /* Comment */ + assert (strstr (field, "COMMENT")); + getLine (f, field); + printf ("COMMENT: %s.\n", field); + + getNextField (f, field); /* Type */ + assert (strstr (field, "TYPE")); + getNextField (f, field); + printf ("TYPE: %s.\n", field); + + getNextField (f, field); /* Dimension */ + assert (strstr (field, "DIMENSION")); + getNextField (f, field); + printf ("DIMENSION: %s.\n", field); + numNodes = atoi (field); + + getNextField (f, field); /* Edge weight type */ + assert (strstr (field, "EDGE_WEIGHT_TYPE")); + getNextField (f, field); + printf ("EDGE_WEIGHT_TYPE: %s.\n", field); + + getNextField (f, field); /* Node coord section */ + assert (strstr (field, "NODE_COORD_SECTION")); + loadNodes (f); + + getNextField (f, field); /* End of file */ + assert (strstr (field, "EOF")); + printf ("EOF.\n"); + } + else { + + fprintf (stderr, "Can't open '%s'.\n", __filename); + exit (1); + } +} + +void loadData (eoParser & __parser) { + + /* Getting the path of the instance */ + + eoValueParam param ("", "inst", "Path of the instance") ; + __parser.processParam (param) ; + loadData (param.value ().c_str ()); +} diff --git a/trunk/paradiseo-peo/examples/shared/data.h b/trunk/paradiseo-peo/examples/shared/data.h new file mode 100644 index 000000000..78359ebfc --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/data.h @@ -0,0 +1,33 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "data.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __data_h +#define __data_h + +#include + +extern void loadData (const char * __filename); + +extern void loadData (eoParser & __parser); + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/display.cpp b/trunk/paradiseo-peo/examples/shared/display.cpp new file mode 100644 index 000000000..9533b0a10 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/display.cpp @@ -0,0 +1,132 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "display.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include + +#include "display.h" +#include "node.h" +#include "opt_route.h" + +#define BORDER 20 +#define RATIO 0.5 + +#define screen_width 1024 +#define screen_height 768 + +static const char * filename; + +/* Computed coordinates */ +static unsigned * X_new_coord, * Y_new_coord ; + +/* this variable will contain the handle to the returned graphics context. */ +static GC gc; + +/* this variable will contain the pointer to the Display structure */ +static Display* disp; + +/* this variable will store the ID of the newly created window. */ +static Window win; + +static int screen; + +/* Create a new backing pixmap of the appropriate size */ + + /* Best tour */ + /* + gdk_gc_set_line_attributes (gc, 2, GDK_LINE_ON_OFF_DASH, GDK_CAP_NOT_LAST, GDK_JOIN_MITER) ; + + gdk_gc_set_foreground (gc, & color_green) ; + + for (int i = 0 ; i < (int) numNodes ; i ++) { + + gdk_draw_line (pixmap, gc, + X_new_coord [opt_route [i]], + Y_new_coord [opt_route [i]], + X_new_coord [opt_route [(i + 1) % numNodes]], + Y_new_coord [opt_route [(i + 1) % numNodes]]); + + }*/ + +void openMainWindow (const char * __filename) { + + filename = __filename; + + /* Map */ + int map_width = (int) (X_max - X_min); + int map_height = (int) (Y_max - Y_min); + int map_side = std :: max (map_width, map_height); + + /* Calculate the window's width and height. */ + int win_width = (int) (screen_width * RATIO * map_width / map_side); + int win_height = (int) (screen_height * RATIO * map_height / map_side); + + /* Computing the coordinates */ + X_new_coord = new unsigned [numNodes]; + Y_new_coord = new unsigned [numNodes]; + + for (unsigned i = 0; i < numNodes; i ++) { + X_new_coord [i] = (unsigned) (win_width * (1.0 - (X_coord [i] - X_min) / map_width) + BORDER); + Y_new_coord [i] = (unsigned) (win_height * (1.0 - (Y_coord [i] - Y_min) / map_height) + BORDER); + } + + /* Initialisation */ + XGCValues val ; + + disp = XOpenDisplay (NULL) ; + screen = DefaultScreen (disp) ; + win = XCreateSimpleWindow (disp, RootWindow (disp, screen), 0, 0, win_width + 2 * BORDER, win_height + 2 * BORDER, 2, BlackPixel (disp, screen), WhitePixel (disp, screen)) ; + val.foreground = BlackPixel(disp, screen) ; + val.background = WhitePixel(disp, screen) ; + gc = XCreateGC (disp, win, GCForeground | GCBackground, & val) ; + + XMapWindow (disp, win) ; + XFlush (disp) ; + + while (true) { + XClearWindow (disp, win) ; + + /* Vertices as circles */ + for (unsigned i = 1 ; i < numNodes ; i ++) + XDrawArc (disp, win, gc, X_new_coord [i] - 1, Y_new_coord [i] - 1, 3, 3, 0, 364 * 64) ; + + /* New tour */ + std :: ifstream f (filename); + if (f) { + Route route; + f >> route; + f.close (); + + for (int i = 0; i < (int) numNodes; i ++) + XDrawLine (disp, win, gc, + X_new_coord [route [i]], + Y_new_coord [route [i]], + X_new_coord [route [(i + 1) % numNodes]], + Y_new_coord [route [(i + 1) % numNodes]]); + } + XFlush (disp) ; + sleep (1) ; + } +} diff --git a/trunk/paradiseo-peo/examples/shared/display.h b/trunk/paradiseo-peo/examples/shared/display.h new file mode 100644 index 000000000..b1051340d --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/display.h @@ -0,0 +1,31 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "display.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __display_h +#define __display_h + +#include "route.h" + +extern void openMainWindow (const char * __filename); + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/display_best_route.cpp b/trunk/paradiseo-peo/examples/shared/display_best_route.cpp new file mode 100644 index 000000000..012ef0362 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/display_best_route.cpp @@ -0,0 +1,37 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "display_best_route.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "display_best_route.h" +#include "display.h" + +DisplayBestRoute :: DisplayBestRoute (eoPop & __pop + ) : pop (__pop) { + + +} + +void DisplayBestRoute :: operator () () { + + displayRoute (pop.best_element ()); +} + diff --git a/trunk/paradiseo-peo/examples/shared/display_best_route.h b/trunk/paradiseo-peo/examples/shared/display_best_route.h new file mode 100644 index 000000000..bd1ca8f54 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/display_best_route.h @@ -0,0 +1,47 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "display_best_route.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __display_best_route_h +#define __display_best_route_h + +#include + +#include + +#include "route.h" + +class DisplayBestRoute : public eoUpdater { + +public : + + DisplayBestRoute (eoPop & __pop); + + void operator () (); + +private : + + eoPop & pop; + +}; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/edge_xover.cpp b/trunk/paradiseo-peo/examples/shared/edge_xover.cpp new file mode 100644 index 000000000..d75f76f83 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/edge_xover.cpp @@ -0,0 +1,133 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "edge_xover.cpp" + +// (c) OPAC Team, LIFL, 2003 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include + +#include "edge_xover.h" + +void EdgeXover :: build_map (const Route & __par1, const Route & __par2) { + + unsigned len = __par1.size () ; + + /* Initialization */ + _map.clear () ; + _map.resize (len) ; + + for (unsigned i = 0 ; i < len ; i ++) { + _map [__par1 [i]].insert (__par1 [(i + 1) % len]) ; + _map [__par2 [i]].insert (__par2 [(i + 1) % len]) ; + _map [__par1 [i]].insert (__par1 [(i - 1 + len) % len]) ; + _map [__par2 [i]].insert (__par2 [(i - 1 + len) % len]) ; + } + + visited.clear () ; + visited.resize (len, false) ; +} + +void EdgeXover :: remove_entry (unsigned __vertex, std :: vector > & __map) { + + std :: set & neigh = __map [__vertex] ; + + for (std :: set :: iterator it = neigh.begin () ; + it != neigh.end () ; + it ++) + __map [* it].erase (__vertex) ; + +} + +void EdgeXover :: add_vertex (unsigned __vertex, Route & __child) { + + visited [__vertex] = true ; + __child.push_back (__vertex) ; + remove_entry (__vertex, _map) ; /* Removing entries */ +} + +void EdgeXover :: cross (const Route & __par1, const Route & __par2, Route & __child) { + + build_map (__par1, __par2) ; + + unsigned len = __par1.size () ; + + /* Go ! */ + __child.clear () ; + + unsigned cur_vertex = rng.random (len) ; + + add_vertex (cur_vertex, __child) ; + + for (unsigned i = 1 ; i < len ; i ++) { + + unsigned len_min_entry = MAXINT ; + + std :: set & neigh = _map [cur_vertex] ; + + for (std :: set :: iterator it = neigh.begin () ; + it != neigh.end () ; + it ++) { + unsigned l = _map [* it].size () ; + if (len_min_entry > l) + len_min_entry = l ; + } + + std :: vector cand ; /* Candidates */ + + for (std :: set :: iterator it = neigh.begin () ; + it != neigh.end () ; + it ++) { + unsigned l = _map [* it].size () ; + if (len_min_entry == l) + cand.push_back (* it) ; + } + + if (! cand.size ()) { + + /* Oh no ! Implicit mutation */ + for (unsigned j = 0 ; j < len ; j ++) + if (! visited [j]) + cand.push_back (j) ; + } + + cur_vertex = cand [rng.random (cand.size ())] ; + + add_vertex (cur_vertex, __child) ; + } +} + +bool EdgeXover :: operator () (Route & __route1, Route & __route2) { + + // Init. copy + Route par [2] ; + par [0] = __route1 ; + par [1] = __route2 ; + + cross (par [0], par [1], __route1) ; + cross (par [1], par [0], __route2) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/trunk/paradiseo-peo/examples/shared/edge_xover.h b/trunk/paradiseo-peo/examples/shared/edge_xover.h new file mode 100644 index 000000000..980b5a8af --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/edge_xover.h @@ -0,0 +1,58 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "edge_xover.h" + +// (c) OPAC Team, LIFL, 2003 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef edge_xover_h +#define edge_xover_h + +#include +#include + +#include + +#include "route.h" + +/** Edge Crossover */ +class EdgeXover : public eoQuadOp { + +public : + + bool operator () (Route & __route1, Route & __route2) ; + +private : + + void cross (const Route & __par1, const Route & __par2, Route & __child) ; /* Binary */ + + void remove_entry (unsigned __vertex, std :: vector > & __map) ; + /* Updating the map of entries */ + + void build_map (const Route & __par1, const Route & __par2) ; + + void add_vertex (unsigned __vertex, Route & __child) ; + + std :: vector > _map ; /* The handled map */ + + std :: vector visited ; /* Vertices that are already visited */ + +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/merge_route_eval.cpp b/trunk/paradiseo-peo/examples/shared/merge_route_eval.cpp new file mode 100644 index 000000000..5500da36d --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/merge_route_eval.cpp @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "merge_route_eval.cpp" + +// (c) OPAC Team, LIFL, 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "merge_route_eval.h" + +void MergeRouteEval :: operator () (Route & __route, const int & __part_fit) { + + int len = __route.fitness (); + len += __part_fit; + __route.fitness (len); +} + diff --git a/trunk/paradiseo-peo/examples/shared/merge_route_eval.h b/trunk/paradiseo-peo/examples/shared/merge_route_eval.h new file mode 100644 index 000000000..e456d2527 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/merge_route_eval.h @@ -0,0 +1,39 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "merge_route_eval.h" + +// (c) OPAC Team, LIFL, 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __merge_route_eval_h +#define __merge_route_eval_h + +#include + +#include "route.h" + +class MergeRouteEval : public peoAggEvalFunc { + +public : + + void operator () (Route & __route, const int & __part_fit) ; + +}; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/mix.h b/trunk/paradiseo-peo/examples/shared/mix.h new file mode 100644 index 000000000..ef7a651cd --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/mix.h @@ -0,0 +1,25 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +/* + file: 'mix.h' + author: S. CAHON + mail: paradiseo-help@lists.gforge.inria.fr + date: dec. 2005 +*/ + +#ifndef __mix_h +#define __mix_h + +#include + +#include + +template void mix (std :: vector & __v) { + + unsigned len = __v.size () ; + + for (unsigned i = 0 ; i < len ; i ++) + std :: swap (__v [i], __v [rng.random (len)]) ; +} + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/node.cpp b/trunk/paradiseo-peo/examples/shared/node.cpp new file mode 100644 index 000000000..66d9c9a90 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/node.cpp @@ -0,0 +1,92 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "node.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include "node.h" + +unsigned numNodes; /* Number of nodes */ + +//static unsigned * * dist; /* Square matrix of distances */ + +double * X_coord, * Y_coord; + +double X_min = MAXDOUBLE, X_max = MINDOUBLE, Y_min = MAXDOUBLE, Y_max = MINDOUBLE; + +void loadNodes (FILE * __f) { + + /* Coord */ + + X_coord = new double [numNodes]; + + Y_coord = new double [numNodes]; + + unsigned num; + + for (unsigned i = 0; i < numNodes; i ++) { + + fscanf (__f, "%u%lf%lf", & num, X_coord + i, Y_coord + i); + + if (X_coord [i] < X_min) + X_min = X_coord [i]; + if (X_coord [i] > X_max) + X_max = X_coord [i]; + if (Y_coord [i] < Y_min) + Y_min = Y_coord [i]; + if (Y_coord [i] > Y_max) + Y_max = Y_coord [i]; + } + + /* Allocation */ + /* + dist = new unsigned * [numNodes]; + + for (unsigned i = 0; i < numNodes; i ++) + dist [i] = new unsigned [numNodes]; + */ + /* Computation of the distances */ + + /* + for (unsigned i = 0; i < numNodes; i ++) { + + dist [i] [i] = 0; + + for (unsigned j = 0; j < numNodes; j ++) { + + double dx = X_coord [i] - X_coord [j], dy = Y_coord [i] - Y_coord [j]; + + dist [i] [j] = dist [j] [i] = (unsigned) (sqrt (dx * dx + dy * dy) + 0.5) ; + } + }*/ +} + +unsigned distance (Node __from, Node __to) { + + // return dist [__from] [__to]; + + double dx = X_coord [__from] - X_coord [__to], dy = Y_coord [__from] - Y_coord [__to]; + + return (unsigned) (sqrt (dx * dx + dy * dy) + 0.5) ; +} + diff --git a/trunk/paradiseo-peo/examples/shared/node.h b/trunk/paradiseo-peo/examples/shared/node.h new file mode 100644 index 000000000..644b3f527 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/node.h @@ -0,0 +1,41 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "node.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __node_h +#define __node_h + +#include + +typedef unsigned Node; + +extern double X_min, X_max, Y_min, Y_max; + +extern double * X_coord, * Y_coord; + +extern unsigned numNodes; /* Number of nodes */ + +extern void loadNodes (FILE * __f); + +extern unsigned distance (Node __from, Node __to); + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/opt_route.cpp b/trunk/paradiseo-peo/examples/shared/opt_route.cpp new file mode 100644 index 000000000..df42d0d0a --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/opt_route.cpp @@ -0,0 +1,122 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "opt_route.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "opt_route.h" + +#define MAX_TRASH_LENGTH 1000 +#define MAX_FIELD_LENGTH 1000 +#define MAX_LINE_LENGTH 1000 + +static void getNextField (FILE * __f, char * __buff) { + + char trash [MAX_TRASH_LENGTH]; + + fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ + fscanf (__f, "%[^:\n]", __buff); /* Reading the field */ + fgetc (__f); +} + +static void getLine (FILE * __f, char * __buff) { + + char trash [MAX_TRASH_LENGTH]; + + fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ + fscanf (__f, "%[^\n]", __buff); /* Reading the line */ +} + +static void loadBestRoute (FILE * __f) { + + opt_route.clear (); + + for (unsigned i = 0; i < numNodes; i ++) { + Node node; + fscanf (__f, "%u", & node); + opt_route.push_back (node - 1); + } + int d; /* -1 ! */ + fscanf (__f, "%d", & d); +} + +void loadOptimumRoute (const char * __filename) { + + FILE * f = fopen (__filename, "r"); + + if (f) { + + printf ("Loading '%s'.\n", __filename); + + char field [MAX_FIELD_LENGTH]; + + getNextField (f, field); /* Name */ + assert (strstr (field, "NAME")); + getNextField (f, field); + //printf ("NAME: %s.\n", field); + + getNextField (f, field); /* Comment */ + assert (strstr (field, "COMMENT")); + getLine (f, field); + // printf ("COMMENT: %s.\n", field); + + getNextField (f, field); /* Type */ + assert (strstr (field, "TYPE")); + getNextField (f, field); + //printf ("TYPE: %s.\n", field); + + getNextField (f, field); /* Dimension */ + assert (strstr (field, "DIMENSION")); + getNextField (f, field); + // printf ("DIMENSION: %s.\n", field); + numNodes = atoi (field); + + getNextField (f, field); /* Tour section */ + assert (strstr (field, "TOUR_SECTION")); + loadBestRoute (f); + + getNextField (f, field); /* End of file */ + assert (strstr (field, "EOF")); + //printf ("EOF.\n"); + + printf ("The length of the best route is %u.\n", length (opt_route)); + } + else { + + fprintf (stderr, "Can't open '%s'.\n", __filename); + exit (1); + } +} + +void loadOptimumRoute (eoParser & __parser) { + + /* Getting the path of the instance */ + + eoValueParam param ("", "optimumTour", "Optimum tour") ; + __parser.processParam (param) ; + if (strlen (param.value ().c_str ())) + loadOptimumRoute (param.value ().c_str ()); + else + opt_route.fitness (0); +} + +Route opt_route; /* Optimum route */ + + diff --git a/trunk/paradiseo-peo/examples/shared/opt_route.h b/trunk/paradiseo-peo/examples/shared/opt_route.h new file mode 100644 index 000000000..03053accc --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/opt_route.h @@ -0,0 +1,38 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "opt_route.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __opt_route_h +#define __opt_route_h + +#include +#include + +#include "route.h" + +extern void loadOptimumRoute (const char * __filename); + +extern void loadOptimumRoute (eoParser & __parser); + +extern Route opt_route; /* Optimum route */ + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/order_xover.cpp b/trunk/paradiseo-peo/examples/shared/order_xover.cpp new file mode 100644 index 000000000..b84334929 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/order_xover.cpp @@ -0,0 +1,79 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "order_xover.cpp" + +// (c) OPAC Team, LIFL, 2002 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include + +#include "order_xover.h" + +void OrderXover :: cross (const Route & __par1, const Route & __par2, Route & __child) { + + unsigned cut2 = 1 + rng.random (numNodes) ; + unsigned cut1 = rng.random (cut2); + unsigned l = 0; + + /* To store vertices that have already been crossed */ + std :: vector v (numNodes, false); + + /* Copy of the left partial route of the first parent */ + for (unsigned i = cut1 ; i < cut2 ; i ++) { + __child [l ++] = __par1 [i] ; + v [__par1 [i]] = true ; + } + + /* Searching the vertex of the second path, that ended the previous first one */ + unsigned from = 0 ; + for (unsigned i = 0; i < numNodes; i ++) + if (__par2 [i] == __child [cut2 - 1]) { + from = i ; + break ; + } + + /* Selecting a direction (Left or Right) */ + char direct = rng.flip () ? 1 : -1 ; + + for (unsigned i = 0; i < numNodes + 1; i ++) { + unsigned bidule = (direct * i + from + numNodes) % numNodes; + if (! v [__par2 [bidule]]) { + __child [l ++] = __par2 [bidule] ; + v [__par2 [bidule]] = true ; + } + } +} + +bool OrderXover :: operator () (Route & __route1, Route & __route2) { + + // Init. copy + Route par [2] ; + par [0] = __route1 ; + par [1] = __route2 ; + + cross (par [0], par [1], __route1) ; + cross (par [1], par [0], __route2) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/trunk/paradiseo-peo/examples/shared/order_xover.h b/trunk/paradiseo-peo/examples/shared/order_xover.h new file mode 100644 index 000000000..d36adb0a4 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/order_xover.h @@ -0,0 +1,43 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "order_xover.h" + +// (c) OPAC Team, LIFL, 2003 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef order_xover_h +#define order_xover_h + +#include + +#include "route.h" + +/** Order Crossover */ +class OrderXover : public eoQuadOp { + +public : + + bool operator () (Route & __route1, Route & __route2) ; + +private : + + void cross (const Route & __par1, const Route & __par2, Route & __child) ; +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/paradiseo-peo-lsn-shared.doxyfile b/trunk/paradiseo-peo/examples/shared/paradiseo-peo-lsn-shared.doxyfile new file mode 100644 index 000000000..bd1a827a9 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/paradiseo-peo-lsn-shared.doxyfile @@ -0,0 +1,240 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO - Lessons" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../docs/html/lsnshared +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = ../../../paradiseo-mo/docs/eo.doxytag=../../../../paradiseo-mo/docs/html \ + ../../../paradiseo-mo/docs/mo.doxytag=../../../../paradiseo-mo/docs/html \ + ../../docs/paradiseo-peo.doxytag=../../ +GENERATE_TAGFILE = ../../docs/paradiseo-peo-lsn-shared.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/trunk/paradiseo-peo/examples/shared/param.cpp b/trunk/paradiseo-peo/examples/shared/param.cpp new file mode 100644 index 000000000..343f7bd32 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/param.cpp @@ -0,0 +1,38 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "param.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "data.h" +#include "opt_route.h" + +void loadParameters (int __argc, char * * __argv) { + + eoParser parser (__argc, __argv); + + loadData (parser); + + loadOptimumRoute (parser); +} + + diff --git a/trunk/paradiseo-peo/examples/shared/param.h b/trunk/paradiseo-peo/examples/shared/param.h new file mode 100644 index 000000000..3fd3d5bed --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/param.h @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "param.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __param_h +#define __param_h + +extern void loadParameters (int __argc, char * * __argv); + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/part_route_eval.cpp b/trunk/paradiseo-peo/examples/shared/part_route_eval.cpp new file mode 100644 index 000000000..a4d38ab6a --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/part_route_eval.cpp @@ -0,0 +1,45 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "part_route_eval.cpp" + +// (c) OPAC Team, LIFL, 2003 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "part_route_eval.h" +#include "node.h" + +PartRouteEval :: PartRouteEval (float __from, + float __to + ) : from (__from), + to (__to) { + +} + +void PartRouteEval :: operator () (Route & __route) { + + + unsigned len = 0 ; + + for (unsigned i = (unsigned) (__route.size () * from) ; + i < (unsigned) (__route.size () * to) ; + i ++) + len += distance (__route [i], __route [(i + 1) % numNodes]) ; + + __route.fitness (- (int) len) ; +} diff --git a/trunk/paradiseo-peo/examples/shared/part_route_eval.h b/trunk/paradiseo-peo/examples/shared/part_route_eval.h new file mode 100644 index 000000000..dce00cf7a --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/part_route_eval.h @@ -0,0 +1,48 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "part_route_eval.h" + +// (c) OPAC Team, LIFL, 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __part_route_eval_h +#define __part_route_eval_h + +#include + +#include "route.h" + +/** Route Evaluator */ +class PartRouteEval : public eoEvalFunc { + +public : + + /** Constructor */ + PartRouteEval (float __from, float __to) ; + + void operator () (Route & __route) ; + +private : + + float from, to ; + +} ; + + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/partial_mapped_xover.cpp b/trunk/paradiseo-peo/examples/shared/partial_mapped_xover.cpp new file mode 100644 index 000000000..95ad22939 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/partial_mapped_xover.cpp @@ -0,0 +1,76 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "partial_mapped_xover.cpp" + +// (c) OPAC Team, LIFL, 2003 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include + +#include "partial_mapped_xover.h" +#include "mix.h" + +void PartialMappedXover :: repair (Route & __route, unsigned __cut1, unsigned __cut2) { + + unsigned v [__route.size ()] ; // Number of times a cities are visited ... + + for (unsigned i = 0 ; i < __route.size () ; i ++) + v [i] = 0 ; + + for (unsigned i = 0 ; i < __route.size () ; i ++) + v [__route [i]] ++ ; + + std :: vector vert ; + + for (unsigned i = 0 ; i < __route.size () ; i ++) + if (! v [i]) + vert.push_back (i) ; + + mix (vert) ; + + for (unsigned i = 0 ; i < __route.size () ; i ++) + if (i < __cut1 || i >= __cut2) + if (v [__route [i]] > 1) { + __route [i] = vert.back () ; + vert.pop_back () ; + } +} + +bool PartialMappedXover :: operator () (Route & __route1, Route & __route2) { + + unsigned cut1 = rng.random (__route1.size ()), cut2 = rng.random (__route2.size ()) ; + + if (cut2 < cut1) + std :: swap (cut1, cut2) ; + + // Between the cuts + for (unsigned i = cut1 ; i < cut2 ; i ++) + std :: swap (__route1 [i], __route2 [i]) ; + + // Outside the cuts + repair (__route1, cut1, cut2) ; + repair (__route2, cut1, cut2) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/trunk/paradiseo-peo/examples/shared/partial_mapped_xover.h b/trunk/paradiseo-peo/examples/shared/partial_mapped_xover.h new file mode 100644 index 000000000..4333095ce --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/partial_mapped_xover.h @@ -0,0 +1,43 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "partial_mapped_xover.h" + +// (c) OPAC Team, LIFL, 2003 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef partial_mapped_xover_h +#define partial_mapped_xover_h + +#include + +#include "route.h" + +/** Partial Mapped Crossover */ +class PartialMappedXover : public eoQuadOp { + +public : + + bool operator () (Route & __route1, Route & __route2) ; + +private : + + void repair (Route & __route, unsigned __cut1, unsigned __cut2) ; +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/route.cpp b/trunk/paradiseo-peo/examples/shared/route.cpp new file mode 100644 index 000000000..d07ca8ca7 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/route.cpp @@ -0,0 +1,36 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "route.h" + +unsigned length (const Route & __route) { + + unsigned len = 0 ; + + for (unsigned i = 0; i < numNodes; i ++) + len += distance (__route [i], __route [(i + 1) % numNodes]) ; + + return len; +} + + diff --git a/trunk/paradiseo-peo/examples/shared/route.h b/trunk/paradiseo-peo/examples/shared/route.h new file mode 100644 index 000000000..21f6d5bc6 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/route.h @@ -0,0 +1,35 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __route_h +#define __route_h + +#include + +#include "node.h" + +typedef eoVector Route; + +unsigned length (const Route & __route); + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/route_eval.cpp b/trunk/paradiseo-peo/examples/shared/route_eval.cpp new file mode 100644 index 000000000..3c959af24 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/route_eval.cpp @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_eval.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "route_eval.h" + +void RouteEval :: operator () (Route & __route) { + + __route.fitness (- (int) length (__route)); +} diff --git a/trunk/paradiseo-peo/examples/shared/route_eval.h b/trunk/paradiseo-peo/examples/shared/route_eval.h new file mode 100644 index 000000000..48e496b93 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/route_eval.h @@ -0,0 +1,38 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_eval.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __route_eval_h +#define __route_eval_h + +#include + +#include "route.h" + +class RouteEval : public eoEvalFunc { + +public : + + void operator () (Route & __route) ; +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/route_init.cpp b/trunk/paradiseo-peo/examples/shared/route_init.cpp new file mode 100644 index 000000000..9f45a8de5 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/route_init.cpp @@ -0,0 +1,38 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_init.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "route_init.h" +#include "node.h" + +void RouteInit :: operator () (Route & __route) { + + __route.clear (); + + for (unsigned i = 0 ; i < numNodes ; i ++) + __route.push_back (i); + + for (unsigned i = 0 ; i < numNodes ; i ++) + std :: swap (__route [i], __route [rng.random (numNodes)]); +} diff --git a/trunk/paradiseo-peo/examples/shared/route_init.h b/trunk/paradiseo-peo/examples/shared/route_init.h new file mode 100644 index 000000000..56622bc59 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/route_init.h @@ -0,0 +1,38 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_init.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __route_init_h +#define __route_init_h + +#include + +#include "route.h" + +class RouteInit : public eoInit { + +public : + + void operator () (Route & __route); +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/two_opt.cpp b/trunk/paradiseo-peo/examples/shared/two_opt.cpp new file mode 100644 index 000000000..7f5cecfc2 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt.cpp @@ -0,0 +1,35 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt.h" + +void TwoOpt :: operator () (Route & __route) { + + unsigned i = 0; + + while ((2 * i) < (second - first)) { + + std :: swap (__route [first + i], __route [second - i]); + i ++; + } +} diff --git a/trunk/paradiseo-peo/examples/shared/two_opt.h b/trunk/paradiseo-peo/examples/shared/two_opt.h new file mode 100644 index 000000000..627b32800 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt.h @@ -0,0 +1,40 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __two_opt_h +#define __two_opt_h + +#include +#include + +#include "route.h" + +class TwoOpt : public moMove , public std :: pair { + +public : + + void operator () (Route & __route); + +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/two_opt_incr_eval.cpp b/trunk/paradiseo-peo/examples/shared/two_opt_incr_eval.cpp new file mode 100644 index 000000000..b3a91f98b --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt_incr_eval.cpp @@ -0,0 +1,39 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "TwoOptIncrEval.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt_incr_eval.h" +#include "node.h" + +int TwoOptIncrEval :: operator () (const TwoOpt & __move, const Route & __route) { + + /* From */ + Node v1 = __route [__move.first], v1_left = __route [(__move.first - 1 + numNodes) % numNodes]; + + /* To */ + Node v2 = __route [__move.second], v2_right = __route [(__move.second + 1) % numNodes]; + + if (v1 == v2 || v2_right == v1) + return __route.fitness (); + else + return __route.fitness () - distance (v1_left, v2) - distance (v1, v2_right) + distance (v1_left, v1) + distance (v2, v2_right); +} diff --git a/trunk/paradiseo-peo/examples/shared/two_opt_incr_eval.h b/trunk/paradiseo-peo/examples/shared/two_opt_incr_eval.h new file mode 100644 index 000000000..f6ddc55c8 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt_incr_eval.h @@ -0,0 +1,38 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "TwoOptIncrEval.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __two_opt_incr_eval_h +#define __two_opt_incr_eval_h + +#include +#include "two_opt.h" + +class TwoOptIncrEval : public moMoveIncrEval { + +public : + + int operator () (const TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/two_opt_init.cpp b/trunk/paradiseo-peo/examples/shared/two_opt_init.cpp new file mode 100644 index 000000000..12c530748 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt_init.cpp @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_init.cpp" + +// (c) OPAC Team, LIFL, 2003 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt_init.h" + +void TwoOptInit :: operator () (TwoOpt & __move, const Route & __route) { + + __move.first = __move.second = 0; +} diff --git a/trunk/paradiseo-peo/examples/shared/two_opt_init.h b/trunk/paradiseo-peo/examples/shared/two_opt_init.h new file mode 100644 index 000000000..476c1a7e8 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt_init.h @@ -0,0 +1,40 @@ + +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_init.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __two_opt_init_h +#define __two_opt_init_h + +#include + +#include "two_opt.h" + +class TwoOptInit : public moMoveInit { + +public : + + void operator () (TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/two_opt_next.cpp b/trunk/paradiseo-peo/examples/shared/two_opt_next.cpp new file mode 100644 index 000000000..2bb630a19 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt_next.cpp @@ -0,0 +1,42 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_next.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt_next.h" +#include "node.h" + +bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route) { + + if (__move.first == numNodes - 1 && __move.second == numNodes - 1) + return false; + + else { + + __move.second ++; + if (__move.second == numNodes) { + + __move.first ++; + __move.second = __move.first; + } + return true ; + } +} diff --git a/trunk/paradiseo-peo/examples/shared/two_opt_next.h b/trunk/paradiseo-peo/examples/shared/two_opt_next.h new file mode 100644 index 000000000..878231477 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt_next.h @@ -0,0 +1,39 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_next.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __two_opt_next_h +#define __two_opt_next_h + +#include + +#include "two_opt.h" + +class TwoOptNext : public moNextMove { + +public : + + bool operator () (TwoOpt & __move, const Route & __route); + +}; + +#endif diff --git a/trunk/paradiseo-peo/examples/shared/two_opt_rand.cpp b/trunk/paradiseo-peo/examples/shared/two_opt_rand.cpp new file mode 100644 index 000000000..bdc4a0271 --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt_rand.cpp @@ -0,0 +1,36 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_rand.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "two_opt_rand.h" +#include "node.h" + +void TwoOptRand :: operator () (TwoOpt & __move, const Route & __route) { + + __move.second = rng.random (numNodes); + + __move.first = rng.random (__move.second); +} + + diff --git a/trunk/paradiseo-peo/examples/shared/two_opt_rand.h b/trunk/paradiseo-peo/examples/shared/two_opt_rand.h new file mode 100644 index 000000000..82609bf1c --- /dev/null +++ b/trunk/paradiseo-peo/examples/shared/two_opt_rand.h @@ -0,0 +1,39 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_rand.h" + +// (c) OPAC Team, LIFL, January 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __two_opt_rand_h +#define __two_opt_rand_h + +#include + +#include "two_opt.h" + +class TwoOptRand : public eoMoveRand { + +public : + + void operator () (TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/trunk/paradiseo-peo/src/Makefile.am b/trunk/paradiseo-peo/src/Makefile.am new file mode 100755 index 000000000..2bc845dc8 --- /dev/null +++ b/trunk/paradiseo-peo/src/Makefile.am @@ -0,0 +1,71 @@ +# Process this file with automake to produce Makefile.in + +CXX=g++ + +INCLUDES = \ + -I$(EO_DIR)/src \ + -I$(MO_DIR)/src \ + -I$(MOEO_DIR)/src + +AM_CXXFLAGS =\ + -Wall\ + -g + +SUBDIRS= rmc + +lib_LIBRARIES = libparadiseo.a + +#bin_PROGRAMS = peodeploy essai + +## Shared sources + +shared_SOURCES = \ + paradiseo \ + paradiseo.h \ + core/peo_init.h \ + core/peo_init.cpp \ + core/peo_fin.h \ + core/peo_fin.cpp \ + core/peo_run.h \ + core/peo_run.cpp \ + core/peo_param.h \ + core/peo_param.cpp \ + core/peo_debug.h \ + core/peo_debug.cpp \ + core/thread.h \ + core/thread.cpp \ + core/reac_thread.h \ + core/reac_thread.cpp \ + core/service.h \ + core/service.cpp \ + core/runner.h \ + core/runner.cpp \ + core/communicable.h \ + core/communicable.cpp \ + core/cooperative.h \ + core/rmc.h \ + core/messaging.h \ + core/topology.h \ + core/topology.cpp \ + core/ring_topo.h \ + core/ring_topo.cpp \ + core/eoPop_comm.h \ + peoEA.h \ + peoTransform.h \ + peoSeqTransform.h \ + peoParaTransform.h \ + peoPopEval.h\ + peoSeqPopEval.h \ + peoAggEvalFunc.h \ + peoParaPopEval.h + +## Main library + +libparadiseo_a_SOURCES = \ + $(shared_SOURCES) + +#libparadiseo_a_LIBADD = + +## Miscellaneous Tools + +# peodeploy \ No newline at end of file diff --git a/trunk/paradiseo-peo/src/Makefile.in b/trunk/paradiseo-peo/src/Makefile.in new file mode 100644 index 000000000..65d1bdada --- /dev/null +++ b/trunk/paradiseo-peo/src/Makefile.in @@ -0,0 +1,781 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Process this file with automake to produce Makefile.in + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" +libLIBRARIES_INSTALL = $(INSTALL_DATA) +LIBRARIES = $(lib_LIBRARIES) +AR = ar +ARFLAGS = cru +libparadiseo_a_AR = $(AR) $(ARFLAGS) +libparadiseo_a_LIBADD = +am__objects_1 = peo_init.$(OBJEXT) peo_fin.$(OBJEXT) peo_run.$(OBJEXT) \ + peo_param.$(OBJEXT) peo_debug.$(OBJEXT) thread.$(OBJEXT) \ + reac_thread.$(OBJEXT) service.$(OBJEXT) runner.$(OBJEXT) \ + communicable.$(OBJEXT) topology.$(OBJEXT) ring_topo.$(OBJEXT) +am_libparadiseo_a_OBJECTS = $(am__objects_1) +libparadiseo_a_OBJECTS = $(am_libparadiseo_a_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libparadiseo_a_SOURCES) +DIST_SOURCES = $(libparadiseo_a_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = g++ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EO_DIR = @EO_DIR@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MOEO_DIR = @MOEO_DIR@ +MO_DIR = @MO_DIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +INCLUDES = \ + -I$(EO_DIR)/src \ + -I$(MO_DIR)/src \ + -I$(MOEO_DIR)/src + +AM_CXXFLAGS = \ + -Wall\ + -g + +SUBDIRS = rmc +lib_LIBRARIES = libparadiseo.a + +#bin_PROGRAMS = peodeploy essai +shared_SOURCES = \ + paradiseo \ + paradiseo.h \ + core/peo_init.h \ + core/peo_init.cpp \ + core/peo_fin.h \ + core/peo_fin.cpp \ + core/peo_run.h \ + core/peo_run.cpp \ + core/peo_param.h \ + core/peo_param.cpp \ + core/peo_debug.h \ + core/peo_debug.cpp \ + core/thread.h \ + core/thread.cpp \ + core/reac_thread.h \ + core/reac_thread.cpp \ + core/service.h \ + core/service.cpp \ + core/runner.h \ + core/runner.cpp \ + core/communicable.h \ + core/communicable.cpp \ + core/cooperative.h \ + core/rmc.h \ + core/messaging.h \ + core/topology.h \ + core/topology.cpp \ + core/ring_topo.h \ + core/ring_topo.cpp \ + core/eoPop_comm.h \ + peoEA.h \ + peoTransform.h \ + peoSeqTransform.h \ + peoParaTransform.h \ + peoPopEval.h\ + peoSeqPopEval.h \ + peoAggEvalFunc.h \ + peoParaPopEval.h + +libparadiseo_a_SOURCES = \ + $(shared_SOURCES) + +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .cpp .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + p=$(am__strip_dir) \ + echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \ + $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) +libparadiseo.a: $(libparadiseo_a_OBJECTS) $(libparadiseo_a_DEPENDENCIES) + -rm -f libparadiseo.a + $(libparadiseo_a_AR) libparadiseo.a $(libparadiseo_a_OBJECTS) $(libparadiseo_a_LIBADD) + $(RANLIB) libparadiseo.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/communicable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peo_debug.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peo_fin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peo_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peo_param.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peo_run.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reac_thread.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ring_topo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runner.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/service.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +peo_init.o: core/peo_init.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_init.o -MD -MP -MF "$(DEPDIR)/peo_init.Tpo" -c -o peo_init.o `test -f 'core/peo_init.cpp' || echo '$(srcdir)/'`core/peo_init.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_init.Tpo" "$(DEPDIR)/peo_init.Po"; else rm -f "$(DEPDIR)/peo_init.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_init.cpp' object='peo_init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_init.o `test -f 'core/peo_init.cpp' || echo '$(srcdir)/'`core/peo_init.cpp + +peo_init.obj: core/peo_init.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_init.obj -MD -MP -MF "$(DEPDIR)/peo_init.Tpo" -c -o peo_init.obj `if test -f 'core/peo_init.cpp'; then $(CYGPATH_W) 'core/peo_init.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_init.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_init.Tpo" "$(DEPDIR)/peo_init.Po"; else rm -f "$(DEPDIR)/peo_init.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_init.cpp' object='peo_init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_init.obj `if test -f 'core/peo_init.cpp'; then $(CYGPATH_W) 'core/peo_init.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_init.cpp'; fi` + +peo_fin.o: core/peo_fin.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_fin.o -MD -MP -MF "$(DEPDIR)/peo_fin.Tpo" -c -o peo_fin.o `test -f 'core/peo_fin.cpp' || echo '$(srcdir)/'`core/peo_fin.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_fin.Tpo" "$(DEPDIR)/peo_fin.Po"; else rm -f "$(DEPDIR)/peo_fin.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_fin.cpp' object='peo_fin.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_fin.o `test -f 'core/peo_fin.cpp' || echo '$(srcdir)/'`core/peo_fin.cpp + +peo_fin.obj: core/peo_fin.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_fin.obj -MD -MP -MF "$(DEPDIR)/peo_fin.Tpo" -c -o peo_fin.obj `if test -f 'core/peo_fin.cpp'; then $(CYGPATH_W) 'core/peo_fin.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_fin.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_fin.Tpo" "$(DEPDIR)/peo_fin.Po"; else rm -f "$(DEPDIR)/peo_fin.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_fin.cpp' object='peo_fin.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_fin.obj `if test -f 'core/peo_fin.cpp'; then $(CYGPATH_W) 'core/peo_fin.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_fin.cpp'; fi` + +peo_run.o: core/peo_run.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_run.o -MD -MP -MF "$(DEPDIR)/peo_run.Tpo" -c -o peo_run.o `test -f 'core/peo_run.cpp' || echo '$(srcdir)/'`core/peo_run.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_run.Tpo" "$(DEPDIR)/peo_run.Po"; else rm -f "$(DEPDIR)/peo_run.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_run.cpp' object='peo_run.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_run.o `test -f 'core/peo_run.cpp' || echo '$(srcdir)/'`core/peo_run.cpp + +peo_run.obj: core/peo_run.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_run.obj -MD -MP -MF "$(DEPDIR)/peo_run.Tpo" -c -o peo_run.obj `if test -f 'core/peo_run.cpp'; then $(CYGPATH_W) 'core/peo_run.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_run.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_run.Tpo" "$(DEPDIR)/peo_run.Po"; else rm -f "$(DEPDIR)/peo_run.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_run.cpp' object='peo_run.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_run.obj `if test -f 'core/peo_run.cpp'; then $(CYGPATH_W) 'core/peo_run.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_run.cpp'; fi` + +peo_param.o: core/peo_param.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_param.o -MD -MP -MF "$(DEPDIR)/peo_param.Tpo" -c -o peo_param.o `test -f 'core/peo_param.cpp' || echo '$(srcdir)/'`core/peo_param.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_param.Tpo" "$(DEPDIR)/peo_param.Po"; else rm -f "$(DEPDIR)/peo_param.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_param.cpp' object='peo_param.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_param.o `test -f 'core/peo_param.cpp' || echo '$(srcdir)/'`core/peo_param.cpp + +peo_param.obj: core/peo_param.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_param.obj -MD -MP -MF "$(DEPDIR)/peo_param.Tpo" -c -o peo_param.obj `if test -f 'core/peo_param.cpp'; then $(CYGPATH_W) 'core/peo_param.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_param.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_param.Tpo" "$(DEPDIR)/peo_param.Po"; else rm -f "$(DEPDIR)/peo_param.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_param.cpp' object='peo_param.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_param.obj `if test -f 'core/peo_param.cpp'; then $(CYGPATH_W) 'core/peo_param.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_param.cpp'; fi` + +peo_debug.o: core/peo_debug.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_debug.o -MD -MP -MF "$(DEPDIR)/peo_debug.Tpo" -c -o peo_debug.o `test -f 'core/peo_debug.cpp' || echo '$(srcdir)/'`core/peo_debug.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_debug.Tpo" "$(DEPDIR)/peo_debug.Po"; else rm -f "$(DEPDIR)/peo_debug.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_debug.cpp' object='peo_debug.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_debug.o `test -f 'core/peo_debug.cpp' || echo '$(srcdir)/'`core/peo_debug.cpp + +peo_debug.obj: core/peo_debug.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT peo_debug.obj -MD -MP -MF "$(DEPDIR)/peo_debug.Tpo" -c -o peo_debug.obj `if test -f 'core/peo_debug.cpp'; then $(CYGPATH_W) 'core/peo_debug.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_debug.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/peo_debug.Tpo" "$(DEPDIR)/peo_debug.Po"; else rm -f "$(DEPDIR)/peo_debug.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/peo_debug.cpp' object='peo_debug.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o peo_debug.obj `if test -f 'core/peo_debug.cpp'; then $(CYGPATH_W) 'core/peo_debug.cpp'; else $(CYGPATH_W) '$(srcdir)/core/peo_debug.cpp'; fi` + +thread.o: core/thread.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT thread.o -MD -MP -MF "$(DEPDIR)/thread.Tpo" -c -o thread.o `test -f 'core/thread.cpp' || echo '$(srcdir)/'`core/thread.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/thread.Tpo" "$(DEPDIR)/thread.Po"; else rm -f "$(DEPDIR)/thread.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/thread.cpp' object='thread.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o thread.o `test -f 'core/thread.cpp' || echo '$(srcdir)/'`core/thread.cpp + +thread.obj: core/thread.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT thread.obj -MD -MP -MF "$(DEPDIR)/thread.Tpo" -c -o thread.obj `if test -f 'core/thread.cpp'; then $(CYGPATH_W) 'core/thread.cpp'; else $(CYGPATH_W) '$(srcdir)/core/thread.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/thread.Tpo" "$(DEPDIR)/thread.Po"; else rm -f "$(DEPDIR)/thread.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/thread.cpp' object='thread.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o thread.obj `if test -f 'core/thread.cpp'; then $(CYGPATH_W) 'core/thread.cpp'; else $(CYGPATH_W) '$(srcdir)/core/thread.cpp'; fi` + +reac_thread.o: core/reac_thread.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT reac_thread.o -MD -MP -MF "$(DEPDIR)/reac_thread.Tpo" -c -o reac_thread.o `test -f 'core/reac_thread.cpp' || echo '$(srcdir)/'`core/reac_thread.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/reac_thread.Tpo" "$(DEPDIR)/reac_thread.Po"; else rm -f "$(DEPDIR)/reac_thread.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/reac_thread.cpp' object='reac_thread.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o reac_thread.o `test -f 'core/reac_thread.cpp' || echo '$(srcdir)/'`core/reac_thread.cpp + +reac_thread.obj: core/reac_thread.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT reac_thread.obj -MD -MP -MF "$(DEPDIR)/reac_thread.Tpo" -c -o reac_thread.obj `if test -f 'core/reac_thread.cpp'; then $(CYGPATH_W) 'core/reac_thread.cpp'; else $(CYGPATH_W) '$(srcdir)/core/reac_thread.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/reac_thread.Tpo" "$(DEPDIR)/reac_thread.Po"; else rm -f "$(DEPDIR)/reac_thread.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/reac_thread.cpp' object='reac_thread.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o reac_thread.obj `if test -f 'core/reac_thread.cpp'; then $(CYGPATH_W) 'core/reac_thread.cpp'; else $(CYGPATH_W) '$(srcdir)/core/reac_thread.cpp'; fi` + +service.o: core/service.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT service.o -MD -MP -MF "$(DEPDIR)/service.Tpo" -c -o service.o `test -f 'core/service.cpp' || echo '$(srcdir)/'`core/service.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/service.Tpo" "$(DEPDIR)/service.Po"; else rm -f "$(DEPDIR)/service.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/service.cpp' object='service.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o service.o `test -f 'core/service.cpp' || echo '$(srcdir)/'`core/service.cpp + +service.obj: core/service.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT service.obj -MD -MP -MF "$(DEPDIR)/service.Tpo" -c -o service.obj `if test -f 'core/service.cpp'; then $(CYGPATH_W) 'core/service.cpp'; else $(CYGPATH_W) '$(srcdir)/core/service.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/service.Tpo" "$(DEPDIR)/service.Po"; else rm -f "$(DEPDIR)/service.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/service.cpp' object='service.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o service.obj `if test -f 'core/service.cpp'; then $(CYGPATH_W) 'core/service.cpp'; else $(CYGPATH_W) '$(srcdir)/core/service.cpp'; fi` + +runner.o: core/runner.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT runner.o -MD -MP -MF "$(DEPDIR)/runner.Tpo" -c -o runner.o `test -f 'core/runner.cpp' || echo '$(srcdir)/'`core/runner.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/runner.Tpo" "$(DEPDIR)/runner.Po"; else rm -f "$(DEPDIR)/runner.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/runner.cpp' object='runner.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o runner.o `test -f 'core/runner.cpp' || echo '$(srcdir)/'`core/runner.cpp + +runner.obj: core/runner.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT runner.obj -MD -MP -MF "$(DEPDIR)/runner.Tpo" -c -o runner.obj `if test -f 'core/runner.cpp'; then $(CYGPATH_W) 'core/runner.cpp'; else $(CYGPATH_W) '$(srcdir)/core/runner.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/runner.Tpo" "$(DEPDIR)/runner.Po"; else rm -f "$(DEPDIR)/runner.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/runner.cpp' object='runner.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o runner.obj `if test -f 'core/runner.cpp'; then $(CYGPATH_W) 'core/runner.cpp'; else $(CYGPATH_W) '$(srcdir)/core/runner.cpp'; fi` + +communicable.o: core/communicable.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT communicable.o -MD -MP -MF "$(DEPDIR)/communicable.Tpo" -c -o communicable.o `test -f 'core/communicable.cpp' || echo '$(srcdir)/'`core/communicable.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/communicable.Tpo" "$(DEPDIR)/communicable.Po"; else rm -f "$(DEPDIR)/communicable.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/communicable.cpp' object='communicable.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o communicable.o `test -f 'core/communicable.cpp' || echo '$(srcdir)/'`core/communicable.cpp + +communicable.obj: core/communicable.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT communicable.obj -MD -MP -MF "$(DEPDIR)/communicable.Tpo" -c -o communicable.obj `if test -f 'core/communicable.cpp'; then $(CYGPATH_W) 'core/communicable.cpp'; else $(CYGPATH_W) '$(srcdir)/core/communicable.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/communicable.Tpo" "$(DEPDIR)/communicable.Po"; else rm -f "$(DEPDIR)/communicable.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/communicable.cpp' object='communicable.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o communicable.obj `if test -f 'core/communicable.cpp'; then $(CYGPATH_W) 'core/communicable.cpp'; else $(CYGPATH_W) '$(srcdir)/core/communicable.cpp'; fi` + +topology.o: core/topology.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT topology.o -MD -MP -MF "$(DEPDIR)/topology.Tpo" -c -o topology.o `test -f 'core/topology.cpp' || echo '$(srcdir)/'`core/topology.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/topology.Tpo" "$(DEPDIR)/topology.Po"; else rm -f "$(DEPDIR)/topology.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/topology.cpp' object='topology.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o topology.o `test -f 'core/topology.cpp' || echo '$(srcdir)/'`core/topology.cpp + +topology.obj: core/topology.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT topology.obj -MD -MP -MF "$(DEPDIR)/topology.Tpo" -c -o topology.obj `if test -f 'core/topology.cpp'; then $(CYGPATH_W) 'core/topology.cpp'; else $(CYGPATH_W) '$(srcdir)/core/topology.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/topology.Tpo" "$(DEPDIR)/topology.Po"; else rm -f "$(DEPDIR)/topology.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/topology.cpp' object='topology.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o topology.obj `if test -f 'core/topology.cpp'; then $(CYGPATH_W) 'core/topology.cpp'; else $(CYGPATH_W) '$(srcdir)/core/topology.cpp'; fi` + +ring_topo.o: core/ring_topo.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ring_topo.o -MD -MP -MF "$(DEPDIR)/ring_topo.Tpo" -c -o ring_topo.o `test -f 'core/ring_topo.cpp' || echo '$(srcdir)/'`core/ring_topo.cpp; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ring_topo.Tpo" "$(DEPDIR)/ring_topo.Po"; else rm -f "$(DEPDIR)/ring_topo.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/ring_topo.cpp' object='ring_topo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ring_topo.o `test -f 'core/ring_topo.cpp' || echo '$(srcdir)/'`core/ring_topo.cpp + +ring_topo.obj: core/ring_topo.cpp +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ring_topo.obj -MD -MP -MF "$(DEPDIR)/ring_topo.Tpo" -c -o ring_topo.obj `if test -f 'core/ring_topo.cpp'; then $(CYGPATH_W) 'core/ring_topo.cpp'; else $(CYGPATH_W) '$(srcdir)/core/ring_topo.cpp'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ring_topo.Tpo" "$(DEPDIR)/ring_topo.Po"; else rm -f "$(DEPDIR)/ring_topo.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='core/ring_topo.cpp' object='ring_topo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ring_topo.obj `if test -f 'core/ring_topo.cpp'; then $(CYGPATH_W) 'core/ring_topo.cpp'; else $(CYGPATH_W) '$(srcdir)/core/ring_topo.cpp'; fi` +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LIBRARIES) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLIBRARIES mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: install-libLIBRARIES + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libLIBRARIES + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-libLIBRARIES clean-recursive ctags \ + ctags-recursive distclean distclean-compile distclean-generic \ + distclean-recursive distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-libLIBRARIES install-man install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-info-am \ + uninstall-libLIBRARIES + + +#libparadiseo_a_LIBADD = + +# peodeploy +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/trunk/paradiseo-peo/src/core/communicable.cpp b/trunk/paradiseo-peo/src/core/communicable.cpp new file mode 100644 index 000000000..b407333f7 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/communicable.cpp @@ -0,0 +1,85 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "comm.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +#include "communicable.h" + +static std :: vector key_to_comm (1); /* Vector of registered cooperators */ + +static std :: map comm_to_key; /* Map of registered cooperators */ + +unsigned Communicable :: num_comm = 0; + +Communicable :: Communicable () { + + comm_to_key [this] = key = ++ num_comm; + key_to_comm.push_back (this); + sem_init (& sem_lock, 0, 1); + sem_init (& sem_stop, 0, 0); +} + +Communicable :: ~ Communicable () { + +} + +COMM_ID Communicable :: getKey () { + + return key; +} + +Communicable * getCommunicable (COMM_ID __key) { + + assert (__key < key_to_comm.size ()); + return key_to_comm [__key]; +} + +COMM_ID getKey (const Communicable * __comm) { + + return comm_to_key [__comm]; +} + +void Communicable :: lock () { + + sem_wait (& sem_lock); +} + +void Communicable :: unlock () { + + sem_post (& sem_lock); +} + +void Communicable :: stop () { + + sem_wait (& sem_stop); +} + +void Communicable :: resume () { + + sem_post (& sem_stop); +} + + + diff --git a/trunk/paradiseo-peo/src/core/communicable.h b/trunk/paradiseo-peo/src/core/communicable.h new file mode 100644 index 000000000..8176dd54e --- /dev/null +++ b/trunk/paradiseo-peo/src/core/communicable.h @@ -0,0 +1,62 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "communicable.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __communicable_h +#define __communicable_h + +#include + +typedef unsigned COMM_ID; + +class Communicable { + +public : + + Communicable (); + + virtual ~ Communicable (); + + COMM_ID getKey (); + + void lock (); /* It suspends the current process if the semaphore is locked */ + void unlock (); /* It unlocks the shared semaphore */ + + void stop (); /* It suspends the current process */ + void resume (); /* It resumes ___________ */ + +protected : + + COMM_ID key; + + sem_t sem_lock; + + sem_t sem_stop; + + static unsigned num_comm; +}; + +extern Communicable * getCommunicable (COMM_ID __key); + +//extern COMM_ID getKey (const Communicable * __comm); + +#endif diff --git a/trunk/paradiseo-peo/src/core/cooperative.h b/trunk/paradiseo-peo/src/core/cooperative.h new file mode 100644 index 000000000..4c3e0455d --- /dev/null +++ b/trunk/paradiseo-peo/src/core/cooperative.h @@ -0,0 +1,56 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "cooperative.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __cooperative_h +#define __cooperative_h + +#include "communicable.h" +#include "runner.h" + +typedef unsigned COOP_ID; + +class Cooperative : public Communicable { + +public : + + Runner * getOwner (); + + void setOwner (Runner & __runner); + + virtual void pack () = 0; + + virtual void unpack () = 0; + + void send (Cooperative * __coop); + + virtual void notifySending (); + +private : + + Runner * owner; + +}; + +extern Cooperative * getCooperative (COOP_ID __key); + +#endif diff --git a/trunk/paradiseo-peo/src/core/eoPop_comm.h b/trunk/paradiseo-peo/src/core/eoPop_comm.h new file mode 100644 index 000000000..88571fa24 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/eoPop_comm.h @@ -0,0 +1,47 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoPop_comm.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __eoPop_comm_h +#define __eoPop_comm_h + +#include + +#include "messaging.h" + +template void pack (const eoPop & __pop) { + + pack ((unsigned) __pop.size ()); + for (unsigned i = 0; i < __pop.size (); i ++) + pack (__pop [i]); +} + +template void unpack (eoPop & __pop) { + + unsigned n; + + unpack (n); + __pop.resize (n); + for (unsigned i = 0; i < n; i ++) + unpack (__pop [i]); +} +#endif diff --git a/trunk/paradiseo-peo/src/core/eoVector_comm.h b/trunk/paradiseo-peo/src/core/eoVector_comm.h new file mode 100644 index 000000000..82100e9f0 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/eoVector_comm.h @@ -0,0 +1,53 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoVector_comm.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __eoVector_comm_h +#define __eoVector_comm_h + +#include + +#include "messaging.h" + +template void pack (const eoVector & __v) { + + pack (__v.fitness ()) ; + unsigned len = __v.size (); + pack (len); + for (unsigned i = 0 ; i < len; i ++) + pack (__v [i]); +} + +template void unpack (eoVector & __v) { + + F fit; + unpack (fit); + __v.fitness (fit); + + unsigned len; + unpack (len); + __v.resize (len); + for (unsigned i = 0 ; i < len; i ++) + unpack (__v [i]); +} + +#endif diff --git a/trunk/paradiseo-peo/src/core/messaging.h b/trunk/paradiseo-peo/src/core/messaging.h new file mode 100644 index 000000000..d1630bb44 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/messaging.h @@ -0,0 +1,119 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "messaging.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __mess_h +#define __mess_h + +#include + +/* Char */ +extern void pack (const char & __c); + +/* Float */ +extern void pack (const float & __f, int __nitem = 1); + +/* Double */ +extern void pack (const double & __d, int __nitem = 1); + +/* Integer */ +extern void pack (const int & __i, int __nitem = 1); + +/* Unsigned int. */ +extern void pack (const unsigned int & __ui, int __nitem = 1); + +/* Short int. */ +extern void pack (const short & __sh, int __nitem = 1); + +/* Unsigned short */ +extern void pack (const unsigned short & __ush, int __nitem = 1); + +/* Long */ +extern void pack (const long & __l, int __nitem = 1); + +/* Unsigned long */ +extern void pack (const unsigned long & __ul, int __nitem = 1); + +/* String */ +extern void pack (const char * __str); + +/* Pointer */ +template void pack (const T * __ptr) { + + pack ((unsigned long) __ptr); +} + +/* Pair */ +template void pack (const std :: pair & __pair) { + + pack (__pair.first); + pack (__pair.second); +} + +// + +/* Float */ +extern void unpack (char & __c); + +/* Float */ +extern void unpack (float & __f, int __nitem = 1); + +/* Double */ +extern void unpack (double & __d, int __nitem = 1); + +/* Integer */ +extern void unpack (int & __i, int __nitem = 1); + +/* Unsigned int. */ +extern void unpack (unsigned int & __ui, int __nitem = 1); + +/* Short int. */ +extern void unpack (short & __sh, int __nitem = 1); + +/* Unsigned short */ +extern void unpack (unsigned short & __ush, int __nitem = 1); + +/* Long */ +extern void unpack (long & __l, int __nitem = 1); + +/* Unsigned long */ +extern void unpack (unsigned long & __ul, int __nitem = 1); + +/* String */ +extern void unpack (char * __str); + +/* Pointer */ +template void unpack (T * & __ptr) { + + unsigned long p; + unpack (p); + __ptr = (T *) p; +} + +/* Pair */ +template void unpack (std :: pair & __pair) { + + unpack (__pair.first); + unpack (__pair.second); +} + +#endif diff --git a/trunk/paradiseo-peo/src/core/peo_debug.cpp b/trunk/paradiseo-peo/src/core/peo_debug.cpp new file mode 100644 index 000000000..a40efffc5 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_debug.cpp @@ -0,0 +1,92 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_debug.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "peo_debug.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "peo_debug.h" + +#define MAX_BUFF_SIZE 1000 + +#define DEBUG_PATH "./log/" + +static bool debug = true; + +static char host [MAX_BUFF_SIZE]; + +std :: vector files; + +void setDebugMode (bool __dbg) { + + debug = __dbg; + gethostname (host, MAX_BUFF_SIZE); +} + +extern int getNodeRank (); + +void initDebugging () { + + mkdir (DEBUG_PATH, S_IRWXU); + // files.push_back (stdout); + char buff [MAX_BUFF_SIZE]; + sprintf (buff, "%s/%d", DEBUG_PATH, getNodeRank ()); + files.push_back (fopen (buff, "w")); +} + +void endDebugging () { + + for (unsigned i = 0; i < files.size (); i ++) + if (files [i] != stdout) + fclose (files [i]); +} + +void printDebugMessage (const char * __mess) { + + if (debug) { + + char buff [MAX_BUFF_SIZE]; + time_t t = time (0); + + /* Date */ + sprintf (buff, "[%s][%s: ", host, ctime (& t)); + * strchr (buff, '\n') = ']'; + for (unsigned i = 0; i < files.size (); i ++) + fprintf (files [i], buff); + + /* Message */ + sprintf (buff, "%s", __mess); + + for (unsigned i = 0; i < files.size (); i ++) { + fputs (buff, files [i]); + fputs ("\n", files [i]); + fflush (files [i]); + } + } +} diff --git a/trunk/paradiseo-peo/src/core/peo_debug.h b/trunk/paradiseo-peo/src/core/peo_debug.h new file mode 100644 index 000000000..9b2775080 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_debug.h @@ -0,0 +1,37 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_debug.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peo_debug_h +#define __peo_debug_h + +extern void initDebugging (); + +extern void endDebugging (); + +extern void setDebugMode (bool __dbg = true); /* (Des)activating the Debugging mode */ + +extern void printDebugMessage (const char * __mess); /* Print a new message both on the + standard output and a target + text-file in a subdirectory) */ + +#endif diff --git a/trunk/paradiseo-peo/src/core/peo_fin.cpp b/trunk/paradiseo-peo/src/core/peo_fin.cpp new file mode 100644 index 000000000..910df2036 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_fin.cpp @@ -0,0 +1,39 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_finalize.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "peo_fin.h" +#include "peo_debug.h" +#include "runner.h" +#include "rmc.h" + +void peo :: finalize () { + + printDebugMessage ("waiting for the termination of all threads"); + + joinRunners (); + + finalizeRMC (); + + printDebugMessage ("this is the end"); + endDebugging (); +} diff --git a/trunk/paradiseo-peo/src/core/peo_fin.h b/trunk/paradiseo-peo/src/core/peo_fin.h new file mode 100644 index 000000000..9f565665c --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_fin.h @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_finalize.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peo_finalize_h +#define __peo_finalize_h + +namespace peo { + + extern void finalize (); +} + +#endif diff --git a/trunk/paradiseo-peo/src/core/peo_init.cpp b/trunk/paradiseo-peo/src/core/peo_init.cpp new file mode 100644 index 000000000..0a7db539d --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_init.cpp @@ -0,0 +1,52 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_init.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "peo_init.h" +#include "peo_param.h" +#include "peo_debug.h" +#include "rmc.h" + +namespace peo { + + int * argc; + + char * * * argv; + + void init (int & __argc, char * * & __argv) { + + argc = & __argc; + + argv = & __argv; + + /* Initializing the the Resource Management and Communication */ + initRMC (__argc, __argv); + + /* Loading the common parameters */ + loadParameters (__argc, __argv); + + /* */ + initDebugging (); + } +} diff --git a/trunk/paradiseo-peo/src/core/peo_init.h b/trunk/paradiseo-peo/src/core/peo_init.h new file mode 100644 index 000000000..aeb810c3e --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_init.h @@ -0,0 +1,36 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_init.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peo_init_h +#define __peo_init_h + +namespace peo { + + extern int * argc; + + extern char * * * argv; + + extern void init (int & __argc, char * * & __argv); +} + +#endif diff --git a/trunk/paradiseo-peo/src/core/peo_param.cpp b/trunk/paradiseo-peo/src/core/peo_param.cpp new file mode 100644 index 000000000..1009ef75b --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_param.cpp @@ -0,0 +1,40 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_param.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "peo_param.h" +#include "peo_debug.h" + + + +void peo :: loadParameters (int & __argc, char * * & __argv) { + + eoParser parser (__argc, __argv); + + /* Debug */ + eoValueParam debug_param ("false", "debug", "?"); + parser.processParam (debug_param); + if (debug_param.value () == "true") + setDebugMode (); +} diff --git a/trunk/paradiseo-peo/src/core/peo_param.h b/trunk/paradiseo-peo/src/core/peo_param.h new file mode 100644 index 000000000..a21eb6bb7 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_param.h @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_param.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peo_param_h +#define __peo_param_h + +namespace peo { + + extern void loadParameters (int & __argc, char * * & __argv); +} + +#endif diff --git a/trunk/paradiseo-peo/src/core/peo_run.cpp b/trunk/paradiseo-peo/src/core/peo_run.cpp new file mode 100644 index 000000000..65027b047 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_run.cpp @@ -0,0 +1,34 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_run.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "peo_init.h" +#include "peo_run.h" +#include "rmc.h" +#include "runner.h" + +void peo :: run () { + + startRunners (); + + runRMC (); +} diff --git a/trunk/paradiseo-peo/src/core/peo_run.h b/trunk/paradiseo-peo/src/core/peo_run.h new file mode 100644 index 000000000..b3fb9b17c --- /dev/null +++ b/trunk/paradiseo-peo/src/core/peo_run.h @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peo_run.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peo_run_h +#define __peo_run_h + +namespace peo { + + extern void run (); +} + +#endif diff --git a/trunk/paradiseo-peo/src/core/reac_thread.cpp b/trunk/paradiseo-peo/src/core/reac_thread.cpp new file mode 100644 index 000000000..00fbbbe43 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/reac_thread.cpp @@ -0,0 +1,51 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "reac_thread.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "reac_thread.h" + +static bool the_end = false; + +static std :: vector reac_threads; + +ReactiveThread :: ReactiveThread () { + + reac_threads.push_back (this); + sem_init (& sem, 0, 0); +} + +void ReactiveThread :: sleep () { + + sem_wait (& sem); +} + +void ReactiveThread :: wakeUp () { + + sem_post (& sem); +} + +void stopReactiveThreads () { + + the_end = true; + for (unsigned i = 0; i < reac_threads.size (); i ++) + reac_threads [i] -> wakeUp (); +} diff --git a/trunk/paradiseo-peo/src/core/reac_thread.h b/trunk/paradiseo-peo/src/core/reac_thread.h new file mode 100644 index 000000000..8c3b34b25 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/reac_thread.h @@ -0,0 +1,50 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "reac_thread.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef REAC_THREAD_H_ +#define REAC_THREAD_H_ + +#include + +#include "thread.h" + +class ReactiveThread : public Thread { + +public: + + /* Ctor */ + ReactiveThread (); + + void sleep (); + + void wakeUp (); + +private: + + sem_t sem; + +}; + +extern void stopReactiveThreads (); + +#endif /*THREAD_H_*/ diff --git a/trunk/paradiseo-peo/src/core/ring_topo.cpp b/trunk/paradiseo-peo/src/core/ring_topo.cpp new file mode 100644 index 000000000..f870b0ffe --- /dev/null +++ b/trunk/paradiseo-peo/src/core/ring_topo.cpp @@ -0,0 +1,40 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "ring_topo.cpp" + +// (c) OPAC Team, LIFL, September 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "ring_topo.h" + +void RingTopology :: setNeighbors (Cooperative * __mig, + std :: vector & __from, + std :: vector & __to) { + __from.clear () ; + __to.clear () ; + + int len = mig.size () ; + + for (int i = 0 ; i < len ; i ++) + if (mig [i] == __mig) { + __from.push_back (mig [(i - 1 + len) % len]) ; + __to.push_back (mig [(i + 1) % len]) ; + break; + } +} diff --git a/trunk/paradiseo-peo/src/core/ring_topo.h b/trunk/paradiseo-peo/src/core/ring_topo.h new file mode 100644 index 000000000..38d44b336 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/ring_topo.h @@ -0,0 +1,39 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "ring_topo.h" + +// (c) OPAC Team, LIFL, September 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __ring_topo_h +#define __ring_topo_h + +#include "topology.h" + +class RingTopology : public Topology { + +public : + + void setNeighbors (Cooperative * __mig, + std :: vector & __from, + std :: vector & __to); + +}; + +#endif diff --git a/trunk/paradiseo-peo/src/core/rmc.h b/trunk/paradiseo-peo/src/core/rmc.h new file mode 100644 index 000000000..4f943f931 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/rmc.h @@ -0,0 +1,33 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "rmc.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __rmc_h +#define __rmc_h + +extern void initRMC (int & __argc, char * * & __argv); + +extern void runRMC (); /* Resource Management and Communication */ + +extern void finalizeRMC (); + +#endif diff --git a/trunk/paradiseo-peo/src/core/runner.cpp b/trunk/paradiseo-peo/src/core/runner.cpp new file mode 100644 index 000000000..a47a1b30d --- /dev/null +++ b/trunk/paradiseo-peo/src/core/runner.cpp @@ -0,0 +1,119 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "runner.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "runner.h" +#include "reac_thread.h" +#include "peo_debug.h" +#include "messaging.h" + +static unsigned num_act = 0; /* Number of active runners */ + +static std :: vector ll_threads; /* Low-level runner threads */ + +static std :: vector the_runners; + +static unsigned num_runners = 0; + +Runner :: Runner () { + + id = ++ num_runners; + the_runners.push_back (this); + sem_init (& sem_start, 0, 0); + num_act ++; +} + +extern int getNodeRank (); + +extern int getNumberOfNodes (); + +void unpackTerminationOfRunner () { + + RUNNER_ID id; + unpack (id); + num_act --; + printDebugMessage ("I'm noticed of the termination of a runner"); + if (! num_act) { + printDebugMessage ("all the runners have terminated. Now stopping the reactive threads."); + stopReactiveThreads (); + } +} + +bool atLeastOneActiveRunner () { + + return num_act; +} + +RUNNER_ID Runner :: getID () { + + return id; +} + +void Runner :: start () { + + setActive (); + sem_post (& sem_start); + run (); + terminate (); +} + +void Runner :: notifySendingTermination () { + + /* + char b [1000]; + sprintf (b, "Il reste encore %d !!!!!!!!!!!!", n); + printDebugMessage (b); + */ + printDebugMessage ("je suis informe que tout le monde a recu ma terminaison"); + setPassive (); + +} + +void Runner :: waitStarting () { + + sem_wait (& sem_start); +} + +Runner * getRunner (RUNNER_ID __key) { + + return dynamic_cast (getCommunicable (__key)); +} + +void startRunners () { + + /* Runners */ + for (unsigned i = 0; i < the_runners.size (); i ++) + if (the_runners [i] -> isLocal ()) { + addThread (the_runners [i], ll_threads); + the_runners [i] -> waitStarting (); + } + printDebugMessage ("launched the parallel runners"); +} + + +void joinRunners () { + + + joinThreads (ll_threads); +} diff --git a/trunk/paradiseo-peo/src/core/runner.h b/trunk/paradiseo-peo/src/core/runner.h new file mode 100644 index 000000000..da549cc6b --- /dev/null +++ b/trunk/paradiseo-peo/src/core/runner.h @@ -0,0 +1,73 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "runner.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __runner_h +#define __runner_h + +#include + +#include "communicable.h" +#include "thread.h" + +typedef unsigned RUNNER_ID; + +class Runner : public Communicable, public Thread { + +public : + + Runner (); + + void start (); + + void waitStarting (); + + bool isLocal (); + + void terminate (); + + virtual void run () = 0; + + RUNNER_ID getID (); + + void packTermination (); + + void notifySendingTermination (); + +private : + + sem_t sem_start; + + unsigned id; +}; + +extern bool atLeastOneActiveRunner (); + +extern void unpackTerminationOfRunner (); + +extern Runner * getRunner (RUNNER_ID __key); + +extern void startRunners (); + +extern void joinRunners (); + +#endif diff --git a/trunk/paradiseo-peo/src/core/service.cpp b/trunk/paradiseo-peo/src/core/service.cpp new file mode 100644 index 000000000..1c62e090f --- /dev/null +++ b/trunk/paradiseo-peo/src/core/service.cpp @@ -0,0 +1,73 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "service.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "service.h" + +void Service :: setOwner (Thread & __owner) { + + owner = & __owner; +} + +Thread * Service :: getOwner () { + + return owner; +} + +Service * getService (SERVICE_ID __key) { + + return dynamic_cast (getCommunicable (__key)); +} + +void Service :: notifySendingData () { + +} +void Service :: notifySendingResourceRequest () { + + num_sent_rr --; + if (! num_sent_rr) + notifySendingAllResourceRequests (); +} + +void Service :: notifySendingAllResourceRequests () { + +} + +void Service :: packData () { + +} + +void Service :: unpackData () { + +} + +void Service :: execute () { + +} + +void Service :: packResult () { + +} + +void Service :: unpackResult () { + +} diff --git a/trunk/paradiseo-peo/src/core/service.h b/trunk/paradiseo-peo/src/core/service.h new file mode 100644 index 000000000..166e78cc7 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/service.h @@ -0,0 +1,65 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "service.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __service_h +#define __service_h + +#include "communicable.h" +#include "thread.h" + +typedef unsigned SERVICE_ID; + +class Service : public Communicable { + +public : + + void setOwner (Thread & __owner); + + Thread * getOwner (); + + void requestResourceRequest (unsigned __how_many = 1); + void packResourceRequest (); + + virtual void packData (); + virtual void unpackData (); + + virtual void execute (); + + virtual void packResult (); + virtual void unpackResult (); + + virtual void notifySendingData (); + virtual void notifySendingResourceRequest (); + virtual void notifySendingAllResourceRequests (); + +private : + + Thread * owner; /* Owner thread (i.e. 'uses' that service) */ + + unsigned num_sent_rr; /* Number of RR not really sent (i.e. still in the sending queue)*/ + +}; + +extern Service * getService (SERVICE_ID __key); + +#endif diff --git a/trunk/paradiseo-peo/src/core/thread.cpp b/trunk/paradiseo-peo/src/core/thread.cpp new file mode 100644 index 000000000..69feb508a --- /dev/null +++ b/trunk/paradiseo-peo/src/core/thread.cpp @@ -0,0 +1,96 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "thread.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "thread.h" + +static std :: vector threads; + +unsigned num_act = 0; + +Thread :: Thread () { + + threads.push_back (this); + act = false; +} + +Thread :: ~ Thread () { + + /* Nothing ! */ +} + +extern int getNodeRank (); + +void Thread :: setActive () { + + if (! act ) { + + act = true; + num_act ++; + // if (getNodeRank () == 1) + // printf ("On passe a %d\n", num_act); + } +} + +void Thread :: setPassive () { + + if (act) { + + act = false; + num_act --; + // if (getNodeRank () == 1) + // printf ("On passe a %d\n", num_act); + + } +} + +bool atLeastOneActiveThread () { + + return num_act; +} + +unsigned numberOfActiveThreads () { + + return num_act; +} + +static void * launch (void * __arg) { + + Thread * thr = (Thread *) __arg; + thr -> start (); + return 0; +} + +void addThread (Thread * __hl_thread, std :: vector & __ll_threads) { + + pthread_t * ll_thr = new pthread_t; + __ll_threads.push_back (ll_thr); + pthread_create (ll_thr, 0, launch, __hl_thread); +} + +void joinThreads (std :: vector & __threads) { + + for (unsigned i = 0; i < __threads.size (); i ++) + pthread_join (* __threads [i], 0); +} diff --git a/trunk/paradiseo-peo/src/core/thread.h b/trunk/paradiseo-peo/src/core/thread.h new file mode 100644 index 000000000..a6f07ea7f --- /dev/null +++ b/trunk/paradiseo-peo/src/core/thread.h @@ -0,0 +1,63 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "thread.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef THREAD_H_ +#define THREAD_H_ + +#include + +/* A high-level thread */ + +class Thread { + +public: + + /* Ctor */ + Thread (); + + /* Dtor */ + virtual ~ Thread (); + + /* Go ! */ + virtual void start () = 0; + + void setActive ();/* It means the current process is going to send messages soon */ + void setPassive ();/* The current process is not going to perform send operations + (but it may receive messages) */ + +private : + + bool act; +}; + +extern void addThread (Thread * __hl_thread, std :: vector & __ll_threads); + +extern void joinThreads (std :: vector & __ll_threads); + +extern bool atLeastOneActiveThread (); /* It returns 'true' iff at least one process is going + to send messages */ + +extern unsigned numberOfActiveThreads (); + + +#endif /*THREAD_H_*/ diff --git a/trunk/paradiseo-peo/src/core/topology.cpp b/trunk/paradiseo-peo/src/core/topology.cpp new file mode 100644 index 000000000..02c952955 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/topology.cpp @@ -0,0 +1,35 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "topo.cpp" + +// (c) OPAC Team, LIFL, September 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "topology.h" + +Topology :: ~ Topology () { + + /* Nothing ! */ +} + +void Topology :: add (Cooperative & __mig) { + + mig.push_back (& __mig) ; +} + diff --git a/trunk/paradiseo-peo/src/core/topology.h b/trunk/paradiseo-peo/src/core/topology.h new file mode 100644 index 000000000..399a86502 --- /dev/null +++ b/trunk/paradiseo-peo/src/core/topology.h @@ -0,0 +1,48 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "topology.h" + +// (c) OPAC Team, LIFL, September 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __topology_h +#define __topology_h + +#include + +#include "cooperative.h" + +class Topology { + +public: + + virtual ~Topology (); + + void add (Cooperative & __mig); + + virtual void setNeighbors (Cooperative * __mig, + std :: vector & __from, + std :: vector & __to) = 0; + +protected: + + std :: vector mig ; +}; + +#endif diff --git a/trunk/paradiseo-peo/src/paradiseo b/trunk/paradiseo-peo/src/paradiseo new file mode 100644 index 000000000..b928156cc --- /dev/null +++ b/trunk/paradiseo-peo/src/paradiseo @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "paradiseo" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __paradiseo_ +#define __paradiseo_ + +#include "paradiseo.h" + +#endif diff --git a/trunk/paradiseo-peo/src/paradiseo.h b/trunk/paradiseo-peo/src/paradiseo.h new file mode 100644 index 000000000..a2d20a4b4 --- /dev/null +++ b/trunk/paradiseo-peo/src/paradiseo.h @@ -0,0 +1,300 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "paradiseo.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __paradiseo_h_ +#define __paradiseo_h_ + +#include +#include + + +//! \mainpage The ParadisEO-PEO Framework +//! +//! \section intro Introduction +//! +//! ParadisEO is a white-box object-oriented framework dedicated to the reusable design +//! of parallel and distributed metaheuristics (PDM). ParadisEO provides a broad range of features including evolutionary +//! algorithms (EA), local searches (LS), the most common parallel and distributed models and hybridization +//! mechanisms, etc. This high content and utility encourages its use at European level. ParadisEO is based on a +//! clear conceptual separation of the solution methods from the problems they are intended to solve. This separation +//! confers to the user a maximum code and design reuse. Furthermore, the fine-grained nature of the classes +//! provided by the framework allow a higher flexibility compared to other frameworks. ParadisEO is one of the rare +//! frameworks that provide the most common parallel and distributed models. Their implementation is portable on +//! distributed-memory machines as well as on shared-memory multiprocessors, as it uses standard libraries such as +//! MPI, PVM and PThreads. The models can be exploited in a transparent way, one has just to instantiate their associated +//! provided classes. Their experimentation on the radio network design real-world application demonstrate their +//! efficiency. +//! +//! In practice, combinatorial optimization problems are often NP-hard, CPU time-consuming, +//! and evolve over time. Unlike exact methods, metaheuristics allow to tackle large-size problems +//! instances by delivering satisfactory solutions in a reasonable time. Metaheuristics are +//! general-purpose heuristics that split in two categories: evolutionary algorithms (EA) and local +//! search methods (LS). These two families have complementary characteristics: EA allow +//! a better exploration of the search space, while LS have the power to intensify the search in +//! promising regions. Their hybridization allows to deliver robust and better solutions +//! +//! Although serial metaheuristics have a polynomial temporal complexity, they remain +//! unsatisfactory for industrial problems. Parallel and distributed computing is a powerful way +//! to deal with the performance issue of these problems. Numerous parallel and distributed +//! metaheuristics (PDM) and their implementations have been proposed, and are available on +//! theWeb. They can be reused and adapted to his/her own problems. However, the user has to +//! deeply examine the code and rewrite its problem-specific sections. The task is tedious, errorprone, +//! takes along time and makes harder the produced code maintenance. A better way to +//! reuse the code of existing PDM is the reuse through libraries. These are often +//! more reliable as they are more tested and documented. They allow a better maintainability +//! and efficiency. However, libraries do not allow the reuse of design. +//! +//! \section parallel_metaheuristics Parallel and distributed metaheuristics +//! +//! \subsection parallel_distributed Parallel distributed evolutionary algorithms +//! +//! Evolutionary Algorithms (EA) are based on the iterative improvement of a +//! population of solutions. At each step, individuals are selected, paired and recombined in order +//! to generate new solutions that replace other ones, and so on. As the algorithm converges, +//! the population is mainly composed of individuals well adapted to the "environment", for +//! instance the problem. The main features that characterize EA are the way the population is +//! initialized, the selection strategy (deterministic/stochastic) by fostering "good" solutions, +//! the replacement strategy that discards individuals, and the continuation/stopping criterion +//! to decide whether the evolution should go on or not. +//! +//! Basically, three major parallel and distributed models for EA can been distinguished: +//! the island (a)synchronous cooperative model, the parallel evaluation of the +//! population, and the distributed evaluation of a single solution. +//!
    +//!
  • Island (a)synchronous cooperative model. Different EA are simultaneously deployed to +//! cooperate for computing better and robust solutions. They exchange in an asynchronous +//! way genetic stuff to diversify the search. The objective is to allow to delay the global +//! convergence, especially when theEAare heterogeneous regarding the variation operators. +//! The migration of individuals follows a policy defined by few parameters: the migration +//! decision criterion, the exchange topology, the number of emigrants, the emigrants selection +//! policy, and the replacement/integration policy.
  • +//! +//!
  • Parallel evaluation of the population. It is required as it is in general the most timeconsuming. +//! The parallel evaluation follows the centralized model. The farmer applies +//! the following operations: selection, transformation and replacement as they require a +//! global management of the population. At each generation, it distributes the set of new +//! solutions between differentworkers. These evaluate and return back the solutions and their +//! quality values. An efficient execution is often obtained particularly when the evaluation +//! of each solution is costly. The two main advantages of an asynchronous model over +//! the synchronous model are: (1) the fault tolerance of the asynchronous model; (2) the +//! robustness in case the fitness computation can take very different computation times (e.g. +//! for nonlinear numerical optimization). Whereas some time-out detection can be used to +//! address the former issue, the latter one can be partially overcome if the grain is set to very +//! small values, as individuals will be sent out for evaluations upon request of the workers.
  • +//! +//!
  • Distributed evaluation of a single solution. The quality of each solution is evaluated in +//! a parallel centralized way. That model is particularly interesting when the evaluation +//! function can be itself parallelized as it is CPU time-consuming and/or IO intensive. In +//! that case, the function can be viewed as an aggregation of a certain number of partial +//! functions. The partial functions could also be identical if for example the problem to deal +//! with is a data mining one. The evaluation is thus data parallel and the accesses to data +//! base are performed in parallel. Furthermore, a reduction operation is performed on the +//! results returned by the partial functions. As a summary, for this model the user has to +//! indicate a set of partial functions and an aggregation operator of these.
  • +//!
+//! +//! \subsection parallel_ls Parallel distributed local searches +//! +//! \subsubsection local_searches Local searches +//! +//! All metaheuristics dedicated to the improvement of a single solution +//! are based on the concept of neighborhood. They start from a solution randomly generated or +//! obtained from another optimization algorithm, and update it, step by step, by replacing the +//! current solution by one of its neighboring candidates. Some criterion have been identified to +//! differentiate such searches: the heuristic internal memory, the choice of the initial solution, +//! the candidate solutions generator, and the selection strategy of candidate moves. Three main +//! algorithms of local search stand out: Hill Climbing (HC), Simulated +//! Annealing (SA) and Tabu Search (TS). +//! +//! \subsubsection parallel_local_searches Parallel local searches +//! +//! Two parallel distributed models are commonly used in the literature: the parallel distributed +//! exploration of neighboring candidate solutions model, and the multi-start model. +//!
    +//!
  • Parallel exploration of neighboring candidates. It is a low-level Farmer-Worker model +//! that does not alter the behavior of the heuristic. A sequential search computes the same +//! results slower.At the beginning of each iteration, the farmer duplicates the current solution +//! between distributed nodes. Each one manages some candidates and the results are returned to the farmer. +//! The model is efficient if the evaluation of a each solution is time-consuming and/or there are a great +//! deal of candidate neighbors to evaluate. This is obviously not applicable to SA since only one candidate +//! is evaluated at each iteration. Likewise, the efficiency of the model for HC is not always guaranteed as +//! the number of neighboring solutions to process before finding one that improves the current objective function may +//! be highly variable.
  • +//! +//!
  • Multi-start model. It consists in simultaneously launching several local searches. They +//! may be heterogeneous, but no information is exchanged between them. The resultswould +//! be identical as if the algorithms were sequentially run.Very often deterministic algorithms +//! differ by the supplied initial solution and/or some other parameters. This trivial model is +//! convenient for low-speed networks of workstations.
  • +//!
+//! +//! \section hybridization Hybridization +//! +//! Recently, hybrid metaheuristics have gained a considerable interest. For many +//! practical or academic optimization problems, the best found solutions are obtained by +//! hybrid algorithms. Combinations of different metaheuristics have provided very powerful +//! search methods. Two levels and two modes +//! of hybridization have been distinguished: Low and High levels, and Relay and Cooperative modes. +//! The low-level hybridization addresses the functional composition of a single optimization +//! method. A function of a given metaheuristic is replaced by another metaheuristic. On the +//! contrary, for high-level hybrid algorithms the different metaheuristics are self-containing, +//! meaning no direct relationship to their internal working is considered. On the other hand, +//! relay hybridization means a set of metaheuristics is applied in a pipeline way. The output +//! of a metaheuristic (except the last) is the input of the following one (except the first). +//! Conversely, co-evolutionist hybridization is a cooperative optimization model. Each metaheuristic +//! performs a search in a solution space, and exchange solutions with others. +//! +//! \section paradiseo_goals Paradiseo goals and architecture +//! +//! The "EO" part of ParadisEO means Evolving Objects. EO is a C++ LGPL open source +//! framework and includes a paradigm-free Evolutionary Computation library (EOlib) +//! dedicated to the flexible design of EA through evolving objects superseding the most common +//! dialects (Genetic Algorithms, Evolution Strategies, Evolutionary Programming and +//! Genetic Programming). Furthermore, EO integrates several services including visualization +//! facilities, on-line definition of parameters, application check-pointing, etc. ParadisEO is an +//! extended version of the EO framework. The extensions include local search methods, hybridization +//! mechanisms, parallelism and distribution mechanisms, and other features that +//! are not addressed in this paper such as multi-objective optimization and grid computing. In +//! the next sections, we present the motivations and goals of ParadisEO, its architecture and +//! some of its main implementation details and issues. +//! +//! \subsection motivation Motivations and goals +//! +//! A framework is normally intended to be exploited by as many users as possible. Therefore, +//! its exploitation could be successful only if some important user criteria are satisfied. The +//! following criteria are the major of them and constitute the main objectives of the ParadisEO +//! framework: +//! +//!
    +//!
  • Maximum design and code reuse. The framework must provide for the user a whole +//! architecture design of his/her solution method. Moreover, the programmer may redo as +//! little code as possible. This objective requires a clear and maximal conceptual separation +//! between the solution methods and the problems to be solved, and thus a deep domain +//! analysis. The user might therefore develop only the minimal problem-specific code.
  • +//! +//!
  • Flexibility and adaptability. It must be possible for the user to easily add new features/ +//! metaheuristics or change existing ones without implicating other components. Furthermore, +//! as in practice existing problems evolve and new others arise these have to be +//! tackled by specializing/adapting the framework components.
  • +//! +//!
  • Utility. The framework must allow the user to cover a broad range of metaheuristics, +//! problems, parallel distributed models, hybridization mechanisms, etc.
  • +//! +//!
  • Transparent and easy access to performance and robustness. As the optimization applications +//! are often time-consuming the performance issue is crucial. Parallelism and +//! distribution are two important ways to achieve high performance execution. In order to +//! facilitate its use it is implemented so that the user can deploy his/her parallel algorithms in +//! a transparent manner. Moreover, the execution of the algorithms must be robust to guarantee +//! the reliability and the quality of the results. The hybridization mechanism allows +//! to obtain robust and better solutions.
  • +//! +//!
  • Portability. In order to satisfy a large number of users the framework must support +//! different material architectures and their associated operating systems.
  • +//!
+//! +//! \subsection architecture ParadisEO architecture +//! +//! The architecture of ParadisEO is multi-layer and modular allowing to achieve the objectives +//! quoted above. This allows particularly a high flexibility and adaptability, an +//! easier hybridization, and more code and design reuse. The architecture has three layers +//! identifying three major categories of classes: Solvers, Runners and Helpers. +//!
    +//!
  • Helpers. Helpers are low-level classes that perform specific actions related to the evolution +//! or search process. They are split in two categories: Evolutionary helpers (EH) +//! and Local search helpers (LSH). EH include mainly the transformation, selection and +//! replacement operations, the evaluation function and the stopping criterion. LSH can be +//! generic such as the neighborhood explorer class, or specific to the local search metaheuristic +//! like the tabu list manager class in the Tabu Search solution method. On the +//! other hand, there are some special helpers dedicated to the management of parallel and +//! distributed models 2 and 3, such as the communicators that embody the communication +//! services. +//! +//! Helpers cooperate between them and interact with the components of the upper layer +//! i.e. the runners. The runners invoke the helpers through function parameters. Indeed, +//! helpers have not their own data, but they work on the internal data of the runners.
  • +//! +//!
  • Runners. The Runners layer contains a set of classes that implement the metaheuristics +//! themselves. They perform the run of the metaheuristics from the initial state or +//! population to the final one. One can distinguish the Evolutionary runners (ER) such as +//! genetic algorithms, evolution strategies, etc., and Local search runners (LSR) like tabu +//! search, simulated annealing and hill climbing. Runners invoke the helpers to perform +//! specific actions on their data. For instance, an ER may ask the fitness function evaluation +//! helper to evaluate its population. An LSR asks the movement helper to perform +//! a given movement on the current state. Furthermore, runners can be serial or parallel +//! distributed.
  • +//! +//!
  • Solvers. Solvers are devoted to control the evolution process and/or the search. They +//! generate the initial state (solution or population) and define the strategy for combining +//! and sequencing different metaheuristics. Two types of solvers can be distinguished. +//! Single metaheuristic solvers (SMS) and Multiple metaheuristics solvers (MMS). SMSs +//! are dedicated to the execution of only one metaheuristic.MMS are more complex as they +//! control and sequence several metaheuristics that can be heterogeneous. Solvers interact with +//! the user by getting the input data and delivering the output (best solution, statistics, +//! etc).
  • +//!
+//! +//! According to the generality of their embedded features, the classes of the architecture split +//! in two major categories: Provided classes and Required classes. Provided classes embody +//! the factored out part of the metaheuristics. They are generic, implemented in the framework, +//! and ensure the control at run time. Required classes are those that must be supplied by the +//! user. They encapsulate the problem-specific aspects of the application. These classes are +//! fixed but not implemented in ParadisEO. The programmer has the burden to develop them +//! using the OO specialization mechanism. +//! +//! \section tutorials ParadisEO-PEO Tutorials +//! +//! The basisc of the ParadisEO framework philosophy are exposed in a few simple tutorials: +//! +//! All the presented examples have as case study the travel salesman problem (TSP). Different operators and auxiliary objects were designed, +//! standing as a common shared source code base. While not being +//! part of the ParadisEO-PEO framework, it may represent a startpoint for a better understanding of the presented tutorials. + + + +#include "core/peo_init.h" +#include "core/peo_run.h" +#include "core/peo_fin.h" + +#include "core/eoVector_comm.h" + +#include "peoEA.h" + +/* Parallel steps of the E.A. */ +#include "peoSeqTransform.h" +#include "peoParaSGATransform.h" +#include "peoSeqPopEval.h" +#include "peoParaPopEval.h" + +/* Cooperative island model */ +#include "core/ring_topo.h" +#include "peoAsyncIslandMig.h" +#include "peoSyncIslandMig.h" + +/* Synchronous multi-start model */ +#include "peoSyncMultiStart.h" + +#endif diff --git a/trunk/paradiseo-peo/src/peoAggEvalFunc.h b/trunk/paradiseo-peo/src/peoAggEvalFunc.h new file mode 100644 index 000000000..bf1d882fd --- /dev/null +++ b/trunk/paradiseo-peo/src/peoAggEvalFunc.h @@ -0,0 +1,45 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoAggEvalFunc.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoAggEvalFunc_h +#define __peoAggEvalFunc_h + +#include + +//! Interface class for creating an aggregate evaluation function. + +//! The peoAggEvalFunc class offers only the interface for creating aggregate evaluation functions - there +//! are no direct internal functions provided. The class inherits public eoBF< EOT&, const typename EOT :: Fitness&, void > +//! thus requiring, for the derived classes, the creation of a function having the following signature: +//! +//! +//! +//!
void operator()( EOT& __eot, const typename EOT :: Fitness& __partial_fittness );    
+//! +//! The aggregation object is called in an iterative manner for each of the results obtained by applying partial evaluation functions. +template< class EOT > class peoAggEvalFunc : public eoBF< EOT&, const typename EOT :: Fitness&, void > { + +}; + + +#endif diff --git a/trunk/paradiseo-peo/src/peoAsyncIslandMig.h b/trunk/paradiseo-peo/src/peoAsyncIslandMig.h new file mode 100644 index 000000000..7401ecf98 --- /dev/null +++ b/trunk/paradiseo-peo/src/peoAsyncIslandMig.h @@ -0,0 +1,273 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoAsyncIslandMig.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoAsyncIslandMig_h +#define __peoAsyncIslandMig_h + + +#include + +#include + +#include +#include +#include +#include + +#include "core/topology.h" +#include "core/cooperative.h" +#include "core/eoPop_comm.h" +#include "core/peo_debug.h" + + +//! Class providing the basis for the asynchronous island migration model. + +//! The peoAsyncIslandMig class offers the elementary basis for implementating an +//! asynchronous island migration model - requires the specification of several basic +//! parameters, i.e. continuation criterion, selection and replacement strategies, +//! a topological model and the source and destination population for the migrating individuals. +//! As opposed to the synchronous migration model, in the asynchronous migration approach, there is +//! no synchronization step between islands after performing the emigration phase. +//! +//! The migration operator is called at the end of each generation of an evolutionary algorithms +//! as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm: +//! +//! +//! +//! +//! +//! +//! +//! +//!
do {    
         select( population, offsprings );   // select the offsprings from the current population
         transform( offsprings );   // crossover and mutation operators are applied on the selected offsprings
         evaluate( offsprings );   // evaluation step of the resulting offspring
         replace( population, offsprings );   // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy
} while ( eaCheckpointContinue( population ) );   // checkpoint operators are applied on the current population, including the migration operator, if any specified
+//! +//! Constructing an asynchronous island migration model requires having defined (1) a topological migration model, +//! (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, +//! and (4) an owner object must be set. The owner object must be derived from the Runner class (for example +//! a peoEA object represents a possible owner). +//! A simple example is offered bellow: +//! +//!
    +//!
  1. topological model to be followed when performing migrations:
    +//!
    +//! +//! +//!
    RingTopology migTopology;   // a simple ring topological model - each island communicates with two other islands
    +//!
  2. +//! +//!
  3. the continuation criterion, selection and replacement strategy etc. are defined:
    +//!
    +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//!
    eoPop< EOT > population( POP_SIZE, popInitializer );   // population of individuals to be used for the evolutionary algorithm
       
    eoPeriodicContinue< EOT > migCont( MIG_FREQ );   // migrations occur periodically at MIG_FREQ iterations
    eoRandomSelect< EOT > migSelectStrategy;   // selection strategy - in this case a random selection is applied
    eoSelectNumber< EOT > migSelect( migSelectStrategy, MIG_SIZE );   // number of individuals to be selected using the specified strategy
    eoPlusReplacement< EOT > migReplace;   // immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals
       
    peoAsyncIslandMig< EOT > asyncMigration( +//!
             migCont, migSelect, migReplace, migTopology, +//!
             population, population +//!
    );  
    // asynchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated
    +//!
  4. +//! +//!
  5. creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope):
    +//!
    +//! +//! +//! +//! +//! +//! +//! +//!
    ...    
    eoGenContinue< EOT > eaCont( NUM_GEN );   // the evolutionary algorithm will stop after NUM_GEN generations
    eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // number of individuals to be selected using the specified strategy
    ...    
    eaCheckpointContinue.add( asyncMigration );   // adding the migration operator as checkpoint element
    ...    
    +//!
  6. +//! +//!
  7. definition of an owner evolutionary algorithm (an object inheriting the Runner class):
    +//!
    +//! +//! +//! +//! +//!
    peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace);   // evolutionary algorithm having as checkpoint the eaCheckpointContinue object defined above
    asyncMigration.setOwner( eaAlg );   // setting the evolutionary algorithm as owner of the migration object
    eaAlg( population );   // applying the evolutionary algorithm on a given population
    +//!
  8. +//!
+//! +//! The source and the destination population for the migration object were specified as being the same, in step no. 2, +//! as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique +//! population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations +//! as source and destination for the emigrant and immigrant individuals respectively. +//! +//! The above steps only create an asynchronous migration object associated to an evolutionary algorithm. The creation of several +//! islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and +//! the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 +//! (the same C++ migTopology object has to be passed as parameter for all the migration objects, in order to interconnect them). +template< class EOT > class peoAsyncIslandMig : public Cooperative, public eoUpdater { + +public: + + //! Constructor for the peoAsyncIslandMig class; the characteristics of the migration model are defined + //! through the specified parameters - out of the box objects provided in EO, etc., or custom, derived objects may be passed as parameters. + //! + //! @param eoContinue< EOT >& __cont - continuation criterion specifying whether the migration is performed or not; + //! @param eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population; + //! @param eoReplacement< EOT >& __replace - replacement strategy used for integrating the immigrant individuals in the destination population; + //! @param Topology& __topology - topological model to be followed when performing migrations; + //! @param eoPop< EOT >& __source - source population from which the emigrant individuals are selected; + //! @param eoPop< EOT >& __destination - destination population in which the immigrant population are integrated. + peoAsyncIslandMig( + eoContinue< EOT >& __cont, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + Topology& __topology, + eoPop< EOT >& __source, + eoPop< EOT >& __destination + ); + + //! Function operator to be called as checkpoint for performing the migration step. The emigrant individuals are selected + //! from the source population and sent to the next island (defined by the topology object) while the immigrant + //! individuals are integrated in the destination population. There is no need to explicitly call the function - the + //! wrapper checkpoint object (please refer to the above example) will perform the call when required. + void operator()(); + + //! Auxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function. + void pack(); + //! Auxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function. + void unpack(); + + +private: + + void emigrate(); + void immigrate(); + + +private: + + eoContinue< EOT >& cont; // continuator + eoSelect< EOT >& select; // the selection strategy + eoReplacement< EOT >& replace; // the replacement strategy + Topology& topology; // the neighboring topology + + // source and destination populations + eoPop< EOT >& source; + eoPop< EOT >& destination; + + // immigrants & emigrants in the queue + std :: queue< eoPop< EOT > > imm; + std :: queue< eoPop< EOT > > em; + + std :: queue< Cooperative* > coop_em; +}; + + +template< class EOT > peoAsyncIslandMig< EOT > :: peoAsyncIslandMig( + + eoContinue< EOT >& __cont, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + Topology& __topology, + eoPop< EOT >& __source, + eoPop< EOT >& __destination + + ) : cont( __cont ), select( __select ), replace( __replace ), topology( __topology ), source( __source ), destination( __destination ) +{ + + __topology.add( *this ); +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: pack() +{ + + lock(); { + + :: pack( coop_em.front()->getKey() ); + :: pack( em.front() ); + coop_em.pop(); + em.pop(); + } + unlock(); +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: unpack() +{ + + lock(); { + + eoPop< EOT > mig; + :: unpack( mig ); + imm.push( mig ); + } + unlock(); +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: emigrate() +{ + + std :: vector< Cooperative* >in, out; + topology.setNeighbors( this, in, out ); + + for ( unsigned i = 0; i < out.size(); i++ ) { + + eoPop< EOT > mig; + select( source, mig ); + em.push( mig ); + coop_em.push( out[i] ); + send( out[i] ); + printDebugMessage( "sending some emigrants." ); + } +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: immigrate() +{ + + lock(); { + + while ( !imm.empty() ) { + + replace( destination, imm.front() ); + imm.pop(); + printDebugMessage( "receiving some immigrants." ); + } + } + unlock(); +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: operator()() { + + if ( !cont( source ) ) { + + emigrate(); // sending emigrants + immigrate(); // receiving immigrants + } +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoEA.h b/trunk/paradiseo-peo/src/peoEA.h new file mode 100644 index 000000000..3098c32d2 --- /dev/null +++ b/trunk/paradiseo-peo/src/peoEA.h @@ -0,0 +1,160 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoEA.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoEA_h +#define __peoEA_h + +#include +#include +#include +#include +#include + +#include "peoPopEval.h" +#include "peoTransform.h" +#include "core/runner.h" +#include "core/peo_debug.h" + +//! Class providing an elementary ParadisEO evolutionary algorithm. + +//! The peoEA class offers an elementary evolutionary algorithm implementation. In addition, as compared +//! with the algorithms provided by the EO framework, the peoEA class has the underlying necessary structure +//! for including, for example, parallel evaluation and parallel transformation operators, migration operators +//! etc. Although there is no restriction on using the algorithms provided by the EO framework, the drawback resides +//! in the fact that the EO implementation is exclusively sequential and, in consequence, no parallelism is provided. +//! A simple example for constructing a peoEA object: +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//!
...    
eoPop< EOT > population( POP_SIZE, popInitializer );   // creation of a population with POP_SIZE individuals - the popInitializer is a functor to be called for each individual
   
eoGenContinue< EOT > eaCont( NUM_GEN );   // number of generations for the evolutionary algorithm
eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // checkpoint incorporating the continuation criterion - startpoint for adding other checkpoint objects
   
peoSeqPopEval< EOT > eaPopEval( evalFunction );   // sequential evaluation functor wrapper - evalFunction represents the actual evaluation functor
   
eoRankingSelect< EOT > selectionStrategy;   // selection strategy for creating the offspring population - a simple ranking selection in this case
eoSelectNumber< EOT > eaSelect( selectionStrategy, POP_SIZE );   // the number of individuals to be selected for creating the offspring population
eoRankingSelect< EOT > selectionStrategy;   // selection strategy for creating the offspring population - a simple ranking selection in this case
   
eoSGATransform< EOT > transform( crossover, CROSS_RATE, mutation, MUT_RATE );   // transformation operator - crossover and mutation operators with their associated probabilities
peoSeqTransform< EOT > eaTransform( transform );   // ParadisEO specific sequential operator - a parallel version may be specified in the same manner
   
eoPlusReplacement< EOT > eaReplace;   // replacement strategy - for integrating the offspring resulting individuals in the initial population
   
peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace );   // ParadisEO evolutionary algorithm integrating the above defined objects
eaAlg( population );   // specifying the initial population for the algorithm
...    
+template < class EOT > class peoEA : public Runner { + +public: + + //! Constructor for the evolutionary algorithm object - several basic parameters have to be specified, + //! allowing for different levels of parallelism. Depending on the requirements, a sequential or a parallel + //! evaluation operator may be specified or, in the same manner, a sequential or a parallel transformation + //! operator may be given as parameter. Out of the box objects may be provided, from the EO package, for example, + //! or custom defined ones may be specified, provided that they are derived from the correct base classes. + //! + //! @param eoContinue< EOT >& __cont - continuation criterion specifying whether the algorithm should continue or not; + //! @param peoPopEval< EOT >& __pop_eval - evaluation operator; it allows the specification of parallel evaluation operators, aggregate evaluation functions, etc.; + //! @param eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of offspring individuals; + //! @param peoTransform< EOT >& __trans - transformation operator, i.e. crossover and mutation; allows for sequential or parallel transform; + //! @param eoReplacement< EOT >& __replace - replacement strategy for integrating the offspring individuals in the initial population; + peoEA( + eoContinue< EOT >& __cont, + peoPopEval< EOT >& __pop_eval, + eoSelect< EOT >& __select, + peoTransform< EOT >& __trans, + eoReplacement< EOT >& __replace + ); + + //! Evolutionary algorithm function - a side effect of the fact that the class is derived from the Runner class, + //! thus requiring the existence of a run function, the algorithm being executed on a distinct thread. + void run(); + + //! Function operator for specifying the population to be associated with the algorithm. + //! + //! @param eoPop< EOT >& __pop - initial population of the algorithm, to be iteratively evolved; + void operator()( eoPop< EOT >& __pop ); + +private: + + + eoContinue< EOT >& cont; + peoPopEval< EOT >& pop_eval; + eoSelect< EOT >& select; + peoTransform< EOT >& trans; + eoReplacement< EOT >& replace; + eoPop< EOT >* pop; +}; + + +template < class EOT > peoEA< EOT > :: peoEA( + + eoContinue< EOT >& __cont, + peoPopEval< EOT >& __pop_eval, + eoSelect< EOT >& __select, + peoTransform< EOT >& __trans, + eoReplacement< EOT >& __replace + + ) : cont( __cont ), pop_eval( __pop_eval ), select( __select ), trans( __trans ), replace( __replace ) +{ + + trans.setOwner( *this ); + pop_eval.setOwner( *this ); +} + + +template< class EOT > void peoEA< EOT > :: operator ()( eoPop< EOT >& __pop ) { + + pop = &__pop; +} + + +template< class EOT > void peoEA< EOT > :: run() { + + printDebugMessage( "performing the first evaluation of the population." ); + pop_eval( *pop ); + + do { + + eoPop< EOT > off; + + printDebugMessage( "performing the selection step." ); + select( *pop, off ); + trans( off ); + + printDebugMessage( "performing the evaluation of the population." ); + pop_eval( off ); + + printDebugMessage( "performing the replacement of the population." ); + replace( *pop, off ); + + printDebugMessage( "deciding of the continuation." ); + + } while ( cont( *pop ) ); +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoNoAggEvalFunc.h b/trunk/paradiseo-peo/src/peoNoAggEvalFunc.h new file mode 100644 index 000000000..a5f53d38f --- /dev/null +++ b/trunk/paradiseo-peo/src/peoNoAggEvalFunc.h @@ -0,0 +1,49 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoNoAggEvalFunc.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoNoAggEvalFunc_h +#define __peoNoAggEvalFunc_h + +#include "peoAggEvalFunc.h" + +//! Class providing a simple interface for associating a fitness value to a specified individual. + +//! The peoNoAggEvalFunc class does nothing more than an association between a fitness value and a specified individual. +//! The class is provided as a mean of declaring that no aggregation is required for the evaluation function - the fitness +//! value is explicitly specified. +template< class EOT > class peoNoAggEvalFunc : public peoAggEvalFunc< EOT > { + +public : + + //! Operator which sets as fitness the __fit value for the __sol individual + void operator()( EOT& __sol, const typename EOT :: Fitness& __fit ); +}; + + +template< class EOT > void peoNoAggEvalFunc< EOT > :: operator()( EOT& __sol, const typename EOT :: Fitness& __fit ) { + + __sol.fitness( __fit ); +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoParaPopEval.h b/trunk/paradiseo-peo/src/peoParaPopEval.h new file mode 100644 index 000000000..87cbfa398 --- /dev/null +++ b/trunk/paradiseo-peo/src/peoParaPopEval.h @@ -0,0 +1,240 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoParaPopEval.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoParaPopEval_h +#define __peoParaPopEval_h + +#include +#include + +#include "core/messaging.h" +#include "core/peo_debug.h" +#include "peoAggEvalFunc.h" +#include "peoNoAggEvalFunc.h" + + +//! Parallel evaluation functor wrapper. + +//! The peoParaPopEval represents a wrapper for creating a functor capable of applying in parallel +//! an EO-derived evaluation functor. The class offers the possibility of chosing between a single-function evaluation +//! and an aggregate evaluation function, including several sub-evalution functions. +template< class EOT > class peoParaPopEval : public peoPopEval< EOT > { + +public: + + using peoPopEval< EOT > :: requestResourceRequest; + using peoPopEval< EOT > :: resume; + using peoPopEval< EOT > :: stop; + using peoPopEval< EOT > :: getOwner; + + //! Constructor function - an EO-derived evaluation functor has to be specified; an internal reference + //! is set towards the specified evaluation functor. + //! + //! @param eoEvalFunc< EOT >& __eval_func - EO-derived evaluation functor to be applied in parallel on each individual of a specified population + peoParaPopEval( eoEvalFunc< EOT >& __eval_func ); + + //! Constructor function - a vector of EO-derived evaluation functors has to be specified as well as an aggregation function. + //! + //! @param const std :: vector< eoEvalFunc < EOT >* >& __funcs - vector of EO-derived partial evaluation functors; + //! @param peoAggEvalFunc< EOT >& __merge_eval - aggregation functor for creating a fitness value out of the partial fitness values. + peoParaPopEval( const std :: vector< eoEvalFunc < EOT >* >& __funcs, peoAggEvalFunc< EOT >& __merge_eval ); + + //! Operator for applying the evaluation functor (direct or aggregate) for each individual of the specified population. + //! + //! @param eoPop< EOT >& __pop - population to be evaluated by applying the evaluation functor specified in the constructor. + void operator()( eoPop< EOT >& __pop ); + + //! Auxiliary function for transferring data between the process requesting an evaluation operation and the process that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void packData(); + + //! Auxiliary function for transferring data between the process requesting an evaluation operation and the process that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void unpackData(); + + //! Auxiliary function - it calls the specified evaluation functor(s). There is no need to explicitly call the function. + void execute(); + + //! Auxiliary function for transferring data between the process requesting an evaluation operation and the process that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void packResult(); + + //! Auxiliary function for transferring data between the process requesting an evaluation operation and the process that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void unpackResult(); + + //! Auxiliary function for notifications between the process requesting an evaluation operation and the processes that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void notifySendingData(); + + //! Auxiliary function for notifications between the process requesting an evaluation operation and the processes that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void notifySendingAllResourceRequests(); + +private: + + + const std :: vector< eoEvalFunc < EOT >* >& funcs; + std :: vector< eoEvalFunc < EOT >* > one_func; + + peoAggEvalFunc< EOT >& merge_eval; + peoNoAggEvalFunc< EOT > no_merge_eval; + + std :: queue< EOT* >tasks; + + std :: map< EOT*, std :: pair< unsigned, unsigned > > progression; + + unsigned num_func; + + EOT sol; + + EOT *ad_sol; + + unsigned total; +}; + + +template< class EOT > peoParaPopEval< EOT > :: peoParaPopEval( eoEvalFunc< EOT >& __eval_func ) : + + funcs( one_func ), merge_eval( no_merge_eval ) +{ + + one_func.push_back( &__eval_func ); +} + + +template< class EOT > peoParaPopEval< EOT > :: peoParaPopEval( + + const std :: vector< eoEvalFunc< EOT >* >& __funcs, + peoAggEvalFunc< EOT >& __merge_eval + + ) : funcs( __funcs ), merge_eval( __merge_eval ) +{ + +} + + +template< class EOT > void peoParaPopEval< EOT >::operator()( eoPop< EOT >& __pop ) { + + for ( unsigned i = 0; i < __pop.size(); i++ ) { + + __pop[ i ].fitness( typename EOT :: Fitness() ); + + progression[ &__pop[ i ] ].first = funcs.size() - 1; + progression[ &__pop[ i ] ].second = funcs.size(); + + for ( unsigned j = 0; j < funcs.size(); j++ ) { + /* Queuing the 'invalid' solution and its associated owner */ + tasks.push( &__pop[ i ] ); + } + } + + total = funcs.size() * __pop.size(); + requestResourceRequest( funcs.size() * __pop.size() ); + stop(); +} + + +template< class EOT > void peoParaPopEval< EOT > :: packData() { + + // printDebugMessage ("debut pakc data"); + pack( progression[ tasks.front() ].first-- ); + + /* Packing the contents :-) of the solution */ + pack( *tasks.front() ); + + /* Packing the addresses of both the solution and the owner */ + pack( tasks.front() ); + tasks.pop( ); +} + + +template< class EOT > void peoParaPopEval< EOT > :: unpackData() { + + unpack( num_func ); + /* Unpacking the solution */ + unpack( sol ); + /* Unpacking the @ of that one */ + unpack( ad_sol ); +} + + +template< class EOT > void peoParaPopEval< EOT > :: execute() { + + /* Computing the fitness of the solution */ + funcs[ num_func ]->operator()( sol ); +} + + +template< class EOT > void peoParaPopEval< EOT > :: packResult() { + + /* Packing the fitness of the solution */ + pack( sol.fitness() ); + /* Packing the @ of the individual */ + pack( ad_sol ); +} + + +template< class EOT > void peoParaPopEval< EOT > :: unpackResult() { + + typename EOT :: Fitness fit; + + /* Unpacking the computed fitness */ + unpack( fit ); + + /* Unpacking the @ of the associated individual */ + unpack( ad_sol ); + + + /* Associating the fitness the local solution */ + merge_eval( *ad_sol, fit ); + + progression[ ad_sol ].second--; + + /* Notifying the container of the termination of the evaluation */ + if ( !progression[ ad_sol ].second ) { + + progression.erase( ad_sol ); + } + + total--; + if ( !total ) { + + getOwner()->setActive(); + resume(); + } +} + + +template< class EOT > void peoParaPopEval< EOT > :: notifySendingData() { + +} + + +template< class EOT > void peoParaPopEval< EOT > :: notifySendingAllResourceRequests() { + + getOwner()->setPassive(); +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoParaSGATransform.h b/trunk/paradiseo-peo/src/peoParaSGATransform.h new file mode 100644 index 000000000..f1bc54a90 --- /dev/null +++ b/trunk/paradiseo-peo/src/peoParaSGATransform.h @@ -0,0 +1,170 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoParaSGATransform.h" + +//(c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoParaSGATransform_h +#define __peoParaSGATransform_h + +#include "peoTransform.h" +#include "core/thread.h" +#include "core/messaging.h" +#include "core/peo_debug.h" + + +extern int getNodeRank(); + + +template< class EOT > class peoParaSGATransform : public peoTransform< EOT > { + +public: + + using peoTransform< EOT > :: requestResourceRequest; + using peoTransform< EOT > :: resume; + using peoTransform< EOT > :: stop; + using peoTransform< EOT > :: getOwner; + + peoParaSGATransform( + + eoQuadOp< EOT >& __cross, + double __cross_rate, + eoMonOp< EOT >& __mut, + double __mut_rate + ); + + void operator()( eoPop< EOT >& __pop ); + + void packData(); + + void unpackData(); + + void execute(); + + void packResult(); + + void unpackResult(); + + void notifySendingData(); + void notifySendingAllResourceRequests(); + +private: + + eoQuadOp< EOT >& cross; + double cross_rate; + + eoMonOp< EOT >& mut; + double mut_rate; + + unsigned idx; + + eoPop< EOT >* pop; + + EOT father, mother; + + unsigned num_term; +}; + +template< class EOT > peoParaSGATransform< EOT > :: peoParaSGATransform( + + eoQuadOp< EOT >& __cross, + double __cross_rate, + eoMonOp < EOT >& __mut, + double __mut_rate + + ) : cross( __cross ), cross_rate( __cross_rate ), mut( __mut ), mut_rate( __mut_rate ) +{ + +} + + +template< class EOT > void peoParaSGATransform< EOT > :: packData() { + + pack( idx ); + :: pack( pop->operator[]( idx++ ) ); + :: pack( pop->operator[]( idx++ ) ); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: unpackData() { + + unpack( idx ); + :: unpack( father ); + :: unpack( mother ); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: execute() { + + if( rng.uniform() < cross_rate ) cross( mother, father ); + + if( rng.uniform() < mut_rate ) mut( mother ); + if( rng.uniform() < mut_rate ) mut( father ); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: packResult() { + + pack( idx ); + :: pack( father ); + :: pack( mother ); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: unpackResult() { + + unsigned sidx; + + unpack( sidx ); + :: unpack( pop->operator[]( sidx++ ) ); + :: unpack( pop->operator[]( sidx ) ); + num_term += 2; + + if( num_term == pop->size() ) { + + getOwner()->setActive(); + resume(); + } +} + + +template< class EOT > void peoParaSGATransform< EOT > :: operator()( eoPop < EOT >& __pop ) { + + printDebugMessage( "performing the parallel transformation step." ); + pop = &__pop; + idx = 0; + num_term = 0; + requestResourceRequest( __pop.size() / 2 ); + stop(); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: notifySendingData() { + +} + + +template< class EOT > void peoParaSGATransform< EOT > :: notifySendingAllResourceRequests() { + + getOwner()->setPassive(); +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoPopEval.h b/trunk/paradiseo-peo/src/peoPopEval.h new file mode 100644 index 000000000..944a62c9b --- /dev/null +++ b/trunk/paradiseo-peo/src/peoPopEval.h @@ -0,0 +1,43 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoPopEval.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoPopEval_h +#define __peoPopEval_h + +#include "core/service.h" + +//! Interface for ParadisEO specific evaluation functors. + +//! The peoPopEval class provides the interface for constructing ParadisEO specific evaluation functors. +//! The derived classes may be used as wrappers for EO-derived evaluation functors. In order to have an example, +//! please refer to the implementation of the peoSeqPopEval and peoParaPopEval classes. +template< class EOT > class peoPopEval : public Service { + +public: + + //! Interface function providing the signature for constructing an evaluation functor. + virtual void operator()( eoPop< EOT >& __pop ) = 0; +}; + + +#endif diff --git a/trunk/paradiseo-peo/src/peoSeqPopEval.h b/trunk/paradiseo-peo/src/peoSeqPopEval.h new file mode 100644 index 000000000..02fb9b62d --- /dev/null +++ b/trunk/paradiseo-peo/src/peoSeqPopEval.h @@ -0,0 +1,68 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoSeqPopEval.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoSeqPopEval_h +#define __peoSeqPopEval_h + +#include + +#include "peoPopEval.h" + +//! Sequential evaluation functor wrapper. + +//! The peoSeqPopEval class acts only as a ParadisEO specific sequential evaluation functor - a wrapper for incorporating +//! an eoEvalFunc< EOT >-derived class as evaluation functor. The specified EO evaluation object is applyied in an +//! iterative manner to each individual of a specified population. +template< class EOT > class peoSeqPopEval : public peoPopEval< EOT > { + +public: + + //! Constructor function - it only sets an internal reference to point to the specified evaluation object. + //! + //! @param eoEvalFunc< EOT >& __eval - evaluation object to be applied for each individual of a specified population + peoSeqPopEval( eoEvalFunc< EOT >& __eval ); + + //! Operator for evaluating all the individuals of a given population - in a sequential iterative manner. + //! + //! @param eoPop< EOT >& __pop - population to be evaluated. + void operator()( eoPop< EOT >& __pop ); + +private: + + eoEvalFunc< EOT >& eval; +}; + + +template< class EOT > peoSeqPopEval< EOT > :: peoSeqPopEval( eoEvalFunc< EOT >& __eval ) : eval( __eval ) { + +} + + +template< class EOT > void peoSeqPopEval< EOT > :: operator()( eoPop< EOT >& __pop ) { + + for ( unsigned i = 0; i < __pop.size(); i++ ) + eval( __pop[i] ); +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoSeqTransform.h b/trunk/paradiseo-peo/src/peoSeqTransform.h new file mode 100644 index 000000000..0d67cb9e9 --- /dev/null +++ b/trunk/paradiseo-peo/src/peoSeqTransform.h @@ -0,0 +1,81 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoSeqTransform.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoSeqTransform_h +#define __peoSeqTransform_h + +#include "peoTransform.h" + + +//! ParadisEO specific wrapper class offering the possibility of using EO derived transform operators. + +//! The peoSeqTransform represent a wrapper for offering the possibility of using EO derived transform operators +//! along with the ParadisEO evolutionary algorithms. A minimal set of interface functions is also provided for creating the +//! link with the parallel architecture of the ParadisEO framework. +template< class EOT > class peoSeqTransform : public peoTransform< EOT > { + +public: + + //! Constructor function - sets an internal reference towards the specified EO-derived transform object. + //! + //! @param eoTransform< EOT >& __trans - EO-derived transform object including crossover and mutation operators. + peoSeqTransform( eoTransform< EOT >& __trans ); + + //! Operator for applying the specified transform operators on each individual of the given population. + //! + //! @param eoPop< EOT >& __pop - population to be transformed by applying the crossover and mutation operators. + void operator()( eoPop< EOT >& __pop ); + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void packData() { } + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void unpackData() { } + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void execute() { } + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void packResult() { } + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void unpackResult() { } + +private: + + eoTransform< EOT >& trans; +}; + + +template< class EOT > peoSeqTransform< EOT > :: peoSeqTransform( eoTransform< EOT >& __trans ) : trans( __trans ) { + +} + + +template< class EOT > void peoSeqTransform< EOT > :: operator()( eoPop< EOT >& __pop ) { + + trans( __pop ); +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoSyncIslandMig.h b/trunk/paradiseo-peo/src/peoSyncIslandMig.h new file mode 100644 index 000000000..fc16d2e9a --- /dev/null +++ b/trunk/paradiseo-peo/src/peoSyncIslandMig.h @@ -0,0 +1,301 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoSyncIslandMig.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoSyncIslandMig_h +#define __peoSyncIslandMig_h + + +#include +#include + +#include + +#include + +#include +#include +#include +#include + +#include "core/topology.h" +#include "core/thread.h" +#include "core/eoPop_comm.h" +#include "core/peo_debug.h" + + +//! Class providing the basis for the synchronous island migration model. + +//! The peoSyncIslandMig class offers the elementary basis for implementating a +//! synchronous island migration model - requires the specification of several basic +//! parameters, i.e. frequency of the migrations, selection and replacement strategies, +//! a topological model and the source and destination population for the migrating individuals. +//! The main difference as opposed to the asynchronous migration model is the synchronization step +//! performed after selecting and sending the emigrant individuals. +//! +//! The migration operator is called at the end of each generation of an evolutionary algorithms +//! as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm: +//! +//! +//! +//! +//! +//! +//! +//! +//!
do {    
         select( population, offsprings );   // select the offsprings from the current population
         transform( offsprings );   // crossover and mutation operators are applied on the selected offsprings
         evaluate( offsprings );   // evaluation step of the resulting offspring
         replace( population, offsprings );   // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy
} while ( eaCheckpointContinue( population ) );   // checkpoint operators are applied on the current population, including the migration operator, if any specified
+//! +//! Constructing a synchronous island migration model requires having defined (1) a topological migration model, +//! (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, +//! and (4) an owner object must be set. The owner object must be derived from the Runner class (for example +//! a peoEA object represents a possible owner). +//! A simple example is offered bellow: +//! +//!
    +//!
  1. topological model to be followed when performing migrations:
    +//!
    +//! +//! +//!
    RingTopology migTopology;   // a simple ring topological model - each island communicates with two other islands
    +//!
  2. +//! +//!
  3. the continuation criterion, selection and replacement strategy etc. are defined:
    +//!
    +//! +//! +//! +//! +//! +//! +//! +//! +//! +//!
    eoPop< EOT > population( POP_SIZE, popInitializer );   // population of individuals to be used for the evolutionary algorithm
       
    eoRandomSelect< EOT > migSelectStrategy;   // selection strategy - in this case a random selection is applied
    eoSelectNumber< EOT > migSelect( migSelectStrategy, MIG_SIZE );   // number of individuals to be selected using the specified strategy
    eoPlusReplacement< EOT > migReplace;   // immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals
       
    peoSyncIslandMig< EOT > syncMigration( +//!
             MIG_FREQ, migSelect, migReplace, migTopology, +//!
             population, population +//!
    );  
    // synchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated
    +//!
  4. +//! +//!
  5. creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope):
    +//!
    +//! +//! +//! +//! +//! +//! +//! +//!
    ...    
    eoGenContinue< EOT > eaCont( NUM_GEN );   // the evolutionary algorithm will stop after NUM_GEN generations
    eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // number of individuals to be selected using the specified strategy
    ...    
    eaCheckpointContinue.add( syncMigration );   // adding the migration operator as checkpoint element
    ...    
    +//!
  6. +//! +//!
  7. definition of an owner evolutionary algorithm (an object inheriting the Runner class):
    +//!
    +//! +//! +//! +//! +//!
    peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace);   // evolutionary algorithm having as checkpoint the eaCheckpointContinue object defined above
    syncMigration.setOwner( eaAlg );   // setting the evolutionary algorithm as owner of the migration object
    eaAlg( population );   // applying the evolutionary algorithm on a given population
    +//!
  8. +//!
+//! +//! The source and the destination population for the migration object were specified as being the same, in step no. 2, +//! as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique +//! population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations +//! as source and destination for the emigrant and immigrant individuals respectively. +//! +//! The above steps only create a synchronous migration object associated to an evolutionary algorithm. The creation of several +//! islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and +//! the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 +//! (the same C++ migTopology object has to be passed as parameter for all the migration objects, in order to interconnect them). +template< class EOT > class peoSyncIslandMig : public Cooperative, public eoUpdater { + +public: + + //! Constructor for the peoSyncIslandMig class; the characteristics of the migration model are defined + //! through the specified parameters - out of the box objects provided in EO, etc., or custom, derived objects may be passed as parameters. + //! + //! @param unsigned __frequency - frequency of the migrations - the migrations occur periodically; + //! @param eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population; + //! @param eoReplacement< EOT >& __replace - replacement strategy used for integrating the immigrant individuals in the destination population; + //! @param Topology& __topology - topological model to be followed when performing migrations; + //! @param eoPop< EOT >& __source - source population from which the emigrant individuals are selected; + //! @param eoPop< EOT >& __destination - destination population in which the immigrant population are integrated. + peoSyncIslandMig( + unsigned __frequency, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + Topology& __topology, + eoPop< EOT >& __source, + eoPop< EOT >& __destination + ); + + //! Function operator to be called as checkpoint for performing the migration step. The emigrant individuals are selected + //! from the source population and sent to the next island (defined by the topology object) while the immigrant + //! individuals are integrated in the destination population. There is no need to explicitly call the function - the + //! wrapper checkpoint object (please refer to the above example) will perform the call when required. + void operator()(); + + //! Auxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function. + void pack(); + //! Auxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function. + void unpack(); + + //! Auxiliary function dealing with migration notifications. There is no need to explicitly call the function. + void notifySending(); + + +private: + + void emigrate(); + void immigrate(); + + +private: + + eoPeriodicContinue< EOT > cont; + eoSelect< EOT >& select; // selection strategy + eoReplacement< EOT >& replace; // replacement strategy + Topology& topology; // neighboring topology + + // source and target populations + eoPop< EOT >& source; + eoPop< EOT >& destination; + + // immigrants & emigrants in the queue + std :: queue< eoPop< EOT > > imm; + std :: queue< eoPop< EOT > > em; + + std :: queue< Cooperative* > coop_em; + + sem_t sync; +}; + + +template< class EOT > peoSyncIslandMig< EOT > :: peoSyncIslandMig( + + unsigned __frequency, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + Topology& __topology, + eoPop< EOT >& __source, + eoPop< EOT >& __destination + + ) : cont( __frequency ), select( __select ), replace( __replace ), topology( __topology ), source( __source ), destination( __destination ) +{ + + __topology.add( *this ); + sem_init( &sync, 0, 0 ); +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: pack() { + + lock(); { + + :: pack( coop_em.front()->getKey() ); + :: pack( em.front() ); + coop_em.pop(); + em.pop(); + } + unlock(); +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: unpack() { + + lock(); { + + eoPop< EOT > mig; + :: unpack( mig ); + imm.push( mig ); + } + unlock(); + + sem_post( &sync ); +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: emigrate() { + + std :: vector< Cooperative* > in, out; + topology.setNeighbors( this, in, out ); + + for ( unsigned i = 0; i < out.size(); i ++ ) { + + eoPop< EOT > mig; + select( source, mig ); + em.push( mig ); + coop_em.push( out[ i ] ); + send( out[ i ] ); + printDebugMessage( "sending some emigrants." ); + } +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: immigrate() { + + lock(); { + + assert( imm.size() ); + replace( destination, imm.front() ) ; + imm.pop(); + printDebugMessage( "receiving some immigrants." ); + } + unlock(); +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: operator()() { + + if ( !cont( source ) ) { + + // sending emigrants + emigrate(); + stop(); + + // synchronizing + sem_wait( &sync ); + getOwner()->setActive(); + + // receiving immigrants + immigrate(); + } +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: notifySending() { + + lock(); { + + if ( imm.empty() ) { + + printDebugMessage( "entering pasive mode\n" ); + getOwner()->setPassive(); + } + } + unlock(); + + resume(); +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoSyncMultiStart.h b/trunk/paradiseo-peo/src/peoSyncMultiStart.h new file mode 100644 index 000000000..65d1cc386 --- /dev/null +++ b/trunk/paradiseo-peo/src/peoSyncMultiStart.h @@ -0,0 +1,198 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoSyncMultiStart.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoSyncMultiStart_h +#define __peoSyncMultiStart_h + +#include +#include + +#include +#include +#include + +#include "core/service.h" +#include "core/messaging.h" +#include "core/peo_debug.h" + + +extern int getNodeRank(); + + +//! Class providing the basis for the synchronous multi-start model. + +//! The peoSyncMultiStart class provides the basis for implementing the synchronous multi-start model, +//! for launching several solution-based algorithms in parallel on a specified initial population. As a simple +//! example, several hill climbing algorithms may be synchronously launched on the specified population, each +//! algorithm acting upon one individual only, the final result being integrated back in the population. A +//! peoSyncMultiStart object can be specified as checkpoint object for a classic ParadisEO evolutionary algorithm +//! thus allowing for simple hybridization schemes which combine the evolutionary approach with a local search approach, +//! for example, executed at the end of each generation. +template< class EOT > class peoSyncMultiStart : public Service, public eoUpdater { + +public: + + //! Constructor function - several simple parameters are required for defining the characteristics of the multi-start model. + //! + //! @param eoContinue< EOT >& __cont - defined for including further functionality - no semantics associated at this time; + //! @param eoSelect< EOT >& __select - selection strategy for obtaining a subset of the initial population on which to apply the specified algorithm; + //! @param eoReplacement< EOT >& __replace - replacement strategy for integrating the resulting individuals in the initial population; + //! @param moAlgo< EOT >& __ls - algorithm to be applied on each of the selected individuals - a moAlgo< EOT >-derived object must be specified; + //! @param eoPop< EOT >& __pop - the initial population from which the individuals are selected for applying the specified algorithm. + peoSyncMultiStart( + + eoContinue< EOT >& __cont, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + moAlgo< EOT >& __ls, + eoPop< EOT >& __pop + ); + + //! Operator which synchronously executes the specified algorithm on the individuals selected from the initial population. + //! There is no need to explicitly call the operator - automatically called as checkpoint operator. + void operator()(); + + //! Auxiliary function for transferring data between the process requesting the synchronous execution of the specified + //! algorithm and the process which actually executes the algorithm. There is no need to explicitly call the function. + void packData(); + + //! Auxiliary function for transferring data between the process requesting the synchronous execution of the specified + //! algorithm and the process which actually executes the algorithm. There is no need to explicitly call the function. + void unpackData(); + + //! Auxiliary function for actually executing the specified algorithm on one assigned individual. There is no need to + //! explicitly call the function. + void execute(); + + //! Auxiliary function for transferring data between the process requesting the synchronous execution of the specified + //! algorithm and the process which actually executes the algorithm. There is no need to explicitly call the function. + void packResult(); + + //! Auxiliary function for transferring data between the process requesting the synchronous execution of the specified + //! algorithm and the process which actually executes the algorithm. There is no need to explicitly call the function. + void unpackResult(); + + //! Auxiliary function for notifications between the process requesting the synchronous multi-start execution + //! and the processes that performs the actual execution phase. There is no need to explicitly call the function. + void notifySendingData(); + + //! Auxiliary function for notifications between the process requesting the synchronous multi-start execution + //! and the processes that performs the actual execution phase. There is no need to explicitly call the function. + void notifySendingAllResourceRequests(); + +private: + + eoContinue< EOT >& cont; + eoSelect< EOT >& select; + eoReplacement< EOT >& replace; + + moAlgo< EOT >& ls; + + eoPop< EOT >& pop; + eoPop< EOT > sel; + eoPop< EOT > impr_sel; + + EOT sol; + unsigned idx; + unsigned num_term; +}; + + +template< class EOT > peoSyncMultiStart< EOT > :: peoSyncMultiStart( + + eoContinue < EOT >& __cont, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + moAlgo < EOT >& __ls, + eoPop< EOT >& __pop + + ) : cont( __cont ), select( __select ), replace( __replace ), ls( __ls ), pop( __pop ) +{ + +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: packData() { + + :: pack( sel[ idx++ ] ); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: unpackData() { + + unpack( sol ); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: execute() { + + ls( sol ); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: packResult() { + + pack( sol ); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: unpackResult() { + + unpack( sol ); + impr_sel.push_back( sol ); + num_term++; + + if ( num_term == sel.size() ) { + + getOwner()->setActive(); + replace( pop, impr_sel ); + + printDebugMessage( "replacing the improved individuals in the population." ); + resume(); + } +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: operator()() { + + printDebugMessage( "performing the parallel multi-start hybridization." ); + select( pop, sel ); + impr_sel.clear(); + idx = num_term = 0; + requestResourceRequest( sel.size() ); + stop(); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: notifySendingData() { + +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: notifySendingAllResourceRequests() { + + getOwner()->setPassive(); +} + + +#endif diff --git a/trunk/paradiseo-peo/src/peoTransform.h b/trunk/paradiseo-peo/src/peoTransform.h new file mode 100644 index 000000000..5f5bc7099 --- /dev/null +++ b/trunk/paradiseo-peo/src/peoTransform.h @@ -0,0 +1,40 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "peoTransform.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __peoTransform_h +#define __peoTransform_h + +#include + +#include "core/service.h" + +//! Interface class for constructing more complex transformation operators. + +//! The peoTransform class acts only as an interface for creating transform operators - for an example +//! please refer to the peoSeqTransform and the peoParaSGATransform classes. +template< class EOT > class peoTransform : public Service, public eoTransform< EOT > { + +}; + + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/Makefile.am b/trunk/paradiseo-peo/src/rmc/Makefile.am new file mode 100755 index 000000000..c9ed98209 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/Makefile.am @@ -0,0 +1 @@ +SUBDIRS= mpi diff --git a/trunk/paradiseo-peo/src/rmc/Makefile.in b/trunk/paradiseo-peo/src/rmc/Makefile.in new file mode 100644 index 000000000..0faa1b870 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/Makefile.in @@ -0,0 +1,445 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/rmc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EO_DIR = @EO_DIR@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MOEO_DIR = @MOEO_DIR@ +MO_DIR = @MO_DIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +SUBDIRS = mpi +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/rmc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/rmc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-recursive ctags ctags-recursive \ + distclean distclean-generic distclean-recursive distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-generic \ + mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/trunk/paradiseo-peo/src/rmc/mpi/Makefile.am b/trunk/paradiseo-peo/src/rmc/mpi/Makefile.am new file mode 100755 index 000000000..f26f2c413 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/Makefile.am @@ -0,0 +1,39 @@ +CXX=mpicxx + +INCLUDES = \ + `xml2-config --cflags` \ + -I$(EO_DIR)/src + +AM_CXXFLAGS =\ + -g \ + -Wall + +lib_LIBRARIES = librmc_mpi.a + +librmc_mpi_a_SOURCES = \ + node.h \ + node.cpp \ + param.h \ + param.cpp \ + comm.h \ + comm.cpp \ + coop.h \ + coop.cpp \ + mess.h \ + mess.cpp \ + rmc.cpp \ + scheduler.h \ + scheduler.cpp \ + worker.h \ + worker.cpp \ + send.h \ + send.cpp \ + recv.h \ + recv.cpp \ + xml_parser.h \ + xml_parser.cpp \ + schema.h \ + schema.cpp \ + runner.cpp \ + service.h \ + service.cpp diff --git a/trunk/paradiseo-peo/src/rmc/mpi/Makefile.in b/trunk/paradiseo-peo/src/rmc/mpi/Makefile.in new file mode 100644 index 000000000..6f972de7c --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/Makefile.in @@ -0,0 +1,478 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/rmc/mpi +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" +libLIBRARIES_INSTALL = $(INSTALL_DATA) +LIBRARIES = $(lib_LIBRARIES) +AR = ar +ARFLAGS = cru +librmc_mpi_a_AR = $(AR) $(ARFLAGS) +librmc_mpi_a_LIBADD = +am_librmc_mpi_a_OBJECTS = node.$(OBJEXT) param.$(OBJEXT) \ + comm.$(OBJEXT) coop.$(OBJEXT) mess.$(OBJEXT) rmc.$(OBJEXT) \ + scheduler.$(OBJEXT) worker.$(OBJEXT) send.$(OBJEXT) \ + recv.$(OBJEXT) xml_parser.$(OBJEXT) schema.$(OBJEXT) \ + runner.$(OBJEXT) service.$(OBJEXT) +librmc_mpi_a_OBJECTS = $(am_librmc_mpi_a_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(librmc_mpi_a_SOURCES) +DIST_SOURCES = $(librmc_mpi_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = mpicxx +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EO_DIR = @EO_DIR@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MOEO_DIR = @MOEO_DIR@ +MO_DIR = @MO_DIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +INCLUDES = \ + `xml2-config --cflags` \ + -I$(EO_DIR)/src + +AM_CXXFLAGS = \ + -g \ + -Wall + +lib_LIBRARIES = librmc_mpi.a +librmc_mpi_a_SOURCES = \ + node.h \ + node.cpp \ + param.h \ + param.cpp \ + comm.h \ + comm.cpp \ + coop.h \ + coop.cpp \ + mess.h \ + mess.cpp \ + rmc.cpp \ + scheduler.h \ + scheduler.cpp \ + worker.h \ + worker.cpp \ + send.h \ + send.cpp \ + recv.h \ + recv.cpp \ + xml_parser.h \ + xml_parser.cpp \ + schema.h \ + schema.cpp \ + runner.cpp \ + service.h \ + service.cpp + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/rmc/mpi/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/rmc/mpi/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + p=$(am__strip_dir) \ + echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \ + $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) +librmc_mpi.a: $(librmc_mpi_a_OBJECTS) $(librmc_mpi_a_DEPENDENCIES) + -rm -f librmc_mpi.a + $(librmc_mpi_a_AR) librmc_mpi.a $(librmc_mpi_a_OBJECTS) $(librmc_mpi_a_LIBADD) + $(RANLIB) librmc_mpi.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mess.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/node.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/param.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runner.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scheduler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/schema.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/service.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/worker.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_parser.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-libLIBRARIES + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libLIBRARIES + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-libLIBRARIES install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-info-am uninstall-libLIBRARIES + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/trunk/paradiseo-peo/src/rmc/mpi/comm.cpp b/trunk/paradiseo-peo/src/rmc/mpi/comm.cpp new file mode 100644 index 000000000..fb61a5a24 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/comm.cpp @@ -0,0 +1,82 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "comm.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + + +#include + +#include "comm.h" +#include "mess.h" +#include "node.h" +#include "param.h" +#include "../../core/peo_debug.h" +#include "../../core/runner.h" +#include "send.h" +#include "recv.h" +#include "scheduler.h" + +static sem_t sem_comm_init; + +static Communicator * the_thread; + +Communicator :: Communicator (int * __argc, char * * * __argv) { + + the_thread = this; + initNode (__argc, __argv); + loadRMCParameters (* __argc, * __argv); + sem_post (& sem_comm_init); +} + +void Communicator :: start () { + + while (true) { + + /* Zzz Zzz Zzz :-))) */ + sleep (); + sendMessages (); + + if (! atLeastOneActiveRunner ()) + break; + receiveMessages (); + } + waitBuffers (); + printDebugMessage ("finalizing"); + MPI_Finalize (); +} + +void initCommunication () { + + sem_init (& sem_comm_init, 0, 0); +} + +void waitNodeInitialization () { + + sem_wait (& sem_comm_init); +} + +void wakeUpCommunicator () { + + the_thread -> wakeUp (); +} + + + diff --git a/trunk/paradiseo-peo/src/rmc/mpi/comm.h b/trunk/paradiseo-peo/src/rmc/mpi/comm.h new file mode 100644 index 000000000..f8b724246 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/comm.h @@ -0,0 +1,46 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "comm.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __comm_mpi_h +#define __comm_mpi_h + +#include "../../core/communicable.h" +#include "../../core/reac_thread.h" + +class Communicator : public ReactiveThread { + +public : + + /* Ctor */ + Communicator (int * __argc, char * * * __argv); + + void start (); +}; + +extern void initCommunication (); + +extern void waitNodeInitialization (); + +extern void wakeUpCommunicator (); + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/coop.cpp b/trunk/paradiseo-peo/src/rmc/mpi/coop.cpp new file mode 100644 index 000000000..8f9365cf8 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/coop.cpp @@ -0,0 +1,57 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "coop.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "../../core/cooperative.h" +#include "send.h" +#include "tags.h" +#include "schema.h" +#include "mess.h" +#include "../../core/peo_debug.h" + +Runner * Cooperative :: getOwner () { + + return owner; +} + +void Cooperative :: setOwner (Runner & __runner) { + + owner = & __runner; +} + +void Cooperative :: send (Cooperative * __coop) { + + :: send (this, getRankOfRunner (__coop -> getOwner () -> getID ()), COOP_TAG); + // stop (); +} + +Cooperative * getCooperative (COOP_ID __key) { + + return dynamic_cast (getCommunicable (__key)); +} + +void Cooperative :: notifySending () { + + //getOwner -> setPassive (); + // resume (); + // printDebugMessage (b); +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/mess.cpp b/trunk/paradiseo-peo/src/rmc/mpi/mess.cpp new file mode 100644 index 000000000..4906b23cc --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/mess.cpp @@ -0,0 +1,252 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "mess.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include "mess.h" +#include "../../core/peo_debug.h" +#include "node.h" + +#define MPI_BUF_SIZE 1024*64 + +static char mpi_buf [MPI_BUF_SIZE]; + +static int pos_buf ; + +static std :: vector act_buf; /* Active buffers */ + +static std :: vector act_req; /* Active requests */ + +void cleanBuffers () { + + for (unsigned i = 0; i < act_req.size ();) { + + MPI_Status stat ; + int flag ; + MPI_Test (act_req [i], & flag, & stat) ; + if (flag) { + + delete act_buf [i] ; + delete act_req [i] ; + + act_buf [i] = act_buf.back () ; + act_buf.pop_back () ; + + act_req [i] = act_req.back () ; + act_req.pop_back () ; + } + else + i ++; + } +} + +void waitBuffers () { + + printDebugMessage ("waiting the termination of the asynchronous operations to complete"); + + for (unsigned i = 0; i < act_req.size (); i ++) { + + MPI_Status stat ; + + MPI_Wait (act_req [i], & stat) ; + + delete act_buf [i] ; + delete act_req [i] ; + } +} + +bool probeMessage (int & __src, int & __tag) { + + int flag; + + MPI_Status stat; + + MPI_Iprobe (MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, & flag, & stat); + + __src = stat.MPI_SOURCE; + __tag = stat.MPI_TAG; + + return flag; +} + +void waitMessage () { + + MPI_Status stat; + + MPI_Probe (MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, & stat); +} + +void initMessage () { + + pos_buf = 0; +} + +void sendMessage (int __to, int __tag) { + + cleanBuffers (); + act_buf.push_back (new char [pos_buf]); + act_req.push_back (new MPI_Request); + memcpy (act_buf.back (), mpi_buf, pos_buf); + MPI_Isend (act_buf.back (), pos_buf, MPI_PACKED, __to, __tag, MPI_COMM_WORLD, act_req.back ()); +} + +void sendMessageToAll (int __tag) { + + for (int i = 0; i < getNumberOfNodes (); i ++) + sendMessage (i, __tag); +} + +void receiveMessage (int __from, int __tag) { + + MPI_Status stat; + MPI_Request req; + + MPI_Irecv (mpi_buf, MPI_BUF_SIZE, MPI_PACKED, __from, __tag, MPI_COMM_WORLD, & req) ; + MPI_Wait (& req, & stat) ; +} + +/* Char */ +void pack (const char & __c) { + + MPI_Pack ((void *) & __c, 1, MPI_CHAR, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Float */ +void pack (const float & __f, int __nitem) { + + MPI_Pack ((void *) & __f, __nitem, MPI_FLOAT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Double */ +void pack (const double & __d, int __nitem) { + + MPI_Pack ((void *) & __d, __nitem, MPI_DOUBLE, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Integer */ +void pack (const int & __i, int __nitem) { + + MPI_Pack ((void *) & __i, __nitem, MPI_INT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Unsigned int. */ +void pack (const unsigned int & __ui, int __nitem) { + + MPI_Pack ((void *) & __ui, __nitem, MPI_UNSIGNED, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Short int. */ +void pack (const short & __sh, int __nitem) { + + MPI_Pack ((void *) & __sh, __nitem, MPI_SHORT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Unsigned short */ +void pack (const unsigned short & __ush, int __nitem) { + + MPI_Pack ((void *) & __ush, __nitem, MPI_UNSIGNED_SHORT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Long */ +void pack (const long & __l, int __nitem) { + + MPI_Pack ((void *) & __l, __nitem, MPI_LONG, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Unsigned long */ +void pack (const unsigned long & __ul, int __nitem) { + + MPI_Pack ((void *) & __ul, __nitem, MPI_UNSIGNED_LONG, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* String */ +void pack (const char * __str) { + + int len = strlen (__str) + 1; + MPI_Pack (& len, 1, MPI_INT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); + MPI_Pack ((void *) __str, len, MPI_CHAR, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Char */ +void unpack (char & __c) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __c, 1, MPI_CHAR, MPI_COMM_WORLD); +} + +/* Float */ +void unpack (float & __f, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __f, __nitem, MPI_FLOAT, MPI_COMM_WORLD); +} + +/* Double */ +void unpack (double & __d, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __d, __nitem, MPI_DOUBLE, MPI_COMM_WORLD); +} + +/* Integer */ +void unpack (int & __i, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __i, __nitem, MPI_INT, MPI_COMM_WORLD); +} + +/* Unsigned int. */ +void unpack (unsigned int & __ui, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ui, __nitem, MPI_UNSIGNED, MPI_COMM_WORLD); +} + +/* Short int. */ +void unpack (short & __sh, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __sh, __nitem, MPI_SHORT, MPI_COMM_WORLD); +} + +/* Unsigned short */ +void unpack (unsigned short & __ush, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ush, __nitem, MPI_UNSIGNED_SHORT, MPI_COMM_WORLD); +} + +/* Long */ +void unpack (long & __l, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __l, __nitem, MPI_LONG, MPI_COMM_WORLD); +} + +/* Unsigned long */ +void unpack (unsigned long & __ul, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ul, __nitem, MPI_UNSIGNED_LONG, MPI_COMM_WORLD); +} + +/* String */ +void unpack (char * __str) { + + int len; + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & len, 1, MPI_INT, MPI_COMM_WORLD); + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, __str, len, MPI_CHAR, MPI_COMM_WORLD); +} + diff --git a/trunk/paradiseo-peo/src/rmc/mpi/mess.h b/trunk/paradiseo-peo/src/rmc/mpi/mess.h new file mode 100644 index 000000000..ac38a42f4 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/mess.h @@ -0,0 +1,46 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "mess.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __mess_rmc_h +#define __mess_rmc_h + +#include "../../core/messaging.h" + +extern void initMessage (); + +extern void sendMessage (int __to, int __tag); + +extern void sendMessageToAll (int __tag); + +extern void receiveMessage (int __from, int __tag); + +extern void cleanBuffers (); + +extern void waitBuffers (); + +extern bool probeMessage (int & __src, int & __tag); + +extern void waitMessage (); + +#endif + diff --git a/trunk/paradiseo-peo/src/rmc/mpi/node.cpp b/trunk/paradiseo-peo/src/rmc/mpi/node.cpp new file mode 100644 index 000000000..b72589fa7 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/node.cpp @@ -0,0 +1,73 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "node.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include +#include + +static int rk, sz; /* Rank & size */ + +static std :: map name_to_rk; + +static std :: vector rk_to_name; + +int getNodeRank () { + + return rk; +} + +int getNumberOfNodes () { + + return sz; +} + +int getRankFromName (const std :: string & __name) { + + return atoi (__name.c_str ()); +} + +void initNode (int * __argc, char * * * __argv) { + + int provided; + MPI_Init_thread (__argc, __argv, MPI_THREAD_FUNNELED, & provided); + assert (provided == MPI_THREAD_FUNNELED); /* The MPI implementation must be multi-threaded. + Yet, only one thread performs the comm. + operations */ + MPI_Comm_rank (MPI_COMM_WORLD, & rk); /* Who ? */ + MPI_Comm_size (MPI_COMM_WORLD, & sz); /* How many ? */ + + char names [sz] [MPI_MAX_PROCESSOR_NAME]; + int len; + + /* Processor names */ + MPI_Get_processor_name (names [0], & len); /* Me */ + MPI_Allgather (names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, MPI_COMM_WORLD); /* Broadcast */ + + for (int i = 0; i < sz; i ++) { + rk_to_name.push_back (names [i]); + name_to_rk [names [i]] = i; + } +} + diff --git a/trunk/paradiseo-peo/src/rmc/mpi/node.h b/trunk/paradiseo-peo/src/rmc/mpi/node.h new file mode 100644 index 000000000..6f5c81092 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/node.h @@ -0,0 +1,39 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "node.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __node_h +#define __node_h + +#include +#include + +extern int getNodeRank (); /* It gives the rank of the calling process */ + +extern int getNumberOfNodes (); /* It gives the size of the environment (Total number of nodes) */ + +extern int getRankFromName (const std :: string & __name); /* It gives the rank of the process + expressed by its name */ + +extern void initNode (int * __argc, char * * * __argv); + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/param.cpp b/trunk/paradiseo-peo/src/rmc/mpi/param.cpp new file mode 100644 index 000000000..b96f10aba --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/param.cpp @@ -0,0 +1,36 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "param.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "schema.h" + +void loadRMCParameters (int & __argc, char * * & __argv) { + + eoParser parser (__argc, __argv); + + /* Schema */ + eoValueParam schema_param ("schema.xml", "schema", "?"); + parser.processParam (schema_param); + loadSchema (schema_param.value ().c_str ()); +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/param.h b/trunk/paradiseo-peo/src/rmc/mpi/param.h new file mode 100644 index 000000000..04fe34e55 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/param.h @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "param.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __rmc_param_h +#define __rmc_param_h + +extern void loadRMCParameters (int & __argc, char * * & __argv); + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/recv.cpp b/trunk/paradiseo-peo/src/rmc/mpi/recv.cpp new file mode 100644 index 000000000..35769de9b --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/recv.cpp @@ -0,0 +1,127 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "recv.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "comm.h" +#include "tags.h" +#include "worker.h" +#include "scheduler.h" +#include "mess.h" +#include "node.h" +#include "../../core/runner.h" +#include "../../core/cooperative.h" +#include "../../core/peo_debug.h" + +void receiveMessages () { + + cleanBuffers (); + + do { + + if (! atLeastOneActiveThread ()) { + // printDebugMessage ("debut wait"); + waitMessage (); + //printDebugMessage ("fin wait"); + } + + int src, tag; + + while (probeMessage (src, tag)) { + + receiveMessage (src, tag); + initMessage (); + /* + char b [1000]; + sprintf (b, "traitement recv %d\n", tag); + printDebugMessage (b); + */ + + switch (tag) { + + case RUNNER_STOP_TAG: + unpackTerminationOfRunner (); + wakeUpCommunicator (); + break; + + case COOP_TAG: + // printDebugMessage ("reception de message de cooperation"); + COOP_ID coop_id; + unpack (coop_id); + getCooperative (coop_id) -> unpack (); + break; + + case SCHED_REQUEST_TAG: + unpackResourceRequest (); + break; + + case SCHED_RESULT_TAG: + { + /* Unpacking the resource */ + SERVICE_ID serv_id; + unpack (serv_id); + Service * serv = getService (serv_id); + int dest; + unpack (dest); + WORKER_ID worker_id; + unpack (worker_id); + + /* Going back ... */ + initMessage (); + pack (worker_id); + pack (serv_id); + serv -> packData (); + serv -> notifySendingData (); + sendMessage (dest, TASK_DATA_TAG); + break; + } + + case TASK_DATA_TAG: + { + WORKER_ID worker_id; + unpack (worker_id); + Worker * worker = getWorker (worker_id); + worker -> setSource (src); + worker -> unpackData (); + worker -> wakeUp (); + break; + } + + case TASK_RESULT_TAG: + { + SERVICE_ID serv_id; + unpack (serv_id); + Service * serv = getService (serv_id); + serv -> unpackResult (); + break; + } + + case TASK_DONE_TAG: + unpackTaskDone (); + break; + + default: + ; + }; + } + + } while (! atLeastOneActiveThread () && atLeastOneActiveRunner () /*&& ! allResourcesFree ()*/); +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/recv.h b/trunk/paradiseo-peo/src/rmc/mpi/recv.h new file mode 100644 index 000000000..9787ca6f5 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/recv.h @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "recv.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __recv_h +#define __recv_h + +extern void receiveMessages (); + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/rmc.cpp b/trunk/paradiseo-peo/src/rmc/mpi/rmc.cpp new file mode 100644 index 000000000..5fd2e248c --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/rmc.cpp @@ -0,0 +1,62 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; messent-column: 35; -*- + +// "rmc.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "send.h" +#include "worker.h" +#include "schema.h" +#include "comm.h" +#include "scheduler.h" +#include "../../core/peo_debug.h" + +static std :: vector ll_threads; /* Low level threads */ + +void runRMC () { + + /* Worker(s) ? */ + for (unsigned i = 0; i < my_node -> num_workers; i ++) + addThread (new Worker, ll_threads); + + wakeUpCommunicator (); +} + +void initRMC (int & __argc, char * * & __argv) { + + /* Communication */ + initCommunication (); + addThread (new Communicator (& __argc, & __argv), ll_threads); + waitNodeInitialization (); + initSending (); + + /* Scheduler */ + if (isScheduleNode ()) + initScheduler (); + + /// +} + +void finalizeRMC () { + + printDebugMessage ("before join threads RMC"); + joinThreads (ll_threads); + printDebugMessage ("after join threads RMC"); +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/runner.cpp b/trunk/paradiseo-peo/src/rmc/mpi/runner.cpp new file mode 100644 index 000000000..fdc6e680b --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/runner.cpp @@ -0,0 +1,48 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "runner.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "../../core/messaging.h" +#include "../../core/runner.h" +#include "node.h" +#include "send.h" +#include "tags.h" +#include "schema.h" + +bool Runner :: isLocal () { + + for (unsigned i = 0; i < my_node -> id_run.size (); i ++) + if (my_node -> id_run [i] == id) + return true; + return false; +} + +void Runner :: packTermination () { + + pack (id); +} + +void Runner :: terminate () { + + sendToAll (this, RUNNER_STOP_TAG); +} + diff --git a/trunk/paradiseo-peo/src/rmc/mpi/scheduler.cpp b/trunk/paradiseo-peo/src/rmc/mpi/scheduler.cpp new file mode 100644 index 000000000..2d5c55302 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/scheduler.cpp @@ -0,0 +1,93 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "sched_thread.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "scheduler.h" +#include "tags.h" +#include "mess.h" +#include "../../core/peo_debug.h" + +static std :: queue resources; /* Free resources */ + +static std :: queue requests; /* Requests */ + +static unsigned initNumberOfRes = 0; + +void initScheduler () { + + for (unsigned i = 0; i < the_schema.size (); i ++) { + + const Node & node = the_schema [i]; + + if (node.rk_sched == my_node -> rk) + for (unsigned j = 0; j < node.num_workers; j ++) + resources.push (std :: pair (i, j + 1)); + } + initNumberOfRes = resources.size (); +} + +bool allResourcesFree () { + + return resources.size () == initNumberOfRes; +} + +static void update () { + + unsigned num_alloc = std :: min (resources.size (), requests.size ()); + + for (unsigned i = 0; i < num_alloc; i ++) { + + SCHED_REQUEST req = requests.front (); + requests.pop (); + + SCHED_RESOURCE res = resources.front (); + resources.pop (); + + printDebugMessage ("allocating a resource."); + initMessage (); + pack (req.second); + pack (res); + sendMessage (req.first, SCHED_RESULT_TAG); + } +} + +void unpackResourceRequest () { + + printDebugMessage ("queuing a resource request."); + SCHED_REQUEST req; + unpack (req); + requests.push (req); + update (); +} + +void unpackTaskDone () { + + printDebugMessage ("I'm notified a worker is now idle."); + SCHED_RESOURCE res; + unpack (res); + resources.push (res); + if (resources.size () == initNumberOfRes) + printDebugMessage ("all the resources are now free."); + update (); +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/scheduler.h b/trunk/paradiseo-peo/src/rmc/mpi/scheduler.h new file mode 100644 index 000000000..9b8b022b0 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/scheduler.h @@ -0,0 +1,47 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "scheduler.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __scheduler_h +#define __scheduler_h + +#include + +#include "schema.h" +#include "worker.h" + +typedef std :: pair SCHED_RESOURCE; + +typedef std :: pair SCHED_REQUEST; + +/* Initializing the list of available workers */ +extern void initScheduler (); + +/* Processing a resource request from a service */ +extern void unpackResourceRequest (); + +/* Being known a worker is now idle :-) */ +extern void unpackTaskDone (); + +extern bool allResourcesFree (); + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/schema.cpp b/trunk/paradiseo-peo/src/rmc/mpi/schema.cpp new file mode 100644 index 000000000..dc7efcf5b --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/schema.cpp @@ -0,0 +1,150 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "schema.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include "schema.h" +#include "xml_parser.h" +#include "comm.h" +#include "node.h" +#include "../../core/peo_debug.h" + +std :: vector the_schema; + +Node * my_node; + +RANK_ID getRankOfRunner (RUNNER_ID __key) { + + for (unsigned i = 0; i < the_schema.size (); i ++) + for (unsigned j = 0; j < the_schema [i].id_run.size (); j ++) + if (the_schema [i].id_run [j] == __key) + return the_schema [i].rk; + assert (false); + return 0; +} + +static void loadNode (int __rk_sched) { + + Node node; + + node.rk_sched = __rk_sched; + + /* ATT: name*/ + node.rk = getRankFromName (getAttributeValue ("name")); + /* ATT: num_workers */ + node.num_workers = atoi (getAttributeValue ("num_workers").c_str ()); + + while (true) { + + /* TAG: | */ + std :: string name = getNextNode (); + assert (name == "runner" || name == "node"); + if (name == "runner") { + /* TAG: */ + node.id_run.push_back (atoi (getNextNode ().c_str ())); + /* TAG:
*/ + assert (getNextNode () == "runner"); + } + else { + /* TAG: */ + the_schema.push_back (node); + break; + } + } +} + +static void loadGroup () { + + std :: string name; + + /* ATT: scheduler*/ + int rk_sched = getRankFromName (getAttributeValue ("scheduler")); + + while (true) { + + /* TAG: | */ + name = getNextNode (); + assert (name == "node" || name == "group"); + if (name == "node") + /* TAG: */ + loadNode (rk_sched); + else + /* TAG: */ + break; + } +} + +bool isScheduleNode () { + + return my_node -> rk == my_node -> rk_sched; +} + +void loadSchema (const char * __filename) { + + openXMLDocument (__filename); + + std :: string name; + + /* TAG: */ + name = getNextNode (); + assert (name == "schema"); + + while (true) { + + /* TAG: | */ + name = getNextNode (); + assert (name == "group" || name == "schema"); + if (name == "group") + /* TAG: */ + loadGroup (); + else + /* TAG: */ + break; + } + + /* Looking for my node */ + for (unsigned i = 0; i < the_schema.size (); i ++) + if (the_schema [i].rk == getNodeRank ()) + my_node = & (the_schema [i]); + + /* About me */ + char mess [1000]; + + sprintf (mess, "my rank is %d", my_node -> rk); + printDebugMessage (mess); + if (isScheduleNode ()) + printDebugMessage ("I'am a scheduler"); + for (unsigned i = 0; i < my_node -> id_run.size (); i ++) { + sprintf (mess, "I manage the runner %d", my_node -> id_run [i]); + printDebugMessage (mess); + } + if (my_node -> num_workers) { + + sprintf (mess, "I manage %d worker(s)", my_node -> num_workers); + printDebugMessage (mess); + } + + closeXMLDocument (); +} + diff --git a/trunk/paradiseo-peo/src/rmc/mpi/schema.h b/trunk/paradiseo-peo/src/rmc/mpi/schema.h new file mode 100644 index 000000000..71f715cd7 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/schema.h @@ -0,0 +1,54 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "schema.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __schema_h +#define __schema_h + +#include +#include +#include + +#include "../../core/runner.h" + +typedef int RANK_ID; + +struct Node { + + RANK_ID rk; /* Rank */ + std :: string name; /* Host name */ + unsigned num_workers; /* Number of parallel workers */ + int rk_sched; /* rank of the scheduler */ + std :: vector id_run; /* List of runners */ +}; + +extern std :: vector the_schema; + +extern Node * my_node; + +extern void loadSchema (const char * __filename); + +extern RANK_ID getRankOfRunner (RUNNER_ID __key); + +extern bool isScheduleNode (); + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/send.cpp b/trunk/paradiseo-peo/src/rmc/mpi/send.cpp new file mode 100644 index 000000000..7238b42b1 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/send.cpp @@ -0,0 +1,131 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "send.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +#include "tags.h" +#include "comm.h" +#include "worker.h" +#include "scheduler.h" +#include "mess.h" +#include "node.h" +#include "../../core/cooperative.h" +#include "../../core/peo_debug.h" + +#define TO_ALL -1 + +typedef struct { + + Communicable * comm; + int to; + int tag; + +} SEND_REQUEST; + +static std :: queue mess; + +static sem_t sem_send; + +void initSending () { + + sem_init (& sem_send, 0, 1); +} + +void send (Communicable * __comm, int __to, int __tag) { + + SEND_REQUEST req; + req.comm = __comm; + req.to = __to; + req.tag = __tag; + + sem_wait (& sem_send); + mess.push (req); + sem_post (& sem_send); + wakeUpCommunicator (); +} + +void sendToAll (Communicable * __comm, int __tag) { + + send (__comm, TO_ALL, __tag); +} + +void sendMessages () { + + sem_wait (& sem_send); + + while (! mess.empty ()) { + + SEND_REQUEST req = mess.front (); + /* + char b [1000]; + sprintf (b, "traitement send %d\n", req.tag); + printDebugMessage (b); + */ + + Communicable * comm = req.comm; + + initMessage (); + + switch (req.tag) { + + case RUNNER_STOP_TAG: + dynamic_cast (comm) -> packTermination (); + dynamic_cast (comm) -> notifySendingTermination (); + break; + + case COOP_TAG: + dynamic_cast (comm) -> pack (); + dynamic_cast (comm) -> notifySending (); + break; + + case SCHED_REQUEST_TAG: + dynamic_cast (comm) -> packResourceRequest (); + dynamic_cast (comm) -> notifySendingResourceRequest (); + break; + + case TASK_RESULT_TAG: + dynamic_cast (comm) -> packResult (); + dynamic_cast (comm) -> notifySendingResult (); + break; + + case TASK_DONE_TAG: + dynamic_cast (comm) -> packTaskDone (); + dynamic_cast (comm) -> notifySendingTaskDone (); + break; + + default : + break; + + }; + + if (req.to == TO_ALL) + sendMessageToAll (req.tag); + else + sendMessage (req.to, req.tag); + mess.pop (); + } + + sem_post (& sem_send); +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/send.h b/trunk/paradiseo-peo/src/rmc/mpi/send.h new file mode 100644 index 000000000..a68787ae2 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/send.h @@ -0,0 +1,37 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "send.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __send_h +#define __send_h + +#include "../../core/communicable.h" + +extern void initSending (); + +extern void send (Communicable * __comm, int __to, int __tag); + +extern void sendToAll (Communicable * __comm, int __tag); + +extern void sendMessages (); + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/service.cpp b/trunk/paradiseo-peo/src/rmc/mpi/service.cpp new file mode 100644 index 000000000..8fe4d8277 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/service.cpp @@ -0,0 +1,45 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "service.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "../../core/service.h" +#include "../../core/messaging.h" +#include "node.h" +#include "tags.h" +#include "send.h" +#include "scheduler.h" + +void Service :: requestResourceRequest (unsigned __how_many) { + + num_sent_rr = __how_many; + for (unsigned i = 0; i < __how_many; i ++) + send (this, my_node -> rk_sched, SCHED_REQUEST_TAG); +} + +void Service :: packResourceRequest () { + + SCHED_REQUEST req; + req.first = getNodeRank (); + req.second = getKey (); + // printf ("demande de ressource pour %d\n", req.second); + :: pack (req); +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/tags.h b/trunk/paradiseo-peo/src/rmc/mpi/tags.h new file mode 100644 index 000000000..dc977fda5 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/tags.h @@ -0,0 +1,39 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "tags.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __tags_h +#define __tags_h + +#define RUNNER_STOP_TAG 13 + +#define COOP_TAG 14 + +#define SCHED_REQUEST_TAG 16 + +#define SCHED_RESULT_TAG 17 +#define TASK_DATA_TAG 18 + +#define TASK_RESULT_TAG 19 +#define TASK_DONE_TAG 20 + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/worker.cpp b/trunk/paradiseo-peo/src/rmc/mpi/worker.cpp new file mode 100644 index 000000000..4d1b97c16 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/worker.cpp @@ -0,0 +1,109 @@ + +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "worker.cpp" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "tags.h" +#include "send.h" +#include "node.h" +#include "schema.h" +#include "worker.h" +#include "mess.h" +#include "../../core/peo_debug.h" + +static std :: vector key_to_worker (1); /* Vector of registered workers */ + +Worker * getWorker (WORKER_ID __key) { + + return key_to_worker [__key]; +} + +Worker :: Worker () { + + toto = false; + id = key_to_worker.size (); + key_to_worker.push_back (this); +} + +void Worker :: packResult () { + + pack (serv_id); + serv -> packResult (); +} + +void Worker :: unpackData () { + + printDebugMessage ("unpacking the ID. of the service."); + unpack (serv_id); + serv = getService (serv_id); + printDebugMessage ("found the service."); + serv -> unpackData (); + printDebugMessage ("unpacking the data."); + setActive (); +} + +void Worker :: packTaskDone () { + + pack (getNodeRank ()); + pack (id); +} + +void Worker :: notifySendingResult () { + + /* Notifying the scheduler of the termination */ + toto = true; + wakeUp (); +} + +void Worker :: notifySendingTaskDone () { + + setPassive (); +} + +void Worker :: setSource (int __rank) { + + src = __rank; +} + +void Worker :: start () { + + while (true) { + + sleep (); + + if (! atLeastOneActiveRunner ()) + break; + + if (toto) { + send (this, my_node -> rk_sched, TASK_DONE_TAG); + toto = false; + } + else { + + printDebugMessage ("executing the task."); + serv -> execute (); + send (this, src, TASK_RESULT_TAG); + } + } +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/worker.h b/trunk/paradiseo-peo/src/rmc/mpi/worker.h new file mode 100644 index 000000000..000e3b7ae --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/worker.h @@ -0,0 +1,65 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "worker.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __worker_h +#define __worker_h + +#include "../../core/communicable.h" +#include "../../core/reac_thread.h" +#include "../../core/service.h" + +typedef unsigned WORKER_ID; + +class Worker : public Communicable, public ReactiveThread { + +public : + + Worker (); + + void start (); + + void packResult (); + + void unpackData (); + + void packTaskDone (); + + void notifySendingResult (); + + void notifySendingTaskDone (); + + void setSource (int __rank); + +private : + + WORKER_ID id; + SERVICE_ID serv_id; + Service * serv; + int src; + + bool toto; +}; + +extern Worker * getWorker (WORKER_ID __key); + +#endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.cpp b/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.cpp new file mode 100644 index 000000000..f31cb0360 --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.cpp @@ -0,0 +1,90 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "xml_parser.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "xml_parser.h" + +static xmlTextReaderPtr reader; + +void openXMLDocument (const char * __filename) { + + reader = xmlNewTextReaderFilename (__filename); + + if (! reader) { + + fprintf (stderr, "unable to open '%s'.\n", __filename); + exit (1); + } +} + +void closeXMLDocument () { + + xmlFreeTextReader (reader); +} + +std :: string getAttributeValue (const std :: string & __attr) { + + xmlChar * value = xmlTextReaderGetAttribute (reader, (const xmlChar *) __attr.c_str ()); + + std :: string str ((const char *) value); + + xmlFree (value); + + return str; +} + +static bool isSep (const xmlChar * __text) { + + for (unsigned i = 0; i < strlen ((char *) __text); i ++) + if (__text [i] != ' ' && __text [i] != '\t' && __text [i] != '\n') + return false; + return true; +} + +std :: string getNextNode () { + + xmlChar * name, * value; + + do { + xmlTextReaderRead (reader); + name = xmlTextReaderName (reader); + value = xmlTextReaderValue (reader); + // printf ("value = %s\n", value); + } while (! strcmp ((char *) name, "#text") && isSep (value)); + + std :: string str; + + if (strcmp ((char *) name, "#text")) + str.assign ((char *) name); + else + str.assign ((char *) value); + + if (name) + xmlFree (name); + if (value) + xmlFree (value); + + return str; +} + diff --git a/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.h b/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.h new file mode 100644 index 000000000..bdec1937d --- /dev/null +++ b/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.h @@ -0,0 +1,37 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "xml_parser.h" + +// (c) OPAC Team, LIFL, August 2005 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __xml_parser_h +#define __xml_parser_h + +#include + +extern void openXMLDocument (const char * __filename); + +extern void closeXMLDocument (); + +extern std :: string getAttributeValue (const std :: string & __attr); + +extern std :: string getNextNode (); + +#endif