-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGP_Pop_Gen
More file actions
38 lines (32 loc) · 771 Bytes
/
GP_Pop_Gen
File metadata and controls
38 lines (32 loc) · 771 Bytes
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
(defn pd
[num denom]
(if (= denom 0)
0
(quot num denom)))
(defn select-terminal
[]
(let [random (rand-int 2)]
(if (zero? random)
(rand-nth (concat (list(rand 11)) (list(* -1 (rand 11)))))
'x)))
(defn select-fun
[]
(rand-nth '( + - * pd)))
(defn generate-prog
[depth]
(if (zero? depth)
(select-terminal)
(list (select-fun)
(generate-prog (dec depth))
(generate-prog (dec depth)))))
(defn generate-pop
[pop-size]
(take pop-size
(repeatedly #(generate-prog (rand-int 4)))))
(defn eval-fitness
[prog]
(let [prog-fn (make-program-into-fn prog)]
(reduce + (map (fn [[x y]]
(Math/abs
(- (prog-fn x) y)))
theoretical-value))))