コード例 #1
0
            /// <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);
                }
            }
コード例 #2
0
            /// <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);
                }
            }