List of

1.1 A Generic Local Search ...... 6 1.2 The DPLL Algorithm ...... 7 1.3 The CDCL Algorithm ...... 8 2.1 The General Framework of the Procedure CreateCubes ...... 39 2.2 The Procedure CreateCubes∗ with the Cutoff Mechanism ...... 41 2.3 The Pseudo-Code of SolveCubes Using the Partition ...... 43 3.1 Linear Search SAT-UNSAT Algorithm ...... 67 3.2 Linear Search UNSAT-SAT Algorithm ...... 68 3.3 WMSU3 Algorithm ...... 69 3.4 Fu-Malik for Weighted MaxSAT Algorithm ...... 70 4.1 Pseudocode of QCDCL ...... 109 4.2 Splitting Algorithm for QBF Evaluation ...... 112 5.1 The CS-SDSMT Algorithm ...... 150 5.2 An -based Reconciliation Algorithm ...... 159 7.1 Naive Computation of the Least Model ...... 241 7.2 Basic SMODELS Procedure ...... 243 7.3 Parallel Grounding on Beowulf Cluster (from [6]) ...... 248 7.4 Component Level Parallelism ...... 249 7.5 Rule Level Parallelism (adapted from [68]) ...... 250 7.6 Single-Rule Level Parallelism (adapted from [68]) ...... 251 7.7 Overall Structure of a Parallel Search ASP Computation ...... 256 7.8 Naive Lookahead ...... 263 7.9 Parallel Lookahead ...... 263 7.10 GPU-ASP-Computation ...... 267 7.11 Stratified Datalog Computation ...... 272 8.1 A Generic ...... 284 8.2 A Generic Branch-and-Bound Algorithm ...... 287 8.3 Basic Racing Algorithm ...... 309 8.4 Static Load-Balancing Algorithm ...... 310 8.5 Master (Master-Worker) ...... 312 8.6 Worker (Master-Worker) ...... 312

© Springer International Publishing AG, part of Springer Nature 2018 667 Y. Hamadi und L. Sais (eds.), Handbook of Parallel Constraint Reasoning, https://doi.org/10.1007/978-3-319-63516-3 668 Alejandro Arbelaez, Deepak Mehta, Barry O’Sullivan, and Luis Quesada

8.7 Supervisor (Supervisor-Worker) ...... 314 8.8 Worker (Supervisor-Worker) ...... 315 8.9 Master (Master-Hub-Worker) ...... 316 8.10 Hub Master (Master-Hub-Worker) ...... 317 8.11 Worker (Master-Hub-Worker) ...... 318 8.12 Self Coordination Algorithm ...... 318 11.1 A* ...... 423 11.2 Simple Parallel A* (SPA*) ...... 427 11.3 Decentralized A* with Local OPEN/CLOSED lists ...... 428 12.1 Depth-First Search Algorithm ...... 474 12.2 Sequential Emptiness Check for Weak TGBAs Based on DFS .....476 12.3 Nested Depth-First Search Algorithm ...... 477 12.4 SCC-Based Emptiness Check ...... 480 12.5 A Parallel Search Algorithm for Checking the Emptiness of Terminal Automata ...... 482 12.6 A parallel DFS algorithm for checking emptiness of weak automata 483 12.7 CNDFS, a Multi-Core Algorithm for LTL ...... 486 12.8 Concurrent Union-Find Data Structure ...... 489 12.9 Swarmed SCC-Based Algorithm ...... 490 12.10 UFSCC Algorithm: Improved Swarmed SCC Algorithm ...... 491 12.11 OWCTY Algorithm ...... 495 12.12 MAP Algorithm ...... 496 13.1 The BDD Algorithm and, with the BDDs x and y as Parameters . . . 515 13.2 The Algorithm (left) is Implemented (right) Using SPAWN, SYNC and CALL ...... 520 13.3 The Implementation of Work-Stealing Using Leapfrogging when Waiting for a Stolen Task to Finish, i.e., steal from the thief ...... 522 13.4 Parallelized BDD Algorithm exists, with the BDD x and V the Cube of Variables that are Abstracted via Existential Quantification . 523 13.5 The Parallel Algorithm relnext, which Given the BDDs S (representing a set of states), R (representing a transition relation)

and V (the cube of interleaved variables x ∪ x ) Computes the Set of Successor States Defined on x, i.e., ∃x: (S ∧ R) [x := x].We Assume that all Variables in R are also in V ...... 524 13.6 Algorithm for Parallel find-or-insert of the Hash Table, with 512 Buckets per Region. The Variable myregion is a Thread-Specific Variable ...... 530 13.7 The cache-put Algorithm ...... 532 13.8 The cache-get Algorithm ...... 533 14.1 Tree Search Algorithm ...... 552 14.2 HS-TREE ALGORITHM ...... 553 14.3 PROCESSNODE ...... 554 14.4 DIAGNOSELW: Level-Wise Parallelization ...... 563 14.5 DIAGNOSEFP: Full Parallelization ...... 564 14.6 QUICKXPLAIN (QXP) ...... 567 17 Parallel Constraint-Based LS: An Application to Designing Resilient LRPON 669

14.7 MERGEXPLAIN (MXP) ...... 568 15.1 Portfolio Configuration Procedure GLOBAL ...... 599 15.2 Portfolio Configuration Procedure PARHYDRA ...... 600 15.3 Portfolio Configuration Procedure PARHYDRAb ...... 605 17.1 Iterated Constraint-Based Local Search (move-op, s) ...... 638 17.2 Constraint-Based Local Search (move-op, {T1,...,T|M |})...... 646 17.3 Random Independent set(fcg, card)...... 648 17.4 Iterated Constraint-based Parallel Local Search (move-op, t)...... 649 Index

ω-regular language, 463 grounder, 239, 247–252 antecedent clause, 39, 109 A* search algorithm, 423, 562 Aquarius, 180, 181, 202, 207 abstraction ASlib, 591 algorithm, 295 asserting clause, 110 communication, 306 assignment cache, 121 implementation, 296 assignment tree, 103, 106, 108, 109, 113, 119 interface, 295 associative-commutative symbol, 208, 209 accepting run assumption-based reasoning, 121 definition, 464 automatic construction of parallel portfolios, lasso-shaped, 467 585, 596 accepting SCC, 468 automaton ACPP: Global, 599 Büchi, 463 ACPP: ParHydra, 600 degeneralization, 465 ACPP: parHydrab, 605 terminal, 471 adaptivity, 298 weak, 471 admissible heuristic, 424 agent-based modeling, 398 backjumping, 9, 121, 212, 246 algorithm backtrack, 8, 108, 184, 255, 339, 445, 474 abstract parallel, 308 backward contraction, 186–188, 190, 195–197, abstraction, 295 203, 205–208, 213 comparison, 326 Beowulf, 248 correctness, 290 binary decision diagram, 458, 509–541, 618, deterministic, 17, 85, 290, 304, 319 620 effectiveness, 290, 291 bisimulation, 510, 535 framework, 295, 308, 321 bisimulation minimization, 537 integration, 295 blocking, 209 parallel, 290, 326 bloqqer, 117–119, 126, 128 phase, 292 bounded expansion, 104 separation, 298 bounding, 286, 288, 299 sequential, 286, 325 branching, 8, 16, 36, 39, 51, 79, 287–289, underlying sequential, 293 319–322, 325, 340–342, 538 algorithm configuration, 596, 597 method, 288 algorithm parameters, 595 pseudocost, 299 answer set, 242 strategy, 285, 288 computation, 246, 256, 267 strong, 297 constraint, 243, 275 breadth-first search, 433, 474, 492, 553

© Springer International Publishing AG, part of Springer Nature 2018 671 Y. Hamadi und L. Sais (eds.), Handbook of Parallel Constraint Reasoning, https://doi.org/10.1007/978-3-319-63516-3 672 Index

C-reduction, 183 degeneralization, 465 caching, 126, 183, 184, 473, 532 delta debugging, 131 callback, 320 dependency graph, 243, 244, 247, 249, 250, caqe, 115, 116, 118, 125 253, 265 cardinality constraints, 66 DepQBF, 115–121 CDCL, 7, 81, 103, 104, 108, 109, 212, 213, depth-first search, 8, 184, 358, 474, 487, 575 215–217 determinism, 87, 303, 304, 319, 364 CEGAR, 125, 129 deterministic parallelism CL-SDSAT, 214 strong, 304 clasp, 239, 247, 267, 270 weak, 305 claspfolio, 274 deterministic solver, 85 clausal simplification, 185, 186, 189, 206 diagnosis, 551 clause diffusion, 180, 181, 190, 202–212, 214, parallel algorithms 215 Boolean-HS-Tree, 577 clause learning, 33, 81, 108, 128, 212, 255 evaluation, 569–574 clause sharing, 16, 17, 22–24, 44, 61, 72, 81, full parallelization, 564 82, 93, 594, 598, 602, 603, 609 hybrid strategy, 575 clingo, 247 join relation, 576 , 319 leading diagnoses, 574 communication protocol level-wise parallelization, 563 MPI, 307 MapReduce, 576 OpenMP, 307 node and conflict search, 567 PVM, 307 parallel random depth-first search, 575 completion procedure, 187, 192, 196, 208 parallelization strategies computational platform, see platform node processing, 559 concurrent , 192 tree decomposition, 561 configuration space, 596 window-based processing, 560, 562 conflict, 81, 245, 267–270, 552 distributed fairness, 206, 207 analysis, 121, 269, 289 distributed global contraction, 206, 207 graph, 289 distributed proof reconstruction, 206, 207 MERGEXPLAIN, 568 distributed search, 93, 191, 198, 202, 203, 206, QUICKXPLAIN, 567 208–211, 213, 215, 217 search algorithms, 566–567 distributed-memory algorithms, 9, 257, 315, conflict clause, 35, 39, 50, 126, 212–214, 216 444, 445, 492 contraction-based strategies, 181, 186, 187, 190, divide and conquer, 10, 151, 179, 211, 450, 486, 201, 215 535, 565, 566 cooperative parallelism, 394, 404, 405 DLV, 239, 247, 248 coordination, 303 DPLL, 5, 103, 108, 124, 189, 211–213, 215, coordination mechanism, 308 242, 245 master-hub-worker, 313 -aware reasoning, 103, 129 master-worker, 310 dynamic synchronization, 91 multiple-master-worker, 313 parallel racing, 308 efficiency, see parallel self coordination, 315 parallel, 324 supervisor-worker, 311 emptiness check CPTHEO, 199, 201 parallel scc based, 487 cube, 213, 214, 217 problem statement, 466 cube learning, 128 EQP, 208–210 CUDA parallelism, 265 existential quantification, 522–523 cut, see cutting plane existential reduction, 107, 110, 111 cutting plane, 287, 298 expansion-based QBF solving, 104, 111, 129 expansion-based solving, 124 Datalog, 239, 244, 248, 252, 265, 271, 272 expansion-oriented strategies, 181, 186–188, decomposition, 10, 157, 298, 345, 478, 561 190, 213 Index 673 factoring, 184, 185, 205, 206 hyperresolution, 185, 186, 199, 206, 215, 217 fairness, 189, 201, 207 feasible region, 284 idle time, see overhead folding-up, 183, 184 implication graph, 81, 117 forward contraction, 186, 188, 189, 194, 195, independent parallelism, 390 197, 203, 204, 206, 207, 213, 214 inequality Fu-Malik algorithm, 70 valid, 287, 299 fuzz testing, 131 infeasible, 287 initialization gap direct, 301 absolute, 287 enumerative, 300 optimality, 287 racing ramp-up, 301 relative, 288 root, 300 garbage collection, 533–535 selective, 301 geometric mean, 328, 363 spiral, 301 shifted, 328 two-level root, 301 given-clause algorithm, 185, 194–196, 200, inprocessing, 48, 49, 104, 116 208, 209 instance Google File System, 270 features, 586 GPU parallelism, 264–265 heterogeneous, 586 ASP, 266 selection, 327 Datalog, 265 strategies, 180, 181, 189, 190, 194, 197, 215 GPU thread, 265, 389 integration, see algorithm granularity, see task interface gringo, 239, 247 abstraction, 295 grounding, 239, 247–252 communication, 307 guarantee formula, 471 interval splitting, 75 guiding path, 79, 113, 114, 121, 126, 212, 213 iterative deepening A* (IDA*), 443, 560 hard clauses, 65 knowledge, 299, 320 hash distributed A* (HDA*), 431 broker, 322 hashing, abstract Zobrist, 436 global, 299 hashing, abstraction-based, 435 local, 299 hashing, hyperplane work distribution, 438 sharing, 24, 116, 120–122, 128, 297, 299, hashing, operator-based Zobrist, 435 320, 584 hashing, Zobrist, 434 Kripke structure helpful master , 125 definition, 463 Herbrand on-the-fly computation, 469 function, 130 product with TGBA, 466 model, 241, 272 heterogeneous systems, 198, 199, 201, 202 Lace, 521 heuristic language function, 424 ω-regular, 463 primal, 287, 289, 298 of a TGBA, 464 hiqqer, 117 lasso-shaped accepting run, 467 hiqqerfork, 111, 116, 117 learning, 7, 33, 81, 121, 151, 202, 255 hitting set tree search, 553–556 lemmatization, 183, 212 homogeneous systems, 198, 202 lexicographic DFS, 459 HordeQBF, 111, 116, 120, 121 linear optimization problem, 284, 298 HordeSAT, 111, 120 linear , 182, 184 Horn clause, 182, 241 linear search MaxSAT, 67 HPDS, 199 linear-time temporal , see LTL, see LTL hqspre, 128 literal watching, 121 HS-Tree search, see hitting set tree search load balancing, 79, 248, 250, 267, 269, 299 674 Index

asynchronous round-robin, 302 model-based reasoning, 180, 181, 211, dynamic, 301 213–216, 547 nearest neighbor, 302 model-based testing, 131 pure static, 310 model-elimination tableaux, 180, 182, 215 quality, 301 Moufang identities, 210 quantity, 301 MPI, 118, 120, 121, 123, 126, 209, 307, 315, random polling, 302 321, 324, 349, 366, 396, 397, 432 static, 300 MPIDepQBF, 114, 116, 118, 119, 121, 127 work-sharing, 302 MTBDD, 513 local search methods, 381 multi-search, 191, 198–202, 208–211, 213–215, lock-free programming, 516 217 lookahead, 262, 263 multi-terminal binary decision diagram, 513 loop formula, 245 mutiple-master-worker, 313 lower bound, 68 LP, see linear optimization problem nearest neighbor, see load balancing LP relaxation, see relaxation nested depth-first search, 476 lparse, 239, 247, 248 CNDFS algorithm, 485, 486 LTL, 462 ENDFS algorithm, 484 subclasses, 471 LNDFS algorithm, 484 translation to TGBA, 465 NDFS algorithm, 484 Nick’s Class (NC), 459 ManySAT, 19, 53, 213, 442, 596, 618, 619, 628, node, 286, 299 630, 631 child, 286 MAP algorithm, 494, 497 leaf, 286 Map-Reduce parallelism, 270 parent, 286 ASP, 272 terminal, 286 well-founded model, 272 nogood, 245, 246, 267, 269 master control object, 126 completion nogood, 245 master process, 310 forgetting, 270 master-hub-worker, 313 learning, 255, 267 master-worker, 310 loop nogood, 245 maximal accepting predecessor, see MAP propagation, 242, 246, 267, 268 algorithm non-variable overlap, 192 ME-ASP, 275 normalization, 185, 190, 193, 205, 206 memory NP-completeness, 101, 242 contention, 306 lock, 306 on-the-fly computation MERGEXPLAIN, 568 Kripke structure, 469 methods, 383, 395 product automaton, 470, 473 METEOR, 191, 194 One-Way-Catch-Them-Young, see OWCTY MILP, see mixed integer linear optimization ordering-based strategies, 180, 181, 185, 187, problem 190, 191, 194, 197, 198, 200, 202, 206, Minisat, 19, 37, 118, 620 214, 215 mixed integer linear optimization problem, 284 OTTER, 194, 195, 201, 204, 207–209 model checking, 458, 536–537 overhead automata-theoretic approach, 461 communication, 293 model elimination, 180, 182, 183, 199, 215 idle time, 293, 294 model-based diagnosis, 547 parallel, 293, 324 complexity, 556 redundant work, 294 conflict, 552 OWCTY algorithm, 492, 497 diagnosis, 551 hitting set tree search, 553–556 P-completeness, 459, 460 modeling, 549 pairs algorithm, 208, 209 tree search, 552 PaMiraXT, 213 Index 675

PAQuBE, 114, 116, 121, 122, 124, 127 primary, 293 par-pd-depqbf, 111, 116–118, 130 ramp-down, 293 parallel ramp-up, 292 performance, 291, 294 Picosat, 118 scalability, 291, 292 pivot variable, 107 speed-up, 325 platform, 305 parallel algorithm, see algorithm computational, 291 parallel linear search algorithms, 74 solution, 291 parallel overhead, see overhead solver, 308 parallel portfolio construction, 598 PMSat, 214 parallel portfolio selection, 585–588 hierarchy, 102 parallel presolving schedules, 591 Portfolio parallelism parallel random depth-first search ASP, 274 fully synchronized, 486 portfolio solving, 72, 111, 116, 117, 120, 181, swarming, 487 198, 202, 211, 406, 584 parallel retracting A* (PRA*), 446, 561 PQSAT, 115, 116, 123 parallel rewriting, 190, 192, 193, 197 PQSolve, 114–116, 122, 124, 125, 127 parallel speedup, 365, 387, 390–393, 396, PQUABS, 115, 116, 118, 125 402–404, 406, 459, 499, 540, 647 prenex , 105 parallel structured duplicate detection, 433 prenex negation normal form, 125 parallel unsatisfiability-based algorithms, 73 preprocessing, 104, 116, 121, 126, 127, 193, parallel window search, 445 289 parallelism presolving schedule, 587 distributed memory, 306 primary phase, see phase node, 297 product automaton shared memory, 306 of TGBA and Kripke structure, 466 strong deterministic, 304 on-the-fly computation, 470 subnode, 297 program subtree, 297 ASP program, 239, 242 tree, 297 CUDA program, 265 weak deterministic, 305 Datalog program, 252, 265 parallelism at the clause level, 190, 193, 194, definite program, 241, 242 196, 197 normal program, 242 parallelism at the search level, 190, 197, 198 program completion, 244, 245 parallelism at the term/literal level, 190, 191 range-restricted program, 244 paramodulation, 180, 184, 185, 205, 206, 208, stratified program, 252, 272 209 tight ASP program, 244, 245 Parthenon, 191, 194 programming by optimization, 584 PARTHEO, 191, 194, 199 Prolog Technology Theorem Proving, 184, 199 partial assignment, 105 propositional satisfiability, 65, 101–102, 189, partial MaxSAT, 65 211 PBNF, 433 PSATO, 179, 211, 212 pcaqe, 115–118, 125 pseudo-Boolean constraints, 66 PCNF, see prenex conjunctive normal form PSPACE, 116 Peers, 181, 202, 205, 208 PSPACE-completeness, 103 Peers-mcd, 181, 202, 208–210 PVM, 255, 307, 320, 390, 395, 561 performance measurement, 324 Q-resolution, 106–110, 114 profile, 328 proof, 107, 130 variability, 308, 325 Q-resolution , 106 performance complementarity, 585 Q2CNF, 116 period synchronization, 90 QBCP, 109 persistence formula, 471 QBF, 102–132 phase, 292 assignment, 105–106 676 Index

assumption-based reasoning, 118 racing ramp-up, see initialization blocked clause elimination, 120 ramp-down phase, see phase clause, 105 ramp-up phase, see phase clause learning, 106, 108, 110 random polling, see load balancing closed formula, 105 reachability, 442, 477, 493, 535, 536, 540 conflict, 103, 109 redundancy, 181, 183, 188, 197, 207, 210, 214, conjunctive normal form, 105 217 countermodel, 102, 106 redundant work, see overhead cube, 105 regressive merging, 183 cube learning, 106, 108, 110 rejecting SCC, 468 decision making, 108–110 relational product, 523–525 disjunctive normal form, 105 relaxation existential reduction, 107 LP, 284 expansion-based solving, 104, 115, 116, 129 relaxation variables, 67 free formula, 105 resolution, 7, 18, 35, 39, 50, 106, 107, 159, 180, incremental solving, 116, 129 184, 185, 199, 205, 211, 212, 217, 238, inprocessing, 116 269, 342 knowledge sharing, 113, 116 resolution refutation, 7 learning, 108, 116 restart, 16, 46, 75, 120, 169, 270, 344, 565 matrix, 105 Robbins algebras, 209, 210 model, 102, 106 ROO, 181, 194–196 negation normal form, 105 round-robin, see load balancing preprocessing, 104, 116, 119 runtime distribution, 387, 388 pure literal, 108, 109, 126 quantifier scope, 105 SAT local search, 5, 398 restart, 120 SAT solver, 109, 125, 179, 181, 190, 211, satisfiability-equivalent, 106 213–215, 558, 618 search-based solving, 103, 108–111, 129 SBA, 464 semantics, 106 scalability, 92, see parallel existential player, 124 SCC, 468 game, 124 computation algorithms, 478 universal player, 124 scheduling, 255, 259–261 solution, 103, 109 search, 288 strategy, 130 best bound, 288 syntax, 105 depth-first, 311 unit clause, 111 diving, 288 unit literal, 109, 110 strategy, 284, 288 unit propagation, 108 tree, 284 variable assignment, 125 search overlap, 198, 204, 205, 210, 212, 214 QBFEVAL, 104, 116, 117, 131, 132 search space splitting, 75, 111 QCDCL, 103, 104, 106, 108–111, 113, 114, search-based QBF solving, 103, 108–111, 129 116, 118, 120, 126, 130 selection heuristics, 269 QCIR, 111 self coordination, 315 QMiraXT, 114, 116, 122, 124, 126, 127 semantic guidance, 185, 186, 190, 215, 216 QSAT, 102, 115, 116, 123 semantic resolution, 185, 215 QSolve, 115, 116, 124 sequential algorithm, see algorithm quabs, 115, 116, 125 sequential algorithm selection, 586 quantified Boolean formulas, see QBF sequential MaxSAT, 66 quantifier elimination, 123 set of support, 185, 186, 194, 215 quantifier inversion, 124 SGBA, 464 Quantor, 126, 128 SGGS, 180, 216, 217 QuBE, 115, 116, 121 shared clauses, 17, 81, 126 QUICKXPLAIN, 567 simplification, 185, 187, 193, 206, 207, 209 qxbf, 117 SIMT parallelism, 265, 266 Index 677 single quantification level scheduling, 127 granularity, 297 Skolem function, 130 sharing, 255, 258 smodels, 239, 243, 247, 253, 262 stealing, 193 SMP parallelism, 248 TBA, 464 SMT, 141, 180 TBGA SMT solver, 180, 181, 215 product with Kripke structure, 466 soft clauses, 65 Team-Work, 181, 200–202, 214 solution, 284, 298, 299 TECHS, 201 solution analysis, 121 temporal hierarchy, 471 solution learning, 108 terminal automaton, 471 solution platform, see platform TGBA, 464 solution quality, 391, 403, 406, 407 degeneralization, 465 speedup, 209, 210, see parallel translation from LTL, 465 SQLS, 122, 124 thread divergence, 267 SqueezBF, 121, 122, 128 transposition-driven scheduling, 444 stable model, 238 trivial falsity, 124 standard synchronization, 89 trivial SCC, 468 state-space partitioning, 492 trivial truth, 124 state-space search, 419 truth assignment, 4, 33, 149, 169, 268 strongly connected component, 117, 247, 249, 468 UIP, 270 structure union-find, 478, 487 Kripke, see Kripke structure unit-resulting resolution, 199, 206 structured duplicate detection, 432 universal reduction, 107, 109, 110 subclasses unsatisfiable subformulas, 69 LTL, 471 upper bound, 67 subgoal-reduction strategies, 180, 181, 183, 184, 190, 191, 193, 197, 198, 201, 213 variable dependency, 104 subsumption, 185, 186, 189, 199, 206 variable-activity scaling, 121 superposition, 184, 185, 187, 192, 193, 205, VSIDS, 19, 79, 83, 126 206, 209 supervisor-worker, 311 weak automaton, 471 SWARM, 485 weighted MaxSAT, 66 Sylvan, 509–541 WMSU3 algorithm, 69 symbolic bisimulation minimization, 537 work-sharing, see load balancing symbolic reachability, 536 work-stealing, 79, see load balancing, 337, 342, synchronization, 303 343, 346, 351, 355, 358, 364, 365, 367, barrier, 303 368, 370, 371, 429, 444, 519–526, 534, synchronization point, 85 535, 540 task, 319 young brothers wait scheduling, 125