Truss layout optimization
Truss layout optimization (after Dorn et al. 1964) provides a method of identifying minimum volume structures for a given design domain and set of loads and boundary conditions, e.g. see the example problem shown in Fig. 2a. This contains only a single point load, but any number of loads can be handled, applied either simultaneously or in separate load-cases.
Here, a rigid-plastic material model is assumed. Many common engineering materials exhibit a plastic response as failure is approached, and, by utilizing this behaviour, greater material savings can be realized. The use of a plastic formulation also obviates the need to include elastic compatibility constraints in the formulation. For single load-case problems a statically determinate layout can be found that will also be optimal when an elastic material is involved. However, for multiple load-case problems the optimal elastic and plastic solutions will diverge, with the volumes computed using the formulation described herein representing lower bounds on the corresponding elastic solutions.
In the truss layout optimization procedure, the design domain is first discretized using a series of nodes that are then connected by potential truss members to form a ‘ground structure’. For a fully general solution, each node should be connected to every other node; however, this becomes computationally challenging when large numbers of nodes are involved. To address this an adaptive ‘member adding’ strategy can be used (Gilbert and Tyas 2003; Pritchard et al. 2005; He et al. 2019b), which is guaranteed to obtain the same solution as would be obtained had all members been connected from the outset.
The iterative member adding strategy begins with a reduced ground structure, such as the one shown in Fig. 2b. Then at each iteration the following optimization problem (after He et al. 2019b) is assembled and solved, based on the current ground structure:
$$ \begin{array}{@{}rcl@{}} \underset{\mathbf{a}, \mathbf{q}^{{(k)}}}{\text{minimize}} & V = \mathbf{l}^{\mathrm{T}} \mathbf{a} \end{array} $$
(1a)
$$ \begin{array}{@{}rcl@{}} \text{subject to} & \mathbf{B q}^{{(k)}} = \mathbf{f}^{{(k)}} \end{array} $$
(1b)
$$ \begin{array}{@{}rcl@{}} & -\sigma^{-}\mathbf{a} \leq \mathbf{q}^{{(k)}} \leq \sigma^{+}\mathbf{a} \end{array} $$
(1c)
$$ \begin{array}{@{}rcl@{}} &\mathbf{a} \geq \mathbf{0}, \end{array} $$
(1d)
where V is the total volume of members, l = [l1, l2, ... , lm]T is a vector of element lengths. a = [a1, a2, ... , am]T is the vector of variables representing cross section areas of each element, B is a matrix of direction cosines, q(k) is a vector of variables representing the axial force in each element in load-case k, and \(f^{(k)} = [f_{1}^{k,x}, f_{1}^{k,y}, f_{2}^{k,x}, ..., f_{n}^{k,y}]^{\mathrm {T}}\) is the vector of externally applied forces. σ+ and σ− are the permitted stresses in tension and compression respectively. Once the problem is solved, solutions for both the primal (1d) and dual problems (see He et al. 2019b for details) are extracted. The element forces and areas obtained from the primal problem provide an interim solution, the minimum volume structure possible using the current ground structure, which can be presented to the user to indicate progress. The solution of the dual problem furnishes the virtual displacements of each node. These can be used to calculate virtual strain values for each potential member, regardless of whether or not this is present in the current ground structure. If the virtual strain of a potential member would violate the dual constraint value, then that potential member is considered as a candidate for admission to the ground structure in the next iteration. Figure 2c shows the current ground structure at the final iteration (in grey), as well as the identified optimal structure (where tensile members are shown in red and compressive members in blue; this convention is used throughout this paper).
Figure 3 shows the layout optimization process, which ends with a filtering and validation stage.
Filtering and validation
Problem (1d) generally has optimal solutions where the majority of the variables a and q are zero, i.e. most elements in the ground structure are not required in the final optimal structure. However, the numerical methods used to solve this optimization problem usually provide solutions where these variables are close to, but not exactly, zero. Thus, in order to use the solutions obtained in the subsequent geometry optimization stage, a filtering and validation step is required.
Unlike the filter algorithm proposed, e.g., by Ramos and Paulino (2016), where elements are removed during the optimization process, thus potentially influencing the form of the optimal solution, here filtering is only utilized after the optimal solution has been found. The resulting filtered solution is obtained by removing elements with an area below a certain filter value (e.g., the grey lines in Fig. 2d show the members that remain after filtering). Then a validation problem is set up and solved to check that the filtered solution is capable of supporting the required loads. If the validation fails, then the process is repeated using a different (lower) filter value. It is convenient to set this filter value relative to \(a_{\max \limits }\), the largest area in the solution; an initial filter value of \(0.01a_{\max \limits }\) is chosen by default. On subsequent attempts this reduces by an order of magnitude each time, to \(0.001a_{\max \limits }\), then \(0.0001a_{\max \limits }\) etc. Thus, relatively simple filtered structures are first tested, and only if these are found to be structurally unviable are structures with fewer filtered members tested.
The validation of the filtered problems involves solving an optimization problem that is similar to problem (1d):
$$ \begin{array}{@{}rcl@{}} \underset{\mathbf{a}, \mathbf{q}^{{(k)}}, \mathbf{f}_{\mathrm{s}}^{{(k)}}, \tilde{\mathbf{f}}_{\mathrm{s}}}{\text{minimize}} && \tilde{V} = \mathbf{l}^{\mathrm{T}} \mathbf{a} + \mu_{\mathrm{s}} \sum\limits_{j=1}^{n} (\tilde{f}_{\mathrm{s},j}^{x} + \tilde{f}_{\mathrm{s},j}^{y}) \end{array} $$
(2a)
$$ \begin{array}{@{}rcl@{}} \text{subject to } &&\mathbf{Bq}^{{(k)}} = \mathbf{f}^{{(k)}} + \mathbf{f}_{\mathrm{s}}^{{(k)}} \end{array} $$
(2b)
$$ \begin{array}{@{}rcl@{}} && -\sigma^{-}\mathbf{a} \leq \mathbf{q}^{{(k)}} \leq \sigma^{+}\mathbf{a} \end{array} $$
(2c)
$$ \begin{array}{@{}rcl@{}} && -\tilde{\mathbf{f}}_{\mathrm{s}} \leq \mathbf{f}_{\mathrm{s}}^{{(k)}} \leq \tilde{\mathbf{f}}_{\mathrm{s}} \end{array} $$
(2d)
$$ \begin{array}{@{}rcl@{}} && \mathbf{a} \geq \mathbf{0}, \end{array} $$
(2e)
where, \(\mathbf {f}_{\mathrm {s}}^{{(k)}} = [f_{\mathrm {s,1}}^{k,x}, f_{\mathrm {s,1}}^{k,y}, f_{\mathrm {s,2}}^{k,x}, ..., f_{\mathrm {s,n}}^{k,y}]^{\mathrm {T}}\) are slack force variables for each node in load-case k, and \(\tilde {\mathbf {f}}_{\mathrm {s}} = [\tilde {f}_{\mathrm {s,1}}^{x}, \tilde {f}_{\mathrm {s,1}}^{y}, \tilde {f}_{\mathrm {s,2}}^{x}, ..., \tilde {f}_{\mathrm {s,n}}^{y}]^{\mathrm {T}}\) are the maximum absolute values of the slack forces across all load-cases, \(\tilde {V}\) is the penalized structural volume, obtained using the sum of slack forces \(\tilde {\mathbf {f}}_{\mathrm {s}}\), and μs is a large multiplier value, taken as 20V0, where V0 is the volume after layout optimization. In a successful validation, the objective value from (2e) will be very close to the objective value from (1d), and the slack forces will not be used. However, if key elements have been removed by the filter, then the slack forces may be the only way constraint (2e) can be satisfied, leading to a substantial increase in the objective function. Alternatively, other load paths may be able to transmit the load previously carried by the removed key elements, but these will by definition generally be sub-optimal, and therefore will also lead to an increase in the objective value. A small tolerance of 1% increase in volume is permitted in this stage. Due to this validation requirement, the filtered structures may still contain some thin, but structurally important, members; Fig. 5a shows an example of such a structure.
Geometry optimization
Layout optimization can be used to identify the globally minimum volume structure comprising joints that lie on the original nodal grid. However, lower volume solutions can usually be obtained if the joints are allowed to migrate to other positions. Thus, a geometry optimization step can be used to improve the layout optimization solution by adding joint positions as optimization variables (see He and Gilbert 2015).
The geometry optimization formulation is very similar to (2e) except that the geometrical coefficients, such as element lengths and direction cosines, are now calculated in the optimization process from new nodal position variables. Thus, objective function (2e) can now be written as:
$$ \underset{\mathbf{a}, \mathbf{q}^{{(k)}}, \mathbf{f}_{\mathrm{s}}^{{(k)}}, \tilde{\mathbf{f}}_{\mathrm{s}}, \mathbf{x}, \mathbf{y}}{\text{minimize}} \tilde{V} = \mathbf{l}^{\mathrm{T}} \mathbf{a} + \mu_{\mathrm{s}} \sum\limits_{j=1}^{n} (\tilde{f}_{\mathrm{s},j}^{x} + \tilde{f}_{\mathrm{s},j}^{y}). $$
(3)
where x = [x1, x2, ... , xn]T and y = [y1, y2, ... , yn]T are vectors containing x and y nodal positions, respectively. Note that the problem is no longer convex, and a globally optimum solution cannot be guaranteed. However, the use of a layout optimization solution as a starting point tends to ensure that high quality solutions can be obtained.
Once the nodes are permitted to move it is important to ensure that the extents of the design domain are respected. For a convex domain, this simply involves adding constraints to ensure that each node does not move outside the domain. However, when concave domains are involved this becomes more complex. Here, the approach described by He et al. (2019a) is used.
As the problem is now non-linear and non-convex, numerical instabilities may be encountered. To counter this, limits are placed on the distance moved by each node. This greatly improves stability, but also necessitates an iterative process so that nodes can gradually migrate towards their optimal location. This iterative process is stopped once the sum of the distances moved by all nodes is deemed sufficiently small.
The resulting structure will often contain elements that intersect, especially in the case of 2D problems. However, in practice any intersection point would usually be viewed as a joint, whose location therefore needs to be optimized. Thus, new nodes are created at intersection points, and the geometry optimization process is performed on the resulting new structure. The overall algorithm for this procedure is shown in Fig. 4.
A further complication is that nodes may migrate towards each other. Thus any nodes that become too close to each other are merged between iterations.
The overall effect of the geometry optimization process is to rationalize the structures obtained via layout optimization, often removing many thin members from the structure, e.g. as is evident in Fig. 5b.
Structural simplification via Heaviside projection
Even if the filtering and geometry optimization procedures detailed in the previous sections are applied, the solutions obtained will often still be quite complex in form. This can make them appear impractical to designers, hampering uptake. Here a simplification method is proposed that allows the total number of members in a given structure to be reduced, thereby reducing overall structural complexity (Fig. 6). In the interests of computational efficiency this is achieved by handling integer member ‘existence’ variables x via a smooth Heaviside projection H(x) (Guest et al. 2004). Here the selected projection function is:
$$ H(x)=\coth(\mu)\tanh(\mu x), $$
(4)
where, μ is a predefined projection factor that determines the accuracy of the approximation (see Fig. 7). Using this Heaviside projection, the ‘existence’ of a given member i can now be expressed by its cross-sectional area ai. Let aref denote a reference member area such that the following is satisfied:
$$ H(a_{i}/a_{\text{ref}}) \approx \left\{ \begin{array}{lc} 0, & \text{if } a_{i} \ll a_{\text{ref}}\\ 1, & \text{otherwise}. \end{array} \right. $$
(5)
Since reducing complexity is likely to lead to higher volume structures, it is convenient to manage the trade-off between complexity and volume via the following optimization problem (after He et al. 2018):
$$ \underset{\mathbf{a}, \mathbf{q}^{{(k)}}, \mathbf{f}_{\mathrm{s}}^{{(k)}}, \tilde{\mathbf{f}}_{\mathrm{s}}, \mathbf{x}, \mathbf{y}}{\text{minimize}} {\varPhi}_{\mathrm{M}} = \sum\limits_{i=1}^{m}H(a_{i}/a_{\text{ref}}) $$
(6a)
$$ \text{subject to} \mathbf{Bq}^{{(k)}} = \mathbf{f}^{{(k)}} + \mathbf{f}_{\mathrm{s}}^{{(k)}} $$
(6b)
$$ -\sigma^{-}\mathbf{a} \leq \mathbf{q}^{{(k)}} \leq \sigma^{+}\mathbf{a} $$
(6c)
$$ -\tilde{\mathbf{f}}_{\mathrm{s}} \leq \mathbf{f}_{\mathrm{s}}^{{(k)}} \leq \tilde{\mathbf{f}}_{\mathrm{s}} $$
(6d)
$$ \tilde{V} \leq (1+\epsilon)V_{\text{ref}} $$
(6e)
$$ \mathbf{a} \geq \mathbf{0}, $$
(6f)
where the optimization objective is to minimize the total number of members ΦM. Also, constraint (6a) defines the acceptable trade-off in structural volume, where 𝜖 is a specified allowable volume increase ratio and Vref is a reference structural volume (taken as the volume prior to the start of the simplification step), and where aref is here taken as \(a_{\max \limits }\).
Problem (6a) is solved using various values of the projection factor μ, progressively increasing this from 2, 5, 10 up to 20. Initially a small value of μ is used, which provides rich gradient information that can be used to minimize the objective function in the optimization; larger values improve the speed of convergence. In each case the goal is to remove members with small cross-sectional areas. The process terminates if no member can be removed or if μ has reached 20 (where the Heaviside projection closely resembles the integer values). Since this is a heuristic process, there is no guarantee that the simplification process will always be successful, and the solutions obtained will generally be only locally optimal. On the other hand, useful solutions can often be obtained in practice, and the speed of the process renders it suitable for use in the interactive web-app described herein; a sample simplified design is shown in Fig. 5c.
The process described is effective at reducing the total number of members in a structure. However, since the volume of the resulting structures need only satisfy the volume increase limit (6a), there is no requirement or expectation that the volume will be a minimum, even among structures with the same layout. Therefore, it is useful to undertake a further geometry optimization step (Section 2.3) after the simplification, which should be preceded by a filtering and validation step (Section 2.2). This does, however, mean that the resulting optimized structure may often have a markedly lower volume than implied by the specified volume increase ratio. This is demonstrated in Figs. 8 and 9, which show how the specified allowable volume increase ratio 𝜖 influences the layout of the generated structures.
Note that although the problem shown in Fig. 8 is symmetrical, several of the simplified solutions are asymmetric. Previous research has demonstrated that the optimal solution may be asymmetric when various practical constraints are considered, such as when discrete bar areas are stipulated (Stolpe 2016), or when limits are placed on the number of joints (Fairclough and Gilbert 2020). Thus, although the simplification method used here does not guarantee that the solutions will be globally optimal, asymmetric solutions are to be expected.
If symmetrical solutions are desired, for aesthetic or other reasons, this may be enforced using additional constraints, as outlined in Fairclough and Gilbert (2020). However, this may then result in solutions with a larger volume and/or a higher level of complexity.