Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue1040 #1

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGES.md
Expand Up @@ -11,6 +11,20 @@ after the corresponding tracker issues.

## Changes since the last release

- option parser: We implemented a new way of defining features and
parsing them from the command line. The new parser now supports
defining variables for features (heuristics and landmark graphs so
far) within the option string. For example
`let(h, lmcut(), astar(h))`.
This change to the parser was an important stepping stone towards
solving a more general problem about how components interact.
Details of the new parser are described in a blog article. While
working on this, we also improved the existing documentation of enum
values.
<https://www.fast-downward.org/ForDevelopers/Blog/TheNewOptionParser>
<https://issues.fast-downward.org/issue1073>
<https://issues.fast-downward.org/issue1040>

- landmarks: Refactor the computation of preferred operators in the
`lmcount` heuristic. The change affects configurations based on
LAMA that use preferred operators. While the semantics of the code did
Expand Down
7 changes: 0 additions & 7 deletions README.md
Expand Up @@ -94,13 +94,6 @@ branches are Malte Helmert, Gabi Röger and Silvia Richter.

## License

The following directory is not part of Fast Downward as covered by
this license:

- ./src/search/ext

For the rest, the following license applies:

```
Fast Downward is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Expand Down
98 changes: 48 additions & 50 deletions driver/aliases.py
Expand Up @@ -7,14 +7,14 @@

ALIASES = {}


ALIASES["seq-sat-fd-autotune-1"] = [
"--evaluator", "hff=ff(transform=adapt_costs(one))",
"--evaluator", "hcea=cea()",
"--evaluator", "hcg=cg(transform=adapt_costs(plusone))",
"--evaluator", "hgc=goalcount()",
"--evaluator", "hAdd=add()",
"--search", """iterated([
"--search",
"let(hff, ff(transform=adapt_costs(one)),"
"let(hcea, cea(),"
"let(hcg, cg(transform=adapt_costs(plusone)),"
"let(hgc, goalcount(),"
"let(hAdd, add(),"
"""iterated([
lazy(alt([single(sum([g(),weight(hff,10)])),
single(sum([g(),weight(hff,10)]),pref_only=true)],
boost=2000),
Expand Down Expand Up @@ -49,15 +49,16 @@
tiebreaking([sum([g(),weight(hgc,10)]),hgc],pref_only=true)],
boost=500),
preferred=[hcea,hgc],reopen_closed=true,cost_type=normal)
],repeat_last=true,continue_on_fail=true)"""]
],repeat_last=true,continue_on_fail=true))))))"""]

ALIASES["seq-sat-fd-autotune-2"] = [
"--evaluator", "hcea=cea(transform=adapt_costs(plusone))",
"--evaluator", "hcg=cg(transform=adapt_costs(one))",
"--evaluator", "hgc=goalcount(transform=adapt_costs(plusone))",
"--evaluator", "hff=ff()",
"--search", """iterated([
ehc(hcea,preferred=[hcea],preferred_usage=0,cost_type=normal),
"--search",
"let(hcea, cea(transform=adapt_costs(plusone)),"
"let(hcg, cg(transform=adapt_costs(one)),"
"let(hgc, goalcount(transform=adapt_costs(plusone)),"
"let(hff, ff(),"
"""iterated([
ehc(hcea,preferred=[hcea],preferred_usage=prune_by_preferred,cost_type=normal),
lazy(alt([single(sum([weight(g(),2),weight(hff,3)])),
single(sum([weight(g(),2),weight(hff,3)]),pref_only=true),
single(sum([weight(g(),2),weight(hcg,3)])),
Expand Down Expand Up @@ -88,38 +89,36 @@
single(sum([g(),weight(hgc,2)]),pref_only=true)],
boost=1000),
preferred=[hcea,hgc],reopen_closed=true,cost_type=one)
],repeat_last=true,continue_on_fail=true)"""]
],repeat_last=true,continue_on_fail=true)))))"""]

def _get_lama(**kwargs):
def _get_lama(pref):
return [
"--search",
"--if-unit-cost",
"--evaluator",
"hlm=lmcount(lm_reasonable_orders_hps(lm_rhw()),pref={pref})".format(**kwargs),
"--evaluator", "hff=ff()",
"--search", """iterated([
lazy_greedy([hff,hlm],preferred=[hff,hlm]),
lazy_wastar([hff,hlm],preferred=[hff,hlm],w=5),
lazy_wastar([hff,hlm],preferred=[hff,hlm],w=3),
lazy_wastar([hff,hlm],preferred=[hff,hlm],w=2),
lazy_wastar([hff,hlm],preferred=[hff,hlm],w=1)
],repeat_last=true,continue_on_fail=true)""",
f"let(hlm, lmcount(lm_reasonable_orders_hps(lm_rhw()),pref={pref}),"
"let(hff, ff(),"
"""iterated([
lazy_greedy([hff,hlm],preferred=[hff,hlm]),
lazy_wastar([hff,hlm],preferred=[hff,hlm],w=5),
lazy_wastar([hff,hlm],preferred=[hff,hlm],w=3),
lazy_wastar([hff,hlm],preferred=[hff,hlm],w=2),
lazy_wastar([hff,hlm],preferred=[hff,hlm],w=1)
],repeat_last=true,continue_on_fail=true)))""",
"--if-non-unit-cost",
"--evaluator",
"hlm1=lmcount(lm_reasonable_orders_hps(lm_rhw()),transform=adapt_costs(one),pref={pref})".format(**kwargs),
"--evaluator", "hff1=ff(transform=adapt_costs(one))",
"--evaluator",
"hlm2=lmcount(lm_reasonable_orders_hps(lm_rhw()),transform=adapt_costs(plusone),pref={pref})".format(**kwargs),
"--evaluator", "hff2=ff(transform=adapt_costs(plusone))",
"--search", """iterated([
lazy_greedy([hff1,hlm1],preferred=[hff1,hlm1],
cost_type=one,reopen_closed=false),
lazy_greedy([hff2,hlm2],preferred=[hff2,hlm2],
reopen_closed=false),
lazy_wastar([hff2,hlm2],preferred=[hff2,hlm2],w=5),
lazy_wastar([hff2,hlm2],preferred=[hff2,hlm2],w=3),
lazy_wastar([hff2,hlm2],preferred=[hff2,hlm2],w=2),
lazy_wastar([hff2,hlm2],preferred=[hff2,hlm2],w=1)
],repeat_last=true,continue_on_fail=true)""",
f"let(hlm1, lmcount(lm_reasonable_orders_hps(lm_rhw()),transform=adapt_costs(one),pref={pref}),"
"let(hff1, ff(transform=adapt_costs(one)),"
f"let(hlm2, lmcount(lm_reasonable_orders_hps(lm_rhw()),transform=adapt_costs(plusone),pref={pref}),"
"let(hff2, ff(transform=adapt_costs(plusone)),"
"""iterated([
lazy_greedy([hff1,hlm1],preferred=[hff1,hlm1],
cost_type=one,reopen_closed=false),
lazy_greedy([hff2,hlm2],preferred=[hff2,hlm2],
reopen_closed=false),
lazy_wastar([hff2,hlm2],preferred=[hff2,hlm2],w=5),
lazy_wastar([hff2,hlm2],preferred=[hff2,hlm2],w=3),
lazy_wastar([hff2,hlm2],preferred=[hff2,hlm2],w=2),
lazy_wastar([hff2,hlm2],preferred=[hff2,hlm2],w=1)
],repeat_last=true,continue_on_fail=true)))))""",
# Append --always to be on the safe side if we want to append
# additional options later.
"--always"]
Expand All @@ -128,17 +127,16 @@ def _get_lama(**kwargs):
ALIASES["lama"] = _get_lama(pref="false")

ALIASES["lama-first"] = [
"--evaluator",
"hlm=lmcount(lm_factory=lm_reasonable_orders_hps(lm_rhw()),transform=adapt_costs(one),pref=false)",
"--evaluator", "hff=ff(transform=adapt_costs(one))",
"--search", """lazy_greedy([hff,hlm],preferred=[hff,hlm],
cost_type=one,reopen_closed=false)"""]
"--search",
"let(hlm, lmcount(lm_factory=lm_reasonable_orders_hps(lm_rhw()),transform=adapt_costs(one),pref=false),"
"let(hff, ff(transform=adapt_costs(one)),"
"""lazy_greedy([hff,hlm],preferred=[hff,hlm],
cost_type=one,reopen_closed=false)))"""]

ALIASES["seq-opt-bjolp"] = [
"--evaluator",
"lmc=lmcount(lm_merged([lm_rhw(),lm_hm(m=1)]),admissible=true)",
"--search",
"astar(lmc,lazy_evaluator=lmc)"]
"let(lmc, lmcount(lm_merged([lm_rhw(),lm_hm(m=1)]),admissible=true),"
"astar(lmc,lazy_evaluator=lmc))"]

ALIASES["seq-opt-lmcut"] = [
"--search", "astar(lmcut())"]
Expand Down
6 changes: 6 additions & 0 deletions driver/arguments.py
Expand Up @@ -73,6 +73,12 @@
["--validate",
"misc/tests/benchmarks/gripper/prob01.pddl",
"--search", '"astar(cegar())"']),
("Predefine an evaluator (new style):",
["misc/tests/benchmarks/gripper/prob01.pddl",
"--search", '"let(hff, ff(), eager_greedy([hff], preferred=[hff]))"']),
("Predefine an evaluator (old style):",
["misc/tests/benchmarks/gripper/prob01.pddl",
"--evaluator", '"hff=ff()"', "--search", '"eager_greedy([hff], preferred=[hff])"']),
]

EPILOG = """component options:
Expand Down
7 changes: 3 additions & 4 deletions driver/portfolios/seq_opt_fdss_1.py
Expand Up @@ -11,10 +11,9 @@
"shrink_strategy=shrink_bisimulation(greedy=false),"
"label_reduction=exact(before_shrinking=true,before_merging=false),"
"max_states=200000))"]),
(455, ["--evaluator",
"lmc=lmcount(lm_merged([lm_rhw(),lm_hm(m=1)]),admissible=true)",
"--search",
"astar(lmc,lazy_evaluator=lmc)"]),
(455, ["--search",
"let(lmc, lmcount(lm_merged([lm_rhw(),lm_hm(m=1)]),admissible=true),"
"astar(lmc,lazy_evaluator=lmc))"]),
(569, ["--search",
"astar(lmcut())"]),
]
7 changes: 3 additions & 4 deletions driver/portfolios/seq_opt_fdss_2.py
Expand Up @@ -11,10 +11,9 @@
"shrink_strategy=shrink_bisimulation(greedy=false),"
"label_reduction=exact(before_shrinking=true,before_merging=false),"
"max_states=200000))"]),
(1, ["--evaluator",
"lmc=lmcount(lm_merged([lm_rhw(),lm_hm(m=1)]),admissible=true)",
"--search",
"astar(lmc,lazy_evaluator=lmc)"]),
(1, ["--search",
"let(lmc, lmcount(lm_merged([lm_rhw(),lm_hm(m=1)]),admissible=true),"
"astar(lmc,lazy_evaluator=lmc))"]),
(1, ["--search",
"astar(lmcut())"]),
(1, ["--search",
Expand Down
102 changes: 53 additions & 49 deletions driver/portfolios/seq_sat_fdss_1.py
Expand Up @@ -2,70 +2,74 @@

CONFIGS = [
# alt_lazy_ff_cg
(49, ["--evaluator", "hff=ff(transform=H_COST_TRANSFORM)",
"--evaluator", "hcg=cg(transform=H_COST_TRANSFORM)", "--search",
"lazy_greedy([hff,hcg],preferred=[hff,hcg],cost_type=S_COST_TYPE,bound=BOUND)"]),
(49, ["--search",
"let(hff, ff(transform=H_COST_TRANSFORM),"
"let(hcg, cg(transform=H_COST_TRANSFORM),"
"lazy_greedy([hff,hcg],preferred=[hff,hcg],cost_type=S_COST_TYPE,bound=BOUND)))"]),
# lazy_greedy_ff_1
(171, ["--evaluator", "h=ff(transform=H_COST_TRANSFORM)",
"--search",
"lazy_greedy([h],preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(171, ["--search",
"let(h, ff(transform=H_COST_TRANSFORM),"
"lazy_greedy([h],preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# alt_lazy_cea_cg
(27, ["--evaluator", "hcea=cea(transform=H_COST_TRANSFORM)",
"--evaluator", "hcg=cg(transform=H_COST_TRANSFORM)", "--search",
"lazy_greedy([hcea,hcg],preferred=[hcea,hcg],cost_type=S_COST_TYPE,bound=BOUND)"]),
(27, ["--search",
"let(hcea, cea(transform=H_COST_TRANSFORM),"
"let(hcg, cg(transform=H_COST_TRANSFORM),"
"lazy_greedy([hcea,hcg],preferred=[hcea,hcg],cost_type=S_COST_TYPE,bound=BOUND)))"]),
# lazy_wa3_ff_1
(340, ["--evaluator", "h=ff(transform=H_COST_TRANSFORM)",
"--search",
"lazy_wastar([h],w=3,preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(340, ["--search",
"let(h, ff(transform=H_COST_TRANSFORM),"
"lazy_wastar([h],w=3,preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# alt_eager_ff_cg
(76, ["--evaluator", "hff=ff(transform=H_COST_TRANSFORM)",
"--evaluator", "hcg=cg(transform=H_COST_TRANSFORM)", "--search",
"eager_greedy([hff,hcg],preferred=[hff,hcg],cost_type=S_COST_TYPE,bound=BOUND)"]),
(76, ["--search",
"let(hff, ff(transform=H_COST_TRANSFORM),"
"let(hcg, cg(transform=H_COST_TRANSFORM),"
"eager_greedy([hff,hcg],preferred=[hff,hcg],cost_type=S_COST_TYPE,bound=BOUND)))"]),
# eager_greedy_ff_1
(88, ["--evaluator", "h=ff(transform=H_COST_TRANSFORM)",
"--search",
"eager_greedy([h],preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(88, ["--search",
"let(h, ff(transform=H_COST_TRANSFORM),"
"eager_greedy([h],preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# alt_eager_ff_add
(90, ["--evaluator", "hff=ff(transform=H_COST_TRANSFORM)",
"--evaluator", "hadd=add(transform=H_COST_TRANSFORM)", "--search",
"eager_greedy([hff,hadd],preferred=[hff,hadd],cost_type=S_COST_TYPE,bound=BOUND)"]),
(90, ["--search",
"let(hff, ff(transform=H_COST_TRANSFORM),"
"let(hadd, add(transform=H_COST_TRANSFORM),"
"eager_greedy([hff,hadd],preferred=[hff,hadd],cost_type=S_COST_TYPE,bound=BOUND)))"]),
# lazy_greedy_cea_1
(56, ["--evaluator", "h=cea(transform=H_COST_TRANSFORM)",
"--search",
"lazy_greedy([h],preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(56, ["--search",
"let(h, cea(transform=H_COST_TRANSFORM),"
"lazy_greedy([h],preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# alt_eager_ff_cea_cg
(73, ["--evaluator", "hff=ff(transform=H_COST_TRANSFORM)",
"--evaluator", "hcea=cea(transform=H_COST_TRANSFORM)",
"--evaluator", "hcg=cg(transform=H_COST_TRANSFORM)",
"--search",
"eager_greedy([hff,hcea,hcg],preferred=[hff,hcea,hcg],cost_type=S_COST_TYPE,bound=BOUND)"]),
(73, ["--search",
"let(hff, ff(transform=H_COST_TRANSFORM),"
"let(hcea, cea(transform=H_COST_TRANSFORM),"
"let(hcg, cg(transform=H_COST_TRANSFORM),"
"eager_greedy([hff,hcea,hcg],preferred=[hff,hcea,hcg],cost_type=S_COST_TYPE,bound=BOUND))))"]),
# lazy_wa3_add_1
(50, ["--evaluator", "h=add(transform=H_COST_TRANSFORM)",
"--search",
"lazy_wastar([h],w=3,preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(50, ["--search",
"let(h, add(transform=H_COST_TRANSFORM),"
"lazy_wastar([h],w=3,preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# eager_greedy_cea_1
(84, ["--evaluator", "h=cea(transform=H_COST_TRANSFORM)",
"--search",
"eager_greedy([h],preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(84, ["--search",
"let(h, cea(transform=H_COST_TRANSFORM),"
"eager_greedy([h],preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# eager_wa3_add_1
(166, ["--evaluator", "h=add(transform=H_COST_TRANSFORM)",
"--search",
"eager(single(sum([g(),weight(h,3)])),preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(166, ["--search",
"let(h, add(transform=H_COST_TRANSFORM),"
"eager(single(sum([g(),weight(h,3)])),preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# eager_wa3_ff_1
(87, ["--evaluator", "h=ff(transform=H_COST_TRANSFORM)",
"--search",
"eager(single(sum([g(),weight(h,3)])),preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(87, ["--search",
"let(h, ff(transform=H_COST_TRANSFORM),"
"eager(single(sum([g(),weight(h,3)])),preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# lazy_wa3_cg_1
(73, ["--evaluator", "h=cg(transform=H_COST_TRANSFORM)",
"--search",
"lazy_wastar([h],w=3,preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(73, ["--search",
"let(h, cg(transform=H_COST_TRANSFORM),"
"lazy_wastar([h],w=3,preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
# eager_wa3_cg_1
(89, ["--evaluator", "h=cg(transform=H_COST_TRANSFORM)",
"--search",
"eager(single(sum([g(),weight(h,3)])),preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)"]),
(89, ["--search",
"let(h, cg(transform=H_COST_TRANSFORM),"
"eager(single(sum([g(),weight(h,3)])),preferred=[h],cost_type=S_COST_TYPE,bound=BOUND))"]),
]

FINAL_CONFIG = [
"--evaluator", "h=ff(transform=H_COST_TRANSFORM)",
"--search",
"iterated([eager(single(sum([g(),weight(h,3)])),preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)],bound=BOUND,repeat_last=true)"]
"let(h, ff(transform=H_COST_TRANSFORM),"
"iterated([eager(single(sum([g(),weight(h,3)])),preferred=[h],cost_type=S_COST_TYPE,bound=BOUND)],bound=BOUND,repeat_last=true))"]