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 static IOptimalityCriteriaConvergence NOT(IOptimalityCriteriaConvergence originalCriterion)
 => new NotCriterion(originalCriterion);
 internal OrCriterion(IOptimalityCriteriaConvergence criterion1, IOptimalityCriteriaConvergence criterion2)
 {
     this.criterion1 = criterion1;
     this.criterion2 = criterion2;
 }
 internal NotCriterion(IOptimalityCriteriaConvergence originalCriterion)
 {
     this.originalCriterion = originalCriterion;
 }
 public static IOptimalityCriteriaConvergence OR(IOptimalityCriteriaConvergence criterion1,
                                                 IOptimalityCriteriaConvergence criterion2)
 => new OrCriterion(criterion1, criterion2);
 public static IOptimalityCriteriaConvergence AND(IOptimalityCriteriaConvergence criterion1,
                                                  IOptimalityCriteriaConvergence criterion2)
 => new AndCriterion(criterion1, criterion2);