From 92827ce40504b65f3604d13fff2aaf2e62b8128d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B8=D1=81=D0=B5=D0=BB=D1=91=D0=B2=20=D0=92=D0=BB?= =?UTF-8?q?=D0=B0=D0=B4=D0=B8=D1=81=D0=BB=D0=B0=D0=B2?= Date: Thu, 15 Aug 2019 14:59:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20=D1=81=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B5=D0=B9=203.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/inport/ConversionUtils/Task.java | 38 ++++++++++++++++++++-------- src/inport/Testing.java | 2 +- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/inport/ConversionUtils/Task.java b/src/inport/ConversionUtils/Task.java index 72aacf2..def6fde 100644 --- a/src/inport/ConversionUtils/Task.java +++ b/src/inport/ConversionUtils/Task.java @@ -1242,7 +1242,7 @@ public class Task { writeArray(writer, "bunker_start_loc", bunkerStartLoc, (Integer val) -> val + 1, Optional.of(-1)); } - void dataForOptimization3() throws IOException { + void dataForOptimization3(boolean isInseparable) throws IOException { ArrayList> min_positive_cargo_val = arrayOfIntegerArrays(sectionNById.size()); ArrayList> max_negative_cargo_val = arrayOfIntegerArrays(sectionNById.size()); ArrayList> can_obj_leave_loc_only_alone = new ArrayList<>(); @@ -1274,10 +1274,19 @@ public class Task { sections.add(new Pair<>(sectionIdToN(op.getStorage(), op.getCargo()), -val)); } for (Pair p : sections) { - if (p.getValue() > 0) { - min_positive_cargo_val.get(p.getKey()).set(loc, Math.min(p.getValue(), min_positive_cargo_val.get(p.getKey()).get(loc))); + Integer value = p.getValue(); + if (! isInseparable) { + if (value < 0) { + value = -1; + } + if (value > 0) { + value = 1; + } + } + if (value > 0) { + min_positive_cargo_val.get(p.getKey()).set(loc, Math.min(value, min_positive_cargo_val.get(p.getKey()).get(loc))); } else { - max_negative_cargo_val.get(p.getKey()).set(loc, Math.max(p.getValue(), max_negative_cargo_val.get(p.getKey()).get(loc))); + max_negative_cargo_val.get(p.getKey()).set(loc, Math.max(value, max_negative_cargo_val.get(p.getKey()).get(loc))); } } } else if (t instanceof MovingTemplate) { @@ -1290,16 +1299,22 @@ public class Task { } } - - write2DArrayOfInt(writer, "min_positive_cargo_val", min_positive_cargo_val, false); write2DArrayOfInt(writer, "max_negative_cargo_val", max_negative_cargo_val, false); locWrite2DArray(writer, "can_obj_leave_loc_only_alone", can_obj_leave_loc_only_alone, Objects::toString); writer.write("\n"); } + + void portToMiniZinc_2_sep() { + portToMiniZinc_2(false); + } + void portToMiniZinc_2_inSep() { + portToMiniZinc_2(true); + } + /* С типизацией. */ - void portToMiniZinc_2() { + private void portToMiniZinc_2(boolean isInseparable) { if (!task.isTypified()) { throw new ParserException("Attempt to convert untyped task as typified."); } @@ -1336,7 +1351,7 @@ public class Task { boundaryStorageStates(); cargoFlows(); cargoOperations(); - dataForOptimization3(); + dataForOptimization3(isInseparable); fixedOperations(); } catch (IOException e) { @@ -1512,7 +1527,7 @@ public class Task { throw new ParserException("Attempt to convert untyped task as typified."); } try { - portToMiniZinc_2(); + portToMiniZinc_2(false); dataForGreediness(); } catch (IOException e) { throw new UncheckedIOException(e); @@ -1539,7 +1554,10 @@ public class Task { startConversion(task, fileName, Task::portToMiniZinc_1); } static public void portToMiniZinc_2(TaskCase task, String fileName) { - startConversion(task, fileName, Task::portToMiniZinc_2); + startConversion(task, fileName, Task::portToMiniZinc_2_inSep); + } + static public void portToMiniZinc_2_separable(TaskCase task, String fileName) { + startConversion(task, fileName, Task::portToMiniZinc_2_sep); } static public void portToMiniZincGreedy(TaskCase task, String fileName) { startConversion(task, fileName, Task::portToMiniZinc_2_greedy); diff --git a/src/inport/Testing.java b/src/inport/Testing.java index 2288359..c7ebb71 100644 --- a/src/inport/Testing.java +++ b/src/inport/Testing.java @@ -20,7 +20,7 @@ public class Testing { public static Solver getTaskWithPartialCargoOp_Solver() { return new Solver("conversion_2_with_partial_cargo_operations.mzn", - Task::portToMiniZinc_2, + Task::portToMiniZinc_2_separable, MZnResultsResolver::resolveMiniZincResults); } -- GitLab