ArrayList lt; Item gt; ();
for (Item i: items) {
//Якщо черговий елемент непорівнянний з раніше отриманим кращим,
//додаємо його в результуюче безліч.
if (relationpare (best, i) == null ) {. add (i);
}
}
//Видаляємо з вихідного безлічі всі посилання на недомініруемих об'єкти.
for (Item i: equalItems) {. remove (i);
}
//Додаємо недомініруемих об'єкти в шар Парето.
for (Item i: equalItems) {. add (i);
}
return bestItems;
}
}
/**
* Отримати безлічі (шари) Парето.
* @ param boss ЛПР.
* @ param items Початкове безліч.
* @ return Шари Парето.
*/
public List lt; List lt; Item gt; gt; createParetoSet (List lt; Item gt; items) { lt; List lt; Item gt; gt; layers= new ArrayList lt; List lt; Item gt; gt; ();
while (! (items. isEmpty ())) { lt; Item gt; paretoLayer=extractParetoLayer (items) ;. add (paretoLayer);
}
return layers;
}
/**
* Запакувати черговий шар Парето. Інкапсулює логіку алгоритму упаковки.
* @ param map Карта, що містить інформацію про контейнерах і про упакованих об'єктах.
* @ param paretoLayer Шар Парето.
* @ return Ту ж карту з черговим доданим шаром.
*/
public SortedMap lt; Container, List lt; Item gt; gt; pack (SortedMap lt; Container, List lt; Item gt; gt; map, List lt; Item gt; paretoLayer, ALGORYTHM algorythm) {
//Отримуємо масу і об'єм шару Парето.
double layerWeight=0.0;
double layerVolume=0.0;
for (Item i: paretoLayer) {+=i. weight; +=i. volume;
}
//if (algorythm == ALGORYTHM. FIRST_DECREASE || algorythm == ALGORYTHM. BEST_DECREASE) {
//sort (paretoLayer, SORT_TYPE. SIZE);
//}
//Якщо він в повному складі не упаковується, його потрібно сортувати по ефективності.
if (layerWeight gt; getFreeCargo (map) || gt; getFreeSpace (map)) {(paretoLayer, Packer. SORT_TYPE. UTILITY );
} lt; Item gt; forRemove= new ArrayList lt; Item gt; ();
for (Item item: paretoLayer) {
if (! tryToPack (map, item, algorythm)) {. getRest (). add (item) ;. add (item);
}
}
for (Item i: forRemove) {. remove (i);
}
return map;
}
/**
* Спробувати пакувати об'єкт.
* @ param map
* @ param item Об'єкт.
* @ return Прапор вдалого завершення операції.
*/
private boolean tryToPack (SortedMap lt; Container, List lt; Item gt ; gt; map, Item item, ALGORYTHM algorythm) { lt; Container gt; containers=map. keySet ();
if (algorythm == ALGORYTHM. BEST /* || algorythm == ALGORYTHM. BEST_DECREASE * /) {bestContainer =getBest (containers, item, map);
if (bestContainer == null ) {
return false ;
} else {. get (bestContainer). add (item);
return true ;
}
} else...