Changeset 16233 for branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms
- Timestamp:
- 10/17/18 17:51:26 (6 years ago)
- Location:
- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms
- Files:
-
- 7 added
- 2 edited
- 9 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/LinearProgrammingAlgorithm.cs
r16172 r16233 1 1 using System; 2 2 using System.Threading; 3 using Google.OrTools.LinearSolver; 3 4 using HeuristicLab.Common; 4 5 using HeuristicLab.Core; 5 6 using HeuristicLab.Data; 7 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers; 8 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base; 6 9 using HeuristicLab.MathematicalOptimization.LinearProgramming.Problems; 7 10 using HeuristicLab.Optimization; … … 10 13 11 14 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 12 [Item("Linear Programming Algorithm", "")] 13 [Creatable(CreatableAttribute.Categories.Algorithms, Priority = 162)] 15 16 [Item("Linear/Mixed Integer Programming (LP/MIP)", "")] 17 [Creatable(CreatableAttribute.Categories.SingleSolutionAlgorithms)] 14 18 [StorableClass] 15 19 public class LinearProgrammingAlgorithm : BasicAlgorithm { 20 21 [Storable] 22 private readonly IFixedValueParameter<DoubleValue> dualToleranceParam; 23 24 [Storable] 25 private readonly IFixedValueParameter<EnumValue<LpAlgorithmValues>> lpAlgorithmParam; 26 27 [Storable] 28 private readonly IFixedValueParameter<BoolValue> presolveParam; 29 30 [Storable] 31 private readonly IFixedValueParameter<DoubleValue> primalToleranceParam; 32 33 [Storable] 34 private readonly IFixedValueParameter<DoubleValue> relativeGapToleranceParam; 35 36 [Storable] 37 private readonly IFixedValueParameter<BoolValue> scalingParam; 16 38 17 39 [Storable] … … 19 41 20 42 [Storable] 21 private readonly IFixedValueParameter<DoubleValue> relativeGapToleranceParam;22 23 [Storable]24 43 private readonly IFixedValueParameter<TimeSpanValue> timeLimitParam; 25 44 26 45 public LinearProgrammingAlgorithm() { 27 Parameters.Add(solverParam = new ConstrainedValueParameter<ISolver>(nameof(Solver))); 28 Parameters.Add(relativeGapToleranceParam = new FixedValueParameter<DoubleValue>(nameof(RelativeGapTolerance), new DoubleValue())); 29 Parameters.Add(timeLimitParam = new FixedValueParameter<TimeSpanValue>(nameof(TimeLimit), new TimeSpanValue())); 46 Parameters.Add(solverParam = 47 new ConstrainedValueParameter<ISolver>(nameof(Solver), "The solver used to solve the model.")); 48 Parameters.Add(relativeGapToleranceParam = new FixedValueParameter<DoubleValue>(nameof(RelativeGapTolerance), 49 "Limit for relative MIP gap.", new DoubleValue(MPSolverParameters.kDefaultRelativeMipGap))); 50 Parameters.Add(timeLimitParam = new FixedValueParameter<TimeSpanValue>(nameof(TimeLimit), 51 "Limit for runtime. Set to zero for unlimited runtime.", new TimeSpanValue())); 52 Parameters.Add(presolveParam = 53 new FixedValueParameter<BoolValue>(nameof(Presolve), "Advanced usage: presolve mode.", new BoolValue())); 54 Parameters.Add(lpAlgorithmParam = new FixedValueParameter<EnumValue<LpAlgorithmValues>>(nameof(LpAlgorithm), 55 "Algorithm to solve linear programs.", new EnumValue<LpAlgorithmValues>(LpAlgorithmValues.DualSimplex))); 56 Parameters.Add(dualToleranceParam = new FixedValueParameter<DoubleValue>(nameof(DualTolerance), 57 "Advanced usage: tolerance for dual feasibility of basic solutions.", 58 new DoubleValue(MPSolverParameters.kDefaultDualTolerance))); 59 Parameters.Add(primalToleranceParam = new FixedValueParameter<DoubleValue>(nameof(PrimalTolerance), 60 "Advanced usage: tolerance for primal feasibility of basic solutions. " + 61 "This does not control the integer feasibility tolerance of integer " + 62 "solutions for MIP or the tolerance used during presolve.", 63 new DoubleValue(MPSolverParameters.kDefaultPrimalTolerance))); 64 Parameters.Add(scalingParam = new FixedValueParameter<BoolValue>(nameof(Scaling), 65 "Advanced usage: enable or disable matrix scaling.", new BoolValue())); 30 66 31 67 Problem = new LinearProgrammingProblem(); … … 42 78 [StorableConstructor] 43 79 private LinearProgrammingAlgorithm(bool deserializing) 44 : base(deserializing) { } 80 : base(deserializing) { 81 } 45 82 46 83 private LinearProgrammingAlgorithm(LinearProgrammingAlgorithm original, Cloner cloner) … … 49 86 relativeGapToleranceParam = cloner.Clone(original.relativeGapToleranceParam); 50 87 timeLimitParam = cloner.Clone(original.timeLimitParam); 88 presolveParam = cloner.Clone(original.presolveParam); 89 lpAlgorithmParam = cloner.Clone(original.lpAlgorithmParam); 90 dualToleranceParam = cloner.Clone(original.dualToleranceParam); 91 primalToleranceParam = cloner.Clone(original.primalToleranceParam); 92 scalingParam = cloner.Clone(original.scalingParam); 51 93 } 52 94 53 public ISolver Solver { 54 get => solverParam.Value; 55 set => solverParam.Value = value; 95 public double DualTolerance { 96 get => dualToleranceParam.Value.Value; 97 set => dualToleranceParam.Value.Value = value; 98 } 99 100 public LpAlgorithmValues LpAlgorithm { 101 get => lpAlgorithmParam.Value.Value; 102 set => lpAlgorithmParam.Value.Value = value; 103 } 104 105 public bool Presolve { 106 get => presolveParam.Value.Value; 107 set => presolveParam.Value.Value = value; 108 } 109 110 public double PrimalTolerance { 111 get => primalToleranceParam.Value.Value; 112 set => primalToleranceParam.Value.Value = value; 56 113 } 57 114 … … 62 119 63 120 public override Type ProblemType { get; } = typeof(LinearProgrammingProblem); 121 64 122 public double RelativeGapTolerance { 65 123 get => relativeGapToleranceParam.Value.Value; … … 69 127 public override ResultCollection Results { get; } = new ResultCollection(); 70 128 71 public override bool SupportsPause { get; } = false; 129 public bool Scaling { 130 get => scalingParam.Value.Value; 131 set => scalingParam.Value.Value = value; 132 } 133 134 public ISolver Solver { 135 get => solverParam.Value; 136 set => solverParam.Value = value; 137 } 138 139 public override bool SupportsPause => Solver.SupportsPause; 140 141 public override bool SupportsStop => Solver.SupportsStop; 72 142 73 143 public TimeSpan TimeLimit { … … 77 147 78 148 public override IDeepCloneable Clone(Cloner cloner) => new LinearProgrammingAlgorithm(this, cloner); 79 protected override void Run(CancellationToken cancellationToken) {80 using (var solver = LinearSolver.CreateSolver(Solver.OptimizationProblemType, Name,81 Solver.LibraryName ?? string.Empty, s => Problem.ProblemDefinition.BuildModel(s))) {82 solver.RelativeGapTolerance = RelativeGapTolerance;83 solver.TimeLimit = TimeLimit;84 149 85 solver.Solve(); 150 public override void Pause() { 151 base.Pause(); 152 Solver.Interrupt(); 153 } 86 154 87 Problem.ProblemDefinition.Analyze(solver.Solver, Results); 88 Results.AddOrUpdateResult("Result Status", new EnumValue<ResultStatus>(solver.ResultStatus)); 89 Results.AddOrUpdateResult("Best Objective Value", new DoubleValue(solver.ObjectiveValue ?? double.NaN)); 90 Results.AddOrUpdateResult("Absolute Gap", new DoubleValue(solver.AbsoluteGap ?? double.NaN)); 91 Results.AddOrUpdateResult("Relative Gap", new DoubleValue(solver.RelativeGap ?? double.NaN)); 92 Results.AddOrUpdateResult("Number of Constraints", new IntValue(solver.NumberOfConstraints)); 93 Results.AddOrUpdateResult("Number of Variables", new IntValue(solver.NumberOfVariables)); 94 Results.AddOrUpdateResult("Number of Nodes", new DoubleValue(solver.NumberOfNodes)); 95 Results.AddOrUpdateResult("Iterations", new DoubleValue(solver.Iterations)); 155 public override void Prepare() { 156 base.Prepare(); 157 Results.Clear(); 158 159 foreach (var solver in solverParam.ValidValues) { 160 solver.Reset(); 96 161 } 97 162 } 163 164 public override void Stop() { 165 base.Stop(); 166 Solver.Interrupt(); 167 } 168 protected override void Initialize(CancellationToken cancellationToken) { 169 base.Initialize(cancellationToken); 170 } 171 protected override void Run(CancellationToken cancellationToken) => Solver.Solve(this, cancellationToken); 98 172 } 99 173 } -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/LinearProgrammingType.cs
r16172 r16233 1 1 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 2 2 3 public enum LinearProgrammingType { 3 4 LinearProgramming, -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/Base/ISolver.cs
r16232 r16233 1 using HeuristicLab.Core; 1 using System.Threading; 2 using HeuristicLab.Core; 2 3 3 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 4 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base { 5 4 6 public interface ISolver : IParameterizedNamedItem { 7 LinearProgrammingType LinearProgrammingType { get; set; } 5 8 OptimizationProblemType OptimizationProblemType { get; } 6 string LibraryName { get; set; } 7 LinearProgrammingType LinearProgrammingType { get; set; } 9 bool SupportsPause { get; } 10 bool SupportsStop { get; } 11 12 void Interrupt(); 13 14 void Reset(); 15 16 void Solve(LinearProgrammingAlgorithm algorithm); 17 18 void Solve(LinearProgrammingAlgorithm algorithm, CancellationToken cancellationToken); 8 19 } 9 20 } -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/Base/Solver.cs
r16232 r16233 1 using HeuristicLab.Common; 1 using System; 2 using System.Threading; 3 using HeuristicLab.Common; 2 4 using HeuristicLab.Core; 3 5 using HeuristicLab.Data; … … 5 7 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 6 8 7 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {9 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base { 8 10 9 public class Solver : ParameterizedNamedItem, ISolver { 11 [StorableClass] 12 public class Solver : ParameterizedNamedItem, ISolver, IDisposable { 10 13 11 14 [Storable] 12 protected I FixedValueParameter<StringValue> libraryNameParam;15 protected IValueParameter<EnumValue<LinearProgrammingType>> programmingTypeParam; 13 16 14 15 [Storable] 16 protected IFixedValueParameter<EnumValue<LinearProgrammingType>> programmingTypeParam; 17 protected LinearSolver solver; 17 18 18 19 public Solver() { 19 // Parameters.Add(useMixedIntegerProgrammingParam = new FixedValueParameter<BoolValue>(nameof(UseMixedIntegerProgramming), (BoolValue)new BoolValue(false).AsReadOnly())); 20 Parameters.Add(programmingTypeParam = new FixedValueParameter<EnumValue<LinearProgrammingType>>(nameof(LinearProgrammingType), new EnumValue<LinearProgrammingType>())); 20 Parameters.Add(programmingTypeParam = 21 new ValueParameter<EnumValue<LinearProgrammingType>>(nameof(LinearProgrammingType), 22 new EnumValue<LinearProgrammingType>())); 21 23 } 22 24 23 25 [StorableConstructor] 24 26 protected Solver(bool deserializing) 25 : base(deserializing) { } 27 : base(deserializing) { 28 } 26 29 27 30 protected Solver(Solver original, Cloner cloner) 28 31 : base(original, cloner) { 29 libraryNameParam = cloner.Clone(original.libraryNameParam);30 32 programmingTypeParam = cloner.Clone(original.programmingTypeParam); 31 33 } 32 33 public string LibraryName {34 get => libraryNameParam?.Value.Value;35 set => libraryNameParam.Value.Value = value;36 }37 38 public virtual OptimizationProblemType OptimizationProblemType { get; }39 34 40 35 public LinearProgrammingType LinearProgrammingType { … … 43 38 } 44 39 40 public virtual OptimizationProblemType OptimizationProblemType { get; } 41 public virtual bool SupportsPause => false; 42 public virtual bool SupportsStop => false; 43 45 44 public override IDeepCloneable Clone(Cloner cloner) => new Solver(this, cloner); 45 46 public void Dispose() => solver?.Dispose(); 47 48 public void Interrupt() => solver.Stop(); 49 50 public virtual void Reset() { 51 solver = null; 52 } 53 54 public virtual void Solve(LinearProgrammingAlgorithm algorithm, CancellationToken cancellationToken) => 55 Solve(algorithm, CancellationToken.None); 56 57 public virtual void Solve(LinearProgrammingAlgorithm algorithm) => 58 Solve(algorithm, algorithm.TimeLimit, false); 59 60 public virtual void Solve(LinearProgrammingAlgorithm algorithm, TimeSpan timeLimit, bool incrementality) { 61 var libraryName = string.Empty; 62 if (this is ExternalSolver externalSolver) 63 libraryName = externalSolver.LibraryName; 64 65 if (solver == null) { 66 solver = LinearSolver.CreateSolver(OptimizationProblemType, Name, 67 libraryName, s => algorithm.Problem.ProblemDefinition.BuildModel(s)); 68 } 69 70 solver.TimeLimit = timeLimit; 71 solver.RelativeGapTolerance = algorithm.RelativeGapTolerance; 72 solver.PrimalTolerance = algorithm.PrimalTolerance; 73 solver.DualTolerance = algorithm.DualTolerance; 74 solver.Presolve = algorithm.Presolve; 75 solver.Scaling = algorithm.Scaling; 76 solver.LpAlgorithm = algorithm.LpAlgorithm; 77 solver.Incrementality = incrementality; 78 79 solver.Solve(); 80 81 algorithm.Problem.ProblemDefinition.Analyze(solver.Solver, algorithm.Results); 82 algorithm.Results.AddOrUpdateResult("Result Status", new EnumValue<ResultStatus>(solver.ResultStatus)); 83 algorithm.Results.AddOrUpdateResult("Best Objective Value", 84 new DoubleValue(solver.ObjectiveValue ?? double.NaN)); 85 algorithm.Results.AddOrUpdateResult("Best Objective Bound", 86 new DoubleValue(solver.ObjectiveBound ?? double.NaN)); 87 algorithm.Results.AddOrUpdateResult("Absolute Gap", new DoubleValue(solver.AbsoluteGap ?? double.NaN)); 88 algorithm.Results.AddOrUpdateResult("Relative Gap", new DoubleValue(solver.RelativeGap ?? double.NaN)); 89 algorithm.Results.AddOrUpdateResult("Number of Constraints", new IntValue(solver.NumberOfConstraints)); 90 algorithm.Results.AddOrUpdateResult("Number of Variables", new IntValue(solver.NumberOfVariables)); 91 algorithm.Results.AddOrUpdateResult("Number of Nodes", new DoubleValue(solver.NumberOfNodes)); 92 algorithm.Results.AddOrUpdateResult("Iterations", new DoubleValue(solver.Iterations)); 93 algorithm.Results.AddOrUpdateResult("Solver Version", new StringValue(solver.SolverVersion)); 94 algorithm.Results.AddOrUpdateResult("Wall Time", new TimeSpanValue(solver.WallTime ?? TimeSpan.Zero)); 95 } 46 96 } 47 97 } -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/BopSolver.cs
r16232 r16233 1 1 using HeuristicLab.Core; 2 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base; 2 3 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 3 4 4 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 5 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers { 6 5 7 [Item("BOP", "BOP (https://developers.google.com/optimization/reference/bop/bop_solver/) can be used out of the box.")] 6 8 [StorableClass] 7 public class BopSolver : Solver {9 public class BopSolver : IncrementalSolver { 8 10 9 11 public BopSolver() { … … 12 14 13 15 public override OptimizationProblemType OptimizationProblemType => OptimizationProblemType.BOP_INTEGER_PROGRAMMING; 16 public override bool SupportsPause => true; 17 public override bool SupportsStop => true; 14 18 } 15 19 } -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/CoinOrSolver.cs
r16232 r16233 1 1 using HeuristicLab.Core; 2 using HeuristicLab.Data; 3 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base; 2 4 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 3 5 4 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 6 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers { 7 5 8 [Item("Clp/Cbc", "Clp (https://projects.coin-or.org/Clp) and Cbc (https://projects.coin-or.org/Cbc) can be used out of the box.")] 6 9 [StorableClass] 7 public class CoinOrSolver : Solver { 10 public class CoinOrSolver : IncrementalSolver { 11 12 public CoinOrSolver() { 13 programmingTypeParam.Value.ValueChanged += (sender, args) => { 14 if (((EnumValue<LinearProgrammingType>)sender).Value == LinearProgrammingType.LinearProgramming) { 15 incrementalityParam.Value = new BoolValue(true); 16 incrementalityParam.Value.ValueChanged += (s, a) => { 17 if (((BoolValue)s).Value) { 18 qualityUpdateIntervalParam.Value = new TimeSpanValue(qualityUpdateIntervalParam.Value.Value); 19 } else { 20 qualityUpdateIntervalParam.Value = (TimeSpanValue)qualityUpdateIntervalParam.Value.AsReadOnly(); 21 } 22 }; 23 } else { 24 incrementalityParam.Value = (BoolValue)new BoolValue().AsReadOnly(); 25 } 26 }; 27 } 8 28 9 29 public override OptimizationProblemType OptimizationProblemType => -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/CplexSolver.cs
r16232 r16233 1 1 using HeuristicLab.Core; 2 2 using HeuristicLab.Data; 3 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base; 3 4 using HeuristicLab.Parameters; 4 5 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 5 6 6 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {7 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers { 7 8 8 9 [Item("CPLEX", "CPLEX (https://www.ibm.com/analytics/cplex-optimizer) must be installed and licenced.")] 9 10 [StorableClass] 10 public class CplexSolver : Solver {11 public class CplexSolver : ExternalIncrementalSolver { 11 12 12 13 public CplexSolver() { 13 Parameters.Add(libraryNameParam = new FixedValueParameter<StringValue>(nameof(LibraryName), new StringValue("cplex1280.dll"))); 14 Parameters.Add(libraryNameParam = new FixedValueParameter<FileValue>(nameof(LibraryName), 15 new FileValue { FileDialogFilter = FileDialogFilter, Value = "cplex1280.dll" })); 14 16 } 15 17 -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/GlopSolver.cs
r16232 r16233 1 1 using HeuristicLab.Core; 2 2 using HeuristicLab.Data; 3 using HeuristicLab. Parameters;3 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base; 4 4 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 5 5 6 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 6 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers { 7 7 8 [Item("Glop", "Glop (https://developers.google.com/optimization/lp/glop) can be used out of the box.")] 8 9 [StorableClass] 9 public class GlopSolver : Solver {10 public class GlopSolver : IncrementalSolver { 10 11 11 12 public GlopSolver() { 12 Parameters.Remove(programmingTypeParam); 13 Parameters.Add(programmingTypeParam = new FixedValueParameter<EnumValue<LinearProgrammingType>>(nameof(LinearProgrammingType), 14 (EnumValue<LinearProgrammingType>)new EnumValue<LinearProgrammingType>().AsReadOnly())); 13 programmingTypeParam.Value = (EnumValue<LinearProgrammingType>)programmingTypeParam.Value.AsReadOnly(); 15 14 } 16 15 17 16 public override OptimizationProblemType OptimizationProblemType => OptimizationProblemType.GLOP_LINEAR_PROGRAMMING; 17 public override bool SupportsPause => true; 18 public override bool SupportsStop => true; 18 19 } 19 20 } -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/GlpkSolver.cs
r16232 r16233 1 1 using HeuristicLab.Core; 2 2 using HeuristicLab.Data; 3 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base; 3 4 using HeuristicLab.Parameters; 4 5 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 5 6 6 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 7 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers { 8 7 9 [Item("GLPK", "GLPK (https://www.gnu.org/software/glpk/) can be used out of the box.")] 8 10 [StorableClass] 9 public class GlpkSolver : Solver {11 public class GlpkSolver : ExternalIncrementalSolver { 10 12 11 13 public GlpkSolver() { 12 Parameters.Add(libraryNameParam = new FixedValueParameter<StringValue>(nameof(LibraryName), new StringValue("glpk_4_65.dll"))); 14 Parameters.Add(libraryNameParam = new FixedValueParameter<FileValue>(nameof(LibraryName), 15 new FileValue { FileDialogFilter = FileDialogFilter, Value = "glpk465.dll" })); 16 17 programmingTypeParam.Value.ValueChanged += (sender, args) => { 18 if (((EnumValue<LinearProgrammingType>)sender).Value == LinearProgrammingType.LinearProgramming) { 19 incrementalityParam.Value = new BoolValue(true); 20 incrementalityParam.Value.ValueChanged += (s, a) => { 21 if (((BoolValue)s).Value) { 22 qualityUpdateIntervalParam.Value = new TimeSpanValue(qualityUpdateIntervalParam.Value.Value); 23 } else { 24 qualityUpdateIntervalParam.Value = (TimeSpanValue)qualityUpdateIntervalParam.Value.AsReadOnly(); 25 } 26 }; 27 } else { 28 incrementalityParam.Value = (BoolValue)new BoolValue().AsReadOnly(); 29 } 30 }; 13 31 } 14 32 -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/GurobiSolver.cs
r16232 r16233 1 using HeuristicLab.Core; 1 using HeuristicLab.Common; 2 using HeuristicLab.Core; 2 3 using HeuristicLab.Data; 4 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base; 3 5 using HeuristicLab.Parameters; 4 6 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 5 7 6 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 8 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers { 9 7 10 [Item("Gurobi", "Gurobi (http://www.gurobi.com/) must be installed and licenced.")] 8 11 [StorableClass] 9 public class GurobiSolver : Solver {12 public class GurobiSolver : ExternalIncrementalSolver { 10 13 11 14 public GurobiSolver() { 12 Parameters.Add(libraryNameParam = new FixedValueParameter<StringValue>(nameof(LibraryName), new StringValue("gurobi80.dll"))); 15 Parameters.Add(libraryNameParam = new FixedValueParameter<FileValue>(nameof(LibraryName), 16 new FileValue { FileDialogFilter = FileDialogFilter, Value = "gurobi80.dll" })); 17 } 18 19 protected GurobiSolver(GurobiSolver original, Cloner cloner) 20 : base(original, cloner) { 21 programmingTypeParam = cloner.Clone(original.programmingTypeParam); 13 22 } 14 23 … … 17 26 ? OptimizationProblemType.GUROBI_LINEAR_PROGRAMMING 18 27 : OptimizationProblemType.GUROBI_MIXED_INTEGER_PROGRAMMING; 28 29 public override bool SupportsPause => true; 30 public override bool SupportsStop => true; 19 31 } 20 32 } -
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solvers/ScipSolver.cs
r16232 r16233 1 1 using HeuristicLab.Core; 2 2 using HeuristicLab.Data; 3 using HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers.Base; 3 4 using HeuristicLab.Parameters; 4 5 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 5 6 6 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms { 7 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms.Solvers { 8 7 9 [Item("SCIP", "SCIP (http://scip.zib.de/) must be installed and licenced.")] 8 10 [StorableClass] 9 public class ScipSolver : Solver {11 public class ScipSolver : ExternalSolver { 10 12 11 13 public ScipSolver() { 12 Parameters.Add(libraryNameParam = new FixedValueParameter<StringValue>(nameof(LibraryName), new StringValue("scip.dll"))); 13 Parameters.Remove(programmingTypeParam); 14 Parameters.Add(programmingTypeParam = new FixedValueParameter<EnumValue<LinearProgrammingType>>(nameof(LinearProgrammingType), 15 (EnumValue<LinearProgrammingType>)new EnumValue<LinearProgrammingType>(LinearProgrammingType.MixedIntegerProgramming).AsReadOnly())); 14 Parameters.Add(libraryNameParam = new FixedValueParameter<FileValue>(nameof(LibraryName), 15 new FileValue { FileDialogFilter = FileDialogFilter, Value = "scip.dll" })); 16 programmingTypeParam.Value = 17 (EnumValue<LinearProgrammingType>)new EnumValue<LinearProgrammingType>(LinearProgrammingType 18 .MixedIntegerProgramming).AsReadOnly(); 16 19 } 17 20 18 21 public override OptimizationProblemType OptimizationProblemType => 19 22 OptimizationProblemType.SCIP_MIXED_INTEGER_PROGRAMMING; 23 24 public override bool SupportsPause => true; 25 public override bool SupportsStop => true; 20 26 } 21 27 }
Note: See TracChangeset
for help on using the changeset viewer.