Optimizers try to solve the problem of reconfiguraiton, by always requiring the (hard) policies to hold, while trying to minimize the cost of soft policies. The following optimizers exist:
One Optimizer To Rule Them All (
OptimizerTRTA): This optimizer combines the best of both the simple, and soft-policy oriented
TreeOptimizer, and the more complex, hard-policy based
DepGroupsOptimizer. It does this by exploring the search space similar to the tree optimizer. But as soon as we would need to backtrace, we try to find a single dependency. If it succeeds, we repeat the tree traversal using the new dependency. This results in much better results interms of minimizing cost, while keeping the benefits of searching actively for dependencies. Additionally, we only search for the dependencies, which are not solvable by using the naive Tree strategy.
TreeOptimizer: This optimizer is similar to the
TreeStrategy. However, the most important difference is that on ever step, the tree is traversed into the direction, which will (locally) keep the cost of the soft policy to a minimum. This means, that before any modifier is taken, this strategy will try all possible modifiers, and check which of them will reduce the cost locally.
GlobalOptimizer: This optimizer computes the cost of every possible ordering, which is valid under the given hard constraints. Then, it returns the one which minimizes the cost. This optimizer will always return the global minimum, however, it is no longer feasible to compute with 10 or more modifiers.
DepGroupsOptimizer: This optimizer is similar to the
DebGroupsStrategy, as it searches for dependencies actively by building groups. Once a valid solution is found, we store the ordering and the cost, and continue the iteration, until we have either not improved our solution in the last 10 iterations, or until we have exceeded the time budget.
NaiveRandomOptimizer: This optimizer is only used for evaluation purpose. It simply tries random orderings, until it finds a valid ordering, which will then be returned.
NaiveRandomIBROptimizer: This optimizer is only used for evaluation purpose. It simply tries random orderings, until it finds a valid ordering, which will then be returned. However, the sequence will always first insert, then modify, and finally, remove configuration.
Strawman Strategy: Most Important First
Strawman Strategy: Most Important Last
The Naive Random Optimizer with insert before remove
The Naive Random Optimizer
One Optimizer To Rule Them All
Infterface for all Optimizers