Zero Modes and Classification of Combinatorial Metamaterials
<p>This dataset contains the simulation data of the combinatorial metamaterial as used for the paper 'Machine Learning of Implicit Combinatorial Rules in Mechanical Metamaterials', as published in Physical Review Letters.</p> <p>In this paper, the data is used to classify each <span class="math-tex">\(k \times k\)</span> unit cell design into one of two classes (C or I) based on the scaling (linear or constant) of the number of zero modes <span class="math-tex">\(M_k(n)\)</span> for metamaterials consisting of an <span class="math-tex">\(n\times n\)</span> tiling of the corresponding unit cell. Additionally, a random walk through the design space starting from class C unit cells was performed to characterize the boundary between class C and I in design space. A more detailed description of the contents of the dataset follows below.</p> <p><strong>Modescaling_raw_data.zip</strong></p> <p>This file contains uniformly sampled unit cell designs for metamaterial M2 and <span class="math-tex">\(M_k(n)\)</span> for <span class="math-tex">\(1\leq n\leq 4\)</span>, which was used to classify the unit cell designs for the data set. There is a small subset of designs for <span class="math-tex">\(k=\{3, 4, 5\}\)</span> that do not neatly fall into the class C and I classification, and instead require additional simulation for <span class="math-tex">\(4 \leq n \leq 6\)</span> before either saturating to a constant number of zero modes (class I) or linearly increasing (class C). This file contains the simulation data of size <span class="math-tex">\(3 \leq k \leq 8\)</span> unit cells. The data is organized as follows.</p> <p>Simulation data for <span class="math-tex">\(3 \leq k \leq 5\)</span> and <span class="math-tex">\(1 \leq n \leq 4\)</span> is stored in numpy array format (.npy) and can be readily loaded in Python with the Numpy package using the numpy.load command. These files are named "data_new_rrQR_i_n_M_kxk_fixn4.npy", and contain a [Nsim, 1+k*k+4] sized array, where Nsim is the number of simulated unit cells. Each row corresponds to a unit cell. The columns are organized as follows:</p> <ul> <li>col 0: label number to keep track</li> <li>col 1 - k*k+1: flattened unit cell design, numpy.reshape should bring it back to its original <span class="math-tex">\(k \times k\)</span> form. </li> <li>col k*k+1 - k*k+5: number of zero modes <span class="math-tex">\(M_k(n)\)</span> in ascending order of <span class="math-tex">\(n\)</span>, so: <span class="math-tex">\(\{M_k(1), M_k(2), M_k(3), M_k(4)\}\)</span>.</li> </ul> <p><strong>Note:</strong> the unit cell design uses the numbers <span class="math-tex">\(\{0, 1, 2, 3\}\)</span> to refer to each building block orientation. The building block orientations can be characterized through the orientation of the missing diagonal bar (see Fig. 2 in the paper), which can be Left Up (LU), Left Down (LD), Right Up (RU), or Right Down (RD). The numbers correspond to the building block orientation <span class="math-tex">\(\{0, 1, 2, 3\} = \{\mathrm{LU, RU, RD, LD}\}\)</span>.</p> <p>Simulation data for <span class="math-tex">\(3 \leq k \leq 5\)</span> and <span class="math-tex">\(1 \leq n \leq 6\)</span> for unit cells that cannot be classified as class C or I for <span class="math-tex">\(1 \leq n \leq 4\)</span> is stored in numpy array format (.npy) and can be readily loaded in Python with the Numpy package using the numpy.load command. These files are named "data_new_rrQR_i_n_M_kxk_fixn4_classX_extend.npy", and contain a [Nsim, 1+k*k+6] sized array, where Nsim is the number of simulated unit cells. Each row corresponds to a unit cell. The columns are organized as follows:</p> <ul> <li>col 0: label number to keep track</li> <li>col 1 - k*k+1: flattened unit cell design, numpy.reshape should bring it back to its original <span class="math-tex">\(k \times k\)</span> form. </li> <li>col k*k+1 - k*k+5: number of zero modes <span class="math-tex">\(M_k(n)\)</span> in ascending order of <span class="math-tex">\(n\)</span>, so: <span class="math-tex">\(\{M_k(1), M_k(2), M_k(3), M_k(4), M_k(5), M_k(6)\}\)</span>.</li> </ul> <p>Simulation data for <span class="math-tex">\(6 \leq k \leq 8\)</span> unit cells are stored in numpy array format (.npy) and can be readily loaded in Python with the Numpy package using the numpy.load command. Note that the number of modes is now calculated for <span class="math-tex">\(n_x \times n_y\)</span> metamaterials, where we calculate <span class="math-tex">\((n_x, n_y) = \{(1,1), (2, 2), (3, 2), (4,2), (2, 3), (2, 4)\}\)</span> rather than <span class="math-tex">\(n_x=n_y=n\)</span> to save computation time. These files are named "data_new_rrQR_i_n_Mx_My_n4_kxk(_extended).npy", and contain a [Nsim, 1+k*k+8] sized array, where Nsim is the number of simulated unit cells. Each row corresponds to a unit cell. The columns are organized as follows:</p> <ul> <li>col 0: label number to keep track</li> <li>col 1 - k*k+1: flattened unit cell design, numpy.reshape should bring it back to its original <span class="math-tex">\(k \times k\)</span> form. </li> <li>col k*k+1 - k*k+9: number of zero modes <span class="math-tex">\(M_k(n_x, n_y)\)</span> in order: <span class="math-tex">\(\{M_k(1, 1), M_k(2, 2), M_k(3, 2), M_k(4, 2), M_k(1, 1), M_k(2, 2), M_k(2, 3), M_k(2, 4)\}\)</span>.</li> </ul> <p>Simulation data of metamaterial M1 for <span class="math-tex">\(k_x \times k_y\)</span> metamaterials are stored in compressed numpy array format (.npz) and can be loaded in Python with the Numpy package using the numpy.load command. These files are named "smiley_cube_x_y_<span class="math-tex">\(k_x\)</span>x<span class="math-tex">\(k_y\)</span>.npz", which contain all possible metamaterial designs, and "smiley_cube_uniform_sample_x_y_<span class="math-tex">\(k_x\)</span>x<span class="math-tex">\(k_y\)</span>.npz", which contain uniformly sampled metamaterial designs. The configurations are accessed with the keyword argument 'configs'. The classification is accessed with the keyword argument 'compatible'. The configurations array is of shape [Nsim, <span class="math-tex">\(k_x\)</span>, <span class="math-tex">\(k_y\)</span>], the classification array is of shape [Nsim]. The building blocks in the configuration are denoted by 0 or 1, which correspond to the red/green and white/dashed building blocks respectively. Classification is 0 or 1, which corresponds to I and C respectively.</p> <p><strong>Modescaling_classification_results.zip</strong></p> <p>This file contains the classification, slope, and offset of the scaling of the number of zero modes <span class="math-tex">\(M_k(n)\)</span> for the unit cells of metamaterial M2 in Modescaling_raw_data.zip. The data is organized as follows.</p> <p>The results for <span class="math-tex">\(3 \leq k \leq 5\)</span> based on the <span class="math-tex">\(1 \leq n \leq 4\)</span> mode scaling data is stored in "results_analysis_new_rrQR_i_Scen_slope_offset_M1k_kxk_fixn4.txt". The data can be loaded using ',' as delimiter. Every row corresponds to a unit cell design (see the label number to compare to the earlier data). The columns are organized as follows:</p> <p>col 0: label number to keep track</p> <p>col 1: the class, where 0 corresponds to class I, 1 to class C and 2 to class X (neither class I or C for <span class="math-tex">\(1 \leq n \leq 4\)</span>)</p> <p>col 2: slope from <span class="math-tex">\(n \geq 2\)</span> onward (undefined for class X)</p> <p>col 3: the offset is defined as <span class="math-tex">\(M_k(2) - 2 \cdot \mathrm{slope}\)</span></p> <p>col 4: <span class="math-tex">\(M_k(1)\)</span></p> <p>The results for <span class="math-tex">\(3 \leq k \leq 5\)</span> based on the extended <span class="math-tex">\(1 \leq n \leq 6\)</span> mode scaling data is stored in "results_analysis_new_rrQR_i_Scen_slope_offset_M1k_kxk_fixn4_classC_extend.txt". The data can be loaded using ',' as delimiter. Every row corresponds to a unit cell design (see the label number to compare to the earlier data). The columns are organized as follows:</p> <p>col 0: label number to keep track</p> <p>col 1: the class, where 0 corresponds to class I, 1 to class C and 2 to class X (neither class I or C for <span class="math-tex">\(1 \leq n \leq 6\)</span>)</p> <p>col 2: slope from <span class="math-tex">\(n \geq 2\)</span> onward (undefined for class X)</p> <p>col 3: the offset is defined as <span class="math-tex">\(M_k(2) - 2 \cdot \mathrm{slope}\)</span></p> <p>col 4: <span class="math-tex">\(M_k(1)\)</span></p> <p>The results for <span class="math-tex">\(6 \leq k \leq 8\)</span> based on the <span class="math-tex">\(1 \leq n \leq 4\)</span> mode scaling data is stored in "results_analysis_new_rrQR_i_Scenx_Sceny_slopex_slopey_offsetx_offsety_M1k_kxk(_extended).txt". The data can be loaded using ',' as delimiter. Every row corresponds to a unit cell design (see the label number to compare to the earlier data). The columns are organized as follows:</p> <p>col 0: label number to keep track</p> <p>col 1: the class_x based on <span class="math-tex">\(M_k(n_x, 2)\)</span>, where 0 corresponds to class I, 1 to class C and 2 to class X (neither class I or C for <span class="math-tex">\(1 \leq n_x \leq 4\)</span>)</p> <p>col 2: the class_y based on <span class="math-tex">\(M_k(2, n_y)\)</span>, where 0 corresponds to class I, 1 to class C and 2 to class X (neither class I or C for <span class="math-tex">\(1 \leq n_y \leq 4\)</span>)</p> <p>col 3: slope_x from <span class="math-tex">\(n_x \geq 2\)</span> onward (undefined for class X)</p> <p>col 4: slope_y from <span class="math-tex">\(n_y \geq 2\)</span> onward (undefined for class X)</p> <p>col 5: the offset_x is defined as <span class="math-tex">\(M_k(2, 2) - 2 \cdot \mathrm{slope_x}\)</span></p> <p>col 6: the offset_x is defined as <span class="math-tex">\(M_k(2, 2) - 2 \cdot \mathrm{slope_y}\)</span></p> <p>col 7: <span class="math-tex">\(M_k(1, 1)\)</span></p> <p>Additionally, results including classification for M2.ii can be found in the "results_analysis_unimodal_vs_oligomodal_vs_plurimodal_i_Scen_slope_M_M1k_kxk.txt and "results_analysis_unimodal_vs_oligomodal_vs_plurimodal_i_Scenx_Sceny_slopex_slopey_Mx_My_M1k_kxk.txt" files.</p> <p><strong>Random Walks Data</strong></p> <p>This file contains the random walks for <span class="math-tex">\(3 \leq k \leq 8\)</span> unit cells of metamaterial M2. The random walk starts from a class C unit cell design (classification M2.ii), for each step <span class="math-tex">\(s\)</span> a randomly picked unit cell is changed to a random new orientation for a total of <span class="math-tex">\(s=k^2\)</span> steps. The data is organized as follows.</p> <p>The configurations for each step are stored in the files named "configlist_test_i.npy", where i is a number and corresponds to a different starting unit cell. The stored array has the shape [k*k+1, 2*k+2, 2*k+2]. The first dimension denotes the step <span class="math-tex">\(s\)</span>, where <span class="math-tex">\(s=0\)</span> is the initial configuration. The second and third dimension denote the unit cell configuration in the pixel representation (see paper) padded with a single pixel wide layer using periodic boundary conditions. </p> <p>The class for each configuration are stored in "lmlist_test_i.npy", where i corresponds to the same number as for the configurations in the "configlist_test_i.npy" file. The stored array has the shape [k*k+1], where the index corresponds to the step <span class="math-tex">\(s\)</span> and displays the class for the accompanying unit cell. The stored number corresponds to the class as <span class="math-tex">\(\{0, 1\} = \{\mathrm{I}, \mathrm{C}\}\)</span>. </p>
ShareScore
52/100
Overall dataset sharing score
Score breakdown
These five areas show where the dataset supports — or may limit — practical reuse.
- Stewardship
- 8
- Harmonization
- 8
- Access
- 16
- Reuse readiness
- 8
- Engagement
- 12