00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <cassert>
00028 #include <iostream>
00029
00030 #include "eoParetoFitness.h"
00031
00032 using namespace std;
00033
00036 class MinimizingTraits : public eoParetoFitnessTraits
00037 {
00038 public :
00039
00040 static bool maximizing(int) { return false; }
00041 };
00042
00043 template <class F>
00044 void compare(F & _eo1, F & _eo2)
00045 {
00046 if (_eo1.dominates(_eo2))
00047 std::cout << _eo1 << " dominates " << _eo2 << std::endl;
00048 else if (_eo2.dominates(_eo1))
00049 std::cout << _eo2 << " dominates " << _eo1 << std::endl;
00050 else
00051 std::cout << "None of " << _eo1 << " and " << _eo2 << "dominates the other" << std::endl;
00052 return;
00053 }
00054
00055 int main()
00056 {
00057 typedef eoParetoFitness<> MaxFitness;
00058 typedef eoParetoFitness<MinimizingTraits> MinFitness;
00059
00060 typedef eoParetoFitness<eoVariableParetoTraits> VarFitness;
00061
00062 try{
00063
00064 MaxFitness f0;
00065 f0[0] = 0.0;
00066 f0[1] = 1.0;
00067
00068 MaxFitness f1;
00069 f1[0] = 1.0;
00070 f1[1] = 0.0;
00071
00072 MaxFitness f2;
00073 f2[0] = 0.0;
00074 f2[1] = 0.5;
00075
00076
00077
00078 if (!f0.dominates(f2))
00079 {
00080 std::cout << f2 << " not dominated by " << f0;
00081 throw;
00082 }
00083
00084
00085
00086 if (f0.dominates(f1) || f1.dominates(f0))
00087 {
00088 std::cout << f0 << " and " << f1 << " dominate";
00089 throw;
00090 }
00091
00092 if (! (f0 == f0))
00093 {
00094 std::cout << "f0 == f0 failed" << std::endl;
00095 throw;
00096 }
00097
00098
00099 MaxFitness f3 = f0;
00100 f3[0] += 1e-9;
00101
00102
00103 assert(f3 == f0);
00104
00105 MinFitness m0;
00106 MinFitness m1;
00107 MinFitness m2;
00108 MinFitness m3;
00109
00110 m0[0] = 0.0;
00111 m0[1] = 1.0;
00112
00113 m1[0] = 1.0;
00114 m1[1] = 0.0;
00115
00116 m2[0] = 0.0;
00117 m2[1] = 0.5;
00118
00119 m3[0] = 0.5;
00120 m3[1] = 0.5;
00121
00122
00123 assert(m2.dominates(m0));
00124
00125 assert(!m1.dominates(m0));
00126 assert(!m0.dominates(m1));
00127 assert(!m0.dominates(m2));
00128 assert(m2.dominates(m3));
00129 assert(!m3.dominates(m2));
00130 assert(m2.dominates(m3));
00131
00132
00134
00136
00137 std::cout << "On y va" << std::endl;
00138
00139
00140
00141 vector<bool> b(2, true);
00142 b[0]=true;
00143 b[1]=false;
00144 VarFitness::setUp(2, b);
00145 std::cout << "\nMAXimizing on Obj 0 and MINimizing on Obj 1\n";
00146
00147 VarFitness mv0;
00148 VarFitness mv1;
00149 VarFitness mv2;
00150 VarFitness mv3;
00151
00152 mv0[0] = 0.0;
00153 mv0[1] = 1.0;
00154
00155 mv1[0] = 1.0;
00156 mv1[1] = 0.0;
00157
00158 mv2[0] = 0.0;
00159 mv2[1] = 0.5;
00160
00161 mv3[0] = 0.5;
00162 mv3[1] = 0.5;
00163
00164 compare <VarFitness>(mv0,mv1);
00165 compare <VarFitness>(mv0,mv2);
00166 compare <VarFitness>(mv0,mv3);
00167 compare <VarFitness>(mv1,mv2);
00168 compare <VarFitness>(mv1,mv3);
00169 compare <VarFitness>(mv2,mv3);
00170
00171 std::cout << "\nChanging now the min <-> max\n";
00172 b[0]=false;
00173 b[1]=true;
00174 VarFitness::setUp(2, b);
00175 std::cout << "\nMINimizing on Obj 0 and MAXimizing on Obj 1\n";
00176 compare <VarFitness>(mv0,mv1);
00177 compare <VarFitness>(mv0,mv2);
00178 compare <VarFitness>(mv0,mv3);
00179 compare <VarFitness>(mv1,mv2);
00180 compare <VarFitness>(mv1,mv3);
00181 compare <VarFitness>(mv2,mv3);
00182
00183 std::cout << "\nTesting WARNING\n";
00184 b.resize(3);
00185 b[0]=false;
00186 b[1]=true;
00187 b[2]=true;
00188 VarFitness::setUp(3, b);
00189
00190 }
00191 catch(std::exception& e)
00192 {
00193 std::cout << e.what() << std::endl;
00194 }
00195
00196 }