コード例 #1
0
            public void Visit(Compiled.LTConstraint elem)
            {
                double diff = ValueOf(elem.Left) - ValueOf(elem.Right);

                if (diff < 0)
                {
                    LocalDerivative = 0;
                }

                /*else {
                 *      if (ArgumentIndex == 0) {
                 *              LocalDerivative = - elem.Derivative * Math.Max(elem.Steepness,(ValueOf(elem.Left)-ValueOf(elem.Right)));
                 *      } else {
                 *              LocalDerivative = elem.Derivative * Math.Max(elem.Steepness,(ValueOf(elem.Left)-ValueOf(elem.Right)));
                 *      }
                 * }*/
                //Normal behaviour:
                else
                {
                    if (ArgumentIndex == 0)
                    {
                        LocalDerivative = -elem.Steepness * elem.Adjoint;
                    }
                    else
                    {
                        LocalDerivative = elem.Steepness * elem.Adjoint;
                    }
                }
            }
コード例 #2
0
            public int Visit(LTConstraint constraint)
            {
                return(Compile(constraint, () =>
                {
                    var lIndex = constraint.Left.Accept(this);
                    var rIndex = constraint.Right.Accept(this);

                    var element = new Compiled.LTConstraint
                    {
                        Left = lIndex,
                        Right = rIndex,
                        Steepness = constraint.Steepness,
                        Inputs = new Compiled.InputEdge[]
                        {
                            new Compiled.InputEdge {
                                Index = lIndex
                            },
                            new Compiled.InputEdge {
                                Index = rIndex
                            },
                        }
                    };
                    return element;
                }));
            }
コード例 #3
0
 public void Visit(Compiled.LTConstraint elem)
 {
     if (ValueOf(elem.Left) < ValueOf(elem.Right))
     {
         elem.Value = 1;
     }
     else
     {
         elem.Value = elem.Steepness * (ValueOf(elem.Right) - ValueOf(elem.Left));
     }
 }
コード例 #4
0
            public void Visit(Compiled.LTConstraint elem)
            {
                double left  = ValueOf(elem.Left);
                double right = ValueOf(elem.Right);

                if (left < right)
                {
                    elem.Value            = 1;
                    elem.Inputs[0].Weight = 0;
                    elem.Inputs[1].Weight = 0;
                }
                else
                {
                    elem.Value            = elem.Steepness * (right - left);
                    elem.Inputs[0].Weight = -elem.Steepness;
                    elem.Inputs[1].Weight = elem.Steepness;
                }
            }