As a solution developer, I want to be able to incrementally modify my problem state and generate a new solution. I should be able to add or remove one or a set of any of the problem variable types (e.g. for a scheduling problem, the tasks, resources, or capabilities) and subsequently obtain a valid solution to the modified problem.
Conditions of satisfaction
Each problem type exposes a number of methods to add or remove problem-specific features.
Add and remove methods can accept a single item or a list of items.
Add and remove methods work at the same level of data specification as the problem constructor, i.e. they do not require the solution developer to obtain object references to the features which would be difficult to find.
Add and remove methods work at the feature level, not the node/constraint level. They do not require the solution developer to know or understand exactly how features get transformed to create nodes and constraints, and they do not expect the solution developer to correctly execute a series of operations or cleanup, e.g. removing one type of dependent feature before another, or removing all of the dependent features that were tied to a removed feature.
Not required but preferred
Modifying problem features is very fast, preferably much faster than solving the modified problem
Modifying problem features is O(1), and thus does not become a major scaling obstacle for very large problems.
Re-solving a problem after modifying features is fast, ideally faster than the initial solution
Adding and removing problem features can be performed during problem solving and modified features will be immediately incorporated into the solution
User story
As a solution developer, I want to be able to incrementally modify my problem state and generate a new solution. I should be able to add or remove one or a set of any of the problem variable types (e.g. for a scheduling problem, the tasks, resources, or capabilities) and subsequently obtain a valid solution to the modified problem.
Conditions of satisfaction
Not required but preferred