Skip to content

Commit

Permalink
build_stratgey
Browse files Browse the repository at this point in the history
  • Loading branch information
ASLeonard committed Oct 10, 2017
1 parent fb8d558 commit ed04475
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 5 deletions.
4 changes: 2 additions & 2 deletions polyominomodel/_polyomino_animator.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def SetTightBounds(ax,data):
plt.axis([min([i[0][0][0] for i in data])-0.25,max([i[0][0][0] for i in data])+1.25,min([i[0][0][1] for i in data])-0.25,max([i[0][0][1] for i in data])+1.25])


def GrowPoly(genotype,tile_labels=True,growing=False,write_it=False,fps_par=1.25):
def GrowPoly(genotype,tile_labels=True,growing=False,build_strategy='random',write_it=False,fps_par=1.25):
assert(len(genotype)%4==0), "Genotype length is invalid, each tile must have 4 faces"
assert(len(genotype)<=40), "Very long genotype, currently not allowed"

Expand All @@ -101,7 +101,7 @@ def init():
pass

temporary_tiles=[]
data=list(PolyominoBuilder(genotype))
data=list(PolyominoBuilder(genotype,build_strategy))
def AnimateBuild(i):
if i and growing:
SetTightBounds(ax,data[:i])
Expand Down
15 changes: 13 additions & 2 deletions polyominomodel/_polyomino_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@ def InteractionMatrix(input_face):

## POLYOMINO BUILDER ##

def PolyominoBuilder(genotype):
def PolyominoBuilder(genotype,build_strategy='random'):
SIZE_LIMIT=len(genotype)**2
POLYOMINO_GRID=defaultdict(tuple)
POSSIBLE_GRID=defaultdict(list)
IMPOSSIBLE_GRID=set()
TILE_TYPES=[genotype[i:i+4] for i in xrange(0, len(genotype), 4)]

if build_strategy=='dfs' or build_strategy=='bfs':
possible_grid_order=[]

def placeTile(tType,position,orientation):
POLYOMINO_GRID[position]=(tType,orientation)
return position,(tType,orientation)
Expand All @@ -41,12 +44,20 @@ def identifyValidNeighbour(position,centerType,centerOrientation,checkPosition,i
for cycNum in xrange(4):
if bindingEdge!=0 and cycleList(tile,cycNum)[oppositeBindingEdgeIndex]==InteractionMatrix(bindingEdge):
POSSIBLE_GRID[checkPosition].append((i,cycNum))
if build_strategy=='dfs' or build_strategy=='bfs':
possible_grid_order.append(checkPosition)

placement=placeTile(0,(0,0),0)
identifyValidNeighbours((0,0))
yield placement,copy(POSSIBLE_GRID)
while len(POSSIBLE_GRID)>0:
newPolyominoPosition,newPolyominoDetails=choice([(position, tileDetail) for position, tileDetails in POSSIBLE_GRID.iteritems() for tileDetail in tileDetails])
if build_strategy=='random':
newPolyominoPosition,newPolyominoDetails=choice([(position, tileDetail) for position, tileDetails in POSSIBLE_GRID.iteritems() for tileDetail in tileDetails])
if build_strategy=='dfs':
newPolyominoPosition,newPolyominoDetails= (possible_grid_order[-1],POSSIBLE_GRID[possible_grid_order.pop()][-1])
if build_strategy=='bfs':
newPolyominoPosition,newPolyominoDetails= (possible_grid_order[0],POSSIBLE_GRID[possible_grid_order.pop(0)][0])

POSSIBLE_GRID.pop(newPolyominoPosition)
placement= placeTile(newPolyominoDetails[0],newPolyominoPosition,newPolyominoDetails[1])
identifyValidNeighbours(newPolyominoPosition)
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
if platform.startswith('darwin'):
from distutils import sysconfig
vars = sysconfig.get_config_vars()
vars['LDSHARED'] = vars['LDSHARED'].replace('-bundle', '-dynamiclib')
vars['LDSHARED'] = vars['LDSHARED'].replace('-bundle', '-dynamiclib') #not sure if this is working


here = os.path.abspath(os.path.dirname(__file__))
Expand Down

0 comments on commit ed04475

Please sign in to comment.