Commit 77589340 authored by Vladislav Kiselev's avatar Vladislav Kiselev

Добавлен вывод интенсивности грузовых операций в ответ.

parent 7472c3be
......@@ -1328,7 +1328,7 @@ public class ConversionUtil {
return Integer.compare(opId, o.opId);
}
if (! bunkerId.isPresent()) {
return -1;
return (! o.bunkerId.isPresent()) ? 0 : -1;
}
if (! o.bunkerId.isPresent()) {
return 1;
......@@ -1646,6 +1646,24 @@ public class ConversionUtil {
templates = Task.renumberOperations(taskCase);
}
ArrayList<ArrayList<String>> cargoOpIntensity;
if (arrays.containsKey("cargo_op_intensity")) {
cargoOpIntensity = arrays.get("cargo_op_intensity");
} else {
cargoOpIntensity = new ArrayList<>();
for (int opNo = 0; opNo < opStatus.size(); opNo++) {
cargoOpIntensity.add(new ArrayList<>());
for (String val : opStatus.get(opNo)) {
if (val.equals("true") && (templates.get(opNo - 1) instanceof LoadingTemplate)) {
LoadingTemplate op = (LoadingTemplate)templates.get(opNo - 1);
cargoOpIntensity.get(opNo).add(Integer.toString((int)Math.ceil(op.getIntensity())));
} else {
cargoOpIntensity.get(opNo).add("0");
}
}
}
}
Map<Integer, OperationTemplate> operationById = new TreeMap<>();
for (OperationTemplate operation : taskCase.getTemplates()) {
operationById.put(operation.getId(), operation);
......@@ -1669,12 +1687,25 @@ public class ConversionUtil {
for (int opNo = 1; opNo < opStatus.size(); opNo++) {
int duration = 0;
int t = 0;
int t = 1;
boolean lastFixation = false;
while (t < opStatus.get(opNo).size()) {
if ((opStatus.get(opNo).get(t).equals("true") && (lastFixation != isFixed.get(opNo).get(t)) && (duration != 0))
|| (opStatus.get(opNo).get(t).equals("false") && (duration != 0))) { // Добавляем новую операцию.
boolean isOpLogicallyInterrupted = false;
if (opStatus.get(opNo).get(t).equals("true") &&
(lastFixation != isFixed.get(opNo).get(t)) &&
(duration != 0)) { // У операции изменилась фиксация.
isOpLogicallyInterrupted = true;
}
if (opStatus.get(opNo).get(t).equals("false") && (duration != 0)) { // Операция просто закончилась.
isOpLogicallyInterrupted = true;
}
if ((! cargoOpIntensity.get(opNo).get(t - 1).equals(cargoOpIntensity.get(opNo).get(t))) &&
(duration != 0)) { // Изменилась интенсивность погрузки.
isOpLogicallyInterrupted = true;
}
if (isOpLogicallyInterrupted) { // Добавляем новую операцию.
Operation op = new Operation();
op.setStart(t - duration - 1);
op.setDuration(duration);
......@@ -1705,6 +1736,10 @@ public class ConversionUtil {
}
}
if (! cargoOpIntensity.get(opNo).get(t - 1).equals("0")) {
op.setIntensity(Optional.of(Integer.valueOf(cargoOpIntensity.get(opNo).get(t - 1))));
}
op.setFixation(true);
if (! oldSolution.contains(op.toString())) {
op.setFixation(false);
......
......@@ -113,11 +113,36 @@ public class Main {
break;
}
case "debug 2" : {
String fileName = "experiment/in.ipp";
String solverResults = "temp_data/solver_results.txt";
String output = "experiment/debug_info.txt";
TaskCase task = new TaskCase();
try {
task.deserialize(fileName);
} catch (IOException e) {
System.out.println(e.getMessage());
break;
}
String error = solveTaskWithPartialCargoOp(task);
if (!error.isEmpty()) {
System.out.println("Error : " + error);
break;
} else {
task.serialize(fileName);
}
debugInfo(task, solverResults, output);
break;
}
case "testing" :
test_2();
break;
case "testing_2":
test_2_0();
case "testing_with_partial_op":
testWithPartialOp();
break;
case "testing_exp":
test_2_exp();
......
......@@ -19,8 +19,16 @@ public class Operation {
private double duration;
private MovingObject executor;
private Optional<Bunker> bunker = Optional.empty();
private Optional<Integer> intensity = Optional.empty();
private List<MovingObject> resources;
public void setIntensity(Optional<Integer> intensity) {
this.intensity = intensity;
}
public Optional<Integer> getIntensity() {
return intensity;
}
public Optional<Bunker> getBunker() {
return bunker;
}
......@@ -130,7 +138,9 @@ public class Operation {
}
sb.append(obj.getId());
}
sb.append("])");
sb.append("]");
sb.append(intensity.map(i -> " " + i).orElse(""));
sb.append(")");
return sb.toString();
}
}
......@@ -718,6 +718,10 @@ public class TaskCase {
op.setBunker(Optional.of(m_bunker.get(Integer.valueOf(items[1].trim()))));
}
}
String intensity = rStr.substring(rStr.indexOf(']') + 1).trim();
if (! intensity.isEmpty()) {
op.setIntensity(Optional.of(Integer.valueOf(intensity)));
}
solution.add(op);
}
......
......@@ -35,6 +35,14 @@ public class Testing {
ConversionUtil::resolveMiniZincResults);
}
public static String solveTaskWithPartialCargoOp(TaskCase task) {
return solveTask(
task,
"conversion_2_with_partial_cargo_operations.mzn",
ConversionUtil::portToMiniZinc_2,
ConversionUtil::resolveMiniZincResults);
}
public static String solveTask_2_0(TaskCase task) {
return solveTask(
task,
......@@ -155,13 +163,16 @@ public class Testing {
testGroup("without_typing", Testing::solveTask_1);
}
public static void test_2() {
static void test_2() {
testGroup("with_typing", Testing::solveTask_2);
}
public static void test_2_0() {
public static void testWithPartialOp() {
testGroup("with_typing", Testing::solveTaskWithPartialCargoOp);
}
static void test_2_0() {
testGroup("with_typing", Testing::solveTask_2_0);
}
public static void test_2_exp() {
static void test_2_exp() {
testGroup("experiments", Testing::solveTask_2);
}
}
......@@ -79,4 +79,4 @@ Task Properties
Solution
8.0
20; F; 1.0; 2.0 (101 202 [])
20; F; 1.0; 2.0 (101 202 [] 2)
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