Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
821f8c1
Clean up exploration class.
ClemensBuechner Feb 4, 2025
c93adef
Make landmark graph iterable and rename landmark members.
remochristen Feb 5, 2025
7e47631
Rename edge to ordering.
remochristen Feb 7, 2025
bf8198b
Rename functions and variables.
remochristen Feb 7, 2025
7297587
Clean up landmark_graph.cc and use HashSet instead of set.
ClemensBuechner Feb 10, 2025
63ee8ce
Incorporate review comments.
ClemensBuechner Feb 13, 2025
988a35e
Merge in latest changes from main.
ClemensBuechner Feb 14, 2025
8a25990
Rename most occurrences of `lm` in variable and function names.
ClemensBuechner Feb 11, 2025
3ec216f
Fix minor styling issues.
ClemensBuechner Feb 13, 2025
213b85d
Make single-use local function static.
ClemensBuechner Feb 14, 2025
05c99ae
Minor cleanup.
ClemensBuechner Feb 14, 2025
e9dfb7e
Break apart functions in cost partitioning algorithms.
ClemensBuechner Feb 14, 2025
c7ae6cc
Fix computation of sorted preconditions in exploration.
ClemensBuechner Feb 17, 2025
ee7692d
Implement review comments.
ClemensBuechner Feb 21, 2025
d373aed
Minor revisions to fix runtime profile.
ClemensBuechner Feb 28, 2025
9024bb0
Fix recognition of identical landmarks and driveby cleanup.
ClemensBuechner Mar 3, 2025
a15f56f
Merge branch 'main' into issue992
ClemensBuechner Mar 3, 2025
7a438d6
Use ranges::any_of and ranges::all_of to recover from slowdown.
ClemensBuechner Mar 4, 2025
ce4aec0
Merge 'issue992' into 'issue992-heuristics'.
ClemensBuechner Mar 4, 2025
e1bd0a7
test
ClemensBuechner Mar 4, 2025
1a5350d
test2
ClemensBuechner Mar 4, 2025
a1796c9
Merge branch 'main' into issue992
ClemensBuechner Mar 5, 2025
030fa05
Fix style and improve use of concept.
ClemensBuechner Mar 5, 2025
649d199
Merge branch 'issue992' into issue992-heuristics
ClemensBuechner Mar 11, 2025
5c38893
Add TODO note to concept stuff.
ClemensBuechner Mar 11, 2025
34132de
Clean up landmark utils.
ClemensBuechner Mar 11, 2025
ac56a43
Change member order to private, protected, public.
ClemensBuechner Mar 11, 2025
891bb4d
Clean up landmark factory base class header file.
ClemensBuechner Mar 11, 2025
b6038e0
Clean up landmark_factory.cc.
ClemensBuechner Mar 11, 2025
059a6b2
Fix failing assertion.
ClemensBuechner Mar 12, 2025
2a91937
Clean up hm-factory header file.
ClemensBuechner Mar 11, 2025
1c7ebe4
Remove redundant m-parameter from functions.
ClemensBuechner Mar 11, 2025
8908f08
Clean up set operation functions.
ClemensBuechner Mar 11, 2025
3867244
Rename stuff.
ClemensBuechner Mar 11, 2025
514fe45
Start breaking apart 'get_m_set' functions.
ClemensBuechner Mar 11, 2025
bc83f20
Finish breaking apart 'get_m_sets' functions.
ClemensBuechner Mar 11, 2025
4e5a9cd
Add return type to outermost 'get_m_sets' functions.
ClemensBuechner Mar 11, 2025
3fa945f
Refactor printing of hm-factory.
ClemensBuechner Mar 12, 2025
11de2f8
Turn function static.
ClemensBuechner Mar 12, 2025
444f205
Break apart function to build Pi^m operators.
ClemensBuechner Mar 12, 2025
55c64f6
Clarify hm initialization.
ClemensBuechner Mar 12, 2025
82e21b1
Clarify approxiation of possible achievers.
ClemensBuechner Mar 13, 2025
609075f
Merge 'issue992-heuristics' into 'issue992'.
ClemensBuechner Mar 13, 2025
05fe4c6
Break apart pi-m propagation to trigger applicable operator updates.
ClemensBuechner Mar 13, 2025
19aac6f
Break apart computing the landmarks.
ClemensBuechner Mar 13, 2025
807441d
Clean up computing conditional noop landmarks.
ClemensBuechner Mar 13, 2025
72d00d9
Clarify landmark generation.
ClemensBuechner Mar 17, 2025
cc65d79
Deal with most TODOs.
ClemensBuechner Mar 17, 2025
a6e7f7c
Clean up lm_merged.
ClemensBuechner Mar 17, 2025
4eaf016
Clarify approximation of reasonable orderings.
ClemensBuechner Mar 17, 2025
bec3ad7
Fix performance drop in landmark generation time.
ClemensBuechner Mar 18, 2025
bb4bab9
Merge branch 'issue992-factories' into issue992-hm-factory
ClemensBuechner Mar 18, 2025
e59d942
TODO
ClemensBuechner Mar 18, 2025
01a186e
Clean up interference function.
ClemensBuechner Mar 18, 2025
a8dd5c0
Revert some smaller changes to recover performance.
ClemensBuechner Mar 18, 2025
d40325c
Refactor stuff around effects that always happen.
ClemensBuechner Mar 18, 2025
dcf87ce
Simplify collect_ancestors.
ClemensBuechner Mar 18, 2025
2d276f4
Turn function static.
ClemensBuechner Mar 18, 2025
39689bb
Improve docs.
ClemensBuechner Mar 18, 2025
6081030
Clean up relaxation factory.
ClemensBuechner Mar 19, 2025
1387bc6
Clean up lm_exhaust.
ClemensBuechner Mar 19, 2025
e42572c
Merge 'lm_reasonable_orders_hps' refactorings.
ClemensBuechner Mar 19, 2025
8b410b1
Refactor computing DTG successors and fix intersection method.
ClemensBuechner Mar 20, 2025
48ec725
Break apart approximation of landmark preconditions.
ClemensBuechner Mar 20, 2025
463c604
Break apart adding predecessor landmark.
ClemensBuechner Mar 20, 2025
5a543ee
Clean up computing shared preconditions.
ClemensBuechner Mar 20, 2025
2f1d3a6
Clean up building disjunction classes.
ClemensBuechner Mar 20, 2025
134aeae
Try to understand computation of disjunction classes.
ClemensBuechner Mar 20, 2025
e6dbeec
Clean up relaxed landmark generation.
ClemensBuechner Mar 21, 2025
c03889a
Clean up approximation of lookahead orderings.
ClemensBuechner Mar 24, 2025
e54387e
Replace data structures.
ClemensBuechner Mar 24, 2025
4139a5b
Merge 'lm_hm' refactorings.
ClemensBuechner Mar 24, 2025
4d61ac6
Merge 'lm_rhw' refactorings.
ClemensBuechner Mar 24, 2025
3eb6c8f
Break apart landmark extraction.
ClemensBuechner Mar 25, 2025
171ad0f
Finish refactoring lm_zg.
ClemensBuechner Mar 26, 2025
bee62a8
Merge branch 'issue992' into issue992-factories
ClemensBuechner Mar 26, 2025
c172a81
Fix DTG reasoning in RHW.
ClemensBuechner Mar 26, 2025
66b32d0
Really fix DTG reasoning.
ClemensBuechner Mar 28, 2025
26ede1d
Clarify comments in lm_hm.
ClemensBuechner Mar 28, 2025
bf748fa
Get rid of list data type in lm_hm.
ClemensBuechner Mar 28, 2025
e4cef82
Break overlength lines.
ClemensBuechner Mar 28, 2025
eb0663c
Fix style.
ClemensBuechner Mar 28, 2025
c2e03b9
Merge branch 'main' into issue992.
ClemensBuechner Apr 1, 2025
96df731
Fix style.
ClemensBuechner Apr 1, 2025
0fc6e08
Turn identical check into superset check to get same code as before r…
ClemensBuechner Apr 1, 2025
21e86ca
Use hash sets for soon-to-be-landmarks.
ClemensBuechner Apr 1, 2025
9bb0b27
Clean up some TODO comments.
ClemensBuechner Apr 1, 2025
674f17d
Fix lm_merge.
ClemensBuechner Apr 2, 2025
314e18e
Improve set intersection in lm_hm.
ClemensBuechner Apr 2, 2025
a14cc00
Clarify data structure.
ClemensBuechner Apr 2, 2025
190cb66
Optimize hm landmark generation.
ClemensBuechner Apr 2, 2025
07d3cf3
Simplify comment and implementation.
ClemensBuechner Apr 2, 2025
ed295cd
Revert to lists instead of unordered_sets because it's faster.
ClemensBuechner Apr 3, 2025
9889962
Use vectors instead of lists.
ClemensBuechner Apr 3, 2025
2b5f3be
Fix memory profile.
ClemensBuechner Apr 3, 2025
e39594c
Fix accidental changes in hm-landmark graphs.
ClemensBuechner Apr 8, 2025
ed4ee1a
Fix computation of possible achievers.
ClemensBuechner Apr 9, 2025
77690f9
Merge branch 'issue992' into issue992-factories.
ClemensBuechner Apr 9, 2025
4597a32
use prototype implementation as a basis
FlorianPommerening Mar 3, 2025
7b59291
too complex attempt to solve this with concepts
FlorianPommerening Apr 10, 2025
bb70e99
use template specialization
FlorianPommerening Apr 10, 2025
43a7929
fix style
FlorianPommerening Apr 10, 2025
56e58ed
remove item type
FlorianPommerening Apr 10, 2025
aa850ac
change uncrustify config to accept the concept definition
FlorianPommerening Apr 12, 2025
21696c9
fix concept definition
FlorianPommerening Apr 12, 2025
26267ad
'fix' style
FlorianPommerening Apr 12, 2025
c3fe985
turn iterator classes into true iterators
FlorianPommerening Apr 12, 2025
1fee344
C++-20 supports default implementations of == and !=.
FlorianPommerening Apr 12, 2025
96a31ad
use nested iterator in state iterator
FlorianPommerening Apr 12, 2025
17570ed
avoid stale reference
FlorianPommerening Apr 12, 2025
ecd7e2e
try reintroducing reference and pointer typedefs for MSVC.
FlorianPommerening Apr 14, 2025
3d4469f
Merge refactoring of landmark factories.
ClemensBuechner Apr 22, 2025
557be03
Split apart computation of conditional noops.
ClemensBuechner Apr 22, 2025
ffce23e
Fix style.
ClemensBuechner Apr 22, 2025
bb25195
use windows 2025 instead of 2019
FlorianPommerening Apr 22, 2025
5701247
Change parameter name to match command line.
ClemensBuechner Apr 22, 2025
f6c4b30
Represent landmark type using Enum.
ClemensBuechner Apr 2, 2025
3843754
Rename simple to atomic and add doc.
ClemensBuechner Apr 23, 2025
412c645
Clean up TODOs and other stuff.
ClemensBuechner Apr 23, 2025
c61a675
Add noop move constructor.
ClemensBuechner Apr 23, 2025
4e4e98f
turn proxy classes into ranges
FlorianPommerening Apr 25, 2025
6fb6b51
code cleanup (remove implicitly defined special constructors, destruc…
FlorianPommerening Apr 25, 2025
dc7d063
Merge with iterator concepts.
ClemensBuechner Apr 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .uncrustify.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ eat_blanks_after_open_brace=true
eat_blanks_before_close_brace=true
mod_pawn_semicolon=false
mod_full_paren_if_bool=false
mod_remove_extra_semicolon=true
mod_remove_extra_semicolon=false
mod_sort_import=false
mod_sort_using=false
mod_sort_include=false
Expand Down
2 changes: 1 addition & 1 deletion src/search/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -849,7 +849,7 @@ create_fast_downward_library(
landmarks/landmark_cost_partitioning_algorithms
landmarks/landmark_cost_partitioning_heuristic
landmarks/landmark_factory
landmarks/landmark_factory_h_m
landmarks/landmark_factory_hm
landmarks/landmark_factory_reasonable_orders_hps
landmarks/landmark_factory_merged
landmarks/landmark_factory_relaxation
Expand Down
2 changes: 1 addition & 1 deletion src/search/cartesian_abstractions/refinement_hierarchy.cc
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ NodeID RefinementHierarchy::get_node_id(const State &state) const {
NodeID id = 0;
while (nodes[id].is_split()) {
const Node &node = nodes[id];
id = node.get_child(state[node.get_var()].get_value());
id = node.get_child(state[node.get_var()]);
}
return id;
}
Expand Down
11 changes: 5 additions & 6 deletions src/search/cartesian_abstractions/subtask_generators.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
#include <cassert>
#include <iostream>
#include <string>
#include <unordered_set>
#include <vector>

using namespace std;
Expand Down Expand Up @@ -53,7 +52,7 @@ static void remove_initial_state_facts(
const TaskProxy &task_proxy, Facts &facts) {
State initial_state = task_proxy.get_initial_state();
facts.erase(remove_if(facts.begin(), facts.end(), [&](FactPair fact) {
return initial_state[fact.var].get_value() == fact.value;
return initial_state[fact.var] == fact.value;
}), facts.end());
}

Expand Down Expand Up @@ -158,16 +157,16 @@ SharedTasks LandmarkDecomposition::get_subtasks(
SharedTasks subtasks;
const shared_ptr<landmarks::LandmarkGraph> landmark_graph =
get_landmark_graph(task);
utils::HashMap<FactPair, landmarks::LandmarkNode *> fact_to_landmark_map =
get_fact_to_landmark_map(landmark_graph);
Facts landmark_facts = get_fact_landmarks(*landmark_graph);
utils::HashMap<FactPair, landmarks::LandmarkNode *> atom_to_landmark_map =
get_atom_to_landmark_map(landmark_graph);
Facts landmark_facts = get_atom_landmarks(*landmark_graph);
filter_and_order_facts(task, fact_order, landmark_facts, *rng, log);
for (const FactPair &landmark : landmark_facts) {
shared_ptr<AbstractTask> subtask =
make_shared<extra_tasks::ModifiedGoalsTask>(task, Facts {landmark});
if (combine_facts) {
subtask = build_domain_abstracted_task(
subtask, fact_to_landmark_map[landmark]);
subtask, atom_to_landmark_map[landmark]);
}
subtasks.push_back(subtask);
}
Expand Down
63 changes: 32 additions & 31 deletions src/search/cartesian_abstractions/utils_landmarks.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,74 +2,75 @@

#include "../plugins/plugin.h"
#include "../landmarks/landmark.h"
#include "../landmarks/landmark_factory_h_m.h"
#include "../landmarks/landmark_factory_hm.h"
#include "../landmarks/landmark_graph.h"
#include "../utils/logging.h"

#include <algorithm>
#include <ranges>
#include <unordered_set>

using namespace std;
using namespace landmarks;

namespace cartesian_abstractions {
static FactPair get_fact(const Landmark &landmark) {
static FactPair get_atom(const Landmark &landmark) {
// We assume that the given Landmarks are from an h^m landmark graph with m=1.
assert(landmark.facts.size() == 1);
return landmark.facts[0];
assert(landmark.type == ATOMIC);
assert(landmark.atoms.size() == 1);
return landmark.atoms[0];
}

shared_ptr<LandmarkGraph> get_landmark_graph(
const shared_ptr<AbstractTask> &task) {
LandmarkFactoryHM lm_graph_factory(
LandmarkFactoryHM landmark_graph_factory(
1, false, true, utils::Verbosity::SILENT);

return lm_graph_factory.compute_lm_graph(task);
return landmark_graph_factory.compute_landmark_graph(task);
}

vector<FactPair> get_fact_landmarks(const LandmarkGraph &graph) {
vector<FactPair> facts;
const LandmarkGraph::Nodes &nodes = graph.get_nodes();
facts.reserve(nodes.size());
for (auto &node : nodes) {
facts.push_back(get_fact(node->get_landmark()));
vector<FactPair> get_atom_landmarks(const LandmarkGraph &graph) {
vector<FactPair> atoms;
atoms.reserve(graph.get_num_landmarks());
for (const auto &node : graph) {
atoms.push_back(get_atom(node->get_landmark()));
}
sort(facts.begin(), facts.end());
return facts;
sort(atoms.begin(), atoms.end());
return atoms;
}

utils::HashMap<FactPair, LandmarkNode *> get_fact_to_landmark_map(
utils::HashMap<FactPair, LandmarkNode *> get_atom_to_landmark_map(
const shared_ptr<LandmarkGraph> &graph) {
const LandmarkGraph::Nodes &nodes = graph->get_nodes();
// All landmarks are simple, i.e., each has exactly one fact.
assert(all_of(nodes.begin(), nodes.end(), [](auto &node) {
return node->get_landmark().facts.size() == 1;
// All landmarks are atomic, i.e., each has exactly one atom.
assert(all_of(graph->begin(), graph->end(), [](auto &node) {
return node->get_landmark().atoms.size() == 1;
}));
utils::HashMap<FactPair, landmarks::LandmarkNode *> fact_to_landmark_map;
for (auto &node : nodes) {
const FactPair &fact = node->get_landmark().facts[0];
fact_to_landmark_map[fact] = node.get();
utils::HashMap<FactPair, landmarks::LandmarkNode *> atom_to_landmark_map;
for (const auto &node : *graph) {
const FactPair &atom = node->get_landmark().atoms[0];
atom_to_landmark_map[atom] = node.get();
}
return fact_to_landmark_map;
return atom_to_landmark_map;
}

VarToValues get_prev_landmarks(const LandmarkNode *node) {
VarToValues groups;
vector<const LandmarkNode *> open;
unordered_set<const LandmarkNode *> closed;
for (const auto &parent_and_edge : node->parents) {
const LandmarkNode *parent = parent_and_edge.first;
open.reserve(node->parents.size());
for (const LandmarkNode *parent : views::keys(node->parents)) {
open.push_back(parent);
}
while (!open.empty()) {
const LandmarkNode *ancestor = open.back();
open.pop_back();
if (closed.find(ancestor) != closed.end())
if (closed.contains(ancestor)) {
continue;
}
closed.insert(ancestor);
FactPair ancestor_fact = get_fact(ancestor->get_landmark());
groups[ancestor_fact.var].push_back(ancestor_fact.value);
for (const auto &parent_and_edge : ancestor->parents) {
const LandmarkNode *parent = parent_and_edge.first;
FactPair ancestor_atom = get_atom(ancestor->get_landmark());
groups[ancestor_atom.var].push_back(ancestor_atom.value);
for (const LandmarkNode *parent : views::keys(ancestor->parents)) {
open.push_back(parent);
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/search/cartesian_abstractions/utils_landmarks.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,16 @@ using VarToValues = std::unordered_map<int, std::vector<int>>;

extern std::shared_ptr<landmarks::LandmarkGraph> get_landmark_graph(
const std::shared_ptr<AbstractTask> &task);
extern std::vector<FactPair> get_fact_landmarks(
extern std::vector<FactPair> get_atom_landmarks(
const landmarks::LandmarkGraph &graph);

extern utils::HashMap<FactPair, landmarks::LandmarkNode *> get_fact_to_landmark_map(
extern utils::HashMap<FactPair, landmarks::LandmarkNode *> get_atom_to_landmark_map(
const std::shared_ptr<landmarks::LandmarkGraph> &graph);

/*
Do a breadth-first search through the landmark graph ignoring
duplicates. Start at the given node and collect for each variable the
facts that have to be made true before the given node can be true for
atoms that have to be made true before the given node can be true for
the first time.
*/
extern VarToValues get_prev_landmarks(
Expand Down
6 changes: 3 additions & 3 deletions src/search/heuristics/cea_heuristic.cc
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ void ContextEnhancedAdditiveHeuristic::set_up_local_problem(
LocalProblemNode *start = &problem->nodes[start_value];
start->cost = 0;
for (size_t i = 0; i < problem->context_variables->size(); ++i)
start->context[i] = state[(*problem->context_variables)[i]].get_value();
start->context[i] = static_cast<short>(state[(*problem->context_variables)[i]]);

add_to_heap(start);
}
Expand Down Expand Up @@ -379,10 +379,10 @@ void ContextEnhancedAdditiveHeuristic::mark_helpful_transitions(
int precond_value = assignment.value;
int local_var = assignment.local_var;
int precond_var_no = context_vars[local_var];
if (state[precond_var_no].get_value() == precond_value)
if (state[precond_var_no] == precond_value)
continue;
LocalProblem *subproblem = get_local_problem(
precond_var_no, state[precond_var_no].get_value());
precond_var_no, state[precond_var_no]);
LocalProblemNode *subnode = &subproblem->nodes[precond_value];
mark_helpful_transitions(subproblem, subnode, state);
}
Expand Down
2 changes: 1 addition & 1 deletion src/search/heuristics/cg_cache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ int CGCache::get_index(int var, const State &state,
int index = from_val;
int multiplier = task_proxy.get_variables()[var].get_domain_size();
for (int dep_var : depends_on[var]) {
index += state[dep_var].get_value() * multiplier;
index += state[dep_var] * multiplier;
multiplier *= task_proxy.get_variables()[dep_var].get_domain_size();
}
if (to_val > from_val)
Expand Down
6 changes: 3 additions & 3 deletions src/search/heuristics/cg_heuristic.cc
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ int CGHeuristic::compute_heuristic(const State &ancestor_state) {
for (FactProxy goal : task_proxy.get_goals()) {
const VariableProxy var = goal.get_variable();
int var_no = var.get_id();
int from = state[var_no].get_value(), to = goal.get_value();
int from = state[var_no], to = goal.get_value();
DomainTransitionGraph *dtg = transition_graphs[var_no].get();
int cost_for_goal = get_transition_cost(state, dtg, from, to);
if (cost_for_goal == numeric_limits<int>::max()) {
Expand Down Expand Up @@ -114,7 +114,7 @@ int CGHeuristic::get_transition_cost(const State &state,
start->children_state.resize(dtg->local_to_global_child.size());
for (size_t i = 0; i < dtg->local_to_global_child.size(); ++i) {
start->children_state[i] =
state[dtg->local_to_global_child[i]].get_value();
state[dtg->local_to_global_child[i]];
}

// Initialize Heap for Dijkstra's algorithm.
Expand Down Expand Up @@ -226,7 +226,7 @@ int CGHeuristic::get_transition_cost(const State &state,
void CGHeuristic::mark_helpful_transitions(const State &state,
DomainTransitionGraph *dtg, int to) {
int var_no = dtg->var;
int from = state[var_no].get_value();
int from = state[var_no];
if (from == to)
return;

Expand Down
Loading
Loading