diff --git a/tests/with_typing/anti_greedy.tipp b/tests/with_typing/anti_greedy.tipp new file mode 100644 index 0000000000000000000000000000000000000000..62382121071594dcdd3f66778d068d72e960f5ad --- /dev/null +++ b/tests/with_typing/anti_greedy.tipp @@ -0,0 +1,170 @@ +Description +Тест против жадного алгоритма. + +Есть четыре локации - рейд, терминал 1, терминал 2 и терминал 3. +На рейде два грузовых судна. + +Грузовые суда могут перемещаться между рейдом и терминалом 1 за 1 ед. времени. +Так же, грузовые суда могут перемещаться между терминалами за 1 ед. времени. + +Суда загружаются у терминала 1 со скоростью 31 ед./интервал. +Суда загружаются у терминала 2 со скоростью 3 ед./интервал. +Суда загружаются у терминала 3 со скоростью 4 ед./интервал. + +Грузовые суда пусты, хранилище при терминале 1 имеет 31 ед. груза, при терминале 2 - 100 ед. груза, так же, как и при терминале 3. + +Необходимо загрузить оба судна по 40 ед. груза, и отправить их обратно на рейд. + +Идея - при частичной операции иногда не стоит жадно забирать сколько влезет, а взять только часть и оставить другому, +даже если надо самому. Пример - в решении "With splitting" - судно 12 загружает у терминала 1 12 ед. нефти, +хотя можно было больше, и собственное хранилище заполнилось не до конца. +Можно видеть, что жадный алгоритм не может так сделать, и ему приходится отправлять суда к терминалам 2 и 3, и +уже на обратной дороге догружать у термиала 1 до максимума. При этом решение хуже на 1 ед. времени. + +Цель - показать различия в возможностях сведений. + + +Решение сведения "Without splitting" с solver-ом Chuffed за 5.825 s : +14.0 +20112; R; 0.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 1. +20112; R; 0.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 2 от причала 1. +20124; R; 1.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 4 от причала 2. +20124; R; 1.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 4 от причала 2. +20143; R; 2.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 3 от причала 4. +40004; R; 2.0 ; 10.0 (12 [] 4) \* Судно 12 принимает груз 10001 из хранилища 2004 с интенсивностью 4 у причала 4. +20132; R; 3.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 3. +20124; R; 4.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 4 от причала 2. +20143; R; 5.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 3 от причала 4. +40003; R; 6.0 ; 3.0 (11 [] 3) \* Судно 11 принимает груз 10001 из хранилища 2003 с интенсивностью 3 у причала 3. +20134; R; 9.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 4 от причала 3. +20142; R; 10.0; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 4. +40002; R; 11.0; 1.0 (11 [] 31) \* Судно 11 принимает груз 10001 из хранилища 2002 с интенсивностью 31 у причала 2. +20121; R; 12.0; 1.0 (11 []) \* Судно 11 идёт к причалу 1 от причала 2. +20142; R; 12.0; 1.0 (12 []) \* Судно 12 идёт к причалу 2 от причала 4. +20121; R; 13.0; 1.0 (12 []) \* Судно 12 идёт к причалу 1 от причала 2. + +Решение сведения "Greedy v2" с solver-ом or-tools за 1780.826 s : +13.0 +20112; R; 0.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 1. +20112; R; 0.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 2 от причала 1. +20123; R; 1.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 3 от причала 2. +20124; R; 1.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 4 от причала 2. +40003; R; 2.0 ; 7.0 (12 [] 3) \* Судно 12 принимает груз 10001 из хранилища 2003 с интенсивностью -3 у причала 3. +40004; R; 2.0 ; 7.0 (11 [] 4) \* Судно 11 принимает груз 10001 из хранилища 2004 с интенсивностью -4 у причала 4. +20132; R; 9.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 2 от причала 3. +20143; R; 9.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 3 от причала 4. +20132; R; 10.0; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 3. +40002; R; 10.0; 1.0 (12 [] 19) \* Судно 12 принимает груз 10001 из хранилища 2002 с интенсивностью -19 у причала 2. +20121; R; 11.0; 1.0 (12 []) \* Судно 12 идёт к причалу 1 от причала 2. +40002; R; 11.0; 1.0 (11 [] 12) \* Судно 11 принимает груз 10001 из хранилища 2002 с интенсивностью -12 у причала 2. +20121; R; 12.0; 1.0 (11 []) \* Судно 11 идёт к причалу 1 от причала 2. + + +Решение сведения "With splitting" с solver-ом Chuffed за 20.527 s : +12.0 +20112; R; 0.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 1. +20112; R; 0.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 2 от причала 1. +20123; R; 1.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 3 от причала 2. +40002; R; 1.0 ; 1.0 (12 [] 12) \* Судно 12 принимает груз 10001 из хранилища 2002 с интенсивностью 12 у причала 2. +20124; R; 2.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 4 от причала 2. +40003; R; 2.0 ; 7.0 (11 [] 3) \* Судно 11 принимает груз 10001 из хранилища 2003 с интенсивностью 3 у причала 3. +40004; R; 3.0 ; 7.0 (12 [] 4) \* Судно 12 принимает груз 10001 из хранилища 2004 с интенсивностью 4 у причала 4. +20132; R; 9.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 3. +20142; R; 10.0; 1.0 (12 []) \* Судно 12 идёт к причалу 2 от причала 4. +40002; R; 10.0; 1.0 (11 [] 19) \* Судно 11 принимает груз 10001 из хранилища 2002 с интенсивностью 19 у причала 2. +20121; R; 11.0; 1.0 (11 []) \* Судно 11 идёт к причалу 1 от причала 2. +20121; R; 11.0; 1.0 (12 []) \* Судно 12 идёт к причалу 1 от причала 2. + +Typified +1 + +Cargoes +10001; Нефть; 0.0 + +Berths +1; Внешний рейд +2; Терминал 1 +3; Терминал 2 +4; Терминал 3 + +Storages +2002; Нефтехранилище 1; [(10001, 100.0)] +2003; Нефтехранилище 2; [(10001, 100.0)] +2004; Нефтехранилище 3; [(10001, 100.0)] + +Vessel Types +1001; Нефтяные танкеры + +Bunker Types + +Bunkers + +Tows + +Loading Equipment Types + +Loading Equipments + +Transport Ships +11; Танкер 1; [(10001, 100.0)]; 1001 +12; Танкер 2; [(10001, 100.0)]; 1001 + +Templates +20112; mov; []; 1001; 1; 2; []; 1.0 +20121; mov; []; 1001; 2; 1; []; 1.0 +20123; mov; []; 1001; 2; 3; []; 1.0 +20134; mov; []; 1001; 3; 4; []; 1.0 +20142; mov; []; 1001; 4; 2; []; 1.0 +20132; mov; []; 1001; 3; 2; []; 1.0 +20143; mov; []; 1001; 4; 3; []; 1.0 +20124; mov; []; 1001; 2; 4; []; 1.0 +40002; loa; []; 2002; 10001; 1001; 2; []; 31.0; U +40003; loa; []; 2003; 10001; 1001; 3; []; 3.0; U +40004; loa; []; 2004; 10001; 1001; 4; []; 4.0; U + +Cargo Flows + +Initial Vessel State +11; 1 +12; 1 + +Initial Storage State +10001; 2002; 31.0 +10001; 2003; 100.0 +10001; 2004; 100.0 +10001; 11; 0.0 +10001; 12; 0.0 + +Final Vessel State +11; 1 +12; 1 + +Final Storage State +10001; 11; 40.0 +10001; 12; 40.0 + + +Task Properties +25.0; 0 + +Fixed Operations + + +Solution +14.0 +20112; R; 0.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 1. +20112; R; 0.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 2 от причала 1. +20124; R; 1.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 4 от причала 2. +20124; R; 1.0 ; 1.0 (12 []) \* Судно 12 идёт к причалу 4 от причала 2. +20143; R; 2.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 3 от причала 4. +40004; R; 2.0 ; 10.0 (12 [] 4) \* Судно 12 принимает груз 10001 из хранилища 2004 с интенсивностью 4 у причала 4. +20132; R; 3.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 3. +20124; R; 4.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 4 от причала 2. +20143; R; 5.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 3 от причала 4. +40003; R; 6.0 ; 3.0 (11 [] 3) \* Судно 11 принимает груз 10001 из хранилища 2003 с интенсивностью 3 у причала 3. +20134; R; 9.0 ; 1.0 (11 []) \* Судно 11 идёт к причалу 4 от причала 3. +20142; R; 10.0; 1.0 (11 []) \* Судно 11 идёт к причалу 2 от причала 4. +40002; R; 11.0; 1.0 (11 [] 31) \* Судно 11 принимает груз 10001 из хранилища 2002 с интенсивностью 31 у причала 2. +20121; R; 12.0; 1.0 (11 []) \* Судно 11 идёт к причалу 1 от причала 2. +20142; R; 12.0; 1.0 (12 []) \* Судно 12 идёт к причалу 2 от причала 4. +20121; R; 13.0; 1.0 (12 []) \* Судно 12 идёт к причалу 1 от причала 2.