1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.sat4j;
29
30 import org.sat4j.core.ASolverFactory;
31 import org.sat4j.minisat.constraints.MixedDataStructureDanielWL;
32 import org.sat4j.minisat.core.DataStructureFactory;
33 import org.sat4j.minisat.core.SearchParams;
34 import org.sat4j.minisat.core.Solver;
35 import org.sat4j.minisat.learning.MiniSATLearning;
36 import org.sat4j.minisat.orders.RSATPhaseSelectionStrategy;
37 import org.sat4j.minisat.orders.VarOrderHeap;
38 import org.sat4j.minisat.restarts.ArminRestarts;
39 import org.sat4j.minisat.uip.FirstUIP;
40 import org.sat4j.specs.ISolver;
41
42
43
44
45
46
47
48
49
50
51
52 public class LightFactory extends ASolverFactory<ISolver> {
53 private static final long serialVersionUID = 1460304168178023681L;
54 private static LightFactory instance;
55
56 private static synchronized void createInstance() {
57 if (instance == null) {
58 instance = new LightFactory();
59 }
60 }
61
62
63
64
65
66
67 public static LightFactory instance() {
68 if (instance == null) {
69 createInstance();
70 }
71 return instance;
72 }
73
74 @Override
75 public ISolver defaultSolver() {
76 MiniSATLearning<DataStructureFactory> learning = new MiniSATLearning<DataStructureFactory>();
77 Solver<DataStructureFactory> solver = new Solver<DataStructureFactory>(
78 new FirstUIP(), learning, new MixedDataStructureDanielWL(),
79 new VarOrderHeap(new RSATPhaseSelectionStrategy()),
80 new ArminRestarts());
81 learning.setSolver(solver);
82 solver.setSimplifier(solver.EXPENSIVE_SIMPLIFICATION);
83 solver.setSearchParams(new SearchParams(1.1, 100));
84 return solver;
85 }
86
87 @Override
88 public ISolver lightSolver() {
89 return defaultSolver();
90 }
91
92 public static void main(final String[] args) {
93 BasicLauncher<ISolver> lanceur = new BasicLauncher<ISolver>(
94 LightFactory.instance());
95 if (args.length != 1) {
96 lanceur.usage();
97 return;
98 }
99 lanceur.run(args);
100 System.exit(lanceur.getExitCode().value());
101 }
102
103 }