private Object getMinConflictValueFor(Variable var, Assignment assignment,
CSP csp) {
List<Constraint> constraints = csp.getConstraints(var);
Assignment duplicate = assignment.copy();
int minConflict = int.MAX_VALUE;
List<Object> resultCandidates = new List<Object>();
foreach (Object value in csp.getDomain(var))
{
duplicate.setAssignment(var, value);
int currConflict = countConflicts(duplicate, constraints);
if (currConflict <= minConflict) {
if (currConflict < minConflict) {
resultCandidates.clear();
minConflict = currConflict;
}
resultCandidates.Add(value);
}
}
if (!resultCandidates.isEmpty())
return Util.selectRandomlyFromList(resultCandidates);
else
return null;
}