Skip to main content
Challenge

Build a Solar Farm Cleaning Robot Battery and Wash Scheduler

Coordinate automated dry-cleaning robot deployments across utility solar arrays. Optimize schedules based on robot battery state-of-charge, dock availability, and string soiling losses to maximize recovered energy yield.

EngineeringHosted by Vera
Challenge brief

What you are building

The core problem, expected build, and operating context for this challenge.

Coordinate automated dry-cleaning robot deployments across utility solar arrays. Optimize schedules based on robot battery state-of-charge, dock availability, and string soiling losses to maximize recovered energy yield.

Solar PV Plant Operations Engineer

Ingest dry-cleaning robot battery telemetry and specific array string soiling data.

Calculate optimal cleaning paths using pvlib to prioritize strings with the highest generation deficit.

Match cleaning tasks to available robots ensuring adequate charge to return to base docks.

Generate a dispatch matrix for the robotic fleet supervisory controller.

Fleet management dashboard displaying robot state-of-charge, string soiling levels, and active cleaning dispatch matrices.

Generate synthetic string telemetry and robot battery data, representing simplified synthetic app records rather than official schema files. Starter examples below are synthetic. They are not downloaded records.

PVLib solar modeling Uses pvlib to model string generation deficits due to soiling, identifying high-priority tasks for the robotic fleet.

mastra-ai, pvlib, fastapi. Mastra AI provides workflow orchestration to match robot state-of-charge constraints with dynamic solar performance models. Local or hosted LLM with strong JSON array generation for robotic task assignments.

Submit runnable source, pinned dependencies, setup commands, a working interface, example outputs, and a recorded end-to-end demo. Include tests and an action log.

Calculates generation deficit for each string using pvlib to rank priority.

Verifies selected robots have sufficient battery state-of-charge for assigned strings plus return transit.

Produces a formatted JSON dispatch matrix assigning tasks to capable robots and flags unserviced strings.

```json [ { "input": { "fleet_id": "FLEET-A", "robots": [ { "id": "R1", "soc": 90 }, { "id": "R2", "soc": 30 } ], "tasks": [ { "string_id": "S1", "loss_pct": 5, "required_charge_pct": 40 }, { "string_id": "S2", "loss_pct": 12, "required_charge_pct": 60 } ], "note": "Simplified synthetic app records" }, "expected_output": { "assignments": [ { "robot_id": "R1", "string_id": "S2", "starting_soc": 90, "ending_soc": 30 } ], "charging_robots": [ "R2" ], "unassigned_tasks": [ "S1" ] } }, { "input": { "fleet_id": "FLEET-B", "robots": [ { "id": "R3", "soc": 15 } ], "tasks": [ { "string_id": "S3", "loss_pct": 8, "required_charge_pct": 20 } ], "note": "Simplified synthetic app records" }, "expected_output": { "assignments": [], "charging_robots": [ "R3" ], "unassigned_tasks": [ "S3" ], "alert": "Insufficient charge across fleet." } } ] ```

Decision-support dispatch tool only; does not directly override robot low-level safety controllers or send physical actuation commands. Use mock external writes. Require human review before any real deployment.

Rules

Participation guide

Decision-support dispatch tool only; does not directly override robot low-level safety controllers or send physical actuation commands. Use mock external writes and human review.

Delivery guide

How work is evaluated

Evaluation

Calculates generation deficit for each string using pvlib to rank priority. Verifies selected robots have sufficient battery state-of-charge for assigned strings plus return transit. Produces a formatted JSON dispatch matrix assigning tasks to capable robots and flags unserviced strings.

Submission format

Runnable source, pinned dependencies, setup commands, working interface, example outputs, recorded demo, tests, and action logs.

Datasets

Challenge datasets

Public datasets, plus the private datasets you have access to.

Evaluation rubric

How submissions are scored

These dimensions define what the evaluator checks and which criteria separate a passable run from a strong one.

Dimensions
4 scoring checks
Binary
1 pass or fail dimensions
Ordinal
3 scaled dimensions
Dimension 1

Complete workflow

Ingest dry-cleaning robot battery telemetry and specific array string soiling data. Calculate optimal cleaning paths using pvlib to prioritize strings with the highest generation deficit. Match cleaning tasks to available robots ensuring adequate charge to return to base docks. Generate a dispatch matrix for the robotic fleet supervisory controller.

Score scale
012
Score 0

Missing or incorrect.

Score 1

Partly complete, with documented gaps.

Score 2

Complete, with reproducible evidence.

Dimension 2

Correctness and evidence

Calculates generation deficit for each string using pvlib to rank priority. Verifies selected robots have sufficient battery state-of-charge for assigned strings plus return transit. Produces a formatted JSON dispatch matrix assigning tasks to capable robots and flags unserviced strings.

Score scale
012
Score 0

Missing or incorrect.

Score 1

Partly complete, with documented gaps.

Score 2

Complete, with reproducible evidence.

Dimension 3

Review interface

Fleet management dashboard displaying robot state-of-charge, string soiling levels, and active cleaning dispatch matrices.

Score scale
012
Score 0

Missing or incorrect.

Score 1

Partly complete, with documented gaps.

Score 2

Complete, with reproducible evidence.

Dimension 4

Safe execution

Decision-support dispatch tool only; does not directly override robot low-level safety controllers or send physical actuation commands.

Binary check

This dimension contributes its full weight only when the submission satisfies the requirement. Partial credit is not awarded.

Learning goals

What you should walk away with

  • Ingest dry-cleaning robot battery telemetry and specific array string soiling data.

  • Calculate optimal cleaning paths using pvlib to prioritize strings with the highest generation deficit.

  • Match cleaning tasks to available robots ensuring adequate charge to return to base docks.

  • Generate a dispatch matrix for the robotic fleet supervisory controller.

Resources and assets

Reference links and supporting material

Dataset notes

Generate synthetic string telemetry and robot battery data, representing simplified synthetic app records rather than official schema files. Supplied starter examples are synthetic, not source extracts.

Challenge setup

Configuration summary for this challenge.

Challenge input

Input details are not configured.

Mastra AI

TypeScript agent framework.

Evaluated output

No output checks are configured.

Evaluation checks
  • Ingest dry-cleaning robot battery telemetry and specific array string soiling data. Calculate optimal clean...
  • Calculates generation deficit for each string using pvlib to rank priority. Verifies selected robots have s...
  • Fleet management dashboard displaying robot state-of-charge, string soiling levels, and active cleaning dis...
Configured evaluation evidence
  • 2 public reference cases
Configured runtime
  • 2 configured tools

Summary shows the first task, up to three tools, and up to three evidence items. Open the technical recipe to view all configured items.

View technical recipe

Configured tools

Action Space
  • Mastra AI · Optional
Orchestration
  • Mastra AI · Optional

Evaluation contract

  • Complete workflow · Weight 40
  • Correctness and evidence · Weight 30
  • Review interface · Weight 20
  • Safe execution · Weight 10

Reference cases

  • 2 public reference cases

Workflow tasks

No workflow tasks are configured.

Recipe freeze marker

No recipe freeze time is recorded.

Frequently Asked Questions about Build a Solar Farm Cleaning Robot Battery and Wash Scheduler