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;
 }
 public OptimalityCriteria BuildOptimizer(DifferentiableObjectiveFunction objective, EqualityConstraint constraint,
                                          double boundLower, double boundUpper)
 => new OptimalityCriteria(objective, constraint, boundLower, boundUpper, OptimalityCriteriaConvergence,
                           InitialBisectionLimitLower, InitialBisectionLimitUpper, BisectionConvergence, DampingCoeff, MoveLimit);