Foundations in Algorithms
School of Computing, National University of Singapore
(CS5206, Fall 2008)

The BAP Partitioning Challenge
(See updates on BAPPackage below.) [13/10/2008]


Aims of the Course Project

The aim of the course project is to apply advanced algorithms and data structures to solve real problems. The problem chosen for this purpose is the BAP partitioning, a sub-problem of the Berth Allocation Planning (BAP)

The BAP is an optimization problem that arises from operations in large transshipment ports such as PSA, Singapore. Very briefly, the BAP partitioning problem is to assign incoming vessels to different sections of the port (for berthing) so as to minimize the cost of transshipment (which is the cost of container movement between vessels and between vessels and the port).


BAP Partitioning Challenge

This project is to implement efficient and effective algorithms for BAP Partitioning, and verify the performance of your algorithm on various benchmark datasets. This project is modelled after various DIMACS Challenges, where researchers are invited to implement algorithms to solve specific problems. (Past DIMACS challenge problems include matching, network flows, graph colouring, maximum clique, satisfiability, TSP, shortest path, etc).

In this BAP Partitioning Challenge, the "challenge" is to do design the best possible algorithm for solving the BAP Partitioning Problem, which is known to be NP-complete. So, the twin sub-goals of the challenge are to come up with good heuristic algorithms on large instances, and to hopefully solve smaller instances almost optimally.

As far as I know, BAP partitioning is isn't a very well-studied problem, so there should be a chance to get some good research results in this class project. I also hope that some of the good projects can be suitably extended after this class into research papers. I will give some relevant references that you may want to consider in the design of your own algorithms.


The BAP Partitioning Problem

More details of the BAP partitioning problem can be found here.


The Benchmark BAP DataSets

An important aspect of the DIMACS Challenges is a publically available set of problem instances which made it possible to directly compare results. Likewise, the probem instances for the BAP Partitioning Challenge are made available in the course web-site.

These BAP datasets were randomly generated, although many of the parameters were based upon data that closely match real port situations.


BAP Source Codes and Resources

My research group (the RAS-Group, SoC, NUS) has developed a software prototype software system called BAPS that solves the BAP. The BAPS is developed in C++ and uses the LEDA software for some of its data structures. We have also extracted some key components and classes of the BAPS to be used for the case study in this project. It is provided here:

The code gives a complete framework for solving the BAP (both partitioning and packing). The code for a BAP partitioner (called the Trivial Partitioner) is also given to you. The Trivial Partitioner assigns the vessels to sections randomly. Hence, we do not expect its results to be any good. However, the code for the Trivial Partitioner will give you a very good reference that will help you to implement your own BAP partitioners.

You will need to download the BAP source code, understand the code (with the help of the lecture notes). Read the BAP Package class since most of the functions/methods that you need should be found in there. You don't need to understand all the code in order to do your assignment. Pay more attention on the BAPTVPartitioner code since your own greedy algorithm will be based on it.

The concept of "time zones" is discussed in many BAP papers and can be found in Chapter 3.1.1 of David Ong's thesis. The link to the thesis can be found in the BAP description.


What You Have to Do

To help you achieve your project goal of implementing your best algorithm for BAP Partitioning, I have set three milestones for the project:


Your BAP Project Deliverables

For Milestone M1:

After you have completed your Greedy BAP Partitioner (the one that is assigned to you), please integrated your partitioner, together with the Trivial Partitioner into your version of the BAPS. Create project files (and parameter files as necessary) to run your Partitioner on all the datasets that has been given to you. (It may be useful to write some short scripts to automate this process of "running on all the datasets" as you will find it extremely useful for Phase M3 of this project.)

Give a brief report (call it BAP-M1-Rep-[your-name].doc/pdf/ps) on your greedy partitioner that includes a table of the results obtained. The table of results should contain at least, columns for the number of vessels unassigned, the transshipment cost, and the penalty cost. (An additional thing that you may want to do is to try to draw some conclusions (good, bad, or ugly) on your assigned greedy heuristic algorithm.) Put your report under a new directory called "Reports".

To submit your BAP M1 deliverables, please do the following:

For Milestone M2:

Write up your solution proposal as a 2-page document that outlines your proposed algorithm (with some details to make it understandable for me) and call it BAP-M2-Prop-[your-name].doc/pdf/ps and submit this zip file to CS5206 IVLE workbin called "CS5206-BAP-M2".

For Milestone M3:


BAP Partitioning Challenge Project, (CS5206, SoC, NUS)