defmodule CPSolver.Search.VariableSelector.MaxRegret do use CPSolver.Search.VariableSelector alias CPSolver.Utils alias CPSolver.Search.Utils, as: SearchUtils ## Choose the variable(s) with largest difference ## between the two smallest values in its domain. @impl true def select(space_data, _opts) do largest_difference(space_data) end defp largest_difference(space_data) do SearchUtils.maximals(space_data, &difference/1) end defp difference(variable) do values = Utils.domain_values(variable) [smallest, second_smallest] = Enum.take(values, 2) second_smallest - smallest end end