IAtari
Genetic algorithm generating AI capable to play Atari2600 games.
agent.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <vector>
3 #include <boost/serialization/vector.hpp>
4 
5 struct agent
6 {
7  struct parameters
8  {
9  int input_size;
13  int nb_blocks;
14  parameters() = default;
16  int nb_registers, int block_size, int nb_blocks)
20  {}
21  template <typename Archive>
22  void serialize(Archive& ar, const unsigned int)
23  {
24  ar & input_size
25  & output_size
26  & nb_registers
27  & block_size
28  & nb_blocks;
29  }
30  };
31  enum opcode
32  {
47  };
48  using instruction = uint64_t;
49  using reg = double;
51  std::vector<instruction> program;
52  std::vector<reg> registers;
53  agent() = default;
54  agent(const parameters& params);
55  int get_action(const std::vector<unsigned char>& screen);
56  template <typename Archive>
57  void serialize(Archive& ar, const unsigned int)
58  {
59  ar & params
60  & program
61  & registers;
62  }
63  void reset_registers();
64  bool execute_block(const std::vector<unsigned char>& screen, int block);
65  inline void execute_instruction(const std::vector<unsigned char>& screen, int pc);
66  inline double sigmoid(double x) const;
67  inline auto begin_outputs();
68  inline auto end_outputs();
69  std::string reg_to_string(int reg) const;
70  void print_instruction(std::ostream&, instruction ins) const;
71  void print_block(std::ostream&, int block) const;
72 };
73 
74 std::ostream& operator<<(std::ostream&, const agent&);
75 
76 namespace genetic_operators
77 {
78  void initialize(agent&);
79  void mutate(agent&);
80  void crossover(agent&, agent&);
81 }
Definition: agent.hpp:41
Definition: agent.hpp:46
auto end_outputs()
Definition: agent.cpp:114
Definition: agent.hpp:43
parameters(int input_size, int output_size, int nb_registers, int block_size, int nb_blocks)
Definition: agent.hpp:15
void mutate(agent &a)
Definition: agent.cpp:304
void initialize(agent &a)
Definition: agent.cpp:296
double sigmoid(double x) const
Definition: agent.cpp:18
void execute_instruction(const std::vector< unsigned char > &screen, int pc)
Definition: agent.cpp:35
Definition: agent.hpp:7
int input_size
Definition: agent.hpp:9
agent()=default
Definition: agent.hpp:45
int nb_blocks
Definition: agent.hpp:13
Definition: agent.hpp:5
Definition: agent.cpp:244
void print_instruction(std::ostream &, instruction ins) const
Definition: agent.cpp:155
parameters()=default
Definition: agent.hpp:37
Definition: agent.hpp:40
void serialize(Archive &ar, const unsigned int)
Definition: agent.hpp:22
Definition: agent.hpp:35
std::string reg_to_string(int reg) const
Definition: agent.cpp:144
opcode
Definition: agent.hpp:31
int get_action(const std::vector< unsigned char > &screen)
Definition: agent.cpp:119
int block_size
Definition: agent.hpp:12
int output_size
Definition: agent.hpp:10
bool execute_block(const std::vector< unsigned char > &screen, int block)
Definition: agent.cpp:23
Definition: agent.hpp:44
std::ostream & operator<<(std::ostream &, const agent &)
Definition: agent.cpp:234
void serialize(Archive &ar, const unsigned int)
Definition: agent.hpp:57
auto begin_outputs()
Definition: agent.cpp:109
Definition: agent.hpp:39
Definition: agent.hpp:33
Definition: agent.hpp:42
std::vector< reg > registers
Definition: agent.hpp:52
parameters params
Definition: agent.hpp:50
int nb_registers
Definition: agent.hpp:11
Definition: agent.hpp:36
Definition: agent.hpp:38
void reset_registers()
Definition: agent.cpp:13
void crossover(agent &a1, agent &a2)
Definition: agent.cpp:317
void print_block(std::ostream &, int block) const
Definition: agent.cpp:223
Definition: agent.hpp:34
uint64_t instruction
Definition: agent.hpp:48
double reg
Definition: agent.hpp:49
std::vector< instruction > program
Definition: agent.hpp:51