Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/19/18 14:15:49 (5 years ago)
Author:
ddorfmei
Message:

#2931:

  • moved views to separate plugin HeuristicLab.MathematicalOptimization.Views
  • added button in LinearProgrammingProblemView to select the problem definition type
  • added views for problem definitions
  • added ExportFile parameter to LinearProgrammingAlgorithm
  • extended FileValue and FileValueView by the option to save a file
  • code cleanup
File:
1 moved

Legend:

Unmodified
Added
Removed
  • branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/FileBasedLinearProgrammingProblemDefinition.cs

    r16368 r16405  
    2020#endregion
    2121
     22using System.Drawing;
     23using System.IO;
    2224using Google.OrTools.LinearSolver;
    23 using HeuristicLab.Problems.Programmable;
     25using HeuristicLab.Common;
     26using HeuristicLab.Common.Resources;
     27using HeuristicLab.Core;
     28using HeuristicLab.Data;
     29using HeuristicLab.Optimization;
     30using HeuristicLab.Parameters;
     31using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2432
    25 namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Problems {
     33namespace HeuristicLab.MathematicalOptimization.LinearProgramming {
    2634
    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    }
    2878
    2979    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);
    3092    }
    3193
    32     public override void Initialize() {
    33     }
     94    public override IDeepCloneable Clone(Cloner cloner) => new FileBasedLinearProgrammingProblemDefinition(this, cloner);
    3495  }
    3596}
Note: See TracChangeset for help on using the changeset viewer.