## 3 Bisection Constraint Method for Topology Optimization Considering Multiple-Loading Conditions
### The Bisection Constraint Method  
Consider a structural TO problem under multiple-loading conditions \(j\in N_{L}=\{1,2,\ldots,n_{L}\}\). Here, \(N_{L}\) is the set of loading conditions; and \(n_{L}\) is the number of given loading conditions, \(n_{L}\geq 2\). The essence of the problem is to find the material distribution within a given design domain such that the compliance under each load condition is as small as possible within the limited amount of material allowed (typically, a volume constraint is considered), as vaguely interpreted in Problem (5). According to past approaches [46; 47; 48; 49; 50], the worst load case needs to be identified, and the compliance under which must be minimized. However, the worst load case depends on the design itself, which changes throughout the optimization process. Consequently, evaluating the worst load case should not be conducted only once from the beginning of the optimization process. Accordingly, a new method is proposed in this paper, consisting of nested loops, where each outer loop identifies the worst load case and the compliance associated with it, then a sub-TO problem is set up to minimize the compliance under the worst load case. Meanwhile, the inner iterations within each outer loop solve that sub-TO problem. The proposed method is implemented in a framework consisting of two stages, given in the flowchart in Figure 1.  
For better understanding, the second stage of the proposed framework will be explained first (Stage 2). Stage 2 begins with the identification of the worst load case (with the maximum compliance) at step \(k\) for a definite design variable vector \(\mathbf{x}_{k}\) (Step 4). For this purpose, a finite element analysis (FEA) is performed (in Stage 1 and Step 2), and the displacement vector \(\mathbf{u}_{j}\) under the \(j\)th load case is found by solving the equilibrium equation:  
\[\mathbf{K}\mathbf{u}_{j}=\mathbf{p}_{j}, \tag{9}\]  
where \(\mathbf{K}\) is the global stiffness matrix; and \(\mathbf{p}_{j}\) is the load vector of the \(j\)th load case. After defining all \(\mathbf{u}_{j}\), in Step 3, the system compliance under each loading condition is calculated as follows:  
\[\overline{c_{j}^{k}}=\mathbf{u}_{j}^{T}\mathbf{K}\mathbf{u}_{j}. \tag{10}\]  
In Step 4, a comparison among all individual compliances \(\overline{c_{j}^{k}}\) is made to determine their maximum compliance \(\overline{c_{m_{k}}}\). Here, \(m_{k}\) is the index of the loading condition where the maximum compliance occurs at iteration \(k\), \(m_{k}\in N_{L}\). Hence, the function of the compliance under the \(m_{k}\)th loading condition is chosen as the objective function of the sub-TO problem in this outer loop. In the most general case, the considered loading conditions have a high possibility of being in a trade-off relationship; i.e., a reduction in one compliance must be offset by an increase in one or many other compliances. An attempt to rearrange the material in the domain in order to reduce the cost function associated with the worst loading condition will likely increase the cost functions associated with the remaining loading conditions due to the aforementioned trade-off relationship. Hence, there is a need to let the cost functions under the remaining loading conditions increase to allow for the reduction of compliance under the worst loading condition. At the same time, the cost functions under the remaining loading conditions are not expected to become excessively large. Hence, in the sub-TO problem, the compliance functions under the remaining loading conditions are considered as constraints (Step 5). A set of boundary values for these compliance functions is calculated with respect to the defined maximum compliance, \(\overline{c_{m_{k}}}\), as follows (Step 6):  
\[\overline{c_{cri}^{k}}=\frac{\overline{c_{m_{k}}}+\overline{c_{j}^{k}}}{2},\,j \in N_{L}\backslash\{m_{k}\}, \tag{11}\]  
Figure 1: Flowchart of the framework to implement the bisection constraint method.