Commit b956d73f authored by Vladislav Kiselev's avatar Vladislav Kiselev

Исправлены ошибки аргументов командной строки.

parent 648a3509
......@@ -4,29 +4,38 @@ import java.io.*;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.BiFunction;
import java.util.function.Supplier;
import static inport.Testing.*;
import inport.ConversionUtils.MZnResultsResolver;
import inport.ConversionUtils.ParserException;
import inport.ConversionUtils.Solver;
import inport.ConversionUtils.Task;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
public class Main {
private static final int DEFAULT_TIME_LIMIT_S = 3600;
@Option(name="-fzs", aliases="--flat_zinc_solver", usage="Path to executable file of flat zinc solver.")
private String flatZincSolver = "";
private enum ConversionType {
Undefined ("", (TaskCase t, Integer i) -> ""),
WithoutSplitting("Without splitting", Testing::solveTask_2),
WithSplitting ("With splitting", Testing::solveTaskWithPartialCargoOp),
Greedy ("Greedy", Testing::solveTaskWithGreedyConstraints),
Greedy_v2 ("Greedy v2", Testing::solveTaskWithGreedyConstraintsV2);
Undefined ("", Testing::getTask_2_Solver),
WithoutSplitting("Without splitting", Testing::getTask_2_Solver),
WithSplitting ("With splitting", Testing::getTaskWithPartialCargoOp_Solver),
Greedy ("Greedy", Testing::getTaskWithGreedyConstraints_Solver),
Greedy_v2 ("Greedy v2", Testing::getTaskWithGreedyConstraintsV2_Solver);
private final String text;
private final BiFunction<TaskCase, Integer, String> solver;
ConversionType(String text, BiFunction<TaskCase, Integer, String> solver) {
private final Supplier<Solver> solversGetter;
ConversionType(String text, Supplier<Solver> solversGerrer) {
this.text = text;
this.solver = solver;
this.solversGetter = solversGerrer;
}
public static ConversionType fromString(String text) {
for (ConversionType t : ConversionType.values()) {
......@@ -50,11 +59,21 @@ public class Main {
return s.toString();
}
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("To few arguments.");
return;
private void doMain(final String[] args) throws IOException {
final CmdLineParser parser = new CmdLineParser(this);
if (args.length < 1) {
parser.printUsage(System.out);
System.exit(-1);
}
/* TODO
try {
parser.parseArgument(args);
} catch (CmdLineException clEx) {
System.out.println("ERROR: Unable to parse command-line options: " + clEx);
}
*/
// flatZincSolver = "external_tools/or-tools_flatzinc_Ubuntu-18.04-64bit_v7.2.6977/bin/fzn-or-tools";
String type = args[0];
switch (type) {
......@@ -63,26 +82,27 @@ public class Main {
long start = System.currentTimeMillis();
TaskCase task = new TaskCase();
try {
task.deserialize(fileName);
} catch (IOException e) {
System.out.println(e.getMessage());
break;
}
task.deserialize(fileName);
String error;
Solver solver;
if (!task.isTypified()) {
error = solveTask_1(task, DEFAULT_TIME_LIMIT_S);
solver = getTask_2_Solver();
} else {
ConversionType t = (args.length == 2) ? ConversionType.WithoutSplitting
: ConversionType.fromString(args[2]);
: ConversionType.fromString(args[2]);
if (t.equals(ConversionType.Undefined)) {
System.out.println(undefinedTypeErrorMess(args[2]));
return;
}
error = t.solver.apply(task, DEFAULT_TIME_LIMIT_S);
solver = t.solversGetter.get();
}
solver.setTask(task);
solver.setTimeLimitS(DEFAULT_TIME_LIMIT_S);
solver.setTempDir("temp_data");
String error = solver.solve();
long finish = System.currentTimeMillis();
System.out.println((finish - start) + " milliseconds");
......@@ -97,24 +117,17 @@ public class Main {
String input = args[1];
String output = args[2];
TaskCase task = new TaskCase();
try {
task.deserialize(input);
Task.portToMiniZinc_0(task, output);
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
task.deserialize(input);
Task.portToMiniZinc_0(task, output);
break;
}
case "to_MiniZinc_1" : {
String input = args[1];
String output = args[2];
TaskCase task = new TaskCase();
try {
task.deserialize(input);
Task.portToMiniZinc_1(task, output);
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
task.deserialize(input);
Task.portToMiniZinc_1(task, output);
break;
}
case "resolve_result" : {
......@@ -129,20 +142,24 @@ public class Main {
MZnResultsResolver.resolveMiniZincResults(task, fileWIthResult);
task.serialize(output);
} catch (IOException | ParserException ex) {
} catch (ParserException ex) {
System.out.println(ex.getMessage());
}
break;
}
case "debug" : {
ConversionType t = (args.length == 1) ? ConversionType.WithoutSplitting
: ConversionType.fromString(args[1]);
: ConversionType.fromString(args[1]);
if (t.equals(ConversionType.Undefined)) {
System.out.println(undefinedTypeErrorMess(args[1]));
return;
}
System.out.println(t.text);
debug(t.solver, DEFAULT_TIME_LIMIT_S);
Solver s = t.solversGetter.get();
System.out.println(args[1] + " " + t.text + " " + s.getFlatZincSolver());
s.setFlatZincSolver(flatZincSolver);
debug(s, DEFAULT_TIME_LIMIT_S);
break;
}
case "debug read-write" : {
......@@ -151,41 +168,44 @@ public class Main {
}
case "testing" :
ConversionType t = (args.length == 1) ? ConversionType.WithoutSplitting
: ConversionType.fromString(args[1]);
: ConversionType.fromString(args[1]);
if (t.equals(ConversionType.Undefined)) {
System.out.println(undefinedTypeErrorMess(args[1]));
return;
}
testGroup("with_typing", t.solver, DEFAULT_TIME_LIMIT_S);
test_2(DEFAULT_TIME_LIMIT_S);
testGroup("with_typing", t.solversGetter.get(), DEFAULT_TIME_LIMIT_S);
break;
case "test_experiment":
testGroup("experiments", Testing::solveTask_2, DEFAULT_TIME_LIMIT_S);
testGroup("experiments", getTask_2_Solver(), DEFAULT_TIME_LIMIT_S);
break;
case "different_parameters":
try {
testingWithDiffParameters(
"tests/with_typing/Case2.tipp",
1, 30,
16, 35,
1.1, 30);
testingWithDiffParameters(
"tests/with_typing/Case2.tipp",
1, 30,
16, 35,
1.1, 30);
// testingWithDiffParameters(
// "tests/with_typing/TaskT.tipp",
// 10, 10,
// 32, 32,
// 1.1, 10);
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
break;
default:
System.out.println("Unknown type \"" + type + "\"");
}
}
private static void debug(BiFunction<TaskCase, Integer, String> solver, int timeLimitS) {
public static void main(String[] args) {
final Main instance = new Main();
try {
instance.doMain(args);
} catch (IOException ioEx) {
System.out.println("ERROR: I/O Exception encountered: " + ioEx);
}
}
private static void debug(Solver solver, int timeLimitS) {
String fileName = "experiment/in.ipp";
String solverResults = "temp_data/solver_results.txt";
String output = "experiment/debug_info.txt";
......@@ -200,7 +220,10 @@ public class Main {
long start = System.currentTimeMillis();
String error = solver.apply(task, timeLimitS);
solver.setTimeLimitS(timeLimitS);
solver.setTempDir("temp_data");
solver.setTask(task);
String error = solver.solve();
long finish = System.currentTimeMillis();
System.out.println(" " + (finish - start) / 1000.0 + " s");
......@@ -212,7 +235,8 @@ public class Main {
task.serialize(fileName);
}
debugInfo(task, solverResults, output);
// TODO переделать для or-tools
// debugInfo(task, solverResults, output);
}
private static void debugReadWrite() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment