seeding expansion

also: replace energy output with energy output density
This commit is contained in:
2026-03-04 13:21:20 -06:00
parent aa6eb72a74
commit e99a14d087
16 changed files with 1078 additions and 117 deletions

View File

@@ -417,22 +417,25 @@ class Pipeline:
"""Simple heuristic estimation from dependency data."""
raw: dict[str, float] = {m: 0.0 for m in metric_names}
# Extract force output from power source
force_watts = 0.0
# Extract intrinsic properties from entities
power_density = 0.0 # W/kg
energy_density = 0.0 # Wh/kg
mass_kg = 100.0 # default
for entity in combo.entities:
for dep in entity.dependencies:
if dep.key == "force_output_watts" and dep.constraint_type == "provides":
force_watts = max(force_watts, float(dep.value))
if dep.key == "min_mass_kg" and dep.constraint_type == "range_min":
if dep.key == "power_density_w_kg" and dep.constraint_type == "provides":
power_density = max(power_density, float(dep.value))
if dep.key == "energy_density_wh_kg" and dep.constraint_type == "provides":
energy_density = max(energy_density, float(dep.value))
if dep.key == "mass_kg" and dep.constraint_type == "range_min":
mass_kg = max(mass_kg, float(dep.value))
# Rough speed estimate: F=ma -> v proportional to power/mass
if "speed" in raw and mass_kg > 0:
raw["speed"] = min(force_watts / mass_kg * 0.5, 300000)
# Rough speed estimate: higher power density → faster
if "speed" in raw:
raw["speed"] = min(power_density * 0.5, 300000)
if "cost_efficiency" in raw:
raw["cost_efficiency"] = max(0.01, 2.0 - force_watts / 100000)
raw["cost_efficiency"] = max(0.01, 2.0 - power_density / 1000)
if "safety" in raw:
raw["safety"] = 0.5
@@ -441,9 +444,21 @@ class Pipeline:
raw["availability"] = 0.5
if "range_fuel" in raw:
raw["range_fuel"] = min(force_watts * 0.01, 1e10)
raw["range_fuel"] = min(energy_density * 10, 1e10)
if "range_degradation" in raw:
raw["range_degradation"] = 365
if "cargo_capacity" in raw:
raw["cargo_capacity"] = mass_kg * 0.5
if "cargo_capacity_kg" in raw:
raw["cargo_capacity_kg"] = mass_kg * 0.3
if "environmental_impact" in raw:
raw["environmental_impact"] = max(0.0, power_density * 0.2)
if "reliability" in raw:
raw["reliability"] = 0.5
return raw