Practical Length#
\[\begin{split}\text{len}(p,q) = \left\{
\begin{array}{lr}
\min_{i=p-1,\ldots,q-1}\left\{ \text{len}(p-1,i) + \sum^{q-1}_{j=i+1} (L_q - L_j)N_j\right\}, & p>1 \\
\sum^{q-1}_{j=1}(L_q- L_j)N_j ,& p=1
\end{array}
\right.\end{split}\]
\[\begin{split}\text{ref}(p,q) = \left\{
\begin{array}{lr}
\text{arg}\,\min_{i=p-1,\ldots,q-1}\left\{ \text{len}(p-1,i) + \sum^{q-1}_{j=i+1} (L_q - L_j)N_j\right\}, & p>1 \\
\varnothing ,& p=1
\end{array}
\right.\end{split}\]
\[\begin{split}f(x) = \left\{
\begin{array}{lr}
\infty, & x > 0 \\
1 ,& x \leq 0
\end{array}
\right.\end{split}\]
\[\begin{split}\text{len}(p,q) = \left\{
\begin{array}{lr}
\min_{i=p-1,\ldots,q-1}\left\{ \text{len}(p-1,i) + \sum^{q-1}_{j=i+1} (L_q - L_j)N_j f(L_q-\overline{L}_j)\right\}, & p>1 \\
\sum^{q-1}_{j=1}(L_q- L_j)N_j f(L_q-\overline{L}_j) ,& p=1
\end{array}
\right.\end{split}\]
\[\begin{split}\text{ref}(p,q) = \left\{
\begin{array}{lr}
\text{arg}\min_{i=p-1,\ldots,q-1}\left\{ \text{len}(p-1,i) + \sum^{q-1}_{j=i+1} (L_q - L_j)N_j f(L_q-\overline{L}_j)\right\}, & p>1 \\
\varnothing ,& p=1
\end{array}
\right.\end{split}\]
def decrease_col_side(stations: List[Station], cols_sides: List[Tuple[int,int]]):
"""
Decrease the required steel under the columns
stations: list of station, each satation is a Station object and has two fields x and as
cols_sides: list of column sides, each element is a tuple (start, end) stations
"""