Packages
fixpoint
0.15.6
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/examples/fair_weights.ex
defmodule CPSolver.Examples.FairWeights do
alias CPSolver.IntVariable, as: Variable
alias CPSolver.Model
alias CPSolver.Constraint.Maximum
alias CPSolver.Constraint.Factory
import CPSolver.Variable.View.Factory
alias CPSolver.Objective
def model(node_map, weight_range \\ 32..64) do
{weighted_values, memory_plus_load} =
Enum.map(node_map, fn {node_id, %{memory: memory, load: load}} ->
measure = memory + load
#Variable.new(Enum.map(1..64, fn val -> val * (memory + load) end),
{mul(Variable.new(weight_range,
name: node_id), measure),
measure}
end)
|> Enum.unzip()
upper_bound = Enum.max(weight_range) * Enum.max(memory_plus_load) -
Enum.min(weight_range) * Enum.min(memory_plus_load)
IO.inspect(upper_bound, label: :upper_bound)
{max_var, max_constraint} = Factory.maximum(weighted_values)
{min_var, mix_constraint} = Factory.minimum(weighted_values)
{difference_var, difference_constraint} = Factory.subtract(max_var, min_var)
ub_constraint = Factory.leq(difference_var, upper_bound)
Model.new([difference_var, max_var, min_var] ++ weighted_values, [
ub_constraint,
max_constraint, difference_constraint, mix_constraint],
objective: Objective.minimize(difference_var)
)
end
def test(opts \\ []) do
model = model(sample())
{:ok, res} = CPSolver.solve(model, opts)
end
def sample() do
%{
"fwb4" => %{memory: 233, load: 23},
"fwb2" => %{memory: 225, load: 24},
"slb4" => %{memory: 243, load: 12},
"tpb4" => %{memory: 325, load: 27},
"xra2" => %{memory: 321, load: 25},
"tpa1" => %{memory: 306, load: 36},
"xra4" => %{memory: 316, load: 21},
"fwc3" => %{memory: 181, load: 6},
"slb1" => %{memory: 246, load: 14},
"fwa3" => %{memory: 276, load: 33},
"xrb3" => %{memory: 321, load: 24},
"fwc4" => %{memory: 183, load: 7},
"tpb3" => %{memory: 342, load: 25},
"fwb1" => %{memory: 238, load: 28},
"xra1" => %{memory: 319, load: 24},
"fwa2" => %{memory: 229, load: 23},
"tpb1" => %{memory: 305, load: 23},
"fwb3" => %{memory: 258, load: 29},
"sla2" => %{memory: 248, load: 16},
"sla4" => %{memory: 240, load: 14},
"fwc2" => %{memory: 181, load: 6},
"xrb1" => %{memory: 318, load: 26},
"tpa3" => %{memory: 319, load: 25},
"xrb2" => %{memory: 304, load: 25},
"tpa2" => %{memory: 318, load: 21},
"slb2" => %{memory: 227, load: 9},
"fwa4" => %{memory: 238, load: 22},
"sla1" => %{memory: 234, load: 17},
"sla3" => %{memory: 231, load: 16},
"fwa1" => %{memory: 258, load: 25},
"tpa4" => %{memory: 322, load: 22},
"slb3" => %{memory: 237, load: 14},
"fwc1" => %{memory: 184, load: 5},
"xra3" => %{memory: 308, load: 27},
"xrb4" => %{memory: 329, load: 26},
"tpb2" => %{memory: 320, load: 26}
}
end
end