/// <summary>Initializes a new instance of the <see cref="Wrapper" /> class. /// </summary> /// <param name="nloptMultiDimOptimizer">The <see cref="NLoptMultiDimOptimizer"/> object that has been used to create the current instance.</param> /// <param name="dimension">The dimension.</param> public Wrapper(NLoptMultiDimOptimizer nloptMultiDimOptimizer, int dimension) { m_Factory = nloptMultiDimOptimizer; m_NLoptPtr = new NLoptPtr(nloptMultiDimOptimizer.Algorithm, dimension); // check whether the algorithm allows an unconstraint feasible region: if ((nloptMultiDimOptimizer.Configuration.BoxConstraintRequirement == NLoptBoundConstraintRequirement.Required) || (nloptMultiDimOptimizer.Configuration.NonlinearConstraintRequirement.HasFlag(NLoptNonlinearConstraintRequirement.RequiredInequalityConstraints)) || (nloptMultiDimOptimizer.Configuration.NonlinearConstraintRequirement.HasFlag(NLoptNonlinearConstraintRequirement.RequiredEqualityConstraints))) { throw new InvalidOperationException("The optimizer does not support unconstraint feasible region."); } nloptMultiDimOptimizer.AbortCondition.ApplyTo(m_NLoptPtr); if (nloptMultiDimOptimizer.m_nloptPtrAdjustment != null) // apply some optional individual adjustments { nloptMultiDimOptimizer.m_nloptPtrAdjustment(m_NLoptPtr); } if (nloptMultiDimOptimizer.m_LoggerStreamFactory != null) { m_LoggerStream = nloptMultiDimOptimizer.m_LoggerStreamFactory(this); m_LoggerStreamGCHandle = GCHandle.Alloc(m_LoggerStream); } }
/// <summary>Initializes a new instance of the <see cref="Wrapper" /> class. /// </summary> /// <param name="nloptMultiDimOptimizer">The <see cref="NLoptMultiDimOptimizer"/> object that has been used to create the current instance.</param> /// <param name="dimension">The dimension.</param> /// <param name="nloptConstraints">The constraints of the optimization algorithm in its <see cref="NLoptConstraint"/> representation.</param> internal Wrapper(NLoptMultiDimOptimizer nloptMultiDimOptimizer, int dimension, IEnumerable <NLoptConstraint> nloptConstraints) { m_Factory = nloptMultiDimOptimizer; m_NLoptPtr = new NLoptPtr(nloptMultiDimOptimizer.Algorithm, dimension); nloptMultiDimOptimizer.AbortCondition.ApplyTo(m_NLoptPtr); foreach (var constraint in nloptConstraints) { if (constraint.Dimension != dimension) { throw new ArgumentException(String.Format(ExceptionMessages.ArgumentHasWrongDimension, constraint), nameof(nloptConstraints)); } constraint.ApplyTo(m_NLoptPtr); } if (nloptMultiDimOptimizer.m_nloptPtrAdjustment != null) // apply some optional individual adjustments { nloptMultiDimOptimizer.m_nloptPtrAdjustment(m_NLoptPtr); } if (nloptMultiDimOptimizer.m_LoggerStreamFactory != null) { m_LoggerStream = nloptMultiDimOptimizer.m_LoggerStreamFactory(this); m_LoggerStreamGCHandle = GCHandle.Alloc(m_LoggerStream); } }