From f79be9eee325a386c7d46a98ffb6a2be7a1d4dd4 Mon Sep 17 00:00:00 2001 From: Vlad_kv Date: Fri, 9 Aug 2019 22:53:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B8=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BA=20=D1=87=D0=B0=D1=81=D1=82=D0=B8=20=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D0=B2.=20=D0=9D=D0=B5=D0=BA=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B7=D0=BD=D0=B0=D1=87=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/with_typing/Bunkers.tipp | 23 ++++++---- tests/with_typing/Bunkers_2.tipp | 22 ++++++++++ tests/with_typing/Case1.tipp | 44 ++++++++++++++----- tests/with_typing/Case2.tipp | 73 ++++++++++++++++++-------------- tests/with_typing/TaskT.tipp | 45 +++++++++++++++----- tests/with_typing/multiTow.TIPP | 72 ++++++++++++++++++++----------- 6 files changed, 193 insertions(+), 86 deletions(-) diff --git a/tests/with_typing/Bunkers.tipp b/tests/with_typing/Bunkers.tipp index 2d7694a..1d1dce3 100644 --- a/tests/with_typing/Bunkers.tipp +++ b/tests/with_typing/Bunkers.tipp @@ -1,14 +1,27 @@ +Description +Простой тест на работу бункеровщиков. + +Есть две локации - рейд и причал 1, на рейде стоят два судна, у причала находятся два бункеровщика. +Грузовые суда могут перемещаться между причалом и портом за 1 ед. времени. +Грузовые суда способны качать нефть из хранилища у причала без швартовки со скоростью 20 ед. (В хранилище достаточно нефти.) +Так же, суда могут бункероваться у причала со скоростью 2 ед. топлива. +Грузовые суда пусты, каждый бункеровщик заправлен 4 ед. топлива. + +Необходимо, что бы каждое грузовое судно было заполнено 60-ю ед. нефти и 4 ед. топлива, чтобы суда вернулись на рейд +и была исполнена одна фиксированная операция бункеровки. + +Решение - суда идуд к причалу, один за другим загружают нефть и паралельно бункеруются, возвращаются обратно. + Typified 1 Cargoes -10001; Нечто; 0.0 +10001; Нефть; 0.0 10002; Топливо; 0.0 Berths 1; Raid 2; Pier 1 -3; Pier 2 Storages 4; Storage 1; [(10001, 10000.0)] @@ -36,12 +49,6 @@ Transport Ships Templates 7; mov; []; 1001; 1; 2; []; 1.0 8; mov; []; 1001; 2; 1; []; 1.0 -9; mov; []; 1001; 1; 3; []; 1.0 -10; mov; []; 1001; 3; 1; []; 1.0 -11; mov; []; 1001; 2; 3; []; 1.0 -12; mov; []; 1001; 3; 2; []; 1.0 -13; mov; []; 2001; 3; 2; []; 1.0 -14; mov; []; 2001; 3; 2; []; 1.0 19; loa; []; 4; 10001; 1001; 2; []; 20.0; U 20; loa; []; 2001; 10002; 1001; 2; []; 2.0; U diff --git a/tests/with_typing/Bunkers_2.tipp b/tests/with_typing/Bunkers_2.tipp index 1fd8a0b..83efc45 100644 --- a/tests/with_typing/Bunkers_2.tipp +++ b/tests/with_typing/Bunkers_2.tipp @@ -1,4 +1,26 @@ Description +Расширенный тест на работу бункеровщиков. + +Есть три локации - рейд, причал 1 и причал 2. На рейде стоят два судна, у причала 2 находятся два бункеровщика. +Грузовые суда могут перемещаться между локациями за 1 ед. времени. +Бункеровщики могут перемещаться между причалами за 1 ед. времени. + +Грузовые суда способны качать нефть из хранилища у причала 1 без швартовки со скоростью 20 ед./интервал (В хранилище достаточно нефти.) +Так же, суда могут бункероваться у причала 1 со скоростью 2 ед. топлива/интервал. +Кроме того, бункеровщики имеют возможность качать топливо с причала 2 со скоростью 2 ед./интервал. + +Грузовые суда пусты, как и бункеровщики. В стационарных хранилищах достаточно груза. + +Необходимо, что бы каждое грузовое судно было заполнено 60-ю ед. нефти и 6 ед. топлива и чтобы суда вернулись на рейд. + +Основные отличия от теста Bunkers.tipp - добавлена локация для заправки бункеровщиков, внутренний объём бункеровщиков +составляет 2/3 от объёма топливного бака грузового судна - бункеровщикам придётся несколько раз перевозить топливо. + +План решения - один из бункеровщиков качает 1-цу топлива и перемещиется к причалу 2. Второй бункеровщик после освобождения +причала 2 качает топливо в течении 2-ух интервалов и следует за первым бункеровщиком. Дальше бункеровщики продолжают +курсировать между причалами пока это необходимо. +Грузовые суда идут к причалу 2, качают нефть в такой очерёдности, чтобы курсирующие бункеровщики не простаивали, и в конце +возвращаются на рейд. Typified 1 diff --git a/tests/with_typing/Case1.tipp b/tests/with_typing/Case1.tipp index 2845468..b6b5779 100644 --- a/tests/with_typing/Case1.tipp +++ b/tests/with_typing/Case1.tipp @@ -1,8 +1,29 @@ +Description +Тест на нецелые операции. + +Есть три локации - рейд, терминал 1 и терминал 2. +На рейде стоит судно, у терминала 1 находится буксир, у терминала 2 располагается плавучий кран. + +Грузовое судно может перемещаться от рейда до обоих терминалов с помощью буксира за 2 ед. времени. +Буксир способен перемещаться между рейдом и терминалами за 1 ед. времени. +Плавучий кран имеет возможность переместиться из терминала 2 в терминал 1 с помошью буксира за 3 ед. времени. + +Грузовое судно способно качать нефть у терминала 1 при помощи плавичего крана со скоростью 20. +Так же, оно способно качать нефть у терминала 2 при помощи плавичего крана со скоростью 15. + +Грузовое судно пусто. В стационарных хранилищах ноходится 100 ед. нефти. + +Необходимо опустошить береговое хранилище. + +Идея теста - требуется много времени, чтобы свезти всё необходимое (судно и кран) к терминалу 1. Выгоднее перевезти +судно к терминалу 2 и сразу загружать, пусть и с меньшей скоростью. +Но, 100 не делится нацело на 15, так что реализация с неделимыми операциями выберет неоптимальное решение с терминалом 1. + Typified 1 Cargoes -313; Груз1; 0.0 +313; Нефть; 0.0 Berths 314; Рейд @@ -16,10 +37,12 @@ Vessel Types 1001; Тип судна1 1002; Тип буксира1 +Bunker Types + Bunkers Tows -320; Буксир1; []; 1002 +320; Буксир1; 1000000; 1002 Loading Equipment Types 1003; Кран @@ -32,7 +55,7 @@ Transport Ships Templates 8; mov; []; 1002; 314; 316; []; 1.0 -9; mov; []; 1002; 315; 316; []; 3.0 +9; mov; []; 1002; 314; 315; []; 1.0 5; mov; []; 1002; 315; 314; []; 1.0 7; mov; []; 1002; 316; 314; []; 1.0 11; mov; []; 1001; 314; 315; [1002]; 2.0 @@ -61,12 +84,13 @@ Final Storage State Task Properties 18.0; 0 +Fixed Operations + Solution -13.0 -5; R; 0.0; 1.0 (320 []) -8; R; 1.0; 1.0 (320 []) -10; R; 2.0; 3.0 (323 [320]) -5; R; 5.0; 1.0 (320 []) -11; R; 6.0; 2.0 (321 [320]) -2; R; 8.0; 5.0 (321 [323]) +10.0 +5; R; 0.0; 1.0 (320 []) \* Буксир 320 идёт к причалу 314 от причала 315. +6; R; 1.0; 2.0 (321 [320]) \* Судно 321 идёт к причалу 316 от причала 314 используя буксиры {320}. +7; R; 3.0; 1.0 (320 []) \* Буксир 320 идёт к причалу 314 от причала 316. +4; R; 3.0; 6.0 (321 [323] 15) \* Судно 321 принимает груз 313 из хранилища 317 с интенсивностью 15 у причала 316 используя оборудование {Плавучий кран}. +4; R; 9.0; 1.0 (321 [323] 10) \* Судно 321 принимает груз 313 из хранилища 317 с интенсивностью 10 у причала 316 используя оборудование {Плавучий кран}. diff --git a/tests/with_typing/Case2.tipp b/tests/with_typing/Case2.tipp index 9452632..0e67ebe 100644 --- a/tests/with_typing/Case2.tipp +++ b/tests/with_typing/Case2.tipp @@ -1,3 +1,23 @@ +Description +Тест на эффективное исплользование оборудования. + +Есть три локации - рейд, терминал 1 и терминал 2. +На рейде стоит судно, у терминала 1 находится буксир, у терминала 2 располагаются второй буксир и три плавучих крана различных типов. + +Грузовое судно может перемещаться от рейда к терминалу 2 с помощью буксира за 2 ед. времени. +Грузовое судно швартуется к терминалу 2 с помощью двух буксиров за 1 ед. времени. +Буксиры способны перемещаться между рейдом и терминалом 2 за 1 ед. времени. +Кроме того, буксиры могут выехать из терминала 1 к рейду за 1 ед., или к терминалу 2 за 3 ед. времени. + +Грузовое судно способно нетривиальными способами сгружать три типа груза пришвартовавшись у терминала 2, при этом используя от одного до двух кранов определённого типа. + +Грузовое судно имеет по 6 едениц каждого груза. + +Необходимо полностью разгрузить судно. + +Цель теста - протестировать швартовку двумя буксирами и эффективное использование оборудования (плавучих кранов). +Решение можно достичь неделимыми операциями. + Typified 1 @@ -8,8 +28,8 @@ Cargoes Berths 86; Рейд -87; Терминал1 -88; Терминал2 +87; Терминал 1 +88; Терминал 2 Storages 89; Хранилище1; [(83, 100.0)] @@ -20,16 +40,18 @@ Vessel Types 1001; Тип судна1 1002; Тип буксира1 +Bunker Types + Bunkers Tows -94; Буксир1; []; 1002 -95; Буксир2; []; 1002 +94; Буксир1; 1000000; 1002 +95; Буксир2; 1000000; 1002 Loading Equipment Types 1003; Тип крана 1 -1004; Тип крана 1 -1005; Тип крана 1 +1004; Тип крана 2 +1005; Тип крана 3 Loading Equipments 99; Плавучий кран 1; 1003 @@ -80,32 +102,19 @@ Final Storage State Task Properties 26.0; 0 +Fixed Operations + Solution 16.0 -15; R; 0.0; 1.0 (94 []) -8; R; 1.0; 2.0 (96 [94]) -10; R; 3.0; 1.0 (96 [94, 95]) -11; R; 3.0; 1.0 (95 []) -2; R; 4.0; 2.0 (96 [99, 100]) -7; R; 4.0; 2.0 (96 [101]) -5; R; 6.0; 1.0 (96 [100, 101]) -13; R; 7.0; 1.0 (95 []) -7; R; 7.0; 2.0 (96 [101]) -11; R; 8.0; 1.0 (94 []) -11; R; 8.0; 1.0 (95 []) -13; R; 9.0; 1.0 (95 []) -4; R; 9.0; 2.0 (96 [99, 101]) -11; R; 11.0; 1.0 (95 []) -5; R; 11.0; 1.0 (96 [100, 101]) -13; R; 12.0; 1.0 (94 []) -13; R; 12.0; 1.0 (95 []) -7; R; 12.0; 1.0 (96 [101]) -11; R; 13.0; 1.0 (95 []) -5; R; 13.0; 1.0 (96 [100, 101]) -13; R; 14.0; 1.0 (95 []) -4; R; 14.0; 1.0 (96 [99, 101]) -11; R; 15.0; 1.0 (94 []) -11; R; 15.0; 1.0 (95 []) -2; R; 15.0; 1.0 (96 [99, 100]) -7; R; 15.0; 1.0 (96 [101]) +15; R; 0.0 ; 1.0 (94 []) \* Буксир 94 идёт к причалу 86 от причала 87. +8 ; R; 1.0 ; 2.0 (96 [94]) \* Судно 96 идёт к причалу 88 от причала 86 используя буксиры {94}. +10; R; 3.0 ; 1.0 (96 [94, 95]) \* Судно 96 швартуется к причалу 88 используя буксиры {94, 95}. +7 ; R; 4.0 ; 1.0 (96 [101] 1) \* Судно 96 принимает груз 85 из хранилища 91 с интенсивностью 1 у причала 88 используя оборудование {Плавучий кран 3}. +4 ; R; 5.0 ; 2.0 (96 [99, 101] 1) \* Судно 96 принимает груз 84 из хранилища 90 с интенсивностью 1 у причала 88 используя оборудование {Плавучий кран 1, Плавучий кран 3}. +5 ; R; 7.0 ; 1.0 (96 [100, 101] 1) \* Судно 96 принимает груз 84 из хранилища 90 с интенсивностью 1 у причала 88 используя оборудование {Плавучий кран 2, Плавучий кран 3}. +4 ; R; 8.0 ; 1.0 (96 [99, 101] 1) \* Судно 96 принимает груз 84 из хранилища 90 с интенсивностью 1 у причала 88 используя оборудование {Плавучий кран 1, Плавучий кран 3}. +2 ; R; 9.0 ; 3.0 (96 [99, 100] 2) \* Судно 96 принимает груз 83 из хранилища 89 с интенсивностью 2 у причала 88 используя оборудование {Плавучий кран 1, Плавучий кран 2}. +7 ; R; 9.0 ; 5.0 (96 [101] 1) \* Судно 96 принимает груз 85 из хранилища 91 с интенсивностью 1 у причала 88 используя оборудование {Плавучий кран 3}. +4 ; R; 14.0; 1.0 (96 [99, 101] 1) \* Судно 96 принимает груз 84 из хранилища 90 с интенсивностью 1 у причала 88 используя оборудование {Плавучий кран 1, Плавучий кран 3}. +5 ; R; 15.0; 1.0 (96 [100, 101] 1) \* Судно 96 принимает груз 84 из хранилища 90 с интенсивностью 1 у причала 88 используя оборудование {Плавучий кран 2, Плавучий кран 3}. diff --git a/tests/with_typing/TaskT.tipp b/tests/with_typing/TaskT.tipp index 52fdbb4..5cb279a 100644 --- a/tests/with_typing/TaskT.tipp +++ b/tests/with_typing/TaskT.tipp @@ -1,3 +1,24 @@ +Description +Тест на нетривиальное планирование. + +Есть три локации - рейд, причал 1 и причал 2. +На рейде стоят два судна. + +Суда могут перемещаться между локациями за 1 ед. времени. + +Суда способны загружать груз с причала 1 со скоростью 2 ед, и с причала 2 со скоростью 1 ед./интервал. + +Изначально суда пусты. + +Необходимо загрузить суда по 20 ед. каждое и направить их обратно на рейд. + +Оптимальное решение - суда идут каждое на свой причал, загружают груз, меняются причалами, качают до упора и +возвращаются на рейд. При этом, причал 1 должен использоваться непрерывно, и судам необходимо закончить загружаться +одновременно. + +Очевидное, но неоптимальное решение - суда разъезжаются по причалам, судно у причала 1 загружается до упора, судно у +причала 2 загружается и едет к причалу 1 с таким расчётом, чтобы прибыть к отбытию другого судна, и загружается до конца. + Typified 1 @@ -10,7 +31,7 @@ Berths 3; Pier 2 Storages -4; Storage 1; [(0, 200)] +4; Storage 1; [(0, 200.0)] Vessel Types 1001; Тип судна1 @@ -62,16 +83,18 @@ Final Storage State Task Properties 24.0; 0 +Fixed Operations + Solution 16.0 -7; R; 0.0; 1.0 (6 []) -9; R; 0.0; 1.0 (5 []) -19; R; 1.0; 7.0 (6 [] 10) -20; R; 1.0; 6.0 (5 [] 5) -12; R; 7.0; 1.0 (5 []) -11; R; 8.0; 1.0 (6 []) -19; R; 8.0; 7.0 (5 [] 10) -20; R; 9.0; 6.0 (6 [] 5) -8; R; 15.0; 1.0 (5 []) -10; R; 15.0; 1.0 (6 []) +7 ; R; 0.0 ; 1.0 (6 []) \* Судно 6 идёт к причалу 2 от причала 1. +9 ; R; 0.0 ; 1.0 (5 []) \* Судно 5 идёт к причалу 3 от причала 1. +19; R; 1.0 ; 7.0 (6 [] 2) \* Судно 6 принимает груз 0 из хранилища 4 с интенсивностью 2 у причала 2. +20; R; 1.0 ; 6.0 (5 [] 1) \* Судно 5 принимает груз 0 из хранилища 4 с интенсивностью 1 у причала 3. +12; R; 7.0 ; 1.0 (5 []) \* Судно 5 идёт к причалу 2 от причала 3. +11; R; 8.0 ; 1.0 (6 []) \* Судно 6 идёт к причалу 3 от причала 2. +19; R; 8.0 ; 7.0 (5 [] 2) \* Судно 5 принимает груз 0 из хранилища 4 с интенсивностью 2 у причала 2. +20; R; 9.0 ; 6.0 (6 [] 1) \* Судно 6 принимает груз 0 из хранилища 4 с интенсивностью 1 у причала 3. +8 ; R; 15.0; 1.0 (5 []) \* Судно 5 идёт к причалу 1 от причала 2. +10; R; 15.0; 1.0 (6 []) \* Судно 6 идёт к причалу 1 от причала 3. diff --git a/tests/with_typing/multiTow.TIPP b/tests/with_typing/multiTow.TIPP index e2b833d..396f6fe 100644 --- a/tests/with_typing/multiTow.TIPP +++ b/tests/with_typing/multiTow.TIPP @@ -1,3 +1,23 @@ +Description +Тест на эффективное исплользование оборудования. + +Есть две локации - рейд и терминал 1. +На рейде два грузовых судна и два буксира, у терминала 1 стоят ещё два буксира. + +Грузовые суда могут перемещаться между локациями с помощью двух буксиров за 1 ед. времени. +Грузовые суда швартуются и отшвартовываются у терминала 1 с помощью трёх буксиров за 1 ед. времени. +Буксиры способны перемещаться между локациями за 1 ед. времени. + +Грузовые суда загружаются и разгружаются у терминала 1 со скоростью 6 ед./интервал, предварительно пришвартовавшись. + +Первое грузовое судно имеет 12 ед. груза, второе судно пусто, береговое хранилище пусто и имеет объём в 6 ед.. + +Необходимо, чтобы весь груз из первого грузового судна оказался в другом судне, и чтобы оба стояли на рейде. + +Идея - судно не может выгрузить всё сразу, придётся чередоваться. + +Цель - протестировать работу сразу четырёх буксиров, а так же взаимоисключающие операции и занятость причала. + Typified 1 @@ -6,7 +26,7 @@ Cargoes Berths 10; Рейд -16; Терминал1 +16; Терминал 1 Storages 18; Хранилище1; [(13, 6.0)] @@ -15,13 +35,15 @@ Vessel Types 11; Тип судна1 12; Тип буксира1 +Bunker Types + Bunkers Tows -121; Буксир1; []; 12 -122; Буксир2; []; 12 -123; Буксир3; []; 12 -124; Буксир4; []; 12 +121; Буксир1; 1000000; 12 +122; Буксир2; 1000000; 12 +123; Буксир3; 1000000; 12 +124; Буксир4; 1000000; 12 Loading Equipment Types @@ -68,26 +90,26 @@ Final Storage State Task Properties 20.0; 0 +Fixed Operations + Solution 15.0 -61; R; 0.0; 1.0 (111 [123, 124]) -64; R; 0.0; 1.0 (121 []) -64; R; 0.0; 1.0 (122 []) -61; R; 1.0; 1.0 (112 [121, 122]) -65; R; 2.0; 1.0 (111 [121, 122, 124]) -67; R; 3.0; 1.0 (111 []) -66; R; 4.0; 1.0 (111 [121, 123, 124]) -65; R; 5.0; 1.0 (112 [121, 123, 124]) -64; R; 6.0; 1.0 (123 []) -68; R; 6.0; 1.0 (112 []) -66; R; 7.0; 1.0 (112 [121, 122, 124]) -65; R; 8.0; 1.0 (111 [121, 122, 124]) -63; R; 9.0; 1.0 (123 []) -67; R; 9.0; 1.0 (111 []) -66; R; 10.0; 1.0 (111 [121, 122, 123]) -65; R; 11.0; 1.0 (112 [121, 122, 124]) -68; R; 12.0; 1.0 (112 []) -66; R; 13.0; 1.0 (112 [121, 122, 124]) -62; R; 14.0; 1.0 (111 [121, 123]) -62; R; 14.0; 1.0 (112 [122, 124]) +61; R; 0.0 ; 1.0 (111 [123, 124]) \* Судно 111 идёт к причалу 16 от причала 10 используя буксиры {123, 124}. +65; R; 1.0 ; 1.0 (111 [122, 123, 124]) \* Судно 111 швартуется к причалу 16 используя буксиры {122, 123, 124}. +64; R; 2.0 ; 1.0 (122 []) \* Буксир 122 идёт к причалу 10 от причала 16. +64; R; 2.0 ; 1.0 (124 []) \* Буксир 124 идёт к причалу 10 от причала 16. +67; R; 2.0 ; 1.0 (111 [] 6) \* Судно 111 принимает груз 13 из хранилища 18 с интенсивностью 6 у причала 16. +61; R; 3.0 ; 1.0 (112 [122, 124]) \* Судно 112 идёт к причалу 16 от причала 10 используя буксиры {122, 124}. +66; R; 4.0 ; 1.0 (111 [121, 122, 124]) \* Судно 111 отшвартовывается от причала 16 используя буксиры {121, 122, 124}. +65; R; 5.0 ; 1.0 (112 [122, 123, 124]) \* Судно 112 швартуется к причалу 16 используя буксиры {122, 123, 124}. +68; R; 6.0 ; 1.0 (112 [] 6) \* Судно 112 принимает груз 13 из хранилища 18 с интенсивностью 6 у причала 16. +66; R; 7.0 ; 1.0 (112 [122, 123, 124]) \* Судно 112 отшвартовывается от причала 16 используя буксиры {122, 123, 124}. +65; R; 8.0 ; 1.0 (111 [122, 123, 124]) \* Судно 111 швартуется к причалу 16 используя буксиры {122, 123, 124}. +67; R; 9.0 ; 1.0 (111 [] 6) \* Судно 111 принимает груз 13 из хранилища 18 с интенсивностью 6 у причала 16. +66; R; 10.0; 1.0 (111 [121, 122, 124]) \* Судно 111 отшвартовывается от причала 16 используя буксиры {121, 122, 124}. +65; R; 11.0; 1.0 (112 [121, 123, 124]) \* Судно 112 швартуется к причалу 16 используя буксиры {121, 123, 124}. +68; R; 12.0; 1.0 (112 [] 6) \* Судно 112 принимает груз 13 из хранилища 18 с интенсивностью 6 у причала 16. +66; R; 13.0; 1.0 (112 [121, 122, 123]) \* Судно 112 отшвартовывается от причала 16 используя буксиры {121, 122, 123}. +62; R; 14.0; 1.0 (111 [122, 123]) \* Судно 111 идёт к причалу 10 от причала 16 используя буксиры {122, 123}. +62; R; 14.0; 1.0 (112 [121, 124]) \* Судно 112 идёт к причалу 10 от причала 16 используя буксиры {121, 124}. -- GitLab