From 9191312aac429e745388029ba57a29f015378541 Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Thu, 20 Jun 2013 19:25:15 +0200 Subject: Add envmon code --- envmon/colorgen.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 envmon/colorgen.py (limited to 'envmon/colorgen.py') 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] -- cgit v1.2.1