From df783d947acda87cea9c7b6a86f3faad21f28b23 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: Fri, 3 May 2019 20:31:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constraints/conversion_2.mzn | 39 ++++++++++++-------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/constraints/conversion_2.mzn b/src/constraints/conversion_2.mzn index f052757..6c421d4 100644 --- a/src/constraints/conversion_2.mzn +++ b/src/constraints/conversion_2.mzn @@ -152,27 +152,19 @@ array [1..n_operations] of 1..n_locations : operations_destination; % Локац ); % Связь с текущими операциями перемещения. - % Если объект задействован в операции перемещения, то participation_as_resource и - % current_moving_operation должны указывать на одну и ту же операцию. - % { Если объект движется, и движется как ресурс, то participation_as_resource должен отображать этот факт. } - constraint forall (obj in 1..n_moving_obj, t in 1..n_intervals) ( - (current_moving_operation[obj, t] != 0) -> ( - (current_moving_operation[obj, t] in operations_that_used_obj_as_resource[obj]) + % Если объект задействован в операции перемещения, которая использует его как ресурс, + % то participation_as_resource должен указывать на эту операцию. + constraint forall (obj in 1..n_moving_obj, t in 1..n_intervals) ( + (current_moving_operation[obj, t] in operations_that_used_obj_as_resource[obj]) -> - (participation_as_resource[obj, t] = current_moving_operation[obj, t]) - ) - ); - - % Если объект участвует как ресурс в операции перемещения, то это согласованно с current_moving_operation. - constraint forall (obj in 1..n_moving_obj, t in 1..n_intervals) ( - (participation_as_resource[obj, t] != 0) -> ( - (is_moving_operation[participation_as_resource[obj, t]]) -> ( - (current_moving_operation[obj, t] != 0) - /\ - (participation_as_resource[obj, t] = current_moving_operation[obj, t]) - ) - ) - ); + (participation_as_resource[obj, t] = current_moving_operation[obj, t]) + ); + % Если объект участвует как ресурс в операции перемещения, то это согласованно с current_moving_operation. + constraint forall (obj in 1..n_moving_obj, t in 1..n_intervals) ( + ((participation_as_resource[obj, t] != 0) /\ + (is_moving_operation[participation_as_resource[obj, t]]) + ) -> (participation_as_resource[obj, t] = current_moving_operation[obj, t]) + ); % { Объект участвует где-то в качестве ресурса - соответствующая операция обязана быть активной. } constraint forall (obj in 1..n_moving_obj, t in 1..n_intervals) ( @@ -181,10 +173,9 @@ array [1..n_operations] of 1..n_locations : operations_destination; % Локац % От начала операции и до конца её ресурсы не могут измениться (в том числе и для погрузки). constraint forall (obj in 1..n_moving_obj, t in 1..(n_intervals - 1)) ( - (participation_as_resource[obj, t] != 0) -> - (op_status[participation_as_resource[obj, t], t + 1] - -> participation_as_resource[obj, t + 1] = participation_as_resource[obj, t] - ) + ((participation_as_resource[obj, t] != 0) /\ + (op_status[participation_as_resource[obj, t], t + 1]) + ) -> (participation_as_resource[obj, t + 1] = participation_as_resource[obj, t]) ); int : n_resources_types; % Количество различных типов ресурсов. -- GitLab