コード例 #1
0
        protected override void PrepareConstraints(Solver solver)
        {
            {
                // x + 2y <= 14
                var c = solver.MakeConstraint(NegativeInfinity, 14);
                c.SetCoefficient(Problem.x, 1);
                c.SetCoefficient(Problem.y, 2);
                ClrCreatedObjects.Add(c);
                SetProblemComponent(c, (p, c1) => p.c1 = c1);
            }

            {
                // 3x - y >= 0
                var c = solver.MakeConstraint(0, PositiveInfinity);
                c.SetCoefficient(Problem.x, 3);
                c.SetCoefficient(Problem.y, -1);
                ClrCreatedObjects.Add(c);
                SetProblemComponent(c, (p, c2) => p.c2 = c2);
            }

            {
                // x - y <= 2
                var c = solver.MakeConstraint(NegativeInfinity, 2);
                c.SetCoefficient(Problem.x, 1);
                c.SetCoefficient(Problem.y, -1);
                ClrCreatedObjects.Add(c);
                SetProblemComponent(c, (p, c3) => p.c3 = c3);
            }
        }
コード例 #2
0
        protected override void PrepareObjective(Solver solver)
        {
            var obj = solver.Objective();

            obj.SetCoefficient(Problem.x, 3);
            obj.SetCoefficient(Problem.y, 4);
            obj.SetMaximization();
            ClrCreatedObjects.Add(obj);
            SetProblemComponent(obj, (p, o) => p.obj = o);
        }
コード例 #3
0
        // TODO: TBD: taking LinearSolver assembly(ies) out of the build configuration for the time being until a usage/migration path can be established...
        /// <summary>
        /// Builds the <see cref="MPSolverParameters"/> instance given a set of
        /// <see cref="MpParamSpec"/> pairs.
        /// </summary>
        /// <param name="specs"></param>
        /// <returns></returns>
        protected virtual MPSolverParameters BuildParameters(params MpParamSpec[] specs)
        {
            var parameters = new MPSolverParameters();

            foreach (var(spec, value) in specs)
            {
                parameters.SetDoubleParam(spec.ForSolver(), value);
            }

            ClrCreatedObjects.Add(parameters);
            return(parameters);
        }
コード例 #4
0
        protected override void PrepareObjective(Solver solver)
        {
            // Maximize x + 10y
            var obj = solver.Objective();

            ClrCreatedObjects.Add(SetProblemComponent(obj, (p, o) => p.o = o));

            /* The SetCoefficient method sets the coefficients of the objective function.
             * The SetMaximization method makes this a maximization problem. */
            obj.SetCoefficient(Problem.x, 1d);
            obj.SetCoefficient(Problem.y, 10d);
            obj.SetMaximization();
        }
コード例 #5
0
        private MPSolverParameters BuildParameters(IEnumerable <double> values)
        {
            var parameters = new MPSolverParameters();

            // ReSharper disable PossibleMultipleEnumeration
            for (var i = 0; i < values.Count(); i++)
            {
                parameters.SetDoubleParam(i, values.ElementAt(i));
                // ReSharper enable PossibleMultipleEnumeration
            }
            ClrCreatedObjects.Add(parameters);
            return(parameters);
        }
コード例 #6
0
        protected override void PrepareConstraints(Solver solver)
        {
            // x + 7y <= 17.5
            var c1 = solver.MakeConstraint(NegativeInfinity, 17.5d);

            ClrCreatedObjects.Add(SetProblemComponent(c1, (p, c) => p.c1 = c));
            c1.SetCoefficient(Problem.x, 1d);
            c1.SetCoefficient(Problem.y, 7d);

            // x <= 3.5
            var c2 = solver.MakeConstraint(NegativeInfinity, 3.5d);

            ClrCreatedObjects.Add(SetProblemComponent(c2, (p, c) => p.c2 = c));
            c2.SetCoefficient(Problem.x, 1d);
            c2.SetCoefficient(Problem.y, 0d);
        }
コード例 #7
0
        /// <summary>
        /// Disposes the object.
        /// </summary>
        /// <param name="disposing"></param>
        protected virtual void Dispose(bool disposing)
        {
            if (IsDisposed || !disposing)
            {
                return;
            }

            foreach (var obj in ClrCreatedObjects)
            {
                if (obj != null && obj is IDisposable disposableObj)
                {
                    disposableObj.Dispose();
                }
            }

            ClrCreatedObjects.Clear();
        }