Commit a53c482a authored by Taddeüs Kroes's avatar Taddeüs Kroes

Tweak strategy parameters

parent 9fe8ccd5
...@@ -13,11 +13,13 @@ MIN_BASIC_GROUP_SIZE = 4 ...@@ -13,11 +13,13 @@ MIN_BASIC_GROUP_SIZE = 4
MIN_BOMB_GROUP_SIZE = 2 MIN_BOMB_GROUP_SIZE = 2
FIND_GROUPS_DEPTH = 3 FIND_GROUPS_DEPTH = 3
FRAG_DEPTH = 3 FRAG_DEPTH = 3
DEFRAG_PRIO = 3
COLSIZE_PRIO = 5 COLSIZE_PRIO = 5
COLSIZE_PANIC = 7 COLSIZE_PANIC = 7
COLSIZE_MAX = 8 COLSIZE_MAX = 8
BOMB_POINTS = 2 BOMB_POINTS = 1
MIN_ROWS = 2 MIN_ROWS = 2
MAX_SPEED_ROWS = 3
class State: class State:
...@@ -58,6 +60,9 @@ class State: ...@@ -58,6 +60,9 @@ class State:
for col in range(COLUMNS): for col in range(COLUMNS):
yield self.nrows() - self.colskip(col) yield self.nrows() - self.colskip(col)
def colsize_panic(self):
return int(max(self.colsizes()) >= COLSIZE_PANIC)
def empty_column_score(self): def empty_column_score(self):
skip = 0 skip = 0
for i, block in enumerate(self.blocks): for i, block in enumerate(self.blocks):
...@@ -75,18 +80,23 @@ class State: ...@@ -75,18 +80,23 @@ class State:
return score return score
def score(self, points, moves, prev): def score(self, points, moves, prev):
frag = self.fragmentation()
colsize_score = self.empty_column_score()
#return -points, frag + colsize_score, len(moves)
frag += colsize_score
prev_colsize = max(prev.colsizes()) prev_colsize = max(prev.colsizes())
points = self.score_points()
if prev_colsize >= COLSIZE_PANIC: if prev_colsize >= COLSIZE_PANIC:
return colsize_score, len(moves), -points, frag colsize = self.empty_column_score()
#frag = self.fragmentation()
return colsize, len(moves), -points #, frag
elif prev_colsize >= DEFRAG_PRIO:
colsize = self.empty_column_score()
frag = self.fragmentation()
panic = self.colsize_panic()
return -points, panic, frag, colsize, len(moves)
elif prev_colsize >= COLSIZE_PRIO: elif prev_colsize >= COLSIZE_PRIO:
return -points, colsize_score, frag, len(moves) colsize = self.empty_column_score()
return -points, colsize, len(moves)
else: else:
return -points, frag, colsize_score, len(moves) return -points, len(moves)
def score_moves(self): def score_moves(self):
for moves in self.gen_moves(): for moves in self.gen_moves():
...@@ -165,7 +175,6 @@ class State: ...@@ -165,7 +175,6 @@ class State:
if moves and max(self.colsizes()) < COLSIZE_MAX: if moves and max(self.colsizes()) < COLSIZE_MAX:
assert max(s.colsizes()) <= COLSIZE_MAX assert max(s.colsizes()) <= COLSIZE_MAX
points += s.score_points()
return points, s return points, s
def find_groups(self, depth=FIND_GROUPS_DEPTH, minsize=2): def find_groups(self, depth=FIND_GROUPS_DEPTH, minsize=2):
...@@ -233,31 +242,31 @@ class State: ...@@ -233,31 +242,31 @@ class State:
for i, j in combinations(color, 2)) for i, j in combinations(color, 2))
def score_points(self, multiplier=1): def score_points(self, multiplier=1):
remove = [] #remove = []
points = 0 points = 0
for block, group in self.find_groups(): for block, group in self.find_groups():
if is_basic(block) and len(group) >= MIN_BASIC_GROUP_SIZE: if is_basic(block) and len(group) >= MIN_BASIC_GROUP_SIZE:
remove.extend(group) #remove.extend(group)
points += len(group) * multiplier points += len(group) * multiplier
elif is_bomb(block) and len(group) >= MIN_BOMB_GROUP_SIZE: elif is_bomb(block) and len(group) >= MIN_BOMB_GROUP_SIZE:
points += BOMB_POINTS points += BOMB_POINTS
remove.extend(group) #remove.extend(group)
for i, other in enumerate(self.blocks): #for i, other in enumerate(self.blocks):
if other == bomb_to_basic(block): # if other == bomb_to_basic(block):
remove.append(i) # remove.append(i)
remove.sort() #remove.sort()
prev = None #prev = None
for i in remove: #for i in remove:
if i != prev: # if i != prev:
while self.blocks[i] != NOBLOCK: # while self.blocks[i] != NOBLOCK:
self.blocks[i] = self.blocks[i - COLUMNS] # self.blocks[i] = self.blocks[i - COLUMNS]
i -= COLUMNS # i -= COLUMNS
prev = i # prev = i
if points: #if points:
points += self.score_points(min(2, multiplier * 2)) # points += self.score_points(min(2, multiplier * 2))
return points return points
def has_explosion(self): def has_explosion(self):
...@@ -299,7 +308,7 @@ class State: ...@@ -299,7 +308,7 @@ class State:
return () return ()
score, moves = min(self.score_moves()) score, moves = min(self.score_moves())
if not moves: if not moves and max(self.colsizes()) <= MAX_SPEED_ROWS:
return (SPEED,) return (SPEED,)
return moves return moves
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment