protected internal virtual Variable InfVariable()
{
Variable min = null;
int infMin = Int32.MaxValue;
IList<Variable> vars = network.Variables.Cast<Variable>().ToList();
// we are only concerned about integer domains which size > 1 and they are not value type
IEnumerable<Variable> nonAssignedVars =
vars.Where(var => (var.Domain is IntDomain) && (var.Domain.sizeField > 1) && !var.IsValueType);
foreach (Variable v in nonAssignedVars)
{
Domain d = v.Domain;
int inf = ((IntDomain)d).Minimum();
if (inf < infMin)
{
min = v;
infMin = inf;
}
}
return min;
}