source: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblem.cs @ 16373

Last change on this file since 16373 was 16373, checked in by ddorfmei, 5 months ago

#2931:

  • upgraded Google OR-Tools to version 6.10
  • added TextValue and TextValueView to be able to display and edit a multiline string
  • added parameter to set solver specific parameters for supported solvers
  • added support for the Protocol Buffers representation of models (import/export)
  • added import of MPS models
  • added pause/stop functionality to CplexSolver and GlpkSolver
  • refactored wrapper (LinearSolver and related enums)
  • added new algorithm category Exact for LinearProgrammingAlgorithm
File size: 3.3 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System.Drawing;
23using HeuristicLab.Common;
24using HeuristicLab.Common.Resources;
25using HeuristicLab.Core;
26using HeuristicLab.Optimization;
27using HeuristicLab.Parameters;
28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
29
30namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Problems {
31
32  [Item("Linear/Mixed Integer Programming Problem (LP/MIP)", "Represents a linear/mixed integer problem.")]
33  [Creatable(CreatableAttribute.Categories.CombinatorialProblems)]
34  [StorableClass]
35  public class LinearProgrammingProblem : Problem, IProgrammableItem {
36
37    public LinearProgrammingProblem() {
38      Parameters.Add(new FixedValueParameter<LinearProgrammingProblemDefinitionScript>("ProblemScript",
39        "Defines the problem.", new LinearProgrammingProblemDefinitionScript { Name = Name }) { GetsCollected = false });
40      RegisterEvents();
41    }
42
43    protected LinearProgrammingProblem(LinearProgrammingProblem original, Cloner cloner)
44      : base(original, cloner) {
45      RegisterEvents();
46    }
47
48    [StorableConstructor]
49    protected LinearProgrammingProblem(bool deserializing) : base(deserializing) { }
50
51    public new static Image StaticItemImage => VSImageLibrary.Script;
52    public ILinearProgrammingProblemDefinition ProblemDefinition => LinearProgrammingProblemScriptParameter.Value;
53    public LinearProgrammingProblemDefinitionScript ProblemScript => LinearProgrammingProblemScriptParameter.Value;
54
55    private FixedValueParameter<LinearProgrammingProblemDefinitionScript> LinearProgrammingProblemScriptParameter =>
56      (FixedValueParameter<LinearProgrammingProblemDefinitionScript>)Parameters["ProblemScript"];
57
58    public override IDeepCloneable Clone(Cloner cloner) {
59      return new LinearProgrammingProblem(this, cloner);
60    }
61
62    protected override void OnNameChanged() {
63      base.OnNameChanged();
64      ProblemScript.Name = Name;
65    }
66
67    [StorableHook(HookType.AfterDeserialization)]
68    private void AfterDeserialization() {
69      RegisterEvents();
70    }
71
72    private void OnProblemDefinitionChanged() {
73      OnOperatorsChanged();
74      OnReset();
75    }
76
77    private void OnProblemScriptNameChanged() {
78      Name = ProblemScript.Name;
79    }
80
81    private void RegisterEvents() {
82      ProblemScript.ProblemDefinitionChanged += (o, e) => OnProblemDefinitionChanged();
83      ProblemScript.NameChanged += (o, e) => OnProblemScriptNameChanged();
84    }
85  }
86}
Note: See TracBrowser for help on using the repository browser.