Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/17/18 17:51:26 (6 years ago)
Author:
ddorfmei
Message:

#2931:

  • added all available parameters OR-Tools's linear_solver to LinearProgrammingAlgorithm
    • added necessary parameter enums
  • moved solving logic to Solver
    • created IncrementalSolver, ExternalSolver, ExternalIncrementalSolver
    • added logic for solvers that can be stopped and resumed
  • added SupportsStop property to BasicAlgorithm
  • added quality per time chart for incremental solvers
File:
1 edited

Legend:

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

    r16172 r16233  
    11#region License Information
     2
    23/* HeuristicLab
    34 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     
    1819 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
    1920 */
    20 #endregion
     21
     22#endregion License Information
    2123
    2224using System.Drawing;
     
    3032
    3133namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Problems {
    32   [Item("Linear Programming Programmable Problem (single-objective)", "Represents a single-objective problem that can be programmed with a script.")]
    33   [Creatable(CreatableAttribute.Categories.Problems, Priority = 100)]
     34
     35  [Item("Linear/Mixed Integer Programming Problem (LP/MIP)", "")]
     36  [Creatable(CreatableAttribute.Categories.CombinatorialProblems)]
    3437  [StorableClass]
    3538  public class LinearProgrammingProblem : Problem, IProgrammableItem {
    3639
    37     public new static Image StaticItemImage => VSImageLibrary.Script;
    38 
    39     private FixedValueParameter<LinearProgrammingProblemDefinitionScript> LinearProgrammingProblemScriptParameter => (FixedValueParameter<LinearProgrammingProblemDefinitionScript>)Parameters["ProblemScript"];
    40 
    41     public LinearProgrammingProblemDefinitionScript ProblemScript => LinearProgrammingProblemScriptParameter.Value;
    42 
    43     public ILinearProgrammingProblemDefinition ProblemDefinition => LinearProgrammingProblemScriptParameter.Value;
     40    public LinearProgrammingProblem() {
     41      Parameters.Add(new FixedValueParameter<LinearProgrammingProblemDefinitionScript>("ProblemScript",
     42        "Defines the problem.", new LinearProgrammingProblemDefinitionScript { Name = Name }) { GetsCollected = false });
     43      RegisterEvents();
     44    }
    4445
    4546    private LinearProgrammingProblem(LinearProgrammingProblem original, Cloner cloner)
     
    4748      RegisterEvents();
    4849    }
    49     public override IDeepCloneable Clone(Cloner cloner) { return new LinearProgrammingProblem(this, cloner); }
    5050
    5151    [StorableConstructor]
    5252    private LinearProgrammingProblem(bool deserializing) : base(deserializing) { }
    53     public LinearProgrammingProblem() {
    54       Parameters.Add(new FixedValueParameter<LinearProgrammingProblemDefinitionScript>("ProblemScript", "Defines the problem.", new LinearProgrammingProblemDefinitionScript { Name = Name }) { GetsCollected = false });
    55       //Operators.Add(new BestScopeSolutionAnalyzer());
    56       RegisterEvents();
     53
     54    public new static Image StaticItemImage => VSImageLibrary.Script;
     55    public ILinearProgrammingProblemDefinition ProblemDefinition => LinearProgrammingProblemScriptParameter.Value;
     56    public LinearProgrammingProblemDefinitionScript ProblemScript => LinearProgrammingProblemScriptParameter.Value;
     57
     58    private FixedValueParameter<LinearProgrammingProblemDefinitionScript> LinearProgrammingProblemScriptParameter =>
     59      (FixedValueParameter<LinearProgrammingProblemDefinitionScript>)Parameters["ProblemScript"];
     60
     61    public void BuildModel(Solver solver) => ProblemDefinition.BuildModel(solver);
     62
     63    public override IDeepCloneable Clone(Cloner cloner) {
     64      return new LinearProgrammingProblem(this, cloner);
     65    }
     66
     67    protected override void OnNameChanged() {
     68      base.OnNameChanged();
     69      ProblemScript.Name = Name;
    5770    }
    5871
     
    6275    }
    6376
     77    private void OnProblemDefinitionChanged() {
     78      OnOperatorsChanged();
     79      OnReset();
     80    }
     81
     82    private void OnProblemScriptNameChanged() {
     83      Name = ProblemScript.Name;
     84    }
     85
    6486    private void RegisterEvents() {
    6587      ProblemScript.ProblemDefinitionChanged += (o, e) => OnProblemDefinitionChanged();
    6688      ProblemScript.NameChanged += (o, e) => OnProblemScriptNameChanged();
    6789    }
    68 
    69     private void OnProblemDefinitionChanged() {
    70       //Parameters.Remove("Maximization");
    71       //Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
    72 
    73       //Encoding = ProblemDefinition.Encoding;
    74       OnOperatorsChanged();
    75       OnReset();
    76     }
    77     protected override void OnNameChanged() {
    78       base.OnNameChanged();
    79       ProblemScript.Name = Name;
    80     }
    81     private void OnProblemScriptNameChanged() {
    82       Name = ProblemScript.Name;
    83     }
    84 
    85     public void BuildModel(Solver solver) => ProblemDefinition.BuildModel(solver);
    86 
    87     //public override bool Maximization {
    88     //  get { return Parameters.ContainsKey("ProblemScript") ? ProblemDefinition.Maximization : false; }
    89     //}
    90 
    91     //public override double Evaluate(Individual individual, IRandom random) {
    92     //  return ProblemDefinition.Evaluate(individual, random);
    93     //}
    94 
    95     //public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
    96     //  ProblemDefinition.Analyze(individuals, qualities, results, random);
    97     //}
    98 
    99     //public override IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
    100     //  return ProblemDefinition.GetNeighbors(individual, random);
    101     //}
    10290  }
    10391}
Note: See TracChangeset for help on using the changeset viewer.