Method of moving asymptotes (MMA) is one of the most popular optimization algorithms for topology optimization. The standard definition of topology optimization is:
\text { Minimize } & c(\mathbf{x})=\sum_{e=1}^{N_{e}}\left(x_{e}\right)^{p}\left\{\mathbf{u}_{e}\right\}^{\mathrm{T}}\left[\mathbf{k}_{e}\right]\left\{\mathbf{u}_{e}\right\} \\
\text { subject to } & \frac{V(\mathbf{x})}{f \times V_{0}}-1=0 \\
& {[\mathbf{K}]\{\mathbf{U}\}=\{\mathbf{F}\}} \\
& \mathbf{x}_{\min } \leq \mathbf{x} \leq \mathbf{x}_{\max }
\end{array}$$
whereas the standard definition of `MMA` is:
$$\begin{array}{ll}
\text { Minimize } & f_0(x) + a_0 \times z + \sum( c_i \times y_i + 0.5 \times d_i \times (y_i)^2 ) \\
\text { subject to } & f_i(x) - a_i \times z - y_i <= 0, i = 1,...,m \\
& z >= 0, y_i >= 0, i = 1,...,m \\
& x^{min}_j \leq x_j \leq x^{max}_j, j = 1,...,N_e
\end{array}$$
## The problem
The algorithm of `MMA` is designed with inquality constraint ($$\leq$$) but the porblem of topology optimization is defined with an equality constriant. We want the volume of the design domain to achieve a target value ($$\text{vol frac}\times \text{initial vol}$$) and not go below than that.
## The solution
What we want is:
$$\text{current volume} = \text{target volume} \implies \frac{\text{current volume} }{ \text{target volume}}-1=0$$
To implement the above equality constraint with `MMA` we have to apply two constraints:
$$+\frac{\text{current volume} }{ \text{target volume}+0.01}-1 \leq 0 \implies \text{current volume} \leq \text{target volume}+0.01 $$
$$-\frac{\text{current volume} }{ \text{target volume} - 0.01}+1 \leq 0 \implies \text{target volume} - 0.01 \leq \text{current volume}$$
With the above two constraints applied we can force `MMA` to give us the design volume equal to the target volume.
$$\text{target volume} - 0.01 \leq \text{current volume}\leq \text{target volume}+0.01$$
# References
- [Github repo with implementation](https://github.com/iitrabhi/topopt2d_MMA)