Skip to content

Commit 4edc08a

Browse files
committed
Drop the emoji section markers from the README
brand/voice.md bans emoji as section markers. Two in-page links pointed at anchors whose trailing dash came from the stripped emoji, so they are repointed. Headings only -- prose, tables and code are untouched.
1 parent a43b01e commit 4edc08a

1 file changed

Lines changed: 17 additions & 17 deletions

File tree

README.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ is trivial to install, embed, teach with, and build on.
3939

4040
</div>
4141

42-
## Features 🌱
42+
## Features
4343

4444
- 🧩 **Hand-written PDDL parser** and grounder covering **STRIPS, full ADL,
4545
derived predicates, numeric fluents, durative actions, trajectory
4646
constraints, preferences, timed initial literals and object fluents** — 20 of
4747
the 21 requirement flags, with the last one refused by name rather than
48-
ignored. ([the full matrix](#pddl-support-))
48+
ignored. ([the full matrix](#pddl-support))
4949
- 🔎 **14 planners**: BFS, DFS, Iterative Deepening, Dijkstra, Greedy Best-First,
5050
A*, Weighted A*, IDA*, Enforced Hill Climbing, hill climbing, beam search,
5151
Iterated Width, branch and bound, and anytime weighted A*.
@@ -55,7 +55,7 @@ is trivial to install, embed, teach with, and build on.
5555
against the number of nodes search expands rather than against `h*`. On
5656
blocksworld this beats `h_ff` by ~4× in expansions and ~15× on the clock, at
5757
instance sizes three times larger than it trained on.
58-
([how, and when it fails](#learned-heuristics-))
58+
([how, and when it fails](#learned-heuristics))
5959
- ⏱️ **Search budgets** on every planner: bound a run by nodes or by seconds and
6060
a truncated result says so, so "we stopped looking" never masquerades as
6161
"no plan exists".
@@ -73,7 +73,7 @@ is trivial to install, embed, teach with, and build on.
7373
simple registries; add your own in a few lines.
7474
-**Zero runtime dependencies** and a comprehensive test suite.
7575

76-
## Install 💾
76+
## Install
7777

7878
Requires Python ≥ 3.10, and nothing else:
7979

@@ -101,7 +101,7 @@ the matplotlib charts; `learn` is only for speed — `jupyddl.learn` trains and
101101
evaluates on the standard library alone, NumPy just makes it one to two orders
102102
of magnitude faster.
103103

104-
## Command line ⚔️
104+
## Command line
105105

106106
```bash
107107
# Solve a single instance
@@ -156,7 +156,7 @@ jupyddl · astar/lmcut · gripper-6 (28 facts, 52 ground actions)
156156
✔ solved · cost 17 · 17 actions · 1.77s
157157
```
158158

159-
## Library usage 📑
159+
## Library usage
160160

161161
```python
162162
from jupyddl import solve, build_task, solve_task, trace_search, validate_plan
@@ -248,7 +248,7 @@ task = build_task("demos/gripper/domain.pddl", "demos/gripper/problem.pddl")
248248
solve_task(task, "gbfs", "hff", observer=StallDetector())
249249
```
250250

251-
## The browser workbench 🌐
251+
## The browser workbench
252252

253253
**[openplan-labs.github.io/PythonPDDL](https://openplan-labs.github.io/PythonPDDL/)**
254254

@@ -295,7 +295,7 @@ python -m http.server -d web 8000 # then open http://localhost:8000
295295
`web/dist` is committed so the page works from a plain clone; CI fails if it
296296
drifts out of step with the sources.
297297

298-
## Generating instances 🎲
298+
## Generating instances
299299

300300
A benchmark needs a difficulty ladder, and hand-writing one is tedious. The
301301
generators are seeded, so a published experiment can be reproduced exactly —
@@ -323,7 +323,7 @@ ladder = [write_instance("gripper", "instances/", size=n, seed=1)
323323
purely random operators are almost always unsolvable, which makes for a useless
324324
benchmark. The test suite grounds and solves everything each generator emits.
325325

326-
## Learned heuristics 🧠
326+
## Learned heuristics
327327

328328
Every solved instance is a labelled trajectory: the cost of a plan's suffix from
329329
any state on it is that state's cost-to-go. `jupyddl learn` turns a corpus of
@@ -377,7 +377,7 @@ jupyddl[learn]` adds NumPy purely for speed. A learned heuristic is **not
377377
admissible** — nothing in the objective bounds it from above — so pair it with
378378
`gbfs`, or `wastar` if you want a bounded-suboptimality knob.
379379

380-
## Soft goals and trajectory constraints 🎯
380+
## Soft goals and trajectory constraints
381381

382382
Preferences say what you would *rather* were true; constraints say what must
383383
hold along the whole trajectory. Both compile away before the search runs.
@@ -408,7 +408,7 @@ and `sometime-before` use monitor facts the planner sets when it can;
408408
effects, because a constraint the planner could satisfy by not looking would not
409409
be a constraint.
410410

411-
## Benchmarking 📈
411+
## Benchmarking
412412

413413
```bash
414414
jupyddl benchmark demos --planners astar,gbfs,ehc,bfs --heuristic hff \
@@ -424,7 +424,7 @@ jupyddl benchmark demos --planners astar,gbfs,ehc,bfs --heuristic hff \
424424

425425
</div>
426426

427-
## Demo instances 🧪
427+
## Demo instances
428428

429429
`demos/` holds thirteen instances chosen to stress different parts of the framework —
430430
and to make the difference between planners obvious:
@@ -477,7 +477,7 @@ plain A*, so its last plan is optimal if the run completes **and** the
477477
heuristic is admissible. `hc`, `beam` and `iw` trade completeness for speed, and `iw` needs
478478
no heuristic at all — it prunes by *novelty* instead.
479479

480-
## PDDL support 🧾
480+
## PDDL support
481481

482482
**20 of the 21 requirement flags are supported.**
483483
6 are modelled natively, 7 are compiled into the core
@@ -530,7 +530,7 @@ found. Fixing that properly needs a mutex-aware temporal scheduler
530530
(POPF-style), not another source-to-source compilation — it is the one gap here
531531
that is a project rather than a patch.
532532

533-
## Architecture 🏗️
533+
## Architecture
534534

535535
```
536536
jupyddl/
@@ -572,7 +572,7 @@ one operator per disjunct. That is why the search only ever sees conjunctive
572572
preconditions, and why a domain full of `or` still runs through the same
573573
best-first engine as plain STRIPS.
574574

575-
## Development 🛠️
575+
## Development
576576

577577
```bash
578578
git submodule update --init # fetch the pddl-examples used by the tests
@@ -593,7 +593,7 @@ python tools/make_promo.py -o promo/jupyddl-promo.mp4 \
593593
Every number in the promo video is measured at render time by running the real
594594
planners — nothing in it is typed in by hand.
595595

596-
## Cite 📰
596+
## Cite
597597

598598
```
599599
@misc{https://doi.org/10.13140/rg.2.2.22418.89282,
@@ -605,7 +605,7 @@ planners — nothing in it is typed in by hand.
605605
}
606606
```
607607

608-
## Maintainers Ⓜ️
608+
## Maintainers
609609

610610
- Erwin Lejeune
611611
- Sampreet Sarkar

0 commit comments

Comments
 (0)