-
Notifications
You must be signed in to change notification settings - Fork 0
/
MAXSATSolverSeq_2.java
81 lines (69 loc) · 2.38 KB
/
MAXSATSolverSeq_2.java
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//******************************************************************************
//
// File: MAXSATSolverSeq_2.java
//
//******************************************************************************
import java.util.Random;
/**
* Class MAXSATSolverSeq_2 is a sequential version of the Incremental
* Seesaw Search for MAX-SAT program.
*
* <P>
* Usage: java pj2 MAXSATSolverSeq_2 inputFilePath max-tries
* <BR><TT><I><inputFilePath></I></TT> = The path to the .cnf file.
* <BR><TT><I><max-tries></I></TT> = The number of iterations, after which
* the Seesaw Search gives up.
*
* </P>
* @author Harshad Paradkar
*
*/
public class MAXSATSolverSeq_2 {
/**
* Main program.
*
* @param ar An array of command line arguments.
* @throws Exception Any exception that might occur during the execution.
*/
public static void main(String[] ar) throws Exception{
// Validate the command line arguments.
if(Utilities.inputInValidForSeq(ar)) {
usage();
}
// get the parameters after reading the input file.
MAXSATParameters parameters = Utilities.getParameters(ar[0]);
if(parameters == null) {
System.err.println("Unable to read input file.");
throw new IllegalArgumentException("Unable to read input file.");
}
int initializationSeed = 1423821;
Random random = new Random();
// Call the Incremental Seesaw Search function
Solution solution = SeesawSearchIncremental
.solveMAXSAT(parameters, Integer.parseInt(ar[1]),
random.nextLong());
// Print Stats.
System.out.println("No. of Variables: " + parameters.noOfVariables);
System.out.println("No. of Clauses: " + parameters.noOfClauses);
System.out.println("MAX-SAT: " + solution.getNoOfSatisfiedClauses());
float time = solution.getTime();
if(time >= 60.0f) {
System.out.println("Run time: " + time / 60.0f + " minute(s).");
}else {
System.out.println("Run time: " + time + " second(s).");
}
}
/**
* Method to notify the user when invalid input arguments to the program
* have been provided.
*/
private static void usage(){
System.err.println("Invalid arguments!");
System.err.println ("Usage: java pj2 MAXSATSolverSeq_2 inputFilePath "
+ "max-tries");
System.err.println ("<inputFilePath> = The path to the .cnf file.");
System.err.println ("<max-tries> = The number of iterations, after "
+ "which Seesaw Search gives up.");
throw new IllegalArgumentException();
}
}