I am trying to optimize a cherry picking procedure on 96-well microplates. The plates are 12X8 (12 columns, 8 rows). We pass a command file that has many lines like this to a robot:
source_plate, source_well, destination_plate, destination_well
The robot has an arm that can cherry pick 8 positions at a time. The 8 source positions can be anywhere on any source plate, but the 8 corresponding destination positions should always be a complete or mostly complete column. This way the robot can dispense material to the destination plates in one action rather than 8 separate actions.
For a given run, the robot can hold a maximum of 30 96-well microplates and the loaded command file should contain only source and destination plates that are actually on the robot's deck. Let's assume the following constraints:
- 1500 total raw command lines (i.e. I want to cherry pick 1500 positions)
- 130 source plates
- 30 destination plates
Given the 30-plate-maximum-per-run constraint, I'm trying to a find way to break those 1500 raw command lines into runs (i.e. command files) such that the number of times plates have to swapped on/off the deck is minimized. The difference between an optimized vs a naive approach could be one day or more of work in this case.
I'm struggling to formulate the above scenario in terms of an objective function in which plate swapping events are minimized between runs. Also I'm unsure of the most appropriate method to use (e.g. linear programming, etc.) Any help would be appreciated