Hi,
On some data I cannot share (sorry!) the P-Median problem solved in CPLEX on Windows is returning assignments that are nearly zero or one, but are not quite:

This results in model.cli2fac having multiple assignments for some clients, when the P-Median model is supposed to be singly-assigned. We do not yet support partial coverage, and our constraints should prevent this behaviour. To be clear, I think this is CPLEX's problem, not ours.
At the same time—I know CPLEX is trying its best, but I wonder whether we can help them out by using pulp.Binary rather than pulp.Integer for binary decision variables? I think this could be done by replacing the pulp.Integer types with pulp.Binary throughout FacilityModelBuilder, and dropping the upper and lower bounds.