Current section

Files

Jump to
fixpoint lib solver search strategy variable max_regret.ex
Raw

lib/solver/search/strategy/variable/max_regret.ex

defmodule CPSolver.Search.VariableSelector.MaxRegret do
alias CPSolver.Variable.Interface
alias CPSolver.DefaultDomain, as: Domain
alias CPSolver.Utils
## Choose the variable(s) with largest difference
## between the two smallest values in its domain.
def select(variables, space_data) do
largest_difference(variables, space_data)
end
defp largest_difference(variables, _space_data) do
Utils.maximals(variables, &difference/1)
end
defp difference(variable) do
values = Interface.domain(variable) |> Domain.to_list()
[smallest, second_smallest] = Enum.take(values, 2)
second_smallest - smallest
end
end