If I understand correctly then an entry a => { b, c } in your map represents a solution x[a]=1, y[b]=1, y[c]=1.
You have to convert this into a flat array of variables and values and then use
IloCplex.addMIPStart as in this untested code:
for (Map.Entry<Integer,Set<Integer>> e : candidateSolution) {
IloNumVar[] vars = new IloNumVar[1 + e.getValue().getSize()];
double[] val = new double[vars.length];
int idx = 0;
vars[idx] = x[e.getKey()];
vals[idx++] = 1;
for (Integer yIdx : e.getValue()) {
vars[idx] = y[yIdx];
vals[idx++] = 1;
}
cplex.addMIPStart(vars, vals);
}
Note that you may want to use a TreeMap instead of a HashMap for candidateSolution or may want to sort the candidate solutions before adding them as MIP starts.
The order of MIP starts makes a difference and so you may want to have something that is guaranteed to be the same in every run.
------------------------------
Daniel Junglas
------------------------------