Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Abalone - A shape-annealing optimisation tool for perforated buckling plates

Abalone is a plug-in for Grasshopper used to optimise the geometry of perforations in simply-supported thin plates subject to buckling under uniform compression. According to user-defined constraints, the buckling efficiency is optimised using shape annealing, a rule-based optimisation procedure which implements stochasticity. A pool of candidate designs is generated by changing the random seed and cooling function; the best result is a good indication of the global optimum. A mesh can be generated from this result to verify the predicted buckling efficiency using finite element analysis. An overview video of the plug-in can be found here .

General Information

Abalone is Grasshopper plug-in operating in Rhinoceros 3D by McNeel. It can be used to optimise the arrangement of rectangular perforations in simply-supported thin plates subject to buckling under uniform compression, such as the webs of rack sections. The plug-in was developed by Dr. Ioannis Mirtsopoulos (ETH Zurich, Switzerland – developer of Libra, a Grasshopper plug-in for rule-based design space exploration of truss structures), and Elenor Naraidoo (as part of her PhD at the University of Oxford). A tutorial video can be found here.

alt text

Fig. 1: All Abalone components.

Installation

Preferred operating system: Windows

Version: Rhinoceros 8

  1. Run the PackageManager command.
  2. Look for Abalone.
  3. Click install.
  4. Restart Rhino to load the plugin.

Tutorials

Tutorials will be uploaded in due course. In the meantime, this video provides a good introduction to the various components.

Concept and Theory

The optimisation of perforated plates subject to buckling typically requires computationally intensive parametric finite element (FE) studies. Shape annealing is a heuristic optimisation technique, where design variables are geometric shape parameters. This rule-based technique is a robust alternative to numerical optimisation, capable of finding near-optimal solutions without great computational effort. Based on simulated annealing, this method is intuitive, and results are interpretable. This greatly appeals to structural engineering, where optimisation can be deemed risky for its black-box nature.

In Abalone, an eligible rule is selected, and used to modify the design state $d_i$. The efficiency $E_i$ at state $d_i$ is compared to the efficiency $E_{i+1}$ at the resulting state $d_{i+1}$; if $E_{i+1} < E_i$, then the resulting design state is more feasible (for objective minimisation) and is accepted. However, if $E_{i+1}≥E_i$, then the resulting design state may only be accepted according to a probability given in terms of the cooling function $p(E_{i+1})$. If this probability $p(E_{i+1}) > r$ (where $r$ is a pseudo-random number between 0 and 1), then the resulting state is accepted, despite it being less efficient than the previous state. Otherwise, the design state $d_{i+1}$ is rejected, and a new eligible rule is selected.

$$ p(E_{i+1}) = \exp \bigg(\frac{E_{i+1} - E_i}{T}\bigg) > r $$

Implementation

In order of their implementation, each of Abalone’s 6 components are briefly discussed. Abalone works well with Pterodactyl for graph visualisation.

1. Construct

alt text

Fig. 2: The Construct component.

The user inputs the dimensions of the plate (e.g. the dimensions of a rack section web):

  • $X$: Length (mm)
  • $Y$: Width (mm)
  • $t$: Thickness (mm)

Please note that Abalone was developed for thin plates, i.e. those where $Y / t>75$.

The user inputs the material properties:

  • $E$: Young’s Modulus (MPa)
  • $\nu$: Poisson’s Ratio

Abalone finds the most optimal arrangement of rectangular perforations defined by a height $h$ (mm), and length $l$ (mm). The user must specify the aspect ratio $l/h$ of these perforations, which will be maintained throughout optimisation. However, note that the size of these perforations may shrink or grow (i.e. $h$ or $l$ may change, while the ratio $l/h$ remains the same). The user inputs:

  • $h_0$: The initial hole height (mm)
  • $l_0$: The initial hole length (mm)
  • $l/h$: The hole aspect ratio

Finally, the user inputs information about the initial number of columns ($n_{c,0}$) in the plate, and the initial spacing of these columns ($s_{x,0}$). Note that these values will change as Abalone optimises the perforation geometry.

The user may optionally input the initial number of rows ($n_{r,0}$), and row spacing ($s_{y,0}$). These are 1 and 0 respectively by default.

  • $n_{c,o}$: Initial number of columns
  • $s_{x,0}$: Initial column spacing (mm)
  • $n_{r,0}$: Initial number of rows
  • $s_{y,0}$: Initial row spacing (mm)

alt text

Fig. 3: The variables used in the components.

2. Constraints

alt text

Fig. 4: The Constraints component.

When Abalone optimises the geometry and arrangement of perforations within the plate, it must not exceed limits imposed by the user:

  • $A_{min}$: Minimum Hole Area ($mm^2$)
  • $h_{min}$: Minimum Hole Height (mm)
  • $s_{x,min}$: Minimum X-Spacing
  • $s_{x,max}$: Maximum X-Spacing
  • $S_{xo}$: X-Margin
  • $s_{y,min}$: Minimum Y-Spacing
  • $s_{y,max}$: Maximum Y-Spacing
  • $S_{yo}$: Y-Margin

The margin restricts how close to either edge the perforations may reach. It is recommended to set $S_{xo}=Y$ (the plate width), which has been found to improve performance. If there is no minimum, set equal to 0. If there is no maximum, set $s_{x,max}=X$ and $s_{y,max}=Y$.

3. Optimise

alt text

Fig. 5: The Optimise component.

This is where shape annealing optimisation takes place. The user defines a list of rules that can be selected; Column ($C$), Row ($R$), Grow ($G$) and Shrink ($S$). The order of this list doesn’t matter, and any of the 15 combinations of these rules can be considered.

  • $C$: The addition of perforations in the $X$-direction (i.e. an additional `column’ of perforations)
  • $R$: The addition of perforations in the $Y$-direction (i.e. an additional `row’ of perforations)
  • $G$: An increase to the hole length by 10% (i.e. the perforation(s) `grows’)
  • $S$: A reduction to the hole length by 10% (i.e. the perforation(s) `shrinks’)

The cooling function can be (1) Linear, (2) Exponential, (3) Logarithmic, (4) Reciprocal or (5) Quadratic. These functions require the initial temperature ($T_0$), and alpha ($\alpha$), which define the cooling rate $T(i)$ in terms of the iteration number i:

  1. Linear

$$T(i) = \max(T_0 - \alpha \cdot i, 0)$$

  1. Exponential

$$T(i) = T_0(\alpha^i)$$

  1. Logarithmic

$$T(i) = \frac{T_0}{\ln(i + \alpha)}$$

  1. Reciprocal

$$T(i) = \frac{T_0}{1 + \alpha \cdot i}$$

  1. Quadratic

$$T(i) = \frac{T_0}{1 + \alpha \cdot i^2}$$

Examples of these cooling functions are shown below. In these examples, $T_0=1$ and $\alpha=0.5$. The probability of accepting a design state such that $E_{i+1}=0.9 \cdot E_i$ is plotted in addition to the Temperature on the $y$-axis. To understand how these parameters control the probability of acceptance of a less efficient design state, the user should see the tutorial. For a new user, it is recommended to employ exponential cooling with $T_0=1$ and $\alpha≈0.5$.

alt text

Fig. 6: Examples of different cooling functions.

Finally, the user must select the efficiency mode, i.e. how the objective function is defined. This is given as:

$$ E(I) = \lambda \cdot \frac{N_{i,h}}{N_0} \cdot \frac{A_0}{A_0 - A} $$

Where $N_{i,h}$ is the elastic buckling capacity at design state $d_i$ and $N_0$ is the elastic buckling capacity of the unperforated plate. The gross plate area is given by $A_0$, and the perforated area is $A$.

By default, $\lambda=1$. However, the user can select to favour either more columns ($n_m = n_c$) or more rows ($n_m = n_r$), by selecting EfficiencyA or EfficiencyB:

$$ \lambda = \frac{1}{1 + e^{k - n_m}} $$

And where $k \in (1,5)$ is an integer (3 is recommended). As this is a heuristic optimisation procedure, the user should change the random seed at least 30 times to create a pool of possible solutions, recording the seed with the best output. A more experienced user will also explore how $\alpha$, $T_0$ and $T(i)$ affect the output.

4. Undo

alt text

Fig. 7: The Undo component.

The user can examine the state of the output at every step with the Undo component. This takes the final optimised geometry and `steps back’ the desired number of steps. Then, the result can be fed into the Deconstruct component…

5. Deconstruct

alt text

Fig. 8: The Deconstruct component.

An optimised geometry (be this the final result from the Optimise component, or a back-stepped result from the Undo component) can be `taken apart’ with the Deconstruct component.

This allows the user to record the geometry, efficiency, capacity, and rules selected at the chosen design state.

6. Mesh

alt text

Fig. 9: The Mesh component.

The geometry output from the Optimise component, or the Undo component (at the desired step) is input to the Mesh component so that the geometry can be `baked' into the Rhino3D canvas. The user can select either a brep or a mesh (controlled by the $U$-Count and $V$-count inputs).

Known Issues

Abalone is particularly accurate for perforations with aspect ratios $l / h \leq 2$. The elastic buckling capacity $N_{i,h}$ predicted using Abalone can be up to 35% unconservative for plates with one row of large perforations, but less than 10% unconservative for plates with two rows of small rows of perforations. Therefore, Abalone should be restricted to optimise plates with multiple rows of small-medium perforations (hole height not exceeding 35% of the plate width), or with one row of perforations of aspect ratios less than two.

Repeated use of shape annealing for perforation optimisation has determined a tendency for one row of tall perforations, particularly for $l / h \leq 1$. To optimise a rack section web, the user must choose a non-default efficiency function in the optimise component. When a non-default efficiency function is selected such that $n_m=n_c$, a study found that the optimiser did not increase the perforation dimensions beyond $h_{min}$ and $l_{min}$ (i.e. the minimum dimension imposed by the Constraints component). This suggests that a more efficient perforated plate is one with minimal perforation area, and the user should pay attention to the Constraints they impose.

These observations are the findings of the paper entitled Shape-Annealing Optimisation of Perforations in Rack Sections Subject to Buckling, due to be published soon. This research makes reference to two papers by Elenor Naraidoo on approximating $N_{i,h}$ without numerical procedure (i.e. in absence of FE analysis). These approximations are employed by Abalone. Note that this paper uses a feed-forwarad network to classify the different buckling modes of plates with tall perforations ($l_y/b \geq 0.6$), whereas Abalone uses an SVM classifier.

Version History

See the GitHub link

Related Publications

Under Review

  1. E. Naraidoo, I. Mirtsopoulos, and B. Rossi. “Shape Annealing Optimisation of Perforations in Rack Sections Subject to Buckling”.

  2. E. Naraidoo and B. Rossi. “The Prediction and Classification of Local Buckling for Plates with Tall Perforations.

Published

  1. E. Naraidoo and B. Rossi. “Local buckling load of a perforated plate- A computational study”. In: Thin-Walled Structures 215, Part A (Oct. 2025). url:http://dx.doi.org/10.1016/j.tws.2025.113445.

  2. E. Naraidoo and B. Rossi. “An experimental, numerical and analytical study of local buckling in perforated plates”. In: Thin-Walled Structures 219 (Feb. 2026), p. 114269. url:http://dx.doi.org/10.1016/j.tws.2025.114269

About

Public repo for Abalone Grasshopper plug-in

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors