diff --git a/src/constraints/conversion_2_with_partial_cargo_operations.mzn b/src/constraints/conversion_2_with_partial_cargo_operations.mzn index 9c86594df798524ed0b138e7e1586fb040264e68..8d7d8c8c3b458808026417fa306d9dba027fe0b6 100644 --- a/src/constraints/conversion_2_with_partial_cargo_operations.mzn +++ b/src/constraints/conversion_2_with_partial_cargo_operations.mzn @@ -218,6 +218,9 @@ array [0..n_operations] of 0..n_locations : operations_destination; % Локац % Операции погрузки, которые используют этот объект в качестве главного или в качестве бункеровщика. array [0..n_moving_obj] of set of 0..n_operations : related_cargo_op; + % Операции отшвартовки, которые используют объект в качестве главного. + array [0..n_moving_obj] of set of 1..n_operations : related_unmooring_op; + % Определение is_involved_in_cargo_op. constraint forall (obj in 1..n_moving_obj, t in 1..n_intervals) ( is_involved_in_cargo_op[obj, t] = ( @@ -344,6 +347,9 @@ array [0..n_operations] of 0..n_locations : operations_destination; % Локац array [1..n_loading_op] of {1, -1} : loading_op_local_direction; array [1..n_loading_op] of 1..n_operations : loading_op_n; % Номера среди общего списка операций. + array [1..n_moving_obj] of set of 1..n_all_storage_sections : sections_of_moving_obj; + array [1..n_moving_obj] of bool : is_sections_of_moving_obj_empty; + array [1..n_all_storage_sections] of set of 1..n_loading_op : involved_operations; % Интенсивность операций погрузки. @@ -386,6 +392,7 @@ array [0..n_operations] of 0..n_locations : operations_destination; % Локац array [1..n_fixed_op] of int : fixed_op_intensity; array [0..n_operations, 0..n_intervals] of bool : is_fixed; + array [0..n_moving_obj, 0..(n_intervals + 1)] of bool : is_obj_involved_in_fixed_op; constraint forall (no in 1..n_fixed_op, op = fixed_op[no]) ( forall (t in fixed_op_start[no]..fixed_op_end[no]) ( @@ -492,6 +499,12 @@ array [0..n_operations] of 0..n_locations : operations_destination; % Локац ) ); + array [1..n_all_storage_sections, 1..n_locations] of int : min_positive_cargo_val; % Объём максимальной положительной операции, которая может быть произведена с этой секцией в этом хранилище. Если в локации таковой нет, то это значение объёма хранилища + 1. + array [1..n_all_storage_sections, 1..n_locations] of int : max_negative_cargo_val; + + array [1..n_moving_obj, 1..n_locations] of bool : can_obj_leave_loc_only_alone; + array [1..n_moving_obj, 1..n_locations, 1..n_intervals] of bool : is_fixed_op_planned_in_future; + % Критерий оптимизации array [1..(n_intervals + 1)] of var bool : is_not_terminated; % В конце всё остановится.