Packages
fixpoint
0.21.0
0.22.1
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.6
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.18.2
0.18.1
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.13.5
0.13.4
0.13.2
0.13.1
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.2
0.12.1
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.46
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.28
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.1.3
0.1.2
0.1.1
0.1.0
Constraint Programming Solver
Current section
Files
Jump to
Current section
Files
lib/solver/search/utils.ex
defmodule CPSolver.Search.Utils do
alias CPSolver.Variable.UnfixedTracker, as: Tracker
def process(data, %{initial: initial, reducer_fun: reducer_fun, postprocess_fun: postprocess_fun} = _processor, ordered? \\ false) do
Tracker.iterate(data, initial, reducer_fun, ordered?)
|> postprocess_fun.()
end
## Pick all minimal elements according to given minimization function
def minimals(data, min_by_fun, postprocess_fun \\ fn {x, _} -> x end) do
process(data, minimals_processor(min_by_fun, postprocess_fun), false)
end
## Pick all maximal elements according to given maximization function
def maximals(data, max_by_fun, postprocess_fun \\ fn {x, _} -> x end) do
process(data, maximals_processor(max_by_fun, postprocess_fun), false)
end
def minimals_processor(min_by_fun, postprocess_fun) do
processor(
{[], nil},
fn var, {minimals_acc, current_min} = acc ->
val = min_by_fun.(var)
cond do
is_nil(current_min) || val < current_min -> {[var], val}
is_nil(val) || val > current_min -> acc
val == current_min -> {[var | minimals_acc], current_min}
end
end,
postprocess_fun
)
end
def maximals_processor(max_by_fun, postprocess_fun) do
processor(
{
[],
-1
},
fn var, {maximals_acc, current_max} = acc ->
val = max_by_fun.(var)
cond do
is_nil(val) || val < current_max -> acc
val > current_max -> {[var], val}
val == current_max -> {[var | maximals_acc], val}
end
end,
postprocess_fun
)
end
def processor(initial, reducer_fun, postprocess_fun \\ fn x -> x end) do
%{initial: initial, reducer_fun: reducer_fun, postprocess_fun: postprocess_fun}
end
end