⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 这是遗传算法的源代码
💻 CPP
字号:
// -*- c++ -*-////  File:         main.cpp////  Description:  Contains the main function.////  Author:       Fernando Lobo////  Date:         June/1999////  Extended to deal with chi-ary problems by Luis de la Ossa//  GCC 3.4 and 4 series compliance by Kumara Sastry ////  Date:         March/2006#include "utility.hpp"     // utility functions and procedures#include "random.hpp"      // random number generator#include "parameter.hpp"   // parameters for the ECGA#include "ecga.hpp"        // ecga main bucle#include "objfunc.hpp"     // objective function#include "gene.hpp"// ECGA code#include <assert.h>#include <iostream>#include <ctype.h>#include <stdlib.h>double parameter::seed;int    parameter::lchrom;int    parameter::popsize;double parameter::pcross;int    parameter::tournament_size;    int    parameter::stop_criteria;     double parameter::stop_criteria_arg; bool   parameter::learn_MPM;   int    *parameter::ranges; bool   parameter::report_pop;bool   parameter::report_string;bool   parameter::report_fitness;bool   parameter::report_MPM;randomG RANDOM;// return the identifier of the stop criteria. return -1 if not found.int find_stop_criteria( char *s ){  if( strcmp( s, "allele_convergence" ) == 0 ) return ALLELE_CONVERGENCE;  if( strcmp( s, "max_generations" ) == 0 ) return MAX_GENERATIONS;  return -1;}// // read parameters from input file.// void read_parameters( std::ifstream &in ){  const int unset = -1;  int op;  char  s[100] = "";  char  s2[100] = "";  while( strcmp( s, "BEGIN" ) != 0 )  {    in.getline( s, 100 );    std::cout << s << std::endl;  }  in >> s >> parameter::lchrom;  std::cout << s << "   " << parameter::lchrom << std::endl;   errorcheck("Check lchrom.", parameter::lchrom > 0 );    // Creates an array to store the values that can take every gene.  parameter::ranges = new int[parameter::lchrom];  in >> s;  std::cout << s << "  ";  int counter;  for (counter = 0; counter<parameter::lchrom;counter++) {    in >> parameter::ranges[counter];    if (parameter::ranges[counter]==0) {      std::cout << std::endl;      break;    }    std::cout << " " << parameter::ranges[counter];  }  errorcheck("Check that cardinality is defined for each variable", parameter::lchrom == counter );  std::cout << std::endl;	    in >> s >> parameter::seed;  std::cout << s << "   "  << parameter::seed << std::endl;  errorcheck("seed must be in 0..1", parameter::seed > 0 && parameter::seed < 1 );  in >> s >> parameter::popsize;  std::cout << s << "   "  << parameter::popsize << std::endl;  errorcheck("population size must be even.", parameter::popsize % 2 == 0 );  errorcheck("population size must be positive.", parameter::popsize > 0 );  in >> s >> parameter::pcross;  std::cout << s << "   "  << parameter::pcross << std::endl;  errorcheck("pcross must be in 0..1", parameter::pcross >= 0 && parameter::pcross <= 1 );  in >> s >> parameter::tournament_size;  std::cout << s << "   "  << parameter::tournament_size << std::endl;  in >> s >> s2; parameter::learn_MPM        = (strcmp(s2,"on") == 0);  std::cout << s << "   "  << s2 << std::endl;  in >> s >> s2; op = find_stop_criteria( s2 );  std::cout << s << "   "  << s2 << std::endl;  parameter::stop_criteria = op;  errorcheck("stop criteria not available.", op != -1 );  in >> s >> parameter::stop_criteria_arg;  std::cout << s << "   "  << parameter::stop_criteria_arg << std::endl;  in.getline( s, 100 );  in.getline( s, 100 );  in.getline( s, 100 );  in.getline( s, 100 );  in >> s >> s2;   parameter::report_pop = (strcmp(s2,"on") == 0);  std::cout << s << "   "  << s2 << std::endl;  in >> s >> s2;   parameter::report_string = (strcmp(s2,"on") == 0);  std::cout << s << "   "  << s2 << std::endl;  in >> s >> s2;  parameter::report_fitness = (strcmp(s2,"on") == 0);  std::cout << s << "   "  << s2 << std::endl;  in >> s >> s2;  parameter::report_MPM = (strcmp(s2,"on") == 0);  std::cout << s << "   "  << s2 << std::endl;  std::cout << "--------------------------------------------------------------------" << std::endl;} // end of read_parametersint main( int argc, char *argv[] ){  // process command line  if( argc != 3 ) {    std::cout << "Usage: " << argv[0] << " inputfile outputfile" << std::endl;    std::cout << "       Please read the README file." << std::endl;    exit(1);  }    // read parameters from input file  std::ifstream infile( argv[1] );   read_parameters( infile );  infile.close();  // open output file  std::ofstream outfile( argv[2] );    // initilalize random number generator  RANDOM.randomize( parameter::seed );    // initialize objective function  set_objective_function();    // run the ECGA algorithm  ecga ECGA;   ECGA.run( outfile );  std::cout << "ECGA done" << std::endl;  outfile.close();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -