Giter VIP home page Giter VIP logo

neat's People

Contributors

f3270 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neat's Issues

UTF-8 Start genome files

I think one of the huge drawbacks of the package is the lack of interpretability depending on your system. I had huge problems with compiling the examples, just because the input files creating the start genome were not interpretable by my system. I am running on Ubuntu 18.04.04. I had to rewrite the input files in a UTF-8 Format and modify genome such that it would be able to read them.

Here is the code working if you have UTF-8 files:

Genome::Genome(int id, std::ifstream &iFile) {

	char delimiters[] = " \n";
	//int pause;
	genome_id=id;
	wstring line;

  std::wbuffer_convert<std::codecvt_utf8<wchar_t>> conv(iFile.rdbuf());
  std::wistream wf(&conv);

	getline(wf, line);
	char curword[128];

	//Loop until file is finished, parsing each line
	while (getline(wf, line)) {

		int curwordnum = 0;
		wstring ws_line(line);
		string ws_line_str(ws_line.begin(), ws_line.end());
		const char* char_line =  ws_line_str.c_str();
		int wordcount = NEAT::getUnitCount(char_line, delimiters);

		cout << char_line << endl;

    std::stringstream ss(char_line);
		//strcpy(curword, NEAT::getUnit(curline, curwordnum++, delimiters));
    ss >> curword;
		//Check for end of Genome
		if (strcmp(curword,"genomeend")==0) {
			//strcpy(curword, NEAT::getUnit(curline, curwordnum++, delimiters));
            ss >> curword;
			int idcheck = atoi(curword);
			//iFile>>idcheck;
			if (idcheck!=genome_id) printf("ERROR: id mismatch in genome");
		}

		//Ignore genomestart if it hasn't been gobbled yet
		else if (strcmp(curword,"genomestart")==0) {
			++curwordnum;
			cout<<"genomestart"<<endl;
		}

		//Ignore comments surrounded by - they get printed to screen
		else if (strcmp(curword,"/*")==0) {
			//strcpy(curword, NEAT::getUnit(curline, curwordnum++, delimiters));
            ss >> curword;
			while (strcmp(curword,"*/")!=0) {
				//cout<<curword<<" ";
				//strcpy(curword, NEAT::getUnit(curline, curwordnum++, delimiters));
        ss >> curword;
			}
			//cout<<endl;
		}

		//Read in a trait
		else if (strcmp(curword,"trait")==0) {
			Trait *newtrait;

			char argline[1024];
			//strcpy(argline, NEAT::getUnits(curline, curwordnum, wordcount, delimiters));

			curwordnum = wordcount + 1;
			ss.getline(argline, 1024);
			//Allocate the new trait
			newtrait=new Trait(argline);

			//Add trait to vector of traits
			traits.push_back(newtrait);
		}

		//Read in a node
		else if (strcmp(curword,"node")==0) {
			NNode *newnode;

			char argline[1024];
			//strcpy(argline, NEAT::getUnits(curline, curwordnum, wordcount, delimiters));
			curwordnum = wordcount + 1;
			ss.getline(argline, 1024);
			//Allocate the new node
			newnode=new NNode(argline,traits);

			//Add the node to the list of nodes
			nodes.push_back(newnode);
		}

		//Read in a Gene
		else if (strcmp(curword,"gene")==0) {
			Gene *newgene;

			char argline[1024];
			//strcpy(argline, NEAT::getUnits(curline, curwordnum, wordcount, delimiters));
			curwordnum = wordcount + 1;

      ss.getline(argline, 1024);
      //std::cout << "New gene: " << ss.str() << std::endl;
			//Allocate the new Gene
      newgene=new Gene(argline,traits,nodes);

			//Add the gene to the genome
			genes.push_back(newgene);
		 std::cout<<"Added gene " << newgene << std::endl;
		}
	}
}

warnings

Estimado,

  1. lo compilé con make, me arrojó muchos warnings como se puede observar de la salida por consola:
$ make

mkdir build
g++  -g -Wall -I include -c src/neat.cpp -o build/neat.o
g++  -g -Wall -I include -c src/network.cpp -o build/network.o
g++  -g -Wall -I include -c src/nnode.cpp -o build/nnode.o
g++  -g -Wall -I include -c src/link.cpp -o build/link.o
g++  -g -Wall -I include -c src/trait.cpp -o build/trait.o
g++  -g -Wall -I include -c src/gene.cpp -o build/gene.o
g++  -g -Wall -I include -c src/genome.cpp -o build/genome.o
src/genome.cpp: In constructor ‘NEAT::Genome::Genome(int, int, int, int, int, bool, double)’:
src/genome.cpp:232:6: warning: variable ‘ccount’ set but not used [-Wunused-but-set-variable]
  int ccount;
      ^
src/genome.cpp: In member function ‘bool NEAT::Genome::mutate_add_node(std::vector<NEAT::Innovation*>&, int&, double&)’:
src/genome.cpp:1495:43: warning: comparison between ‘enum NEAT::Innovation::innovtype’ and ‘enum NEAT::innovtype’ [-Wenum-compare]
   else if (((*theinnov)->innovation_type==NEWNODE)&&
                                           ^
src/genome.cpp: In member function ‘bool NEAT::Genome::mutate_add_link(std::vector<NEAT::Innovation*>&, double&, int)’:
src/genome.cpp:1639:27: warning: comparison between ‘enum NEAT::nodetype’ and ‘enum NEAT::nodeplace’ [-Wenum-compare]
      if (((nodep1->type)==OUTPUT)||
                           ^
src/genome.cpp:1640:24: warning: comparison between ‘enum NEAT::nodetype’ and ‘enum NEAT::nodeplace’ [-Wenum-compare]
       ((nodep2->type)==OUTPUT))
                        ^
src/genome.cpp:1705:27: warning: comparison between ‘enum NEAT::nodetype’ and ‘enum NEAT::nodeplace’ [-Wenum-compare]
      if (((nodep1->type)==OUTPUT)||
                           ^
src/genome.cpp:1706:24: warning: comparison between ‘enum NEAT::nodetype’ and ‘enum NEAT::nodeplace’ [-Wenum-compare]
       ((nodep2->type)==OUTPUT))
                        ^
src/genome.cpp:1786:44: warning: comparison between ‘enum NEAT::Innovation::innovtype’ and ‘enum NEAT::innovtype’ [-Wenum-compare]
    else if (((*theinnov)->innovation_type==NEWLINK)&&
                                            ^
src/genome.cpp: In member function ‘void NEAT::Genome::mutate_add_sensor(std::vector<NEAT::Innovation*>&, double&)’:
src/genome.cpp:1844:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (i = 0; i < nodes.size(); i++) {
                             ^
src/genome.cpp:1861:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < genes.size(); j++) {
                                  ^
src/genome.cpp:1869:41: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (outputConnections == outputs.size()) {
                                         ^
src/genome.cpp:1883:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < outputs.size(); i++) {
                                   ^
src/genome.cpp:1887:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (j = 0; j < genes.size(); j++) {
                              ^
src/genome.cpp:1925:45: warning: comparison between ‘enum NEAT::Innovation::innovtype’ and ‘enum NEAT::innovtype’ [-Wenum-compare]
     else if (((*theinnov)->innovation_type==NEWLINK)&&
                                             ^
src/genome.cpp: In member function ‘void NEAT::Genome::add_gene(std::vector<NEAT::Gene*>&, NEAT::Gene*)’:
src/genome.cpp:1960:10: warning: unused variable ‘p1innov’ [-Wunused-variable]
   double p1innov;
          ^
src/genome.cpp: In member function ‘double NEAT::Genome::compatibility(NEAT::Genome*)’:
src/genome.cpp:2940:9: warning: variable ‘max_genome_size’ set but not used [-Wunused-but-set-variable]
  double max_genome_size; //Size of larger Genome
         ^
g++  -g -Wall -I include -c src/innovation.cpp -o build/innovation.o
g++  -g -Wall -I include -c src/organism.cpp -o build/organism.o
g++  -g -Wall -I include -c src/species.cpp -o build/species.o
src/species.cpp:119:20: warning: "/*" within comment [-Wcomment]
  //outFile<<endl<<"/* Species #"<<id<<" : (Size "<<organisms.size()<<") (AF "<<ave_fitness<<") (Age "<<age<<")  *///"<<endl<<endl;
 ^
src/species.cpp: In member function ‘bool NEAT::Species::print_to_file(std::ostream&)’:
src/species.cpp:189:111: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘std::vector<NEAT::Organism*>::size_type {aka long unsigned int}’ [-Wformat=]
  sprintf(tempbuf,"/* Species #%d : (Size %d) (AF %f) (Age %d)  */\n\n", id, organisms.size(), average_est, age);
                                                                                                               ^
src/species.cpp: In member function ‘bool NEAT::Species::reproduce(int, NEAT::Population*, std::vector<NEAT::Species*>&)’:
src/species.cpp:432:6: warning: unused variable ‘pause’ [-Wunused-variable]
  int pause;
      ^
src/species.cpp:451:9: warning: unused variable ‘total_fitness’ [-Wunused-variable]
  double total_fitness=0.0;
         ^
src/species.cpp:452:9: warning: unused variable ‘marble’ [-Wunused-variable]
  double marble;  //The marble will have a number between 0 and total_fitness
         ^
src/species.cpp:453:9: warning: unused variable ‘spin’ [-Wunused-variable]
  double spin;  //0Fitness total while the wheel is spinning
         ^
g++  -g -Wall -I include -c src/population.cpp -o build/population.o
src/population.cpp: In constructor ‘NEAT::Population::Population(std::vector<NEAT::Genome*>, float)’:
src/population.cpp:70:6: warning: unused variable ‘count’ [-Wunused-variable]
  int count;
      ^
src/population.cpp: In constructor ‘NEAT::Population::Population(const char*)’:
src/population.cpp:100:7: warning: unused variable ‘delimiters’ [-Wunused-variable]
  char delimiters[] = " \n";
       ^
src/population.cpp:112:6: warning: variable ‘curwordnum’ set but not used [-Wunused-but-set-variable]
  int curwordnum = 0;
      ^
src/population.cpp: In member function ‘bool NEAT::Population::epoch(int)’:
src/population.cpp:738:10: warning: suggest explicit braces to avoid ambiguous ‘else’ [-Wparentheses]
       if (randfloat()>0.1)
          ^
src/population.cpp:431:6: warning: unused variable ‘pause’ [-Wunused-variable]
  int pause;
      ^
src/population.cpp:449:6: warning: unused variable ‘num_species_target’ [-Wunused-variable]
  int num_species_target=4;
      ^
src/population.cpp:451:9: warning: unused variable ‘compat_mod’ [-Wunused-variable]
  double compat_mod=0.3;  //Modify compat thresh to control speciation
         ^
g++  -g -Wall -I include -c src/experiments.cpp -o build/experiments.o
src/experiments.cpp: In function ‘bool xor_evaluate(NEAT::Organism*)’:
src/experiments.cpp:140:10: warning: variable ‘this_out’ set but not used [-Wunused-but-set-variable]
   double this_out; //The current output
          ^
src/experiments.cpp:145:7: warning: variable ‘numnodes’ set but not used [-Wunused-but-set-variable]
   int numnodes;  /* Used to figure out how many nodes
       ^
src/experiments.cpp: In function ‘NEAT::Population* pole2_test(int, int)’:
src/experiments.cpp:633:30: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
     char *non_markov_starter="pole2startgenes2";
                              ^
src/experiments.cpp:634:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
     char *markov_starter="pole2startgenes1";
                          ^
src/experiments.cpp:717:14: warning: deleting object of polymorphic class type ‘CartPole’ which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
       delete thecart;
              ^
g++  -g -Wall -I include -c src/neatmain.cpp -o build/neatmain.o
src/neatmain.cpp: In function ‘int main(int, char**)’:
src/neatmain.cpp:51:7: warning: unused variable ‘pause’ [-Wunused-variable]
   int pause;
       ^
g++  -g -Wall -I include build/neat.o build/network.o build/nnode.o build/link.o build/trait.o build/gene.o build/genome.o build/innovation.o build/organism.o build/species.o build/population.o build/experiments.o build/neatmain.o -o neat ## removed -c 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.