Ver Fonte

Add heuristic column height to fragmentation score

Taddeus Kroes há 5 anos atrás
pai
commit
5efb10b4e5
1 ficheiros alterados com 3 adições e 1 exclusões
  1. 3 1
      strategy.py

+ 3 - 1
strategy.py

@@ -201,6 +201,7 @@ class State:
         """
         """
         Minimize the sum of dist(i,j) between all blocks i,j of the same color.
         Minimize the sum of dist(i,j) between all blocks i,j of the same color.
         Magnify vertical distances to avoid column stacking.
         Magnify vertical distances to avoid column stacking.
+        Add the vertical components of i and j to prioritize lower columns.
         """
         """
         def dist(i, j):
         def dist(i, j):
             yi, xi = divmod(i, COLUMNS)
             yi, xi = divmod(i, COLUMNS)
@@ -211,7 +212,8 @@ class State:
             if self.groups[i] == self.groups[j]:
             if self.groups[i] == self.groups[j]:
                 return abs(yj - yi)
                 return abs(yj - yi)
 
 
-            return abs(xj - xi) + abs(yj - yi) * 2 - 1
+            return abs(xj - xi) + abs(yj - yi) * 2 - 1 + \
+                   (self.nrows - yi) + (self.nrows - yj)
 
 
         colors = {}
         colors = {}
         for i, block in enumerate(self.blocks):
         for i, block in enumerate(self.blocks):