/
Rakefile
60 lines (48 loc) · 1.49 KB
/
Rakefile
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
require 'rake'
require 'rake/testtask'
require File.dirname(__FILE__) + "/boot"
def exec(cmd)
success = system(cmd)
raise "System command execution failed!" unless success
end
def competitor_classes
[
# AlwaysCooperateStrategy,
AlwaysBetrayStrategy,
TitForTatStrategy,
NeverForgive,
Joss,
TitForTwoTats,
# RandomStrategy
]
end
import File.expand_path(File.dirname(__FILE__) + "/lib/tasks/git.rake")
task :default => [:spec, :competition]
task :spec do
exec "spec spec/"
end
task :competition do
competitors = competitor_classes.map{|clazz| clazz.new}
competition = Competition.new(competitors)
result = competition.play!
puts "Champion is #{result.strategies.first}, whose total score is #{result.total(result.strategies.first)}."
result_dir = File.dirname(__FILE__) + "/result"
mkdir_p result_dir
File.open("#{result_dir}/competition_result.csv", "w"){|f| f.write(result.to_s)}
puts "Check #{result_dir} directory for detailed report."
end
task :natual_selection do
natual_selection = NatualSelection.new(competitor_classes, 100)
50.times do |i|
natual_selection.evolve!
puts "======= DONE GENERATION #{i} ======="
puts natual_selection.to_s
end
end
task :profile_natual_selection do
natual_selection = NatualSelection.new(competitor_classes, 100)
# natual_selection = NatualSelection.new(competitor_classes)
puts "======= BEGIN AT #{Time.now} ========"
natual_selection.play!
puts "======= FINISH AT #{Time.now} ========"
end