37 using namespace shark;
40 struct PointExtractor{
42 RealVector
const& operator()(T
const& arg)
const{
46 template<
class Solution>
49 RealVector referencePoint(2,11);
52 return hypervolume(PointExtractor(),solution,referencePoint);
56 int main(
int argc,
char ** argv ) {
58 std::size_t frontSize = 10;
59 std::size_t numDimensions = 10;
60 std::size_t numTrials = 10;
61 std::size_t recordingInterval = 20;
62 std::size_t numIterations = 20*recordingInterval;
65 typedef boost::shared_ptr<MultiObjectiveFunction> Function;
66 std::vector<Function > functions;
67 functions.push_back(Function(
new ZDT1(numDimensions)));
68 functions.push_back(Function(
new ZDT2(numDimensions)));
69 functions.push_back(Function(
new ZDT3(numDimensions)));
70 functions.push_back(Function(
new ZDT6(numDimensions)));
72 RealMatrix meanVolumes(functions.size(), numIterations/recordingInterval+1,0.0);
73 for(std::size_t f = 0; f != functions.size(); ++f){
74 for(std::size_t trial = 0; trial != numTrials; ++trial){
76 std::cout<<
"\r" <<functions[f]->name() <<
": "<<trial<<
"/"<<numTrials<<std::flush;
79 mocma.
mu() = frontSize;
80 mocma.
init( *functions[f] );
86 for(std::size_t i = 1; i <= numIterations; ++i){
87 mocma.
step(*functions[f]);
88 if(i % recordingInterval == 0){
94 meanVolumes /= numTrials;
96 std::cout<<
"\r# Iteration ";
97 for(std::size_t f = 0; f != functions.size(); ++f)
98 std::cout<<functions[f]->name()<<
" ";
101 std::cout.precision( 7 );
102 for(std::size_t i = 0; i != meanVolumes.size2();++i){
103 std::cout<< i*recordingInterval<<
" ";
104 for(std::size_t f = 0; f != functions.size(); ++f){
105 std::cout<<meanVolumes(f,i)<<
" ";