This virtual class represents a reduction, an actor that transforms a problem into an equivalent problem. By equivalent, we mean that there exists a mapping between solutions of either problem: if we reduce a problem A to another problem B and then proceed to find a solution to B, we can convert it to a solution of A with at most a moderate amount of effort.
class
## S4 method for signature 'Reduction,Problem'accepts(object, problem)## S4 method for signature 'Reduction'reduce(object)## S4 method for signature 'Reduction,Solution'retrieve(object, solution)## S4 method for signature 'Reduction,Problem'perform(object, problem)## S4 method for signature 'Reduction,Solution,list'invert(object, solution, inverse_data)
Arguments
object: A Reduction object.
problem: A Problem object.
solution: A Solution to a problem that generated the inverse data.
inverse_data: The data encoding the original problem.
Details
Every reduction supports three methods: accepts, perform, and invert. The accepts method of a particular reduction codifies the types of problems that it is applicable to, the perform method takes a problem and reduces it to a (new) equivalent form, and the invert method maps solutions from reduced-to problems to their problems of provenance.
Methods (by generic)
accepts(object = Reduction, problem = Problem): States whether the reduction accepts a problem.
reduce(Reduction): Reduces the owned problem to an equivalent problem.
retrieve(object = Reduction, solution = Solution): Retrieves a solution to the owned problem.
perform(object = Reduction, problem = Problem): Performs the reduction on a problem and returns an equivalent problem.
invert(object = Reduction, solution = Solution, inverse_data = list): Returns a solution to the original problem given the inverse data.