Example #1
0
        public void TestEqualityConstraint()
        {
            {
                var solver = new SimpleConstraintSolver();
                var a      = solver.CreateVariable("a");
                var b      = solver.CreateVariable("b");
                EqualityConstraint.CreateEqualityConstraint(a, b);

                var r = new Range(3, 4, EPS);
                a.RestrictRange(r);
                solver.Solve(_noAbortCheck);
                Assert.AreEqual(r, b.Value);
            }
            {
                var solver = new SimpleConstraintSolver();
                var a      = solver.CreateVariable("a");
                var b      = solver.CreateVariable("b");
                EqualityConstraint.CreateEqualityConstraint(a, b);

                var r = new Range(3, 4, EPS);
                b.RestrictRange(r);
                solver.Solve(_noAbortCheck);
                Assert.AreEqual(r, a.Value);
            }
        }
Example #2
0
        public void ConstContradictTests_1b(Store store)
        {
            myTestServices.LogValidationErrors("ExclusionContradictsEqualityError exists");

            ORMModel           model      = store.ElementDirectory.FindElements <ORMModel>()[0];
            EqualityConstraint constraint = (EqualityConstraint)model.ConstraintsDictionary.GetElement("EqConstraint").FirstElement;

            myTestServices.LogValidationErrors("Removing Equality Constraint");

            using (Transaction t = store.TransactionManager.BeginTransaction("Remove Eq Constraint"))
            {
                constraint.Delete();
                t.Commit();
            }
            myTestServices.LogValidationErrors("Error Removed");
        }
 internal OptimalityCriteria(DifferentiableObjectiveFunction objective, EqualityConstraint constraint,
                             double boundLower, double boundUpper, IOptimalityCriteriaConvergence ocConvergence,
                             double bisectionInitialLimitLower, double bisectionInitialLimitUpper, IBisectionConvergence bisectionConvergence,
                             double dampingCoeff, double moveLimit)
 {
     this.objective     = objective;
     this.constraint    = constraint;
     this.boundLower    = boundLower;
     this.boundUpper    = boundUpper;
     this.ocConvergence = ocConvergence;
     this.bisectionInitialLimitLower = bisectionInitialLimitLower;
     this.bisectionInitialLimitUpper = bisectionInitialLimitUpper;
     this.dampingCoeff         = dampingCoeff;
     this.moveLimit            = moveLimit;
     this.bisectionConvergence = bisectionConvergence;
 }
Example #4
0
        public void EqualityMandatoryImplied_1b(Store store)
        {
            myTestServices.LogValidationErrors("No Errors Found Initialliy");

            ORMModel           model      = store.ElementDirectory.FindElements <ORMModel>()[0];
            Role               role       = (Role)store.ElementDirectory.GetElement(new Guid("1C424E34-8369-41EC-850F-FD24E7B30C7A"));
            EqualityConstraint constraint = (EqualityConstraint)model.ConstraintsDictionary.GetElement("EqualityConstraint1").SingleElement;

            using (Transaction t = store.TransactionManager.BeginTransaction("Add Mandatory Constraint"))
            {
                role.IsMandatory = true;
                t.Commit();
            }
            myTestServices.LogValidationErrors("Error is Introduced");

            using (Transaction t = store.TransactionManager.BeginTransaction("Remove Equality Constraint"))
            {
                constraint.Delete();
                t.Commit();
            }
            myTestServices.LogValidationErrors("Error is removed with removal of Equality Constraint");
        }
Example #5
0
        /// <summary>
        /// Test body
        /// </summary>
        /// <param name="DTE">The environment application object</param>
        public static void RunTest(DTE2 DTE)
        {
            DTE.ItemOperations.OpenFile(Environment.GetEnvironmentVariable("ORMFile", EnvironmentVariableTarget.Process), "");
            // The test file has three binary facts in it. FactType1, FactType2, FactType3, and an entity type EntityType1. EntityType1 is connected
            // the first role of the three facts. FactType1 and FactType2 are mandatory and unique on the first role.

            // Standard test handling
            ORMTestHooks  hooks      = new ORMTestHooks(DTE);
            ORMTestWindow testWindow = hooks.FindORMTestWindow(null);

            using (StreamWriter writer = File.AppendText(Environment.GetEnvironmentVariable("TestLog", EnvironmentVariableTarget.Process)))
            {
                // Grab accessible objects for the diagram and the 4 roles we'll be connecting to
                AccessibleObject accDiagram = CommonTestHooks.FindAccessibleObject(
                    testWindow.AccessibleObject,
                    new AccessiblePathNode[] {
                    new AccessiblePathNode("ORMDiagram")
                });

                AccessibleObject accRole1_1 = CommonTestHooks.FindAccessibleObject(
                    accDiagram,
                    new AccessiblePathNode[] {
                    new AccessiblePathNode("FactType", "EntityType1A"),
                    new AccessiblePathNode("Roles"),
                    new AccessiblePathNode("Role", 0)
                });

                AccessibleObject accRole2_1 = CommonTestHooks.FindAccessibleObject(
                    accDiagram,
                    new AccessiblePathNode[] {
                    new AccessiblePathNode("FactType", "EntityType1B"),
                    new AccessiblePathNode("Roles"),
                    new AccessiblePathNode("Role", 0)
                });

                AccessibleObject accRole3_1 = CommonTestHooks.FindAccessibleObject(
                    accDiagram,
                    new AccessiblePathNode[] {
                    new AccessiblePathNode("FactType", "EntityType1C"),
                    new AccessiblePathNode("Roles"),
                    new AccessiblePathNode("Role", 0)
                });

                AccessibleObject accRole3_2 = CommonTestHooks.FindAccessibleObject(
                    accDiagram,
                    new AccessiblePathNode[] {
                    new AccessiblePathNode("FactType", "EntityType1C"),
                    new AccessiblePathNode("Roles"),
                    new AccessiblePathNode("Role", 1)
                });

                // Add the equality constraint and get its accessible object
                testWindow.ActivateToolboxItem("Equality Constraint");
                testWindow.ClickAccessibleObject(accDiagram, 1, ClickLocation.UpperLeft, 50, 50);
                AccessibleObject   accEquality        = testWindow.GetSelectedAccessibleObjects()[0];
                EqualityConstraint equalityConstraint = (EqualityConstraint)testWindow.TranslateAccessibleObject(accEquality, false);

                bool scenarioPassed;
                // Scenario 1: Attach the two mandatory roles
                testWindow.ClickAccessibleObject(accRole1_1, 2);
                testWindow.ClickAccessibleObject(accRole2_1, 2);
                SendKeys.SendWait("{ESC}");
                scenarioPassed = null != equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError exists when all roles are mandatory");

                // Scenario 2: Remove the mandatory constraint from the second role
                testWindow.ClickAccessibleObject(accRole2_1);
                DTE.ExecuteCommand("OtherContextMenus.ORMDesignerContextMenu.IsMandatory", "");
                scenarioPassed = null == equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError does not exist when some roles are not mandatory");

                // Scenario 3: Delete the non-mandatory role
                SendKeys.SendWait("^{DEL}");
                scenarioPassed = null != equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError exists when the last non-mandatory role is deleted");

                // Scenario 4: Delete the role sequence
                DTE.ExecuteCommand("Edit.Undo", "");
                testWindow.ClickAccessibleObject(accEquality);
                testWindow.ClickAccessibleObject(accRole2_1);
                DTE.ExecuteCommand("OtherContextMenus.ORMDesignerContextMenu.DeleteRoleSequence", "");
                scenarioPassed = null != equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError exists when a role sequence with the last non-mandatory role is deleted");

                // Scenario 5: Delete the associated fact
                DTE.ExecuteCommand("Edit.Undo", "");
                testWindow.ClickAccessibleObject(accRole2_1.Parent, 1, ClickLocation.UpperLeft, 1, 1);
                SendKeys.SendWait("^{DEL}");
                scenarioPassed = null != equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError exists when the fact with the last non-mandatory role is deleted");

                // Scenario 6: Add an additional role sequence to a non-mandatory role
                DTE.ExecuteCommand("Edit.Undo", "");
                DTE.ExecuteCommand("Edit.Undo", "");
                testWindow.ClickAccessibleObject(accEquality, 2);
                testWindow.ClickAccessibleObject(accRole3_1, 2);
                SendKeys.SendWait("{ESC}");
                scenarioPassed = null == equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError does not exist a role sequence with a single non-mandatory role is added");

                // Scenario 7: Add a mandatory constraint to the non-mandatory role
                testWindow.ClickAccessibleObject(accRole3_1);
                DTE.ExecuteCommand("OtherContextMenus.ORMDesignerContextMenu.IsMandatory", "");
                scenarioPassed = null != equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError exists when the last non-mandatory role is change to a mandatory role");

                // Scenario 8: Add a second role to the third role sequence
                testWindow.ClickAccessibleObject(accRole3_1, 2);
                testWindow.ClickAccessibleObject(accRole3_2, 2);
                scenarioPassed = null == equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError does not exist if a role is added to make more than one column in at least one role sequence");

                // Scenario 9: Remove the second role from the third role sequence
                testWindow.ClickAccessibleObject(accEquality, 1);
                testWindow.ClickAccessibleObject(accRole3_2, 2);
                testWindow.KeyDown(Keys.ControlKey);
                testWindow.ClickAccessibleObject(accRole3_2, 2);
                testWindow.KeyUp(Keys.ControlKey);
                scenarioPassed = null != equalityConstraint.EqualityImpliedByMandatoryError;
                writer.WriteLine((scenarioPassed ? "Passed: " : "Failed: ") + "EqualityImpliedByMandatoryError exist if a role is removed from a role sequence, leaving a single-column in all role sequences with all mandatory roles");
            }
        }
 public OptimalityCriteria BuildOptimizer(DifferentiableObjectiveFunction objective, EqualityConstraint constraint,
                                          double boundLower, double boundUpper)
 => new OptimalityCriteria(objective, constraint, boundLower, boundUpper, OptimalityCriteriaConvergence,
                           InitialBisectionLimitLower, InitialBisectionLimitUpper, BisectionConvergence, DampingCoeff, MoveLimit);