Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/07/14 14:20:04 (10 years ago)
Author:
abeham
Message:

#2131: merged to stable

Location:
stable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Problems.LinearAssignment/3.3/LinearAssignmentProblemSolver.cs

    r9456 r11109  
    3434    private const int UNASSIGNED = -1;
    3535
     36    public IValueLookupParameter<BoolValue> MaximizationParameter {
     37      get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     38    }
    3639    public ILookupParameter<DoubleMatrix> CostsParameter {
    3740      get { return (ILookupParameter<DoubleMatrix>)Parameters["Costs"]; }
     
    4952    public LinearAssignmentProblemSolver()
    5053      : base() {
     54      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "Whether the costs should be maximized or minimized."));
    5155      Parameters.Add(new LookupParameter<DoubleMatrix>("Costs", LinearAssignmentProblem.CostsDescription));
    5256      Parameters.Add(new LookupParameter<Permutation>("Assignment", "The assignment solution to create."));
     
    5862    }
    5963
     64    [StorableHook(HookType.AfterDeserialization)]
     65    private void AfterDeserialization() {
     66      // BackwardsCompatibility3.3
     67      #region Backwards compatible code, remove with 3.4
     68      if (!Parameters.ContainsKey("Maximization"))
     69        Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "Whether the costs should be maximized or minimized."));
     70      #endregion
     71    }
     72
    6073    public override IOperation Apply() {
    6174      var costs = CostsParameter.ActualValue;
     75      var maximization = MaximizationParameter.ActualValue.Value;
     76      if (maximization) {
     77        costs = (DoubleMatrix)costs.Clone();
     78        for (int i = 0; i < costs.Rows; i++)
     79          for (int j = 0; j < costs.Rows; j++)
     80            costs[i, j] = -costs[i, j];
     81      }
    6282      double quality;
    6383      var solution = Solve(costs, out quality);
    6484
    6585      AssignmentParameter.ActualValue = new Permutation(PermutationTypes.Absolute, solution);
     86      if (maximization) quality = -quality;
    6687      QualityParameter.ActualValue = new DoubleValue(quality);
    6788
Note: See TracChangeset for help on using the changeset viewer.