CarlAlbertCode's picture
Submission 006: official scenario interface and causal degradation model
dfa8acb
Raw History Blame
1.86 kB
from __future__ import annotations
import os
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent / "src"))
import joblib
import pandas as pd
from batteryswap_public.utils import iterate_scenarios, load_dataset
from batteryswapai.competition_features import scenario_history_snapshot
def main() -> None:
dataset_path = Path(os.environ.get("BATTERYSWAP_DATASET_PATH", "/tmp/data"))
artifact_path = Path(
os.environ.get("BATTERYSWAP_PLANNER_PATH", "submission_artifacts/planner.joblib")
)
splits = os.environ.get("BATTERYSWAP_SPLITS", "public,private").split(",")
output_path = Path(os.environ.get("BATTERYSWAP_SUBMISSION_PATH", "submission.csv"))
planner = joblib.load(artifact_path)
plans = []
for split in splits:
locations, timeseries, hidden_eol_times, scenarios = load_dataset(dataset_path / split)
for scenario, locs, visible_history, _ in iterate_scenarios(
locations,
timeseries,
hidden_eol_times,
scenarios,
):
snapshot = scenario_history_snapshot(
visible_history,
locs,
scenario["name"],
scenario["start_time"],
)
plan = planner.plan_snapshot(
snapshot,
locs,
scenario["travel_costs"],
scenario["settings"],
scenario["start_time"],
)
plan["split"] = split
plan["scenario"] = scenario["name"]
plans.append(plan)
submission = pd.concat(plans, ignore_index=True)
submission.to_csv(output_path, index=False)
if not output_path.exists():
raise RuntimeError(f"Submission was not created: {output_path}")
if __name__ == "__main__":
main()