File size: 4,479 Bytes
bcdf135
 
74f5423
bcdf135
74f5423
 
 
 
bcdf135
 
 
 
74f5423
 
1f63fd2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bcdf135
 
 
 
 
 
 
1f63fd2
 
 
 
bcdf135
1f63fd2
bcdf135
1f63fd2
 
 
 
 
 
 
 
 
bcdf135
1f63fd2
 
 
 
bcdf135
1f63fd2
 
 
 
 
 
 
 
 
 
 
 
 
 
bcdf135
 
 
1f63fd2
bcdf135
 
 
 
 
1f63fd2
bcdf135
 
 
 
1f63fd2
 
 
 
 
 
 
 
 
bcdf135
1f63fd2
 
2a30a67
 
 
 
 
 
 
 
 
 
 
74f5423
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
---
license: mit
pipeline_tag: reinforcement-learning
tags:
- operations-research
- vehicle-routing
- reinforcement-learning
- combinatorial-optimization
---

# TTP-D solver weights

Paper: [Drive, Pack, Fly: The Travelling Thief Problem with Drone](https://huggingface.co/papers/2608.16435)

Trained policy checkpoints for the study *Fly, Pack, Drive: the Travelling Thief
Problem with Drone*.

A capacitated truck and a single-package drone operate from a common depot on a
collection route. The truck's velocity decreases affinely with its accumulated
load, so an early pickup penalises every subsequent arc. The drone launches from
a node at which the truck is present, retrieves one item at an outlying
customer, and rejoins the truck at a later rendezvous node; whichever vehicle
arrives first waits, while the rental clock continues to run. The objective is
to maximise collected profit net of a rental cost proportional to the makespan.

These checkpoints are the learned construction policies: an encoder–decoder
model that embeds the instance once and emits a composite action at each node
the truck reaches, trained offline with Proximal Policy Optimisation under a
POMO group baseline.

Code: <https://github.com/corbit-lab/ttpd>. Benchmark instances, result tables,
and behaviour-cloning datasets are in the companion dataset repository
[`Murjani/ttpd-benchmarks`](https://huggingface.co/datasets/Murjani/ttpd-benchmarks).

## Layout

```
<variant>/<model>/<family>/n<N>/best.pt
```

**Variant** is `a280` (fixed drone endurance) or `ttd300` (endurance-conditioned).
**Model** is `gat` (attention encoder), `mlp` (the encoder ablation), or `lisa`
(behaviour cloning). **Family** denotes the distribution the policy was trained
on, which determines its applicability:

| Family | Training distribution | Intended use |
|---|---|---|
| `benchmark-tuned/` | The five benchmark instances of that size | The reported headline results |
| `sampled/` | Randomly sampled a280 subsets | Generalisation; warm start for the above |
| `specialists/` | Early small-N runs | The N ≤ 20 rows, using dedicated small models |

The `benchmark-tuned` policies warm-start from `sampled/n20` of the same model
family, as training from scratch does not converge within the budget at the
larger sizes. Within a run, `best.pt` is the deliverable, selected by held-out
beam evaluation; `last.pt` supports resumption; and `best_milp.pt` is selected
by MILP gap rather than evaluation return.

Behaviour-cloned policies are stored at
`<variant>/lisa/behaviour_cloning/n<N>.pt`, with
`a280/lisa/behaviour_cloning_initial/` and `a280/lisa/gat-n50/` retained for
provenance.

## Deliverable checkpoint per model and size

| Model and size | Checkpoint |
|---|---|
| a280 GAT, N = 5, 10 | `a280/gat/specialists/n5.pt`, `n10.pt` |
| a280 GAT, N = 15, 20 | `a280/gat/sampled/n<N>/best.pt` |
| a280 GAT, N = 30–100 | `a280/gat/benchmark-tuned/n<N>/best.pt` |
| a280 MLP, N = 20 | `a280/mlp/sampled/n20/best.pt` |
| a280 MLP, remaining sizes | `a280/mlp/benchmark-tuned/n<N>/best.pt` |
| ttd300 GAT | `ttd300/gat/benchmark-tuned/n<N>/best.pt` |
| LISA | `<variant>/lisa/behaviour_cloning/n<N>.pt` |

The `benchmark-tuned` family also carries the smaller sizes so that a
directory-based checkpoint argument resolves uniformly.

## Loading

Checkpoints are `torch.save` payloads keyed under `"policy"`:

```python
import torch
from huggingface_hub import hf_hub_download

path = hf_hub_download("Murjani/ttpd-weights", "a280/gat/benchmark-tuned/n30/best.pt")
payload = torch.load(path, map_location="cpu", weights_only=False)
policy.load_state_dict(payload["policy"])
```

The repository code resolves these paths automatically through
`ttpd.hub.ensure_local`, which returns an existing local file unchanged and
downloads otherwise, so a machine that already holds the tree performs no
network access.

`manifest.json` records, for every file, the path from which it was published
together with its SHA-256 digest.

## Citation

Please cite the accompanying paper. Reported results, including the comparison
against the exact solver and the metaheuristics, are given there.

```bibtex
@inproceedings{murjani2026ttpd,
      title={Drive, Pack, Fly: The Travelling Thief Problem with Drone}, 
      author={Murjani, Kabir and Sobhanan, Abhay},
      year={2026},
      eprint={2608.16435},
      archivePrefix={arXiv},
      primaryClass={cs.AI},
      url={https://arxiv.org/abs/2608.16435}, 
}
```