Example #1
0
        public void TestLogicalSum()
        {
            var literalFormulas = new IFormula[]
            {
                new LiteralFormula(0),
                new LiteralFormula(1),
                new LiteralFormula(2)
            };

            var formula = new LogicalSumFormula(literalFormulas);

            var conf1 = 1L | (1L << 1) | (1L << 2);
            var conf2 = 1L | (1L << 1);
            var conf3 = 1L;
            var conf4 = 0;

            Assert.IsTrue(formula.GetValue(conf1));
            Assert.IsTrue(formula.GetValue(conf2));
            Assert.IsTrue(formula.GetValue(conf3));
            Assert.IsFalse(formula.GetValue(conf4));
        }
        public Instance GetInstance(int variableCount)
        {
            var formula = new LogicalProductFormula(new List <IFormula>());

            var productLenth = rand.Next(MIN_PRODUCT_LENGTH, MAX_PRODUCT_LENGTH + 1);

            for (var i = 0; i < productLenth; i++)
            {
                var sumFormula = new LogicalSumFormula(new List <IFormula>());
                formula.Formulas.Add(sumFormula);

                var sumLength = rand.Next(MIN_SUM_LENGTH, MAX_SUM_LENGTH + 1);
                for (var j = 0; j < sumLength; j++)
                {
                    var variableIndex  = rand.Next(variableCount);
                    var literalFormula = new LiteralFormula(variableIndex);

                    if (rand.Next(2) == 0)
                    {
                        sumFormula.Formulas.Add(literalFormula);
                    }
                    else
                    {
                        sumFormula.Formulas.Add(new NegateFormula(literalFormula));
                    }
                }
            }

            var instance = new Instance
            {
                Formula = formula,
                Weights = Enumerable.Range(0, variableCount).Select(x => rand.Next(MIN_WEIGHT, MAX_WEIGHT + 1)).ToArray()
            };

            return(instance);
        }