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)); }