DM841 DISCRETE OPTIMIZATION Part 2 – Heuristics
(Stochastic) Local Search Algorithms
Marco Chiarandini
Department of Mathematics & Computer Science University of Southern Denmark
(Stochastic) Local Search Algorithms Marco Chiarandini Department - - PowerPoint PPT Presentation
DM841 D ISCRETE O PTIMIZATION Part 2 Heuristics (Stochastic) Local Search Algorithms Marco Chiarandini Department of Mathematics & Computer Science University of Southern Denmark Local Search Algorithms Basic Algorithms Outline
Department of Mathematics & Computer Science University of Southern Denmark
Local Search Algorithms Basic Algorithms Local Search Revisited
2
Local Search Algorithms Basic Algorithms Local Search Revisited
3
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ specified by the definition of (finite domain, integer) variables and
◮ all together they determine the representation of candidate solutions ◮ common solution representations are discrete structures such as:
4
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ it handles the soft constraints and the objective function
◮ defines for each solution s ∈ S(π) a set of solutions N(s) ⊆ S(π)
5
Local Search Algorithms Basic Algorithms Local Search Revisited
6
Local Search Algorithms Basic Algorithms Local Search Revisited
c s
◮ vertices: candidate solutions
◮ vertex labels: evaluation function ◮ edges: connect “neighboring”
◮ s: (optimal) solution ◮ c: current search position
8
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ If more than one neighbor have better cost then need to choose one
◮ The procedure ends in a local optimum ˆ
◮ Issue: how to avoid getting trapped in bad local optima?
◮ use more complex neighborhood functions ◮ restart ◮ allow non-improving moves 9
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ solution representation and search space S:
◮ neighborhood relation N: 1-flip neighborhood, i.e., assignments are
◮ evaluation function handles clause and proposition constraints
◮ memory: not used, i.e., M := ∅
10
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ initialization: uniform random choice from S, i.e.,
◮ step function: uniform random choice from current neighborhood, i.e.,
◮ termination: when model is found, i.e.,
11
Local Search Algorithms Basic Algorithms Local Search Revisited
12
Local Search Algorithms Basic Algorithms Local Search Revisited
queensLS0a.co
import cotls; int n = 16; range Size = 1..n; UniformDistribution distr(Size); Solver <LS > m(); var{int} queen[Size ](m,Size) := distr.get (); ConstraintSystem <LS > S(m); S.post( alldifferent (queen)); S.post( alldifferent (all(i in Size) queen[i] + i)); S.post( alldifferent (all(i in Size) queen[i] - i)); m.close (); int it = 0; while (S.violations () > 0 && it < 50 * n) { select(q in Size , v in Size) { queen[q] := v; cout <<"chng @ "<<it <<": queen["<<q<<"]:="<<v<<" viol: "<<S. violations () <<endl; } it = it + 1; } cout << queen << endl;
13
Local Search Algorithms Basic Algorithms Local Search Revisited
queensLS1.co
import cotls; int n = 16; range Size = 1..n; UniformDistribution distr(Size); Solver <LS > m(); var{int} queen[Size ](m,Size) := distr.get (); ConstraintSystem <LS > S(m); S.post( alldifferent (queen)); S.post( alldifferent (all(i in Size) queen[i] + i)); S.post( alldifferent (all(i in Size) queen[i] - i)); m.close (); int it = 0; while (S.violations () > 0 && it < 50 * n) { select(q in Size : S.violations(queen[q]) >0, v in Size) { queen[q] := v; cout <<"chng @ "<<it <<": queen["<<q<<"]:="<<v<<" viol: "<<S. violations () <<endl; } it = it + 1; } cout << queen << endl;
14
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ Variable Neighborhood Search and Large Scale Neighborhood Search
◮ Tabu Search: Online learning of moves
◮ Simulated annealing
◮ “Restart” + parallel search
15
Local Search Algorithms Basic Algorithms Local Search Revisited
16
Local Search Algorithms Basic Algorithms Local Search Revisited
17
Local Search Algorithms Basic Algorithms Local Search Revisited
18
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ does not use memory ◮ init: uniform random choice from S or construction heuristic ◮ step: uniform random choice from improving neighbors
◮ terminates when no improving neighbor available
19
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ Best Improvement (aka gradient descent, steepest descent, greedy
◮ First Improvement: Evaluate neighbors in fixed order,
20
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ search space S: set of all truth assignments to variables in given formula F
◮ neighborhood relation N: 1-flip neighborhood ◮ memory: not used, i.e., M := {0} ◮ initialization: uniform random choice from S, i.e., init(∅, {a}) := 1/|S| for all
◮ evaluation function: f (a) := number of clauses in F
◮ step function: uniform random choice from improving neighbors, i.e.,
◮ termination: when no improving neighbor is available
21
Local Search Algorithms Basic Algorithms Local Search Revisited
22
Local Search Algorithms Basic Algorithms Local Search Revisited
queensLS00.co
import cotls; int n = 16; range Size = 1..n; UniformDistribution distr(Size); Solver <LS > m(); var{int} queen[Size ](m,Size) := distr.get (); ConstraintSystem <LS > S(m); S.post( alldifferent (queen)); S.post( alldifferent (all(i in Size) queen[i] + i)); S.post( alldifferent (all(i in Size) queen[i] - i)); m.close (); int it = 0; while (S.violations () > 0 && it < 50 * n) { select(q in Size , v in Size : S. getAssignDelta (queen[q],v) < 0) { queen[q] := v; cout <<"chng @ "<<it <<": queen["<<q<<"]:="<<v<<" viol: "<<S. violations () <<endl; } it = it + 1; } cout << queen << endl;
23
Local Search Algorithms Basic Algorithms Local Search Revisited
queensLS0.co
import cotls; int n = 16; range Size = 1..n; UniformDistribution distr(Size); Solver <LS > m(); var{int} queen[Size ](m,Size) := distr.get (); ConstraintSystem <LS > S(m); S.post( alldifferent (queen)); S.post( alldifferent (all(i in Size) queen[i] + i)); S.post( alldifferent (all(i in Size) queen[i] - i)); m.close (); int it = 0; while (S.violations () > 0 && it < 50 * n) { selectMin(q in Size ,v in Size)(S. getAssignDelta (queen[q],v)) { queen[q] := v; cout <<"chng @ "<<it <<": queen["<<q<<"] := "<<v<<" viol: "<<S. violations () <<endl; } it = it + 1; } cout << queen << endl;
24
Local Search Algorithms Basic Algorithms Local Search Revisited
queensLS2.co
import cotls; int n = 16; range Size = 1..n; UniformDistribution distr(Size); Solver <LS > m(); var{int} queen[Size ](m,Size) := distr.get (); ConstraintSystem <LS > S(m); S.post( alldifferent (queen)); S.post( alldifferent (all(i in Size) queen[i] + i)); S.post( alldifferent (all(i in Size) queen[i] - i)); m.close (); int it = 0; while (S.violations () > 0 && it < 50 * n) { selectFirst (q in Size , v in Size: S. getAssignDelta (queen[q],v) < 0) { queen[q] := v; cout <<"chng @ "<<it <<": queen["<<q<<"] := "<<v<<" viol: "<<S. violations () <<endl; } it = it + 1; } cout << queen << endl;
25
Local Search Algorithms Basic Algorithms Local Search Revisited
queensLS0b.co
import cotls; int n = 16; range Size = 1..n; UniformDistribution distr(Size); Solver <LS > m(); var{int} queen[Size ](m,Size) := distr.get (); ConstraintSystem <LS > S(m); S.post( alldifferent (queen)); S.post( alldifferent (all(i in Size) queen[i] + i)); S.post( alldifferent (all(i in Size) queen[i] - i)); m.close (); int it = 0; while (S.violations () > 0 && it < 50 * n) { select(q in Size : S.violations(queen[q]) >0) { selectMin(v in Size)(S. getAssignDelta (queen[q],v)) { queen[q] := v; cout <<"chng @ "<<it <<": queen ["<<q<<"] := "<<v<<" viol: "<<S. violations () <<endl; } it = it + 1; } } cout << queen << endl;
26
Local Search Algorithms Basic Algorithms Local Search Revisited
28
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ Parameters ◮ Variables and Solution Representation
◮ Soft constraint violations ◮ Evaluation function: soft constraints + objective function
◮ Neighborhoods ◮ Delta evaluations
29
Local Search Algorithms Basic Algorithms Local Search Revisited
30
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ Random Walk ◮ First/Random Improvement ◮ Best Improvement ◮ Min Conflict Heuristic
31
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ Given: TSP instance G with vertices v1, v2, . . . , vn. ◮ Search space: Hamiltonian cycles in G; ◮ Neighborhood relation N: standard 2-exchange neighborhood ◮ Initialization:
◮ Search steps: determined using first improvement
◮ Termination: when no improving search step possible
32
Local Search Algorithms Basic Algorithms Local Search Revisited
33
Local Search Algorithms Basic Algorithms Local Search Revisited
34
Local Search Algorithms Basic Algorithms Local Search Revisited
35
Local Search Algorithms Basic Algorithms Local Search Revisited
36
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ permutations (implicit: alldiffrerent)
◮ linear (scheduling problems) ◮ circular (traveling salesman problem)
◮ arrays (implicit: assign exactly one, assignment problems: GCP) ◮ sets (implicit: disjoint sets, partition problems: graph partitioning, max
37
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ function fπ : Sπ → Q that maps candidate solutions of
◮ used for assessing or ranking neighbors of current
◮ Evaluation function: part of LS algorithm. ◮ Objective function: integral part of optimization problem. ◮ Some LS methods use evaluation functions different from given objective
38
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ feasibility
◮ optimization
◮ sequence of feasibility problems ◮ staying in the space of feasible candidate solutions ◮ considering feasible and infeasible configurations
39
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ decomposition-based violations
◮ variable-based violations
◮ value-based violations
◮ arithmetic violations ◮ combinations of these
40
Local Search Algorithms Basic Algorithms Local Search Revisited
◮ alldiff(x1, . . . , xn):
◮ viol =
v∈V I(max{cv − 1, 0} > 0) value-based
◮ viol = maxv∈V max{cv − 1, 0} value-based ◮ viol =
v∈V max{cv − 1, 0} value-based
◮ # variables with same value, variable-based, here leads to same
◮ l ≤ r viol = max{l − r, 0} ◮ l = r viol = |l − r| ◮ l = r viol = 1 if l = r, 0 otherwise
41