public static int GenerateAssignment(SatProblem origProblem, IWellAnalyzed algorithm, out VariableAssignment assignment) { assignment = new VariableAssignment(); var curProblem = origProblem; foreach (var problemVariable in origProblem.Variables) { var subsProblem0 = SubstituteVaraible(curProblem, problemVariable, false); var subsProblem1 = SubstituteVaraible(curProblem, problemVariable, true); double W0 = algorithm.GetExpectedValue(subsProblem0); double W1 = algorithm.GetExpectedValue(subsProblem1); if (W0 <= W1) { assignment[problemVariable] = true; curProblem = subsProblem1; } else { assignment[problemVariable] = false; curProblem = subsProblem0; } } return(origProblem.GetNumberOfSatisfiedClauses(assignment)); }
public int GenerateAssingment(SatProblem problem, out VariableAssignment assignment) { assignment = new VariableAssignment(); foreach (var problemVariable in problem.Variables) { assignment[problemVariable] = _rand.NextDouble() < _probailities[problemVariable]; } return(problem.GetNumberOfSatisfiedClauses(assignment)); }
public int GenerateAssingment(SatProblem problem, int trys, out VariableAssignment assignment) { int bestSatisfaction = 0; assignment = null; for (int i = 0; i < trys; i++) { int newSatisfaction; if ((newSatisfaction = GenerateAssingment(problem, out VariableAssignment newAssignment)) > bestSatisfaction) { assignment = newAssignment; bestSatisfaction = newSatisfaction; } } return(bestSatisfaction); }
public bool IsSatisfied(VariableAssignment assignment) { return(Count == 0 || this.Any(literal => literal.Value != assignment[literal.Key])); }
public int GetNumberOfSatisfiedClauses(VariableAssignment assignment) { return(_clauses.Count(clause => clause.IsSatisfied(assignment))); }