Each "design" is a tower of stacked unit blocks with a footprint of base width W and height H. Wind blows against the tower's whole silhouette, so the total wind force is a pressure Q acting over the frontal area W·H, applied at half the tower's height — the overturning moment about the downwind edge of the base:
Wind force F = Q · W · H
Overturning moment M_o = F · (H/2)
Resisting moment M_r = m·g · (W/2) (m = ρ·W²·H, self-weight)
Stability margin S = M_r / M_o = (ρ·g·W²) / (Q·H)
S > 1 means the tower's own weight beats the wind's tipping moment — the design stands. The design-loop score also charges a material cost, so bigger is not automatically better:
score = S − cost_weight · (blocks used)
blocks used = W² · H
- Design — the loop proposes a new (W, H) by nudging one of them by ±1 from the current best.
- Build — the tower elevation is redrawn for that candidate, side by side with the best design so far.
- Test — the wind pressure is applied and the overturning/resisting moments are computed.
- Analyze — the score is compared against the current best and logged on the score graph.
- Improve — a hill-climbing rule keeps the candidate only if its score is higher, otherwise it reverts and tries a different nudge next iteration.
Fixed from the source model: treating the wind as a fixed total force (independent of tower size) makes H cancel out of S entirely — a taller tower with the same footprint was numerically no less stable than a short one, which contradicts the whole point of the exercise. Verified with a standalone sweep before shipping: with F fixed, margin(h=3)=margin(h=10)=14.57 for W=3; with F=Q·W·H it becomes 16.19 → 4.86 across the same range, i.e. taller now correctly costs stability, matching real towers, bridge piers and turbine masts.