Een verhuisfirma wil zo efficiënt mogelijk kunnen verhuizen. Deze firma heeft maar één soort van dozen en die heeft een maximaal volume dat het kan bevatten. De vakbond van verhuizers legt daarnaast een maximaal gewicht op dat een verhuizer mag dragen. De firma wil nu weten op welke manier ze de dozen moet vullen zodat ze het minst aantal dozen moeten gebruiken.

Afbeelding van een verhuisdoos

Gevraagd: ontwerp en implementeer een algoritme via branch-and-bound voor dit verhuisdozenprobleem. Implementeer hiervoor de interface VerhuisPlanner1 in een klasse genaamd BBVerhuisPlanner. Hiervoor schrijf je een methode public List<VerhuisDoos> selecteer(Collection<VerhuisItem> items), die een collectie van items, van de gegeven klasse VerhuisItem2, als argument heeft. De uitvoer is een lijst van de gegeven klasse VerhuisDoos3 waarbij elke doos een collectie van VerhuisItems bevat.

Het volume en het gewicht van elk VerhuisItem is genormaliseerd zodat het totale volume en het totale gewicht van een verhuisdoos maximaal 1 is. M.a.w. de som van het gewicht en de som van het volume van alle items in een doos mag niet meer dan 1 zijn. De dozen moeten zo gevuld worden dat het aantal dozen minimaal is. Als er meerdere oplossingen zijn, dan mag je er eender welke teruggeven.

Gebruik de testklasse SimpleTest4 om je oplossing lokaal te testen. Je kan hierin eenvoudig extra testgevallen toevoegen.