add speed as a derived metric, fix aerodynamic drag gap it exposed, expand urban_commuting
target_velocity was only ever a platform-declared input used to size the actuator -- an achieved-speed OUTPUT never existed anywhere, even though trip time clearly matters for a domain like urban commuting. Added "speed" as a genuine derived metric: achieved steady-state cruise speed computed from the build's own power_density and the medium's resistance, the same way power_density/range_fuel/cost_efficiency are already outputs of a build rather than inputs to it. That immediately surfaced a known, previously-deferred gap: the resistance model was mass-proportional only (rolling resistance), with no velocity-squared aerodynamic drag term, so inverting power/resistance for speed had no ceiling at all -- light vehicles were "achieving" thousands of m/s. Added DRAG_POWER_COEFF_BY_MEDIUM (ground only, a car-like reference cross-section) and a closed-form cubic solve (_solve_achievable_speed_mps, via Cardano's formula, no iteration) for the achieved speed where propulsive power balances resistance + drag. Reused the same effective (drag-inclusive) resistance for range_fuel and cost_efficiency's operating-cost term, since they're the same physical quantity (energy spent per meter) evaluated at the build's actual speed. This also closes the range-overestimation bug flagged much earlier against combo #876 (a real e-bike): range dropped from ~1,032km to ~53km, right in the ~50-80km realistic e-bike range that was the original target. Air and water media are unchanged (air's L/D-based cruise model doesn't have this problem; water hull drag needs its own treatment, not a car's frontal area -- left as a known remaining gap). Also added cargo_capacity_kg to urban_commuting (whether a commute vehicle can carry groceries/passengers/gear matters as much as the metrics already scored there) and renormalized weights across the now five metrics. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -741,9 +741,16 @@ URBAN_COMMUTING = Domain(
|
||||
# this project hasn't done -- not scored anywhere for now rather than
|
||||
# pretend a quick formula or an equally uninformed LLM guess settles it.
|
||||
# Weights renormalized to sum to 1.0 across the remaining metrics.
|
||||
MetricBound("power_density", weight=0.4167, norm_min=1, norm_max=2000, unit="W/kg"),
|
||||
MetricBound("cost_efficiency", weight=0.4167, norm_min=1e-5, norm_max=2e-3, unit="$/m", lower_is_better=True),
|
||||
MetricBound("range_fuel", weight=0.1666, norm_min=5000, norm_max=500000, unit="m"),
|
||||
# speed and cargo_capacity_kg added -- a commute's actual travel
|
||||
# time and whether the vehicle can carry groceries/passengers/gear
|
||||
# both matter as much as raw power_density did on their own; speed
|
||||
# is a genuine build OUTPUT (see _raw_physics_from_masses), not a
|
||||
# platform-declared constant.
|
||||
MetricBound("power_density", weight=0.25, norm_min=1, norm_max=2000, unit="W/kg"),
|
||||
MetricBound("cost_efficiency", weight=0.25, norm_min=1e-5, norm_max=2e-3, unit="$/m", lower_is_better=True),
|
||||
MetricBound("speed", weight=0.25, norm_min=2, norm_max=30, unit="m/s"),
|
||||
MetricBound("range_fuel", weight=0.10, norm_min=5000, norm_max=500000, unit="m"),
|
||||
MetricBound("cargo_capacity_kg", weight=0.15, norm_min=1, norm_max=500, unit="kg"),
|
||||
],
|
||||
constraints=[DomainConstraint("medium", ["ground", "air"])],
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user