Example #1
0
int main(int argc,char **argv)
{
  //Override the number of threads if using MPI
  HCUBE::NUM_THREADS=1;

  char str[1024];
  initcake(str);
  SgInit();
  GoInit();

  int retval=0;

  CommandLineParser commandLineParser(argc,argv);

  try
  {
    /*
      for(int a=0;a<argc;a++)
      {
      cout << "ARGUMENT: " << argv[a] << endl;
      }
    */

    int  numtasks, rank, rc;

    rc = MPI_Init(&argc,&argv);

    if (rc != MPI_SUCCESS)
    {
      printf ("Error starting MPI program. Terminating.\n");
      MPI_Abort(MPI_COMM_WORLD, rc);
      return 1;
    }

    MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);

    cout << "NUM TASKS: " << numtasks << " RANK: " << rank << endl;

    for (int a=0;a<argc;a++)
    {
      cout << "ARGUMENT: " << argv[a] << endl;
    }

    if(
      commandLineParser.HasSwitch("-I") &&
      commandLineParser.HasSwitch("-O")
      )
    {
      NEAT::Globals::init(commandLineParser.GetSafeArgument("-I",0,"input.dat"));

      if(commandLineParser.HasSwitch("-R"))
      {
        NEAT::Globals::getSingleton()->seedRandom(stringTo<unsigned int>(commandLineParser.GetSafeArgument("-R",0,"0")));
      }

      int experimentType = int(NEAT::Globals::getSingleton()->getParameterValue("ExperimentType")+0.001);

      cout << "Loading Experiment: " << experimentType << endl;

      HCUBE::MPIExperimentRun experimentRun;

      experimentRun.setupExperiment(experimentType,commandLineParser.GetSafeArgument("-O",0,"output.xml"));
      if(rank==0)
      {
        experimentRun.createPopulation();
      }

      cout << "Experiment set up\n";

      runOrContinueExperiment(experimentRun);
    }
    else if(
      commandLineParser.HasSwitch("-C") && 
      commandLineParser.HasSwitch("-O")
      )
    {
      HCUBE::MPIExperimentRun experimentRun;

      string backupFile = commandLineParser.GetArgument("-C",0);
      string outputFile = commandLineParser.GetArgument("-O",0);
			
      //This also calls NEAT::Globals::init(...)
      experimentRun.setupExperimentInProgress(backupFile,outputFile);

      cout << "Experiment set up\n";

      runOrContinueExperiment(experimentRun);
    }
    else
    {
      cout << rank << ") Invalid parameters (count: " << argc << ")!\n";
    }


    MPI_Finalize();

    exitcake();

    GoFini();
    SgFini();
  }
  catch (const std::exception &ex)
  {
    cout << "An exception has occured: " << ex.what() << endl;
  }
  catch (string s)
  {
    cout << "An exception has occured: " << s << endl;
  }
  catch (...)
  {
    cout << "An error has occured!\n";
  }

  return 0;
}