-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGeneration.py
More file actions
66 lines (45 loc) · 1.62 KB
/
Generation.py
File metadata and controls
66 lines (45 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from Computer import Computer
from InstructionGenerator import Generator
import threading
TIMEOUT = .02
class Generation(object):
STARTING_SIZE = 10
"""A generation of programs"""
def __init__(self, pop_size, inputs=[]):
super(Generation, self).__init__()
self.pop_size = pop_size
self.inputs = inputs
self.program_results = []
self.generate_programs()
self.generation_number = 0
def run_all(self):
for program in self.program_results:
program.run_program()
self.generation_number += 1
def generate_programs(self):
generator = Generator()
self.program_results = [ProgramResult(generator.random_program(self.STARTING_SIZE), self.inputs)
for _ in xrange(self.pop_size)]
class ProgramResult(object):
"""Holds a program and it's output/score"""
def __init__(self, program, inputs):
super(ProgramResult, self).__init__()
self.program = program
self.computer = Computer()
self.computer.load_program(program)
self.output = None
self.memory = None
self.was_killed = False
def run_program(self):
def target():
self.computer.run_program()
self.was_killed = False
thread = threading.Thread(target=target)
thread.start()
thread.join(TIMEOUT)
if thread.is_alive():
self.computer.kill_program()
self.was_killed = True
thread.join()
self.output = self.computer.output_queue
self.memory = self.computer.memory