Changeset 16405 for branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/FileBasedLinearProgrammingProblemDefinition.cs
- Timestamp:
- 12/19/18 14:15:49 (5 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/FileBasedLinearProgrammingProblemDefinition.cs
r16368 r16405 20 20 #endregion 21 21 22 using System.Drawing; 23 using System.IO; 22 24 using Google.OrTools.LinearSolver; 23 using HeuristicLab.Problems.Programmable; 25 using HeuristicLab.Common; 26 using HeuristicLab.Common.Resources; 27 using HeuristicLab.Core; 28 using HeuristicLab.Data; 29 using HeuristicLab.Optimization; 30 using HeuristicLab.Parameters; 31 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 24 32 25 namespace HeuristicLab.MathematicalOptimization.LinearProgramming .Problems{33 namespace HeuristicLab.MathematicalOptimization.LinearProgramming { 26 34 27 public class LinearProgrammingProblemDefintion : CompiledProblemDefinition { 35 [Item("File-Based Linear/Mixed Integer Programming Problem Definition", "File that defines the model for linear/mixed integer programming problem.")] 36 [StorableClass] 37 public sealed class FileBasedLinearProgrammingProblemDefinition : ParameterizedNamedItem, ILinearProgrammingProblemDefinition { 38 39 [Storable] 40 private readonly IFixedValueParameter<FileValue> fileNameParam; 41 42 [Storable] 43 private byte[] fileContent; 44 45 public FileBasedLinearProgrammingProblemDefinition() { 46 Parameters.Add(fileNameParam = new FixedValueParameter<FileValue>(nameof(FileName), new FileValue())); 47 fileNameParam.Value.FileDialogFilter = 48 "All Supported Files (*.mps;*.bin;*.prototxt)|*.mps;*.bin;*.prototxt|" + 49 "Mathematical Programming System Files (*.mps)|*.mps|" + 50 "Google OR-Tools Protocol Buffers Files (*.bin;*.prototxt)|*.bin;*.prototxt|" + 51 "All Files (*.*)|*.*"; 52 fileNameParam.Value.PathChanged += (o, e) => { 53 if (File.Exists(FileName)) { 54 fileContent = File.ReadAllBytes(FileName); 55 } 56 }; 57 } 58 59 private FileBasedLinearProgrammingProblemDefinition(FileBasedLinearProgrammingProblemDefinition original, Cloner cloner) 60 : base(original, cloner) { 61 fileNameParam = cloner.Clone(original.fileNameParam); 62 } 63 64 [StorableConstructor] 65 private FileBasedLinearProgrammingProblemDefinition(bool deserializing) : base(deserializing) { } 66 67 public new static Image StaticItemImage => VSImageLibrary.File; 68 69 public string FileName { 70 get => fileNameParam.Value.Value; 71 set => fileNameParam.Value.Value = value; 72 } 73 74 public IFixedValueParameter<FileValue> FileNameParam => fileNameParam; 75 76 public void Analyze(Solver solver, ResultCollection results) { 77 } 28 78 29 79 public void BuildModel(Solver solver) { 80 var fileInfo = new FileInfo(FileName); 81 var tempFileName = Path.GetTempFileName(); 82 File.WriteAllBytes(tempFileName, fileContent); 83 84 var status = (SolverResponseStatus)(fileInfo.Extension == ".mps" 85 ? solver.ImportModelFromMpsFormat(tempFileName) 86 : solver.ImportModelFromProtoFormat(tempFileName)); 87 88 if (status == SolverResponseStatus.Abnormal) 89 throw new FileFormatException($"'{FileName}' is not a valid MPS or Google OR-Tools Protocol Buffers file."); 90 91 File.Delete(tempFileName); 30 92 } 31 93 32 public override void Initialize() { 33 } 94 public override IDeepCloneable Clone(Cloner cloner) => new FileBasedLinearProgrammingProblemDefinition(this, cloner); 34 95 } 35 96 }
Note: See TracChangeset
for help on using the changeset viewer.