%%% Combined Configuration Problem (CCP) %%%
%%%%%%%%%%%%%%%%%%%
PROBLEM DESCRIPTION
%%%%%%%%%%%%%%%%%%%
This problem is an abstract problem derived from a combination of several SIEMENS product configuration
problems encountered in practice (railway interlocking systems, automation systems, etc.).
Input:
(1) a directed acyclic graph (DAG) specified by a set of its edges, where an edge corresponds to an ordered pair of vertices;
(2) type and size of each vertex,
(3) sets of vertices defining specific paths in the input DAG,
(4) a number of available colors,
(5) a number of available bins and their capacity,
(6) a set of areas,
(7) sets of DAG vertices defining possible border elements of each area and
(8) a maximal number of border elements per area.
The problem is a combination of 5 sub problems, which usually can be required to be solved separately or in combinations.
We submit the CCP as one problem, because we have empirically discovered that the inclusion of all parts
of the problem drastically deteriorates the solving process with respect to the runtime.
%%% P1 Coloring
"Every vertex must have exactly one color."
Origin: In the railway domain the given DAG represents the track layout of
a railway line. A coloring can then be thought as an assignment of resources
(e.g. computer) to the elements of the railway line. This requirement is frequently
used in configuration problems similar to the the Rack Configuration Problem [1] and
the House configuration problem [2] (e.g. during the assignment of things to cabinets,
cabinets to rooms, etc.).
%%% P2 Bin-Packing
"For every color a bin-packing problem must be solved. Every
vertex must be assigned to exactly one bin of its color and for every bin it
holds that the sum of sizes must be smaller or equal to the bin capacity."
Origin: In real-world scenarios different infrastructure elements may require
different amount of a resource. This may be hardware requirements, e.g.
a signal requiring a certain number of hardware parts, or software requirements,
e.g. an infrastructural element requiring a specific processing
time. These requirements are appearing in configuration problems similar
to the the Rack Configuration Problem [1] and
the House configuration problem [2].
%%% P3 Disjoint Paths
"Vertices of different paths cannot be colored in the same color"
Origin: In the real-world scenarios this constraint increases availability, i.e. in
the case that one resource fails, it should still be possible to get from a source
vertex of a path to a target vertex of a path. The source and target vertices of the paths are
vertices that do not have incoming/outcoming edges respectively.
%%% P4 Matching
"Each border element must be assigned to exactly one area such
that the number of selected border elements of an area does not exceed the
maximal number of border elements and all selected border elements of an
area have the same color."
Origin: This problem stems from detecting which elements of the graph are
occupied. The border elements function as detectors for object leaving or
entering an area. The PUP problem [3,4] is the more elaborated example
of this problem.
%%% P5 Connectedness
"Two vertices with the same color must be connected via
a path, that contains only vertices of that color."
Origin: Usually communication between elements controlled by different resources is more costly, therefore,
neighboring elements should be assigned to the same resource whenever possible. This problem is a specific version
of the PUP problem [3,4].
[1] Mayer, Bettex, Stumptner and Falkner:
On solving complex rack configuration problems using CSP methods.
Proceedings of the IJCAI Workshop on Configuration, 2009.
[2] Friedrich, Ryabokon, Falkner, Haselboeck, Schenner and Schreiner:
(Re)configuration based on model generation.
Proceedings of the International Workshop on Logics for Component Configuration, 2011.
[3] Aschinger, Drescher, Gottlob, Jeavons and Thorstensen:
Tackling the Partner Units Configuration Problem.
Proceedings of the International Joint Conference on Artificial Intelligence, 2011.
[4] Aschinger, Drescher, Friedrich, Gottlob, Jeavons, Ryabokon and Thorstensen:
Optimization Methods for the Partner Units Problem.
Proceedings of the CPAIOR, 2011.
%%%%%%%%%%
PREDICATES
%%%%%%%%%%
Input: nrofcolors/1, nrofbins/1, maxbinsize/1, maxborder/1, edge/2, type/2, size/2, path1/1, path2/1, edge_matching/2
Output: vertex_color/2, vertex_bin/2, bin/3, edge_matching_selected/2, usedcolor/1, usedbin/1
%%%%%%%%%%%%
Input format
%%%%%%%%%%%%
nrofcolors(Color) number of colors
nrofbins(Bin) number of bins
maxbinsize(Capacity) capacity of a bin
maxborder(C) maximal number of selected border elements
edge(Vertex1,Vertex2) edge between Vertex1 and Vertex2 in the DAG
type(Vertex,Type) type of a vertex
size(Vertex,Size) size of a vertex
pathN(Vertex) a vertex belongs to pathN
edge_matching(Area,Vertex) border elements for an area
%%%%%%%%%%%%%
Output format
%%%%%%%%%%%%%
vertex_color(Vertex,Color) a color of a vertex
vertex_bin(Vertex,Bin) a vertex in a bin
bin(Color,Bin,Vertex) a bin for a colored vertex
edge_matching_selected(Area,Vertex) a selected area for border element
usedcolor(Color) a color used in a solution
usedbin(Bin) a bin used in a solution
%%%%%%%
EXAMPLE
%%%%%%%
%%% Input:
nrofcolors(4).
nrofbins(3).
maxbinsize(5).
maxborder(3).
edge("b1","s1").
edge("s1","p1").
edge("p1","b2").
edge("b2","p2").
edge("p2","b3").
edge("b3","p3").
edge("p3","s2").
edge("s2","b4").
edge("p1","b5").
edge("b5","e1").
edge("e1","b6").
edge("b6","p3").
edge("b7","s3").
edge("s3","p4").
edge("p4","b8").
edge("b8","p5").
edge("p5","b9").
edge("b9","p6").
edge("p6","s4").
edge("s4","b10").
edge("p4","b11").
edge("b11","e2").
edge("e2","b12").
edge("b12","p6").
edge("p2","p5").
type("b1","b").
type("b2","b").
type("b3","b").
type("b4","b").
type("b5","b").
type("b6","b").
type("b7","b").
type("b8","b").
type("b9","b").
type("b10","b").
type("b11","b").
type("b12","b").
type("e1","e").
type("e2","e").
type("s1","s").
type("s2","s").
type("s3","s").
type("s4","s").
type("p1","p").
type("p2","p").
type("p3","p").
type("p4","p").
type("p5","p").
type("p6","p").
size("b1",1).
size("b2",1).
size("b3",1).
size("b4",1).
size("b5",1).
size("b6",1).
size("b7",1).
size("b8",1).
size("b9",1).
size("b10",1).
size("b11",1).
size("b12",1).
size("e1",2).
size("e2",2).
size("s1",3).
size("s2",3).
size("s3",3).
size("s4",3).
size("p1",4).
size("p2",4).
size("p3",4).
size("p4",4).
size("p5",4).
size("p6",4).
path1("b1").
path1("s1").
path1("p1").
path1("b2").
path1("p2").
path1("b3").
path1("p3").
path1("s2").
path1("b4").
path2("b7").
path2("s3").
path2("p4").
path2("b8").
path2("p5").
path2("b9").
path2("p6").
path2("s4").
path2("b10").
edge_matching("a1","b1").
edge_matching("a1","b2").
edge_matching("a1","b5").
edge_matching("a2","b5").
edge_matching("a2","b6").
edge_matching("a3","b3").
edge_matching("a3","b6").
edge_matching("a3","b4").
edge_matching("a4","b2").
edge_matching("a4","b3").
edge_matching("a4","b8").
edge_matching("a4","b9").
edge_matching("a5","b7").
edge_matching("a5","b8").
edge_matching("a5","b11").
edge_matching("a6","b9").
edge_matching("a6","b12").
edge_matching("a6","b10").
edge_matching("a7","b11").
edge_matching("a7","b12").
%%% Solution:
vertex_color("b1",1).
vertex_color("b10",4).
vertex_color("b11",4).
vertex_color("b12",4).
vertex_color("b2",3).
vertex_color("b3",3).
vertex_color("b4",3).
vertex_color("b5",1).
vertex_color("b6",1).
vertex_color("b7",2).
vertex_color("b8",2).
vertex_color("b9",4).
vertex_color("e1",1).
vertex_color("e2",4).
vertex_color("p1",1).
vertex_color("p2",3).
vertex_color("p3",3).
vertex_color("p4",2).
vertex_color("p5",2).
vertex_color("p6",4).
vertex_color("s1",1).
vertex_color("s2",3).
vertex_color("s3",2).
vertex_color("s4",4).
vertex_bin("b1",2).
vertex_bin("b10",3).
vertex_bin("b11",1).
vertex_bin("b12",3).
vertex_bin("b2",1).
vertex_bin("b3",2).
vertex_bin("b4",3).
vertex_bin("b5",3).
vertex_bin("b6",2).
vertex_bin("b7",3).
vertex_bin("b8",2).
vertex_bin("b9",3).
vertex_bin("e1",1).
vertex_bin("e2",3).
vertex_bin("p1",3).
vertex_bin("p2",2).
vertex_bin("p3",3).
vertex_bin("p4",1).
vertex_bin("p5",3).
vertex_bin("p6",2).
vertex_bin("s1",1).
vertex_bin("s2",1).
vertex_bin("s3",2).
vertex_bin("s4",1).
bin(1,1,"e1").
bin(1,1,"s1").
bin(1,2,"b1").
bin(1,2,"b6").
bin(1,3,"b5").
bin(1,3,"p1").
bin(2,1,"p4").
bin(2,2,"b8").
bin(2,2,"s3").
bin(2,3,"b7").
bin(2,3,"p5").
bin(3,1,"b2").
bin(3,1,"s2").
bin(3,2,"b3").
bin(3,2,"p2").
bin(3,3,"b4").
bin(3,3,"p3").
bin(4,1,"b11").
bin(4,1,"s4").
bin(4,2,"p6").
bin(4,3,"b10").
bin(4,3,"b12").
bin(4,3,"b9").
bin(4,3,"e2").
edge_matching_selected("a1","b1").
edge_matching_selected("a2","b5").
edge_matching_selected("a2","b6").
edge_matching_selected("a3","b4").
edge_matching_selected("a4","b2").
edge_matching_selected("a4","b3").
edge_matching_selected("a5","b7").
edge_matching_selected("a5","b8").
edge_matching_selected("a6","b10").
edge_matching_selected("a6","b9").
edge_matching_selected("a7","b11").
edge_matching_selected("a7","b12").
usedcolor(1).
usedcolor(2).
usedcolor(3).
usedcolor(4).
usedbin(1).
usedbin(2).
usedbin(3).
%%%%%%%%%
Instances
%%%%%%%%%
We divided all instances into 3 sets: simple, moderate and hard. The hard instances were not solved within
900 seconds using a combination of gringo (version 4.4.0) and clasp (version 3.0.5) on a system with
Intel i7-3930K CPU (3.20GHz), 64 GB of RAM and running Ubuntu). The moderate instances require more than 30 seconds to find a solution using the same solver/system.
%%%%%%%
AUTHORS
%%%%%%%
Anna Ryabokon, Alpen-Adria-UniversitÃ¤t Klagenfurt, Austria
Gottfried Schenner, Siemens AG Ã–sterreich, Austria