Challenge Overview
Challenge Objectives
-
Creating Blend Optimizer module
Project Goal
The intent of this project is to create an MVP web application - Bunker Desk Tool Kit - to manage the activities currently done with a combination of excel tools and manual tasks. Using the new web application, users will be able to:
-
Schedule bunker deliveries and resupply movements
-
Report and communicate effectively with third-party terminals, barges and agents
-
Provide optimal blend opportunities
-
Update Marketers and Traders of the status of inventories and deliveries
Project Background
Apophis currently uses a cumbersome combination of excel tools, manually generated reports, routine emails, calls, and meetings to manage the bunker fuel operations for terminals and barges across 4 geographies.
Bunkering is the supplying of fuel for use by ships, and includes the shipboard logistics of loading fuel and distributing it among available bunker tanks. In many maritime contracts, such as charter parties, contracts for carriage of goods by sea, and marine insurance policies, the shipowner or ship operator is required to ensure that the ship is "seaworthy". Seaworthiness requires not only that the ship is sound and properly crewed, but also that it is fully fueled (or "bunkered") at the start of the voyage.
Excel tools currently help the scheduler to
-
Optimize cost-effective blends,
-
Track movements into and out of the terminal and barges,
-
Manage inventory and schedule deliveries based on various ports and report information to marketers and traders while managing physical, quality, and logistical constraints.
-
Nomination documents for each movement formalize the instructions to Terminals and Barge Companies.
-
Daily logistics coordination with ships, port agents, terminals, and barge owners occurs via email and calls to respond to the rapidly changing operating environment.
-
Updates on scheduled deliveries, available inventory, and barge availability are shared with Marketers and Traders via manual reports generated periodically throughout the day.
-
Throughout the day Marketers and Traders will communicate orders for new bunker deliveries through Bunker Delivery Notifications based on available inventories and barge availability.
Technology Stack
-
Python
-
Optimization
-
SciPy (optional)
Code access
Sample Excel workbooks that contain the optimization examples are shared in the forums.
Individual requirements
The main goal in this challenge is creating a blend optimization module - a simple package that provides a method to optimize oil blend amounts to get the desired oil blend quality at the lowest price.
Calculation and optimization specification document is provided in the forums. Here is just a quick overview:
-
Input to the optimization is a list of tanks - each tank has some maximum amount of available oil volume and various oil properties (API gravity, specific weight, sulfur percentage, cost, etc)
-
The second input to the optimization is the target oil amount and target oil properties (API gravity, specific weight, sulfur percentage, cost, etc)
-
The optimization goal is to create the required amount of target oil blend at the lowest possible price
You will need to implement the objective function (a method that calculates the target oil cost for some values of the amounts of oil from each tank) - there are intermediate calculations to be done as intermediate steps. Once the objective function is available, you need to implement the optimization solver algorithm. You can use any algorithm of your choosing to optimize the oil cos. Good starting points are SciPy differential_evolution or DEAP framework in case you decide on implementing evolutionary optimization. For any other libraries/frameworks ask for approval in the challenge forums. You can also use non-evolutionary based solvers as long as the final cost/MT is smaller.
Our goal here is to get similar or better results than Excel so your submission will be judged on the final oil cost found by your algorithm. You should try to find a good combination of maximum iterations, minimum convergence rate, mutation rate, population size, and any other parameters of the optimization algorithm. The general expectation is that the algorithm performance (time) should be similar to Excel (running time of 20+ seconds would not be acceptable). Note that the excel solver is using “GRG nonlinear” solver, but you are free to pick another one as long as the solutions are as good or better than the excel results.
Create a sample CLI tool to test the optimization (calling the blend optimizer with user-provided values). It should take input data from a JSON file (see forums for example) and print the resulting output to standard out.
What To Submit
-
All source code
-
Deployment guide
-
Verification guide along with sample input values and results compared to the excel calculated values