Quantcast
Channel: Planet Sage
Viewing all articles
Browse latest Browse all 414

Sébastien Labbé: Wooden laser-cut Jeandel-Rao tiles

$
0
0

I have been working on Jeandel-Rao tiles lately.

/Files/2018/article2_T0_tiles.svg

Before the conference Model Sets and Aperiodic Order held in Durham UK (Sep 3-7 2018), I thought it would be a good idea to bring some real tiles at the conference. So I first decided of some conventions to represent the above tiles as topologically closed disk basically using the representation of integers in base 1:

/Files/2018/T0_shapes.svg

With these shapes, I created a 33 x 19 patch. With 3cm on each side, the patch takes 99cm x 57cm just within the capacity of the laser cut machine (1m x 60 cm):

/Files/2018/33x19_A_scale3.svg

With the help of David Renault from LaBRI, we went at Coh@bit, the FabLab of Bordeaux University and we laser cut two 3mm thick plywood for a total of 1282 Wang tiles. This is the result:

/Files/2018/laser_cut_8x8.jpg

One may recreate the 33 x 19 tiling as follows (note that I am using Cartesian-like coordinates, so the first list data[0] actually is the first column from bottom to top):

sage:data=[[10,4,6,1,3,3,7,0,9,7,2,6,1,3,8,7,0,9,7],....:[4,5,6,1,8,10,4,0,9,3,8,7,0,9,7,5,0,9,3],....:[3,7,6,1,7,2,5,0,9,8,7,5,0,9,3,7,0,9,10],....:[10,4,6,1,3,8,7,0,9,7,5,6,1,8,10,4,0,9,3],....:[2,5,6,1,8,7,5,0,9,3,7,6,1,7,2,5,0,9,8],....:[8,7,6,1,7,5,6,1,8,10,4,6,1,3,8,7,0,9,7],....:[7,5,6,1,3,7,6,1,7,2,5,6,1,8,7,5,0,9,3],....:[3,7,6,1,10,4,6,1,3,8,7,6,1,7,5,6,1,8,10],....:[10,4,6,1,3,3,7,0,9,7,5,6,1,3,7,6,1,7,2],....:[2,5,6,1,8,10,4,0,9,3,7,6,1,10,4,6,1,3,8],....:[8,7,6,1,7,5,5,0,9,10,4,6,1,3,3,7,0,9,7],....:[7,5,6,1,3,7,6,1,10,4,5,6,1,8,10,4,0,9,3],....:[3,7,6,1,10,4,6,1,3,3,7,6,1,7,2,5,0,9,8],....:[10,4,6,1,3,3,7,0,9,10,4,6,1,3,8,7,0,9,7],....:[4,5,6,1,8,10,4,0,9,3,3,7,0,9,7,5,0,9,3],....:[3,7,6,1,7,2,5,0,9,8,10,4,0,9,3,7,0,9,10],....:[10,4,6,1,3,8,7,0,9,7,5,5,0,9,10,4,0,9,3],....:[2,5,6,1,8,7,5,0,9,3,7,6,1,10,4,5,0,9,8],....:[8,7,6,1,7,5,6,1,8,10,4,6,1,3,3,7,0,9,7],....:[7,5,6,1,3,7,6,1,7,2,5,6,1,8,10,4,0,9,3],....:[3,7,6,1,10,4,6,1,3,8,7,6,1,7,2,5,0,9,8],....:[10,4,6,1,3,3,7,0,9,7,2,6,1,3,8,7,0,9,7],....:[4,5,6,1,8,10,4,0,9,3,8,7,0,9,7,5,0,9,3],....:[3,7,6,1,7,2,5,0,9,8,7,5,0,9,3,7,0,9,10],....:[10,4,6,1,3,8,7,0,9,7,5,6,1,8,10,4,0,9,3],....:[3,3,7,0,9,7,5,0,9,3,7,6,1,7,2,5,0,9,8],....:[8,10,4,0,9,3,7,0,9,10,4,6,1,3,8,7,0,9,7],....:[7,5,5,0,9,10,4,0,9,3,3,7,0,9,7,5,0,9,3],....:[3,7,6,1,10,4,5,0,9,8,10,4,0,9,3,7,0,9,10],....:[10,4,6,1,3,3,7,0,9,7,5,5,0,9,10,4,0,9,3],....:[2,5,6,1,8,10,4,0,9,3,7,6,1,10,4,5,0,9,8],....:[8,7,6,1,7,5,5,0,9,10,4,6,1,3,3,7,0,9,7],....:[7,5,6,1,3,7,6,1,10,4,5,6,1,8,10,4,0,9,3]]

The above patch have been chosen among 1000 other randomly generated as the closest to the assymptotic frequencies of the tiles in Jeandel-Rao tilings (or at least in the minimal subshift that I describe in the preprint):

sage:fromcollectionsimportCountersage:c=Counter(flatten(data))sage:tile_count=[c[i]foriinrange(11)]

The assymptotic frequencies:

sage:phi=golden_ratio.n()sage:Linv=[2*phi+6,2*phi+6,18*phi+10,2*phi+6,8*phi+2,....:5*phi+4,2*phi+6,12/5*phi+14/5,8*phi+2,....:2*phi+6,8*phi+2]sage:perfect_proportions=vector([1/aforainLinv])

Comparison of the number of tiles of each type with the expected frequency:

sage:header_row=['tile id','Assymptotic frequency','Expected nb of copies',....:'Nb copies in the 33x19 patch']sage:columns=[range(11),perfect_proportions,vector(perfect_proportions)*33*19,tile_count]sage:table(columns=columns,header_row=header_row)tileidAssymptoticfrequencyExpectednbofcopiesNbcopiesinthe33x19patch+---------+-----------------------+-----------------------+------------------------------+00.10827118232955067.88603132062806710.10827118232955067.88603132062806520.025559359034047916.02571811434801630.10827118232955067.88603132062807140.066915270681799141.95587471748804250.082711823295502351.86031320628005160.10827118232955067.88603132062806570.14962709397730193.81618792376809580.066915270681799141.95587471748804490.10827118232955067.886031320628067100.066915270681799141.955874717488044

I brought the \(33\times19=641\) tiles at the conference and offered to the first 7 persons to find a \(7\times 7\) tiling the opportunity to keep the 49 tiles they used. 49 is a good number since the frequency of the lowest tile (with id 2) is about 2% which allows to have at least one copy of each tile in a subset of 49 tiles allowing a solution.

A natural question to ask is how many such \(7\times 7\) tilings does there exist? With ticket #25125 that was merged in Sage 8.3 this Spring, it is possible to enumerate and count solutions in parallel with Knuth dancing links algorithm. After the installation of the Sage Optional package slabbe (sage -pip install slabbe), one may compute that there are 152244 solutions.

sage:fromslabbeimportWangTileSetsage:tiles=[(2,4,2,1),(2,2,2,0),(1,1,3,1),(1,2,3,2),(3,1,3,3),....:(0,1,3,1),(0,0,0,1),(3,1,0,2),(0,2,1,2),(1,2,1,4),(3,3,1,2)]sage:T0=WangTileSet(tiles)sage:T0_solver=T0.solver(7,7)sage:%timeT0_solver.number_of_solutions(ncpus=8)CPUtimes:user16ms,sys:82.3ms,total:98.3msWalltime:388ms152244

One may also get the list of all solutions and print one of them:

sage:%timeL=T0_solver.all_solutions();print(len(L))152244CPUtimes:user6.46s,sys:344ms,total:6.8sWalltime:6.82ssage:L[0]Awangtilingofa7x7rectanglesage:L[0].table()# warning: the output is in Cartesian-like coordinates[[1,8,10,4,5,0,9],[1,7,2,5,6,1,8],[1,3,8,7,6,1,7],[0,9,7,5,6,1,3],[0,9,3,7,6,1,8],[1,8,10,4,6,1,7],[1,7,2,2,6,1,3]]

This is the number of distinct sets of 49 tiles which admits a 7x7 solution:

sage:fromcollectionsimportCountersage:defcount_tiles(tiling):....:C=Counter(flatten(tiling.table()))....:returntuple(C.get(a,0)forainrange(11))sage:Lfreq=map(count_tiles,L)sage:Lfreq_count=Counter(Lfreq)sage:len(Lfreq_count)83258

Number of other solutions with the same set of 49 tiles:

sage:Counter(Lfreq_count.values())Counter({1:49076,2:19849,3:6313,4:3664,6:1410,5:1341,7:705,8:293,9:159,14:116,10:104,12:97,18:44,11:26,15:24,13:10,17:8,22:6,32:6,16:3,28:2,19:1,21:1})

How the number of \(k\times k\)-solutions grows for k from 0 to 9:

sage:[T0.solver(k,k).number_of_solutions()forkinrange(10)][0,11,85,444,1723,9172,50638,152244,262019,1641695]

Unfortunately, most of those \(k\times k\)-solutions are not extendable. Indeed the number of \(k\times k\) patches in the language of the minimal aperiodic subshift that I am able to describe and which is a proper subset of Jeandel-Rao tilings seems, according to some heuristic, to be something like:

[1,11,49,108,184,268,367,483]

I do not share my (ugly) code for this computation yet, as I will rather share clean code soon when times come. So among the 152244 about only 483 (0.32%) of them are prolongable into a uniformly recurrent tiling of the plane.


Viewing all articles
Browse latest Browse all 414

Trending Articles