Physics-Engine-in-the-Loop
Vibe Building
A deterministic physics engine, not a language model, decides whether a building design is accepted.
1Nanyang Technological University, Singapore 2Sichuan University, China
Abstract
Automated building design must comply with seismic and wind codes and satisfy structural mechanics constraints, yet most existing agents produce visually plausible models without verification grounded in mechanical analysis and code compliance. We introduce the Vibe Building task and propose PE-Loop , an agent in which a deterministic physics engine is the sole source of evaluation signals, mapping code constraints to a physics process reward, while the language model is confined to proposing discrete revisions (section menu, topology, and lateral system). Designs are verified by held-out seismic and wind time-history checks and a constructability gate. On VB-Bench, 3,577 physics-adjudicated building instances across six code families, PE-Loop achieves the highest verified success rate under three of four backbone LLMs, the highest held-out seismic pass rate under all four, and the highest held-out wind pass rate under three. Replacing the physics verdict with a language-model judge, all else fixed, leaves 58.43% of accepted designs noncompliant. These results suggest that reliable structural design rests less on a stronger LLM proposer than on an adjudicator the proposer cannot influence, a division of labor for agents whose outputs must hold up in the physical world.

The task
An instance pairs an observation with a site configuration. The observation may be a textual brief, a hand-drawn sketch, or a set of site photographs. The design must satisfy the code envelope for that site, and it is carried to a certified optimum rather than to a first feasible guess.
Method
The language model proposes discrete moves and pays nothing for them. The physics engine decides, and every decision costs one evaluation of the budget. The loop terminates only when every strength and serviceability constraint holds.
-
B0–B2 language model
Perception and intent
One vision-language call turns a sketch or an image into a massing. A second call fixes the intent (the lateral system, the governing load, and the strategy) and with it the initial discrete state. Neither call is charged to the evaluation budget.
-
C1 language model
One discrete repair per round
Given only the set of violated constraints, the model picks one action: adjust the section triple, add a core or a shear wall, change the core plan, or change the lateral system. Three rounds, one lever level each.
-
C2 physics engine
The minimal feasible column
With the discrete state fixed, the column side is searched on a 45-value, 50 mm grid by an upper-bound probe, six bisection steps, and a confirmation. This costs at most 9 oracle calls per round, and the first passing side is also the least-material one.
-
C3 physics engine
Material loop, ultra tier only
After a pass, a finite menu along the section triple is enumerated and a candidate is accepted only if it is still feasible and cheaper. The final design is re-measured, and the held-out analyses and the certificate are computed offline.
Results
Swap the backbone, keep the reliability
Because the verdict never depends on the proposer, the held-out pass rate barely moves when the language model behind it changes. A baseline that judges itself inherits the model’s variance instead.
Spread across the four backbones: DeepSeek-V4-Flash Qwen3.8-Flash GLM 5.2 Fast Kimi K3
Where certified success is won
Raw compliance and certified success are not the same ranking. Designs that pass in the loop still fall at the constructability gate and at the held-out dynamic checks, and systems reorder once those gates are applied.
Who holds the verdict
Replace the physics verdict with a language-model judge that sees the brief, the code limits and the design parameters but no simulator output. Everything else is fixed.
| acceptance gate | self-rep. PASS % | verified PASS % | false-pos. % | wasted NFE % | Jaccard | wall s |
|---|---|---|---|---|---|---|
| Margin oracle (ours) | 77.78 | 77.78 | 0.00 | 0.00 | 1.00 | 110.8 |
| LLM judge (same LLM) | 49.44 | 20.56 | 58.43 | 44.41 | 0.31 | 238.4 |
| LLM judge (stronger, disjoint) | 40.00 | 17.22 | 56.94 | 45.19 | 0.29 | 342.8 |
Table 5. The margin oracle claims exactly what it delivers. The language-model judge claims 49.44% and delivers 20.56%. The oracle’s two zeros are zero by construction, not for want of data: its gate is the physics check itself, so what it reports and what verification confirms are the same quantity, leaving no false acceptance and no evaluation spent on a misdirected repair.
Constructability costs raw compliance and pays certified success
With the constructability projection, every statically compliant design satisfies the detailing clause by construction, so the detailing gap closes to zero. Raw PASS drops by 29.74 pp and certified success rises by 9.74 pp.
What the language model actually buys
On the 59-instance reference set that pure search already solves, PE-Loop ties LLM-free search on feasibility at 98.31% with no discordant instances, so the language model buys no feasibility. What it buys is budget (55.86% NFE@pass against 97.78–100.00%) and held-out generalization (72.41% wind against 18.97–31.03%). The price is material: 5.66% more concrete than pure search.
VB-Bench
Every code limit in the knowledge base is traceable to the clause it comes from.
GB EC8 ASCE 7 BSL IS NZS
One building, four stages
The same massing carried through the whole chain: the finished render, the Rhino massing being built, the OpenSeesPy frame the physics engine judges, and the Blender turntable. Every column is a real artefact of the run, not an illustration.
















What the designs are checked against
Verification runs against held-out record libraries, not against the loads the design was tuned on: forty-four far-field ground motions and sixteen ten-minute wind series, eight recorded in the field and eight synthesised to match the Kaimal and Davenport targets.
BibTeX
Preprint on arXiv. Replace with the proceedings entry after the decision.
@article{jiang2026vibebuilding,
title = {Vibe Building},
author = {Jiang, Yongqing and Luo, Haoran and Wang, Jianze and
Zhou, Xin and Dai, Kaoshan and Shen, Zhiqi},
journal = {arXiv preprint arXiv:2610.08156},
year = {2026},
doi = {10.48550/arXiv.2610.08156}
}