public void FloatPredeteriminationTest() { var p = new Problem(nameof(GeneralSumConstraintTest)); var dom = new FloatDomain("unit", -1, 1); var x = (FloatVariable)dom.Instantiate("x"); var y = (FloatVariable)dom.Instantiate("y"); y.PredeterminedValue = 1; var sum = x + y; int spuriousHitCount = 0; for (int i = 0; i < 100; i++) { var v = Random.Float(-1, 1); x.PredeterminedValue = v; var s = p.Solve(); // Should always give us the predetermined value Assert.AreEqual(x.Value(s), v); Assert.AreEqual(sum.Value(s), v + 1); if (i % 2 == 0) { x.Reset(); s = p.Solve(); // Should almost never give us the formerly predetermined value // ReSharper disable CompareOfFloatsByEqualityOperator if (x.Value(s) == v || sum.Value(s) == v + 1) { // ReSharper restore CompareOfFloatsByEqualityOperator spuriousHitCount++; } } } Assert.IsTrue(spuriousHitCount < 3); }
/// <inheritdoc /> public FloatVariable(object name, FloatDomain d, Literal condition, Problem problem) : base(name, problem, condition) { FloatDomain = d; Bounds = d.Bounds; var floatSolver = problem.GetSolver <FloatSolver>(); Index = floatSolver.Variables.Count; floatSolver.Variables.Add(this); }
public void ConstantBoundDependencyTest() { var p = new Problem(nameof(FloatTest)); var dom = new FloatDomain("unit", 0, 1); var x = (FloatVariable)dom.Instantiate("x"); var a = (Proposition)"a"; p.Assert((x > 0.1f) > a); for (int i = 0; i < 100; i++) { var s = p.Solve(); Assert.IsTrue(x.Value(s) <= 0.1f || s[a]); } }
//Test wp in float cases public void SumConstrainTest() { var pp = new Problem("SumConstraintTest"); var dom = new FloatDomain("unit", 0, 1); var a = (FloatVariable)dom.Instantiate("a"); var b = (FloatVariable)dom.Instantiate("b"); var sum = a + b; for (int i = 0; i < 100; i++) { var s = pp.Solve(); Console.WriteLine(s.Model); Assert.IsTrue(Math.Abs(sum.Value(s) - (a.Value(s) + b.Value(s))) < 0.00001f); } }
public void NaiveSquareTest() { var p = new Problem(nameof(NaiveSquareTest)); var dom = new FloatDomain("signed unit", -1, 1); var x = (FloatVariable)dom.Instantiate("x"); //p.Assert("foo"); var square = x * x; for (int i = 0; i < 100; i++) { var s = p.Solve(); Console.WriteLine(s.Model); Assert.IsTrue(Math.Abs(square.Value(s) - x.Value(s) * x.Value(s)) < 0.00001f); } }
public void SignedProductTest() { var p = new Problem(nameof(SignedProductTest)); var dom = new FloatDomain("signed unit", -1, 1); var x = (FloatVariable)dom.Instantiate("x"); var y = (FloatVariable)dom.Instantiate("y"); //p.Assert("foo"); var product = x * y; for (int i = 0; i < 100; i++) { var s = p.Solve(); Console.WriteLine(s.Model); Assert.IsTrue(Math.Abs(product.Value(s) - x.Value(s) * y.Value(s)) < 0.00001f); } }
public void SumConstraintTest() { var p = new Problem(nameof(SumConstraintTest)); var dom = new FloatDomain("unit", 0, 1); var x = (FloatVariable)dom.Instantiate("x"); var y = (FloatVariable)dom.Instantiate("y"); //p.Assert("foo"); var sum = x + y; for (int i = 0; i < 100; i++) { var s = p.Solve(); Console.WriteLine(s.Model); Assert.IsTrue(Math.Abs(sum.Value(s) - (x.Value(s) + y.Value(s))) < 0.00001f); } }
public void FloatTest() { var p = new Problem(nameof(FloatTest)); var dom = new FloatDomain("unit", 0, 1); var x = (FloatVariable)dom.Instantiate("x"); var y = (FloatVariable)dom.Instantiate("y"); var a = (Proposition)"a"; var b = (Proposition)"b"; var c = (Proposition)"c"; var d = (Proposition)"d"; var e = (Proposition)"e"; p.Assert(a > (x > .2f)); p.Assert(b > (x > .3f)); p.Assert(c > (x < .5f)); p.Assert(d > (x < .8f)); p.Assert(e > (x == y)); for (int i = 0; i < 100; i++) { var s = p.Solve(); Console.WriteLine(s.Model); var xVal = x.Value(s); var yVal = y.Value(s); if (s[a]) { Assert.IsTrue(xVal >= .2f); } if (s[b]) { Assert.IsTrue(xVal >= .3f); } if (s[c]) { Assert.IsTrue(xVal <= .5f); } if (s[d]) { Assert.IsTrue(xVal <= .8f); } if (s[e]) { Assert.AreEqual(xVal, yVal); } } }
public void FloatPredeterminationTest() { var problem = new Problem("test"); var dom = new FloatDomain("signed unit", -1, 1); var x = (FloatVariable)dom.Instantiate("x", problem); var y = (FloatVariable)dom.Instantiate("y", problem); var z = (FloatVariable)dom.Instantiate("z", problem); var bigThresh = 1.5f; var smallThresh = -2.3f; var xBig = x > bigThresh; var ySmall = y < smallThresh; var zBig = z > bigThresh; var zSmall = z < smallThresh; var xLTy = x < y; var xGTz = x > z; var yLTz = y < z; for (var i = 0; i < 100; i++) { var xVal = Random.Float(-1, 1); var yVal = Random.Float(-1, 1); x.PredeterminedValue = xVal; y.PredeterminedValue = yVal; var s = problem.Solve(); Assert.AreEqual(xVal, x.Value(s)); Assert.AreEqual(yVal, y.Value(s)); Assert.IsTrue(problem.IsPredetermined(xBig)); Assert.AreEqual(s[xBig], xVal >= bigThresh); Assert.IsTrue(problem.IsPredetermined(ySmall)); Assert.AreEqual(s[ySmall], yVal <= smallThresh); Assert.IsTrue(problem.IsPredetermined(xLTy)); Assert.AreEqual(s[xLTy], xVal <= yVal); Assert.IsFalse(problem.IsPredetermined(zBig)); Assert.IsFalse(problem.IsPredetermined(zSmall)); Assert.IsFalse(problem.IsPredetermined(xGTz)); Assert.IsFalse(problem.IsPredetermined(yLTz)); } }
public void UndefinedFloatVarEquationHasNoEffectTest() { var p = new Problem("test"); var dom = new FloatDomain("signed unit", -1, 1); var prop = (Proposition)"prop"; var x = new FloatVariable("x", dom, prop, p); var y = (FloatVariable)dom.Instantiate("y"); p.Assert(Not(prop)); p.Assert(x == y); for (int i = 0; i < 100; i++) { var s = p.Solve(); Assert.IsFalse(x.IsDefinedInInternal(s)); Assert.IsTrue(y.IsDefinedInInternal(s)); Assert.IsFalse(ReferenceEquals(x.Representative, y.Representative)); } }
public void UndefinedFloatVarTest() { var p = new Problem("test"); var dom = new FloatDomain("signed unit", -1, 1); var prop = (Proposition)"prop"; var x = new FloatVariable("x", dom, prop, p); p.Assert(Not(prop)); Solution s = null; for (int i = 0; i < 100; i++) { s = p.Solve(); Console.WriteLine(s.Model); Assert.IsFalse(s[prop]); Assert.IsFalse(x.IsDefinedInInternal(s)); } Console.WriteLine(x.Value(s)); }
public void ConstantProductConstraintTest() { for (int j = 0; j < 100; j++) { var p = new Problem(nameof(ConstantProductConstraintTest)); var dom = new FloatDomain("signed unit", -1, 1); var x = (FloatVariable)dom.Instantiate("x"); var c = Random.Float(-100, 100); var product = c * x; for (int i = 0; i < 100; i++) { var s = p.Solve(); Console.WriteLine(s.Model); Assert.IsTrue(Math.Abs(product.Value(s) / (x.Value(s)) - c) < 0.0001f); } } }
public void AverageConstraintTest() { var p = new Problem(nameof(AverageConstraintTest)); var dom = new FloatDomain("unit", -1, 1); var vars = new FloatVariable[10]; for (int i = 0; i < vars.Length; i++) { vars[i] = (FloatVariable)dom.Instantiate("x" + i); } var average = FloatVariable.Average(vars); for (int i = 0; i < 100; i++) { var s = p.Solve(); Console.WriteLine(s.Model); var avg = vars.Select(v => v.Value(s)).Average(); Assert.IsTrue(Math.Abs(average.Value(s) - avg) < 0.00001f); } }
public void GeneralSumConstraintTest() { var p = new Problem(nameof(GeneralSumConstraintTest)); var dom = new FloatDomain("unit", -1, 1); var vars = new FloatVariable[10]; for (int i = 0; i < vars.Length; i++) { vars[i] = (FloatVariable)dom.Instantiate("x" + i); } var sum = FloatVariable.Sum(vars); for (int i = 0; i < 100; i++) { var s = p.Solve(); Console.WriteLine(s.Model); var realSum = vars.Select(v => v.Value(s)).Sum(); Assert.IsTrue(Math.Abs(sum.Value(s) - realSum) < 0.00001f); } }
public void SumConditionTest() { var problem = new Problem("test"); var dom = new FloatDomain("signed unit", -1, 1); var p = (Proposition)"p"; var x = (FloatVariable)dom.Instantiate("x", problem, p); var q = (Proposition)"q"; var y = (FloatVariable)dom.Instantiate("y", problem, q); var sum = x + y; Assert.IsTrue(ReferenceEquals(sum.Condition, problem.Conjunction(p, q))); for (int i = 0; i < 100; i++) { var s = problem.Solve(); Console.WriteLine(s.Model); Assert.AreEqual(sum.IsDefinedInInternal(s), x.IsDefinedInInternal(s) & y.IsDefinedInInternal(s)); if (sum.IsDefinedInInternal(s)) { Assert.IsTrue(Math.Abs(sum.Value(s) - (x.Value(s) + y.Value(s))) < 0.00001f); } } }