C. Desivo
Case

Optimization: container loading and factory scheduling

§← All cases

Recent cases

These two run on generated sample data, so I can show every number. I've built tools like them for clients, for container loading, job-shop scheduling, factory scheduling and train circulation planning, and their data stays private.

Container loading: 2 containers instead of 3

A shipment of 204 items, from loose cartons to machine crates over a tonne, has to travel in 40 ft high-cube containers. Packed in the order of its packing list, it needs three containers and the last one leaves only 28% full. The loading plan my optimizer computed fits all of it in two.

The two containers of the optimized plan, cut away to show the cargo: 89% and 82% full
Packed as listed3 containers
85%
58%
28%
With my optimizer2 containers
89%
82%
not needed
Fig. 1How full each container is, by volume. Same 204 items, same 28.6 t weight limit, same stacking rules.

Every plan stays under each container's payload, keeps "this side up" crates upright, rests at least 80% of every stacked item's base on cargo below, and comes with a loading order the warehouse can follow from the doors. It works from a spreadsheet of sizes, weights and quantities.

One container loaded in four steps from the front wall to the doors, next to the six rules checked on the final plan
Fig. 2The loading sequence for one container, and the rules checked on the final layout.

Factory scheduling: late orders cut from 10 to 3

A workshop builds 34 custom machines, 746 tasks in all, in 8 assembly bays with 26 workers who each have one or two trades. Every machine is a network of tasks that wait on each other and on parts deliveries. Worked in the order the orders arrived, 10 of them ship late. My scheduler decides which order goes into which bay and who does which task, hour by hour.

3D view of the eight assembly bays at one moment of the plan, each machine built up to the tasks finished so far
In the order receivedWith my scheduler
Late orders103
Total delay31 working days4 days
Last deliveryday 75day 70
Fig. 3Same orders, same people, same bays. Both plans respect task dependencies, the skills and crew size each task needs, one machine per bay and the parts delivery dates.

The output is a delivery plan per order and a daily job card for every worker, listing their tasks, bays, times and crewmates.

Six printed job cards from one day of the plan, next to the rules checked on the full schedule
Fig. 4Job cards for one day, and the rules checked on the full plan.

Other optimization work

Beyond these two, I've modeled and solved many other optimization problems: combinatorial problems over graphs, sets and permutations, with metaheuristics such as simulated annealing, tabu search and genetic algorithms (DEAP, PyGAD); job-shop scheduling formulated in Pyomo and PuLP; multi-objective problems with pymoo; and mixed-integer models solved with OR-Tools, CPLEX and Gurobi. For the hardest instances I've combined exact solvers with heuristics, and used parallel processing to scale.