Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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)));
 }