summaryrefslogtreecommitdiff
path: root/envmon/colorgen.py
diff options
context:
space:
mode:
authorChristian Franke <nobody@nowhere.ws>2013-06-20 19:25:15 +0200
committerChristian Franke <nobody@nowhere.ws>2013-06-20 19:25:31 +0200
commit9191312aac429e745388029ba57a29f015378541 (patch)
tree43fbbf740d0e2a0a231accb2db8e5f9df3af6c8c /envmon/colorgen.py
parent0ab0cbbda438fd30f24273f1db99d76746108a75 (diff)
Add envmon code
Diffstat (limited to 'envmon/colorgen.py')
-rw-r--r--envmon/colorgen.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/envmon/colorgen.py b/envmon/colorgen.py
new file mode 100644
index 0000000..0d0e973
--- /dev/null
+++ b/envmon/colorgen.py
@@ -0,0 +1,51 @@
+import colorsys
+import random
+
+class ColorGen():
+ def __init__(self, seed=0):
+ self.random = random.Random()
+ self.random.seed(seed)
+ self.color_list = [(1.0,1.0,1.0)]
+
+ def rate(self, color):
+ distances = []
+ for other_color in self.color_list:
+ distances.append(self.distance(color, other_color))
+ return self.get_score(distances)
+
+ def get_score(self, distances):
+ return min(distances)
+
+ def distance(self, a, b):
+ return ((a[0]-b[0])**2 + (a[1]-b[1])**2 + (a[2]-b[2])**2) ** 0.5
+
+ def mutate(self, candidate):
+ rv = [0,0,0]
+ for i in range(0,2):
+ rv[i] = candidate[i] + self.random.uniform(-0.1,0.1)
+ if rv[i] < 0:
+ rv[i] = 0.0
+ if rv[i] > 1:
+ rv[i] = 1.0
+ return tuple(rv)
+
+ def get_next(self):
+ candidates = []
+ for i in range(0, 50): # Create 50 candidates
+ candidates.append((
+ self.random.uniform(0,1),
+ self.random.uniform(0,1),
+ self.random.uniform(0,1)
+ ))
+
+ for r in range(0, 40): # Do 40 Rounds
+ for c in list(candidates):
+ for i in range(0,5): # Create 5 decendants of each candidate
+ candidates.append(self.mutate(c))
+ # Keep the best ten candidates
+ candidates.sort(key=lambda candidate:-self.rate(candidate))
+ candidates = candidates[:10]
+
+ # And the winner is:
+ self.color_list.append(candidates[0])
+ return candidates[0]