concepts.pdsketch.executor.StateDefinitionHelper#
- class StateDefinitionHelper[source]#
Bases:
object
A helper class to define the planning domain state (
State
). Typically you should usenew_state()
to create an instance of this helper class.The most important feature of this class is that it supports a human-friendly definition of Boolean predicates. For example, you can define the grounding values for a predicate
p
as follows:state, ctx = executor.new_state({'a': ObjectType('person'), 'b': ObjectType('person')}) state.define_predicates([ ctx.p('a', 'b') ]) # define the predicate p(a, b) as True. All other values are False by convention.
Methods
define_feature
(feature_name, tensor_or_mapping)Define a relational feature directly with
torch.Tensor
objects.define_predicates
(predicates)Define a list of grounding values of predicates.
define_pyobj_feature
(feature_name, pyobj_list)Define a feature with a list of Python objects.
get_predicate
(name)Get a predicate definition helper by name.
init_feature
(feature_name)Initialize a feature tensor with all zeros.
set_value
(feature_name, arguments, value)Set a single entry in the feature representation.
- __init__(domain_or_executor, state)[source]#
Initialize a new instance of the state definition helper.
- Parameters:
domain_or_executor (PDSketchExecutor | Domain) – the domain or an executor.
state (State) – a (possibly empty) state to be modified.
- __new__(**kwargs)#
- define_feature(feature_name, tensor_or_mapping)[source]#
Define a relational feature directly with
torch.Tensor
objects. For example,state, ctx = executor.new_state({'a': ObjectType('person'), 'b': ObjectType('person')}) # assume p is a Boolean predicate with the signature person x person -> bool state.define_feature('p', torch.tensor([[1, 0], [0, 1]]), quantized=True)
- Parameters:
feature_name (str) – the name of the feature.
tensor_or_mapping (Tensor | TensorizedPyObjValues | Mapping[str | Tuple[str, ...], bool | int | float | Tensor | TensorizedPyObjValues]) – a tensor or a mapping from argument values to tensors. If a tensor is given, it is assumed that the tensor has exactly the same shape as the tensor of the feature. If the input is a mapping, the keys of the mapping are tuples (entry indices), and the values are tensors. The tensors will be filled into an all-zero tensor of the same shape as the feature tensor.
- define_predicates(predicates)[source]#
Define a list of grounding values of predicates. See the example in
StateDefinitionHelper
.- Parameters:
predicates (Sequence[_StateDefPredicate]) – a list of grounding values, created by
ctx.p('a', 'b')
.
- define_pyobj_feature(feature_name, pyobj_list)[source]#
Define a feature with a list of Python objects. The objects will be converted to tensors using the underlying
PyObjStore
of the executor.
- get_predicate(name)[source]#
Get a predicate definition helper by name. This can be used to define the grounding values of a predicate, e.g.,
ctx.get_predicate('p')('a', 'b')
.- Parameters:
name (str) – the name of the predicate.
- Returns:
a predicate definition helper.
- Return type:
_StateDefPredicateApplier
- init_feature(feature_name)[source]#
Initialize a feature tensor with all zeros. This is useful when you want to define a feature with a custom function.
state, ctx = executor.new_state({'a': ObjectType('person'), 'b': ObjectType('person')}) # assume p is a Boolean predicate with the signature person x person -> bool state.init_feature('p') state.set_value('p', ('a', 'b'), 1, quantized=True)
- Parameters:
feature_name (str) – the name of the feature.
- set_value(feature_name, arguments, value)[source]#
Set a single entry in the feature representation. When the feature tensor has not been created, it will be created automatically. Note that, when creating the feature tensor, we will use
quantized
to determine whether the feature should be quantized or not in the state.state, ctx = executor.new_state({'a': ObjectType('person'), 'b': ObjectType('person')}) # assume p is a Boolean predicate with the signature person x person -> bool state.set_value('p', ('a', 'b'), 1, quantized=True)