Add support for 'strict' targets on the Agent interface #62
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
A Target in Mahler is by default 'relative', meaning that only property
changes and additions should be considered when comparing current and
target states for planning. Property deletion need to be done explicitely
via the
UNDEFINED
symbol. This allows a cleaner interface for fordefining system targets and allows the system state to have additional properties
than the target.
A 'relative' target is the opposite to a 'strict' (or absolute) target, where what is passed to
the planner/agent describes exactly the desired state of the system is.
This PR introduces the
StrictTarget
type and theseekStrict
methodon the
Agent
interface. This allows users some additional flexibilityto specify an absolute state of the final system.
Example: let's say we are modelling the state of two variables
x
andy
.Given the current state
{x: 0}
, the target state{y: 1}
means that theplanner needs to only to find a task that can create the variable
y
and increase itsvalue to
1
. The final expected state should be{x: 0, y:1}
(assuming nothing else changesx
).If the goal was to remove the variable
x
at the same time that variabley
is introduced, therelative target would need to be
{x: UNDEFINED, y: 1}
The equivalent strict target in this case is just
{y: 1}
.Change-type: minor