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); } }
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); }
// 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); }
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(); }
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); }
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); }
/// <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(); }