Skip to main content

Damage-Aware Coverage Path Planning

A Python library for damage-aware coverage path planning (DACPP) in rectilinear environments, with a focus on agricultural fields. Produces coverage paths that jointly minimise tile revisits and turns — both of which contribute to soil compaction in agricultural applications.

This library is the reference implementation for the paper "Damage-Aware Coverage Path Planning as a Generalised Travelling Salesperson" (Cutteridge, Frenkel, and Mansouri).


Overview

Classical coverage path planning minimises path length or completion time, treating revisits as an incidental side effect. In applications such as agricultural seeding, however, revisits are actively harmful: each additional pass crushes seedlings and compacts the soil. This library formalises coverage as an optimisation problem that explicitly penalises revisits and turns, and solves it as a Generalised Travelling Salesperson Problem (GTSP).

The solver has three stages:

  1. Setup — the field is decomposed into rectilinear regions (via Fields2Cover), and up to eight boustrophedon sweep patterns are generated for each region.
  2. Ant Colony Optimisation (ACO) — a parallel ACO solver finds a high-quality visiting order over the sweep patterns, formulated as a GTSP.
  3. Simulated Annealing (SA) — a refinement stage with a novel absorption operator, which removes revisits by reassigning shared tiles from connector paths into adjacent regions.

Evaluated on 200 real UK field geometries from the Sentinel-2 dataset, the algorithm achieves an average revisit rate of 4.2% and 33 turns per 100 tiles.


Repository Structure

Directory Contents
field_coverage/ Core library (GTSP construction, ACO, SA, absorption operator)
docs/ Architecture diagrams and flowcharts
results/ Experimental data, CSV outputs, and figures from the paper
data/ GeoJSON field geometries

Note: This repository contains the backend library only. The AuTo-mato web interface used to produce Fig. 7 of the paper is not yet public.


Setup

This Docker image has been tested on ARM CPUs only; results on other architectures may differ.

1. Build the Fields2Cover container

From the root of field_coverage/:

docker build -f decomp/dockerfile -t fields2cover-api:v3 --platform linux/arm64 .
docker run -d -p 8000:8000 --platform linux/arm64 fields2cover-api:v3

2. Install the Python package

Install uv, then:

uv pip install -e .

If field_coverage is not installed automatically:

uv pip install field_coverage

3. Start the backend API

uvicorn coverage_api:app --reload --port 8000

Tests

pytest

Metadata

Release files for field-coverage 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for field-coverage 0.1.1
File Size Uploaded Provenance Actions
field_coverage-0.1.1.tar.gz 57.0 kB Without provenance Details for field_coverage-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for field-coverage 0.1.1
File Interpreter ABI Platform Actions
field_coverage-0.1.1-py3-none-any.whl Python 3 none any Details for field_coverage-0.1.1-py3-none-any.whl

Total release size: 133.9 kB

Release files / field_coverage-0.1.1.tar.gz

Download URL field_coverage-0.1.1.tar.gz
Size 57.0 kB
Tags Source
SHA-256 checksum
How to use checksums
da7201985a99c99ad0d822025db62ce97d24dd78caf87c8c760cabbac534e4de
BLAKE2b-256 checksum
How to use checksums
0b3e2d092581300e58ba54e9c257a6034001efd2cde2ce2fd1811d34dca5f172
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.14

Release files / field_coverage-0.1.1-py3-none-any.whl

Download URL field_coverage-0.1.1-py3-none-any.whl
Size 76.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8d36ff0df360f30890e5ac7b941972ff6b9c0fea574c126bd8b19d3021d3640d
BLAKE2b-256 checksum
How to use checksums
961c978db64b57f52503b6c4b83dbffed761d561a765a28f880f48ad4c9ed9e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.14

Security for field-coverage 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page