This repository contains a Java program that uses CPLEX to optimize the assignment of transmitters and users to a number of clusters, with the objective of maximizing the sum across users of their experienced service quality. The problem originates with [question](https://or.stackexchange.com/questions/7471/how-to-perform-clustering-of-two-different-sets-of-entities) on OR Stack Exchange. A key aspect of the problem is that users are always assigned to the cluster containing the transmitter with highest service weight for the, so the problem really is to cluster the transmitters. (Users must be included in the model because the objective value is determined by a function of their service experience.)
This repository contains a Java program that uses CPLEX to optimize the assignment of transmitters and users to a number of clusters, with the objective of maximizing the sum across users of their experienced service quality. The problem originates with [question](https://or.stackexchange.com/questions/7471/how-to-perform-clustering-of-two-different-sets-of-entities) on OR Stack Exchange. A key aspect of the problem is that users are always assigned to the cluster containing the transmitter with highest service weight for the, so the problem really is to cluster the transmitters. (Users must be included in the model because the objective value is determined by a function of their service experience.)
The Java code is self-contained (other than requiring the user to have CPLEX installed and on the library path). It contains two heuristics (one to construct an initial solution, the other to improve the solution) and two mixed-integer programming (MIP) models, the first of which appears to outperform the second significantly. Details of the heuristics and models are contained in a blog post.
The Java code is self-contained (other than requiring the user to have CPLEX installed and on the library path). It contains two heuristics (one to construct an initial solution, the other to improve the solution) and two mixed-integer programming (MIP) models, the first of which appears to outperform the second significantly. Descriptions of the heuristics and models are contained in a [blog post](https://orinanobworld.blogspot.com/2021/12/revisiting-joint-clustering-problem.html), and details of the MIP models are given in a [PDF file](https://rubin.msu.domains/blog/transmitter_cluster_models.pdf).