<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">2D object reconstruction with ASP</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Alessandro</forename><surname>Dal Palù</surname></persName>
							<affiliation key="aff0">
								<orgName type="department" key="dep1">Dipartimento di Scienze Matematiche</orgName>
								<orgName type="department" key="dep2">Fisiche e Informatiche</orgName>
								<orgName type="institution">Università di Parma</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Agostino</forename><surname>Dovier</surname></persName>
							<affiliation key="aff1">
								<orgName type="department" key="dep1">Dipartimento di Scienze Matematiche</orgName>
								<orgName type="department" key="dep2">Informatiche e Fisiche</orgName>
								<orgName type="institution">Università di Udine</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Andrea</forename><surname>Formisano</surname></persName>
							<affiliation key="aff2">
								<orgName type="department">Dipartimento di Matematica e Informatica</orgName>
								<orgName type="institution">Università di Perugia</orgName>
							</affiliation>
						</author>
						<title level="a" type="main">2D object reconstruction with ASP</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">4669BCD393E24225FD98654398300D25</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-25T07:35+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>Answer set programming</term>
					<term>2D object reconstruction</term>
					<term>geometric reasoning</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Damages to cultural heritage due to human malicious actions or to natural disasters (e.g., earthquakes, tornadoes) are nowadays more and more frequent. Huge work is needed by professional restores to reproduce, as best as possible, the original artwork or architecture opera starting from the potsherds. The tool we are presenting in this paper is devised for being a digital support for this kind of work. As soon as the fragments of the opera are cataloged, a user (possibly young students, and even children, using a tablet or a smartphone as playing with a video game) can propose a partial reconstruction. The final part of the job is left to an ASP program that first computes a pre-processing task to find coherence between (sides of) fragments, and then tries to reconstruct the original object. Experiments are made here focusing on 2D reconstruction (frescoes, reliefs, etc).</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>This paper describes a declarative approach to the automated solution of object reconstruction problems. In general terms, the goal consists in recomposing an artifact by assembling the collection of its fragments. Automated tools supporting this task have wide application, because variants of such a general problem arise in many fields. Common, relatively simple, forms of the problem can be found in cardboard puzzles, such as edge-matching puzzles, packing puzzles, or jigsaw puzzles <ref type="bibr" target="#b14">[15,</ref><ref type="bibr" target="#b13">14]</ref>. Plainly, these puzzles abstract and expose in a simpler setting the core difficulties one encounters in restoring a fresco, a wall painting, or an ancient palace facade that have been damaged, for instance, as consequence of an earthquake <ref type="bibr" target="#b27">[28,</ref><ref type="bibr" target="#b21">22]</ref>. Similar tasks are the assembling of shredded documents and torn photos usually associated with forensic investigations or historical and philological studies <ref type="bibr" target="#b11">[12,</ref><ref type="bibr" target="#b15">16,</ref><ref type="bibr" target="#b32">33,</ref><ref type="bibr" target="#b24">25]</ref>. The hard problem of recomposing ancient broken artifacts, such as damaged potteries, terracottas, or sculptures, frequently emerges in archaeology <ref type="bibr" target="#b0">[1,</ref><ref type="bibr" target="#b21">22,</ref><ref type="bibr" target="#b28">29]</ref>.</p><p>The object reconstruction problem shares significant aspects with other geometrical optimization problems, such as cutting, bin-packing, and nesting problems, that are extremely relevant in industrial contexts (see <ref type="bibr" target="#b1">[2,</ref><ref type="bibr" target="#b17">18,</ref><ref type="bibr" target="#b3">4]</ref>, among many). Vast literature exists on modeling and solving any of these problems and the proposed techniques and methods are often applicable to the others thanks to the strict relationship existing among them.</p><p>Among the various formalizations, we mention here the so called pixel/raster method, the nofit polygon method, and the Phi-function method (see <ref type="bibr" target="#b1">[2]</ref> and the references therein for a detailed description). On the one hand, many alternative approaches have been proposed to solve some variants of the general problem, by using different tools and techniques such as dynamic programming, genetic algorithms, linear programming, greedy algorithms, integer programming, particle swarm optimization, (convex) optimization methods, etc. cf. <ref type="bibr" target="#b18">[19,</ref><ref type="bibr" target="#b27">28,</ref><ref type="bibr" target="#b31">32,</ref><ref type="bibr" target="#b22">23,</ref><ref type="bibr" target="#b17">18,</ref><ref type="bibr" target="#b26">27,</ref><ref type="bibr" target="#b25">26]</ref>. On the other hand, while focusing on the 2D object reconstruction problem, various approaches appeared in the literature put emphasis on different aspects/features. A first classification can be done by distinguishing between apictorial and pictorial techniques. In the former case, the solving methods are shape-based, namely they only consider the shape of the fragments to be assembled. Often some restriction on the admissible shapes is imposed, e.g., convexity and/or homogeneity of shapes, some degree of smoothness/regularity of fragments' edges, etc. (cf. <ref type="bibr" target="#b14">[15,</ref><ref type="bibr" target="#b10">11,</ref><ref type="bibr" target="#b9">10]</ref>), Conversely, other techniques rely on the availability of chromatic and pictorial information (image color, texture, features, orientation, etc.) to achieve better results <ref type="bibr" target="#b24">[25,</ref><ref type="bibr" target="#b11">12,</ref><ref type="bibr" target="#b25">26,</ref><ref type="bibr" target="#b15">16,</ref><ref type="bibr" target="#b32">33]</ref>. Other options are also sometimes considered in the literature, such as dealing with extraneous fragments, missing fragments, and eroded edges. Consequently, incompleteness and tolerances in edge-matching have to enter into play, increasing the complexity of the model/solution.</p><p>All mentioned approaches mainly exploit numerical algorithm and analytic techniques. None of them focuses on declaratively modeling and solving object reconstruction problems. To the best of our knowledge, few attempts have been pursued in exploiting logic programming or constraint programming to automate this kind of spatial/geometrical reasoning. Prolog has been used in <ref type="bibr" target="#b30">[31]</ref> to deal with cartographic map overlay, whereas <ref type="bibr" target="#b2">[3,</ref><ref type="bibr" target="#b23">24]</ref> exploit Constraint Logic Programming (CLP) to model nesting problems of non-convex polygons. A framework based on Answer Set Programming (ASP) modulo theories supporting generic spatial reasoning is described in <ref type="bibr" target="#b29">[30]</ref>. No proposal has been advanced to deal with object reconstruction problems in the specific.</p><p>In what follows we will make the initial steps towards an ASP-based framework for object reconstruction. We will restrict the treatment to the 2D case, but the very same ideas can be generalized to the 3D case.</p><p>In contrast to the proposals mentioned earlier, a purely declarative approach enables a higher-level abstraction, focusing on modeling (instead on specifically tailored algorithms), greater elaboration tolerance, and incremental modeling. The use of ASP-based non-monotonic reasoning admits incompleteness and uncertainty in modeling. This allows one to design a framework that can be incrementally completed so as to encompass an increasing number of features, such as dealing with missing fragments, damaged borders, erosion, partial pictorial information, errors, approximations, imprecise measures in fragments' extracted features, etc.</p><p>To start within a simplified setting, we assume that fragments are represented as polygons (not necessarily convex). Moreover, each edge of a fragment may be characterized by some features (pictorial info, texture, . . . ) W.l.o.g., we can represent all these features by associating a single color to the edge. For the time being we do not consider missing/extraneous fragments and eroded edges.</p><p>The paper is organized as follows. In Section 2 we briefly survey syntax and semantics of Answer Set Programming. In Section 3 we define the desired input for the instances of the problem as an ASP program for preprocessing of the input data. The preprocessed data is given as input to the main search core, described in Section 4. Some initial experimental results are presented in Section 5. Finally, a brief discussion on current and future work, and some conclusions are drawn in Section 6.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Preliminaries -ASP</head><p>Answer Set Programming (ASP) is a dialect of logic programming developed for Knowledge Representation and Reasoning, that allows a free use of negation as failure in clause bodies. Disjunctive heads are also allowed in ASP, but we will not use this feature in this paper, and therefore we will present the simplified syntax. The meaning of a ASP program is regulated by stable model semantics. We refer the reader to <ref type="bibr" target="#b16">[17,</ref><ref type="bibr" target="#b19">20]</ref> or to the recent book <ref type="bibr" target="#b12">[13]</ref> for all details.</p><p>Given a set of propositional symbols (atoms) P, an ASP rule is as follows:</p><formula xml:id="formula_0">p 0 ← p 1 , • • • , p m , not p m+1 , • • • , not p n<label>(1)</label></formula><p>where for i ∈ {0, . . . , n}, p i ∈ P. A rule is a fact if n = 0, namely, if it has the form p 0 ←. Given a rule r, the atom p 0 is referred to as the head of the rule (and denoted by head (r)), while the set of literals {p As usual, models of programs are Herbrand models that can be described by a set of atoms M . An atom is true in a model M if it belongs to M and it is false otherwise. A body is satisfied by a model M if all its positive literals belong to M and no negated literal of the body belongs to M . A rule is satisfied by a model M if whenever its body is satisfied, its head is true in M . M is an answer set of a program P if M is the minimal model of the reduct program P M , which is obtained from P and M as follows:</p><p>-Remove from P all rules r such that M ∩ body − (r) = ∅; -Remove all negated atoms from the remaining rules.</p><p>P M is a definite program, i.e., a set of rules that does not contain any occurrence of negation and as such it admits a unique minimal (Herbrand) model.</p><p>A constraint is a rule of the form</p><formula xml:id="formula_1">← p 1 , • • • , p m , not p m+1 , • • • , not p n<label>(2)</label></formula><p>This is a simply a shorthand for an ASP rule of the form p ← p, p </p><p>If the body is satisfied by a model M then p is justified either to hold or not. An aggregate has the form op{t:q}, where q is an atom (possibly involving variables), t is a term possibly sharing variables with q, and op is an aggregate operator such as #count, #sum, #max , #min. Given an answer set M , t:q stands for the collection of all ground instances of t that correspond to satisfied instances of q.</p><p>Each aggregate is evaluated by applying the operator op to such a collection of terms. We refer the reader to <ref type="bibr" target="#b8">[9]</ref> for a description of these extensions.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Input and pre-processing</head><p>An instance of our problem is a set of 2D pieces that should be assembled together. We focus on almost-perfect matches between pairs of sides belonging to different pieces. In particular, we consider only matches where the positions of sides' vertices are closer than a given tolerance. Let us assume that the input is described by the predicate poly/4 as in poly(piece-id, vertex, x, y), where piece-id ranges among the pieces. Each piece is described by a sequence of vertices (a polygon), numbered by starting from index 0 and proceeding counter-clockwise along the perimeter. Each vertex is assigned a unique pair of coordinates. Moreover, each side of each polygon is numbered by the number assigned to its first vertex (in counterclockwise order). Additional information can be added (e.g., describing the color of the side color(piece-id, vertex, color) or stating that the side is "external" in the composed object external side(piece-id, side)). We do not explicitly deal with this piece of information in what follows. It suffices to say that the pre-processing stage (described below) is in charge to process such information in order to evaluate whether two sides are compatible and could be matched to form the assembled object.</p><p>The input file contains the definition of some parameters that are used either by the pre-processing stage or by the search stage: tolerance/1, delta/1, offset/1, rangeX/2, rangeY/2, and borders/1. poly(0,0,0,0). poly(2,0,33,0). poly(0,1,13,0). poly(2,1,41,2). poly(0,2,14,8).</p><p>poly <ref type="bibr" target="#b1">(2,</ref><ref type="bibr" target="#b1">2,</ref><ref type="bibr">41,</ref><ref type="bibr" target="#b7">8)</ref>. poly(0,3,0,4).</p><p>poly <ref type="bibr" target="#b1">(2,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr" target="#b26">27,</ref><ref type="bibr" target="#b7">8)</ref>. poly(1,0,15,0). poly(3,0,41,0). poly <ref type="bibr" target="#b0">(1,</ref><ref type="bibr" target="#b0">1,</ref><ref type="bibr" target="#b28">29,</ref><ref type="bibr" target="#b3">4)</ref>. poly(3,1,50,0). poly <ref type="bibr" target="#b0">(1,</ref><ref type="bibr" target="#b1">2,</ref><ref type="bibr" target="#b22">23,</ref><ref type="bibr" target="#b11">12)</ref>. poly(3,2,50,10). poly <ref type="bibr" target="#b0">(1,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr" target="#b14">15,</ref><ref type="bibr" target="#b11">12)</ref>.</p><p>poly <ref type="bibr" target="#b2">(3,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr">42,</ref><ref type="bibr" target="#b7">8)</ref>.</p><p>A first simple input pre-processing (a translation) is executed and results are represented through the predicate poly cooR so as to set vertex 0 of each piece in position (0, 0). For instance, piece number 3 has the normalized coordinates: poly_cooR(3,0,0,0). poly_cooR(3,1,9,0). poly_cooR <ref type="bibr" target="#b2">(3,</ref><ref type="bibr" target="#b1">2,</ref><ref type="bibr" target="#b8">9,</ref><ref type="bibr" target="#b9">10)</ref>. poly_cooR <ref type="bibr" target="#b2">(3,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr" target="#b0">1,</ref><ref type="bibr" target="#b7">8)</ref>.</p><p>Rotations are allowed in order to find sides' matches, modulo an initial discretization choice (specified by the predicate delta, in our example the discretization step is set to 10). Admissible rotations are given by predicate degrees: degrees(0). degrees(X + Y) :-delta(Y), degrees(X), X + Y &lt; 360.</p><p>For each pair of pieces (p 1 , p 2 ) and for each pair of sides (i, i + 1), (j + 1, j), where (i, i + 1) is a side of p 1 and (j + 1, j) is one of p 2 , we compute whether they are compatible and what is the relative rotation needed to match them. This is done by the predicate good match, described below. The auxiliary predicate numVertices/2 counts the number of vertices of a piece. <ref type="foot" target="#foot_0">4</ref>good_match(P1,I,P2,J,Angle,L1,L2):-poly_cooR(P1,I,I1x,I1y), poly_cooR(P2,J,J1x,J1y), P1 != P2, numVertices(P1,N1), numVertices(P2,N2), poly_cooR(P1, (I+1) \ N1, I2x, I2y), poly_cooR(P2, (J+1) \ N2, J2x, J2y), ... % continued below First, the relative positions of sides i and j when vertex 0 of the two pieces is put in (0, 0) are computed. Then, each pair of sides is analyzed to assess if they are compatible and, in this case, the required rotation is computed. Compatibility means that they have roughly the same size, namely their length is the same modulo a tolerance, specified by a predicate set to 16 in our example. Since ASP only deals with integers, in order to gain enough precision in computing ratios and trigonometric values, we scale all numbers by 2 10 (effective tolerance is therefore 16  1024 = 1 64 of unit). Two auxiliary predicates storing the (discrete) tables for sine and cosine are used. Going back to Example 1, with a tolerance set to 20 we obtain good match(0,1,3,3,0). good match(3,3,0,1,0). good match(1,0,0,2,0). good match(0,2,1,0,0). good match(2,3,1,1,0). good match(1,1,2,3,0). good match <ref type="bibr" target="#b1">(2,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr" target="#b0">1,</ref><ref type="bibr">37)</ref>.</p><p>good match(3,1,2,3,323). good match(3,2,2,0,0). good match(2,0,3,2,0).</p><p>Observe, for instance, that side 1 of piece 3 can match with side 3 of piece 2 with an angle of 323 degrees (see also Figure <ref type="figure" target="#fig_0">1-right</ref>). Of course the predicate is symmetric (in the first argument) while angles are explementary to each other.</p><p>As last part of pre-processing, the predicate check ccw(P1,I,Sign) computes the vector product of each three consecutive vertices and stores it in Sign. A constraint enforces that each computed value must be positive (i.e. the vertices are arranged along the counter-clockwise enumeration). </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Main encoding</head><p>Given a problem instance, the outcome of the pre-processing consists of the extensional definitions of the predicates poly cooR, good match, the auxiliary predicates numVertices/2, polyId/1, the extensional definition of degrees/1, and the parameters defined by the user. In particular offset/1 is used to define the predicate range(-Of..Of) :-offset(Of). The trigonometric table is also included.</p><p>Given the set of possible matchings (predicate good match) we would like to select those that lead to a coherent shape of the composed object. The overall idea is to place the first piece (i.e., first vertex in (0, 0) keeping the same rotation as in the pre-processed input) and then placing the others by selecting matchings. Given our hypothesis, selecting a match imposes a unique roto-translation to be applied to the next piece and therefore admissible matches eventually lead to a complete placement of all polygons.</p><p>The process is driven by a tree construction, where piece 0 is at the root. Selected matchings (predicate match) are considered as "directional", thus leading from the root to leaves. Each match defines a matching relation between an already placed piece and the one added next, it also specifies which vertices are paired. Each match is selected from the good match candidates. Each piece should appear in the tree, namely it should be reachable from the root following match edges. Additional constraints are then added to filter out results (e.g., to delimit a global bounding box and to impose some "non-overlapping" constraints).</p><p>Each possible match listed by predicate good match can be non-deterministically elected to a match or not. Only one direction of the matching is retained and every side of a piece can be matched at most once: { match(P1,I,P2,J) } :-polyId(P1), polyId(P2), P1 != P2, good_match(P1,I,P2,J,A). :-match(P2,A,P1,B), match(P1,B,P2,A). :-match(P1,I,P2,J2), match(P1,I,P3,J3), P2!=P3. :-match(P1,I1,P2,J), match(P3,I2,P2,J), P1!=P3.</p><p>In order to reduce the size of the produced grounding, because of the combinatorial combination of all admitted rotations and translations of pieces, we decouple the rotations from translations during the first part of the solving/reasoning. In particular, we compute the rotation for each piece, with respect to piece 0, as a simple combination of sequence of matches. Starting from the root, each selected match is associated to an angle obtained as the sum of those angles needed for the matches in the path leading to it. Furthermore, we impose that each piece should be reached and that it is reached in a unique way (precisely, with a unique rotation angle): reached(0,0). reached(P2, Ang1+Ang2):-P2&gt;0, reached(P,Ang1), degrees(Ang1), match(P1,I,P2,J), good_match(P,I,P2,J,Ang2). :-not reached(P,_), polyId(P). :-polyId(P), reached(P,A1), reached(P,A2), A1!=A2.</p><p>This allow to discard possible sets of matches that are incoherent, from a rotation point of view, i.e. they build a directed acyclic graph, where a node should be rotated in multiple angles at the same time. The graph is not required to be a (spanning) tree. There can be two paths from the root to the same piece as long as the rotation angle obtained in the two paths is the same. For simplicity, we refer to a tree structure, being the minimally sufficient one to produce a complete placement.</p><p>When the tree defined by match is generated, we need to check whether the proposed solution is admissible from the spatial point of view. The process requires to actually rotate pieces in place and translate them according to vertices being matched. We compute the placement of the pieces on the basis of the chosen match. Starting with the knowledge of the coordinates of vertices of the piece P1, the match of P1 with P2, the already computed absolute Angle, and the relative shift that should occur between matched vertices, the placement is computed. (As before, we scale numbers by 2 10 to add 10 binary digits of precision.) We also require that all pieces are placed exactly once and discard solutions that involve multiple placements for any piece. The predicate best Shift computes the new absolute coordinates (Delta) of vertex J of the piece P2, i.e. matching the vertex I + 1 of the piece P1. Therefore in the placement, P2 is translated so that J lies in the origin, and then it is rotated (around vertex J). Finally, it is translated by Delta, so that vertex J ends up in the correct location. best_Shift(P1,P2,Deltax,Deltay):-P2 &gt; 0, range(Deltax), range(Deltay), match(P1,I,P2,J), numVertices(P1,N1), placement(P1,(I+1)\N1,X2,Y2), X2=1024*Deltax, Y2=1024*Deltay.</p><p>These constraints exclude matchings that allow two different "best shift":</p><p>:-best_Shift(P1,P2,DX1,DY1),best_Shift(P1,P2,DX2,DY2),DX1&lt;DX2. :-best_Shift(P1,P2,DX1,DY1),best_Shift(P1,P2,DX2,DY2),DY1&lt;DY2.</p><p>At the end the values provided by placement are divided by 2 10 to rescale in the initial sizes, generating the output predicate poly out/4 which defines the final positions of pieces. Clearly, more solutions might be possible. For example, Figure <ref type="figure" target="#fig_3">2</ref> shows two solutions to our sample problem. We list here the results for the vertices "0" of the four pieces in the leftmost solution of Figure <ref type="figure" target="#fig_3">2</ref>: poly_out(0,0,0,0) poly_out(1,0,0,4) poly_out <ref type="bibr" target="#b1">(2,</ref><ref type="bibr">0,</ref><ref type="bibr" target="#b13">14,</ref><ref type="bibr" target="#b7">8)</ref> poly_out(3,0,13,0)</p><p>Input parameters rangeX/2, rangeX/2, and borders are used to set a bounding box around the object to be reconstructed. If the predicate borders is set to yes, we further require that the sides of the bounding box include a vertex of a piece. %%% Bounding Box: :-poly_out(A,B,X,Y), rangeX(_,Max), X &gt; Max. :-poly_out(A,B,X,Y), rangeX(Min,_), X &lt; Min. :-poly_out(A,B,X,Y), rangeY(_,Max), Y &gt; Max. :-poly_out(A,B,X,Y), rangeY(Min,Max), Y &lt; Min. %%% Borders filled p1 :-poly_out(A,B,MinX,MinY), rangeX(MinX,MaxX), rangeY(MinY,MaxY). p2 :-poly_out(A,B,MinX,MaxY), rangeX(MinX,MaxX), rangeY(MinY,MaxY). p3 :-poly_out(A,B,MaxX,MinY), rangeX(MinX,MaxX), rangeY(MinY,MaxY). p4 :-poly_out(A,B,MaxX,MaxY), rangeX(MinX,MaxX), rangeY(MinY,MaxY). borders :-p1,p2,p3,p4. borders :-not borders(yes). :-not borders.</p><p>A further constraint is needed to avoid overlaps between pieces. We experimented with an approach resembling pixel/raster method mentioned in the introduction. In this case, the idea consists introducing a discretization of the plane into points and in marking each point depending on which piece covers it. This approach turned out to cause too much inefficiency during the grounding stage and demonstrated not suitable to process instances of reasonable size. We then opted in favor of a technique that directly checks that no pairs of sides intersect. The intuition about this approach can be grasped by considering the following constraint (where, for simplicity, we avoid explicitly listing the auxiliary predicates used in the body). Namely, given the positions of two sides (predicate segment) of two different polygons, the constraint rules out each solution where the two segment cross each-other. Crossing condition is detected by considering the position of each vertex of a segment with respect to the other segment (predicate direction).</p><p>:-polyId(Pid1), polyId(Pid2), Pid1 &lt; Pid2, placement(Pid1,S1,P1x,P1y), placement(Pid1,S1b,Q1x,Q1y), placement(Pid2,S2,P2x,P2y), placement(Pid2,S2b,Q2x,Q2y), segment(Pid1, S1, P1x, P1y, Q1x, Q1y), segment(Pid2, S2, P2x, P2y, Q2x, Q2y), direction(Pid2, S2, P1x, P1y, D1), direction(Pid2, S2, Q1x, Q1y, D2), D1*D2&lt;0, direction(Pid1, S1, P2x, P2y, D3), direction(Pid1, S1, Q2x, Q2y, D4), D3*D4&lt;0.</p><p>However, also this encoding causes a too much large grounding. To improve efficiency, some program transformation techniques (such as folding/unfolding of predicates' definitions and some precomputation of some predicates' extensions) have been applied to the above mentioned encoding, This permitted to achieve overall acceptable running times in the grounding and in the solving stages.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Results</head><p>In order to test the tool, we wrote a benchmark generator working in the following way. Let us consider a square of size size (e.g., made of glass). Suppose now it is broken in exactly p points, where p is 1,2,. . . . The generator randomly chooses p points and identifies a set of triangular pieces as shown in Figure <ref type="figure" target="#fig_4">3</ref>. Tolerance in preprocessing has been fixed to 10 (see Section 3). A smaller tolerance would reduce the number of possible good matches (but we decided to leave a bit of redundancy, as needed in real cases where several types of errors can arise). The size of the box is stored in rangeX and rangeY and used also in offset. Thus, the predicate range holds for values from −size to +size. Borders are required to be matched.</p><p>Discretization for angles was set to 1 • . This gives a decent degree of approximation but also makes the grounding stage rather heavy. However, experiments made with bigger values (e.g., 2, 3, 10) led to similar running times and to poorer results. If we accept less angles, we need to increase the tolerance to guarantee the same good matches.</p><p>For each size and for each number of internal points p = 1, 2, 3, 4, 5 (save for very small instances where we used only the small values of p) we generate 5 random instances. In Figure <ref type="figure" target="#fig_5">4</ref> we report the graph of the running times averaged on the 5 instances. Instances' size are in the x-axis, running times are in the y-axis, one line for each number of points p is drawn.</p><p>Experiments were conducted on Ubuntu Bash of Windows 10 Pro Desktop, Intel i7-2600, 3.4GHz, RAM 12GB, using clingo 4.5.4 (gringo 4.5.4, clasp 3.1.4). Although it does not emerge by looking at the average scenario, it is important to report that the grounding takes most of the time and that the running time strongly relies on how many "good matches" the instance admits. As a limit case, if every side has exactly one good match, matchings are deterministically assigned, and hence running times are close to zero even for large instances.</p><p>As one might expect running time grows either as the box size grows or as the number of broken points grows.</p><p>Redefining the range predicate (currently assigned by the input offset parameter) proved to be extremely effective. This sensibly reduces grounding and search time. For instance, in the case of the slowest computation of the set (instance number 5 of the benchmark set with size = 20 and p = 5), replacing the definition of range(-20..20). with range(1..13). reduced the running time from 326s to less than 2s. Therefore, a good strategy could be the one of starting with a low value for offset. The future work will focus on scaling to larger and real instances. In particular, in order to test ASP capabilities in solving such puzzles, we plan to acquire real jigsaw puzzles (with hundreds of pieces). Some pre-processing with OpenCV will be deployed to identify the polylines that define each piece. Moreover, image color, texture and features around borders can be added to the graph of compatibility by edge attributes, as modelled above. In particular, we plan to build a pipeline that acquires batch of pieces, segments them, extracts the outlines and Fig. <ref type="figure">5</ref>. The visualization/interaction tool finally pairwise compares the shapes/features. The shape compatibility is vector based and therefore it should efficiently identify the graph. We expect to handle polylines made of hundreds of segments, in order to capture the piece peculiar features. The pre-processed output will describe the good match compatibility graph, to be used as input by the ASP solver. The pre-processing procedure we have in mind is similar to the one described in <ref type="bibr" target="#b20">[21]</ref>. However, the reasoning part will take advantage of ASP reasoning engine, which differentiate substantially our work, in comparison to that work and other approaches, e.g. <ref type="bibr" target="#b24">[25,</ref><ref type="bibr" target="#b11">12,</ref><ref type="bibr" target="#b9">10]</ref> Current results show that ASP reasoning takes a small fraction of time compared to grounding time. When dealing with larger instances, we expect to face two main issues: the first is the ground program size, which requires more refined models and the handling of integers. The second issue is the search itself, which may show an increase in the reasoning time, due to the NP-complete nature of the problem. In this case, especially for dense graphs with multiple choices for each piece, we plan to introduce more tailored graph-based heuristics.</p><p>Another line of research is devoted to support semi-automatic solving process, where partial solutions are iteratively refined, by interleaving domain expert feedback and ASP inferences. This is rather common setup for tasks where the expert can not precisely formalise his/her knowledge into a complete set of rules that drive the identification of the solution. The core of the tool is under development. It is designed to help the assembly process (see Figure <ref type="figure">5</ref>): it allows to draw and manipulate pieces, to generate the underlying ASP code and to visualize solutions. In the future, it may interface with 2D/3D scanners and guide the assisted matching process with interactive suggestions and auto-completions. Ad-hoc propagators can be exploited during the search following the ideas of <ref type="bibr" target="#b4">[5]</ref>.</p><p>Finally, we believe this problem can well suit a GPU implementation of the ASP solver <ref type="bibr" target="#b6">[7,</ref><ref type="bibr" target="#b7">8,</ref><ref type="bibr" target="#b5">6]</ref>. In particular, the presence of 2D/3D geometrical manipulations and the viable parallel exploration of (almost) independent regions of the graph represent good candidates for an efficient GPU deployment.</p><p>To sum up, this paper represents an initial step for the development of tools for object reconstruction with the advantages of declarative programming and of the speed of modern ASP solvers.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Fig. 1 .</head><label>1</label><figDesc>Fig.1. Representation of pieces of Example 1 and the graph of their possible side-side matchings. Every segment length occurs exactly twice among the pieces, except for those colored in red that occur three times.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head></head><label></label><figDesc>V1x = I2x-I1x, V1y = I2y-I1y, V2x = -J2x+J1x, V2y = -J2y+J1y, degrees(Angle), cosTable(Angle,Cos), sinTable(Angle,Sin), %% position of the points after rotation V2Rx = V2x * Cos -V2y * Sin, V2Ry = V2y * Cos + V2x * Sin, V1Rx = 1024 * V1x, V1Ry = 1024 * V1y, %% Check of the sizes tolerance(T1), V1Rx &lt; V2Rx + T1, V1Rx &gt; V2Rx -T1, V1Ry &lt; V2Ry + T1, V1Ry &gt; V2Ry -T1.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head></head><label></label><figDesc>check_ccw(P1,I,Sign):-poly_cooR(P1, I, I1x, I1y), numVertices(P1,N1), I1 = (I+1) \ N1, I2 = (I+2) \ N1, poly_cooR(P1,I1,I2x,I2y), poly_cooR(P1,I2,I3x,I3y), %% Vectors are computed and used to compute the sign V1x=I2x*V2y -V1y*V2x. %%% The sign cannot be negative :-check_ccw(_,_,S), S&lt;0.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Fig. 2 .</head><label>2</label><figDesc>Fig. 2. Two possible solutions</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>Fig. 3 .</head><label>3</label><figDesc>Fig. 3. Three simple benchmark instances, with p = 1, 2, 3. Figures comes from a Postscript file generated by running a script on the clingo output</figDesc><graphic coords="11,265.83,268.27,86.46,91.91" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_5"><head>Fig. 4 .</head><label>4</label><figDesc>Fig. 4. Results of the running time averaged by random instances of the same size and number of "broken points"</figDesc><graphic coords="12,152.06,281.37,311.24,183.96" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>1 , • • • , p m , not p m+1 , • • • , not p n } is referred to as the body of the rule (and denoted by body(r)). Customarily, body +(r) = {p 1 , • • • , p m } and body − (r) = {p m+1 , • • • , p n }. An ASP program is a collection of ASP rules.ASP syntax allows also first-order atoms of the form p(t 1 , . . . , t k ), where p is a predicate symbol and t 1 , . . . , t k are variables and/or constants (nested terms are not allowed). Given a program P , the ASP program composed by all the ground rules obtained replacing all variables in a clause with constant symbols in all possible ways is called the grounding of P . Most ASP solvers start an execution by grounding the program, thus removing all variables.</figDesc><table /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head></head><label></label><figDesc>1 , • • • , p m , not p m+1 , • • • , not p n , where p does not occur elsewhere in the program. A constraint states explicitly that it is impossible that in a model M all p 1 , . . . , p m are true and all p m+1 , . . . , p n are not. Other syntactical extensions are commonly employed, such as choice rules or aggregates. A choice rule is of the form {p} ← body</figDesc><table /></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_0">Notice that \ denotes the modulo operation in the ASP syntax of the grounder GRINGO 4. Here it is used to compute the successor of a vertex (0 → 1, 1 → 2, . . . , n → 0) in the order described earlier.</note>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Acknowledgments. The drawing interface was implemented by Thomas F. Benzoni, as part of his bachelors's thesis at University of Perugia. A. Dal Palù, A. Dovier, and A. Formisano are INdAM GNCS members. The research presented in the paper is partially supported by grants: INdAM GNCS 2017 "DECORE", B.I.M. 2018.0419.021, RdB-UniPG2016/17 "YASMIN", and PRID UniUD "ENCASE".</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">An efficient technique to recompose archaeological artifacts from fragments</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">S</forename><surname>Belenguer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><forename type="middle">V</forename><surname>Vidal</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Virtual Systems &amp; Multimedia</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="337" to="344" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">The geometry of nesting problems: A tutorial</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">A</forename><surname>Bennell</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">F</forename><surname>Oliveira</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">European Journal of Operational Research</title>
		<imprint>
			<biblScope unit="volume">184</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="397" to="415" />
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Solving nesting problems with nonconvex polygons by constraint logic programming</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">A</forename><surname>Carravilla</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Ribeiro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">F</forename><surname>Oliveira</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">International Transactions in Operational Research</title>
		<imprint>
			<biblScope unit="volume">10</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="651" to="663" />
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Mathematical model and efficient algorithms for object packing problem</title>
		<author>
			<persName><forename type="first">N</forename><forename type="middle">I</forename><surname>Chernov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><forename type="middle">G</forename><surname>Stoyan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Romanova</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Computational Geometry</title>
		<imprint>
			<biblScope unit="volume">43</biblScope>
			<biblScope unit="issue">5</biblScope>
			<biblScope unit="page" from="535" to="553" />
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Constraints, lazy constraints, or propagators in ASP solving: An empirical analysis</title>
		<author>
			<persName><forename type="first">B</forename><surname>Cuteri</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Dodaro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Ricca</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Schüller</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Theory and Practice of Logic Programming</title>
		<imprint>
			<biblScope unit="volume">17</biblScope>
			<biblScope unit="issue">5-6</biblScope>
			<biblScope unit="page" from="780" to="799" />
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">CUD@SAT: SAT solving on GPUs</title>
		<author>
			<persName><forename type="first">A</forename><surname>Palù</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Dovier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Formisano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Pontelli</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Experimental &amp; Theoretical Artificial Intelligence</title>
		<imprint>
			<biblScope unit="volume">27</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="293" to="316" />
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Parallel answer set programming</title>
		<author>
			<persName><forename type="first">A</forename><surname>Dovier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Formisano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Pontelli</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Handbook of Parallel Constraint Reasoning</title>
				<editor>
			<persName><forename type="first">Y</forename><surname>Hamadi</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">L</forename><surname>Sais</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2018">2018</date>
			<biblScope unit="page" from="237" to="282" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">A GPU implementation of the ASP computation</title>
		<author>
			<persName><forename type="first">A</forename><surname>Dovier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Formisano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Pontelli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Vella</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Symposium on Practical Aspects of Declarative Languages</title>
				<editor>
			<persName><forename type="first">M</forename><surname>Gavanelli</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><forename type="middle">H</forename><surname>Reppy</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="volume">9585</biblScope>
			<biblScope unit="page" from="30" to="47" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Answer Set Solving in Practice</title>
		<author>
			<persName><forename type="first">M</forename><surname>Gebser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Kaminski</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Kaufmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Schaub</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Synthesis Lectures on Artificial Intelligence and Machine Learning</title>
				<imprint>
			<publisher>Morgan &amp; Claypool Publishers</publisher>
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">A global approach to automatic solution of jigsaw puzzles</title>
		<author>
			<persName><forename type="first">D</forename><surname>Goldberg</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Malon</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">W</forename><surname>Bern</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Computational Geometry</title>
		<imprint>
			<biblScope unit="volume">28</biblScope>
			<biblScope unit="issue">2-3</biblScope>
			<biblScope unit="page" from="165" to="174" />
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Automatic solution of jigsaw puzzles</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">J</forename><surname>Hoff</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">J</forename><surname>Olver</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Mathematical Imaging and Vision</title>
		<imprint>
			<biblScope unit="volume">49</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="234" to="250" />
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Reconstructing shredded documents through feature matching</title>
		<author>
			<persName><forename type="first">E</forename><surname>Justino</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">S</forename><surname>Oliveira</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Freitas</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Forensic science international</title>
		<imprint>
			<biblScope unit="volume">160</biblScope>
			<biblScope unit="issue">2-3</biblScope>
			<biblScope unit="page" from="140" to="147" />
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<title level="m" type="main">Declarative Logic Programming: Theory, Systems, and Applications</title>
		<author>
			<persName><forename type="first">M</forename><surname>Kifer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Liu</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2018">2018</date>
			<publisher>ACM</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Scientific puzzle solving: Current techniques and applications</title>
		<author>
			<persName><forename type="first">F</forename><surname>Kleber</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Sablatnig</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Computer Applications and Quantitative Methods in Archaeology: Making History Interactive</title>
				<imprint>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">A global approach for solving edgematching puzzles</title>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">Z</forename><surname>Kovalsky</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Glasner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Basri</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIAM Journal on Imaging Sciences</title>
		<imprint>
			<biblScope unit="volume">8</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="916" to="938" />
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Automated assembly of shredded pieces from multiple photos</title>
		<author>
			<persName><forename type="first">H</forename><surname>Liu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Cao</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Yan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transaction on Multimedia</title>
		<imprint>
			<biblScope unit="volume">13</biblScope>
			<biblScope unit="issue">5</biblScope>
			<biblScope unit="page" from="1154" to="1162" />
			<date type="published" when="2011">2011</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Stable models and an alternative logic programming paradigm</title>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">W</forename><surname>Marek</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Truszczyński</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">The Logic Programming Paradigm</title>
				<imprint>
			<publisher>Springer Verlag</publisher>
			<date type="published" when="1999">1999</date>
			<biblScope unit="page" from="375" to="398" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Matheuristics for the irregular bin packing problem with free rotations</title>
		<author>
			<persName><forename type="first">A</forename><surname>Martinez-Sykora</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Alvarez-Valdés</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">A</forename><surname>Bennell</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Ruiz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">M</forename><surname>Tamarit</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">European Journal of Operational Research</title>
		<imprint>
			<biblScope unit="volume">258</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="440" to="455" />
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Solving square jigsaw puzzles using dynamic programming and the Hungarian procedure</title>
		<author>
			<persName><forename type="first">A</forename><surname>Naif</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">American Journal of Applied Sciences</title>
		<imprint>
			<biblScope unit="volume">6</biblScope>
			<biblScope unit="page">11</biblScope>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Logic programs with stable model semantics as a constraint programming paradigm</title>
		<author>
			<persName><forename type="first">I</forename><surname>Niemelä</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Annals of Mathematics and Artificial Intelligence</title>
		<imprint>
			<biblScope unit="volume">25</biblScope>
			<biblScope unit="issue">3-4</biblScope>
			<biblScope unit="page" from="241" to="273" />
			<date type="published" when="1999">1999</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<title level="m" type="main">Automatic assembly of jigsaw puzzles from digital images</title>
		<author>
			<persName><forename type="first">P</forename><surname>Ondrúşka</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2011">2011</date>
		</imprint>
		<respStmt>
			<orgName>Charles University in Prague, Department of Software Engineering</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Bachelor Thesis</note>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">A survey of geometric analysis in cultural heritage</title>
		<author>
			<persName><forename type="first">R</forename><surname>Pintus</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Pal</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Yang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Weyrich</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Gobbetti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">E</forename><surname>Rushmeier</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Computer Graphics Forum</title>
		<imprint>
			<biblScope unit="volume">35</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="4" to="31" />
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">A fully automated greedy square jigsaw puzzle solver</title>
		<author>
			<persName><forename type="first">D</forename><surname>Pomeranz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Shemesh</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Ben-Shahar</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE Conference on Computer Vision and Pattern Recognition</title>
				<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2011">2011</date>
			<biblScope unit="page" from="9" to="16" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">A global constraint for nesting problems</title>
		<author>
			<persName><forename type="first">C</forename><surname>Ribeiro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">A</forename><surname>Carravilla</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Artificial Intelligence Reviews</title>
		<imprint>
			<biblScope unit="volume">30</biblScope>
			<biblScope unit="issue">1-4</biblScope>
			<biblScope unit="page" from="99" to="118" />
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<analytic>
		<title level="a" type="main">A texture based matching approach for automated assembly of puzzles</title>
		<author>
			<persName><forename type="first">M</forename></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">¸</forename><surname>Sagiroglu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Erçil</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Pattern Recognition</title>
				<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="1036" to="1041" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<analytic>
		<title level="a" type="main">Optimization for automated assembly of puzzles</title>
		<author>
			<persName><forename type="first">M</forename></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">¸</forename><surname>Sagiroglu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Erçil</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">TOP: An Official Journal of the Spanish Society of Statistics and Operations Research</title>
		<imprint>
			<biblScope unit="volume">18</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="321" to="338" />
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<analytic>
		<title level="a" type="main">A particle swarm optimization algorithm for a 2D irregular strip packing problem</title>
		<author>
			<persName><forename type="first">M</forename><surname>Shalaby</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Kashkoush</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">American Journal of Operations Research</title>
		<imprint>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="page" from="268" to="278" />
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b27">
	<analytic>
		<title level="a" type="main">Wall painting reconstruction using a genetic algorithm</title>
		<author>
			<persName><forename type="first">E</forename><surname>Sizikova</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Funkhouser</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal on computing and cultural heritage</title>
		<imprint>
			<biblScope unit="volume">11</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page">17</biblScope>
			<date type="published" when="2017-12">Dec. 2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<analytic>
		<title level="a" type="main">A totally new digital 3D approach for reassembling fractured archaeological potteries using thickness measurements</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">I</forename><surname>Stamatopoulos</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C.-N</forename><surname>Anagnostopoulos</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">The e-Journal of the International Measurement Confederation</title>
		<imprint>
			<biblScope unit="volume">6</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="18" to="28" />
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
	<note>ACTA IMEKO)</note>
</biblStruct>

<biblStruct xml:id="b29">
	<analytic>
		<title level="a" type="main">Non-monotonic spatial reasoning with answer set programming modulo theories</title>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">A</forename><surname>Walega</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">P L</forename><surname>Schultz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Bhatt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Theory and Practice of Logic Programming</title>
		<imprint>
			<biblScope unit="volume">17</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="205" to="225" />
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b30">
	<analytic>
		<title level="a" type="main">A logic programming approach to cartographic map overlay</title>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">Y F</forename><surname>Wu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">R</forename><surname>Franklin</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Computational Intelligence</title>
		<imprint>
			<biblScope unit="volume">6</biblScope>
			<biblScope unit="page" from="61" to="70" />
			<date type="published" when="1990">1990</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b31">
	<analytic>
		<title level="a" type="main">Solving jigsaw puzzles with linear programming</title>
		<author>
			<persName><forename type="first">R</forename><surname>Yu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Russell</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Agapito</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">British Machine Vision Conference</title>
				<editor>
			<persName><forename type="first">R</forename><forename type="middle">C</forename><surname>Wilson</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">E</forename><forename type="middle">R</forename><surname>Hancock</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">W</forename><forename type="middle">A P</forename><surname>Smith</surname></persName>
		</editor>
		<imprint>
			<publisher>BMVA Press</publisher>
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b32">
	<analytic>
		<title level="a" type="main">A graph-based optimization algorithm for fragmented image reassembly</title>
		<author>
			<persName><forename type="first">K</forename><surname>Zhang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">X</forename><surname>Li</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Graphical Models</title>
		<imprint>
			<biblScope unit="volume">76</biblScope>
			<biblScope unit="issue">5</biblScope>
			<biblScope unit="page" from="484" to="495" />
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
