Changeset 7970 for branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Evaluators/GQAPNMoveEvaluator.cs
- Timestamp:
- 06/06/12 04:29:56 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Evaluators/GQAPNMoveEvaluator.cs
r7505 r7970 20 20 #endregion 21 21 22 using System.Linq;23 22 using HeuristicLab.Common; 24 23 using HeuristicLab.Core; … … 35 34 public class GQAPNMoveEvaluator : SingleSuccessorOperator, IGQAPNMoveEvaluator, IAssignmentAwareGQAPOperator, 36 35 IQualityAwareGQAPOperator, ITransportationCostsAwareGQAPOperator, 37 IOverbookedCapacityPenaltyAwareGQAPOperator, IWeightsAwareGQAPOperator, IDistancesAwareGQAPOperator, 38 IInstallationCostsAwareGQAPOperator, IDemandsAwareGQAPOperator, ICapacitiesAwareGQAPOperator { 36 IExpectedRandomQualityAwareGQAPOperator, IWeightsAwareGQAPOperator, IDistancesAwareGQAPOperator, 37 IInstallationCostsAwareGQAPOperator, IDemandsAwareGQAPOperator, ICapacitiesAwareGQAPOperator, 38 IEvaluatorAwareGQAPOperator { 39 39 40 40 #region Parameter Descriptions … … 94 94 get { return (IValueLookupParameter<DoubleValue>)Parameters["TransportationCosts"]; } 95 95 } 96 public IValueLookupParameter<DoubleValue> OverbookedCapacityPenaltyParameter {97 get { return (IValueLookupParameter<DoubleValue>)Parameters[" OverbookedCapacityPenalty"]; }96 public IValueLookupParameter<DoubleValue> ExpectedRandomQualityParameter { 97 get { return (IValueLookupParameter<DoubleValue>)Parameters["ExpectedRandomQuality"]; } 98 98 } 99 99 public ILookupParameter<DoubleMatrix> WeightsParameter { … … 111 111 public ILookupParameter<DoubleArray> CapacitiesParameter { 112 112 get { return (ILookupParameter<DoubleArray>)Parameters["Capacities"]; } 113 } 114 public IValueLookupParameter<IGQAPEvaluator> EvaluatorParameter { 115 get { return (IValueLookupParameter<IGQAPEvaluator>)Parameters["Evaluator"]; } 113 116 } 114 117 #endregion … … 130 133 Parameters.Add(new LookupParameter<DoubleValue>("MoveInstallationQuality", MoveInstallationQualityDescription)); 131 134 Parameters.Add(new LookupParameter<DoubleValue>("MoveOverbookedCapacity", MoveOverbookedCapacityDescription)); 132 Parameters.Add(new ValueLookupParameter<DoubleValue>(" OverbookedCapacityPenalty", GeneralizedQuadraticAssignmentProblem.OverbookedCapacityPenaltyDescription));135 Parameters.Add(new ValueLookupParameter<DoubleValue>("ExpectedRandomQuality", GeneralizedQuadraticAssignmentProblem.ExpectedRandomQualityDescription)); 133 136 Parameters.Add(new ValueLookupParameter<DoubleValue>("TransportationCosts", GeneralizedQuadraticAssignmentProblem.TransportationCostsDescription)); 134 137 Parameters.Add(new LookupParameter<DoubleMatrix>("Weights", GeneralizedQuadraticAssignmentProblem.WeightsDescription)); … … 137 140 Parameters.Add(new LookupParameter<DoubleArray>("Demands", GeneralizedQuadraticAssignmentProblem.DemandsDescription)); 138 141 Parameters.Add(new LookupParameter<DoubleArray>("Capacities", GeneralizedQuadraticAssignmentProblem.CapacitiesDescription)); 142 Parameters.Add(new ValueLookupParameter<IGQAPEvaluator>("Evaluator", "The evaluator that is used to evaluate GQAP solutions.")); 139 143 } 140 144 … … 144 148 145 149 public static double Evaluate(NMove move, IntegerVector assignment, DoubleMatrix weights, DoubleMatrix distances, DoubleMatrix installationCosts, 146 DoubleArray demands, DoubleArray capacities, DoubleValue transportationCosts, DoubleValue overbookedCapacityPenalty) {150 DoubleArray demands, DoubleArray capacities, double transportationCosts, double expectedRandomQuality, IGQAPEvaluator evaluator) { 147 151 double moveFlowDistanceQuality, moveInstallationQuality, moveOverbookedCapacity; 148 Evaluate(move, assignment, weights, distances, installationCosts, demands, capacities, 152 Evaluate(move, assignment, weights, distances, installationCosts, demands, capacities, evaluator, 149 153 out moveFlowDistanceQuality, out moveInstallationQuality, out moveOverbookedCapacity); 150 return GQAPEvaluator.GetCombinedQuality(moveFlowDistanceQuality, moveInstallationQuality, moveOverbookedCapacity,151 transportationCosts .Value, overbookedCapacityPenalty.Value);154 return evaluator.GetFitness(moveFlowDistanceQuality, moveInstallationQuality, moveOverbookedCapacity, 155 transportationCosts, expectedRandomQuality); 152 156 } 153 157 154 158 public static void Evaluate(NMove move, IntegerVector assignment, DoubleMatrix weights, DoubleMatrix distances, DoubleMatrix installationCosts, 155 DoubleArray demands, DoubleArray capacities, out double moveFlowDistanceQuality, out double moveInstallationQuality, out double moveOverbookedCapacity) {159 DoubleArray demands, DoubleArray capacities, IGQAPEvaluator evaluator, out double moveFlowDistanceQuality, out double moveInstallationQuality, out double moveOverbookedCapacity) { 156 160 moveFlowDistanceQuality = moveInstallationQuality = moveOverbookedCapacity = 0.0; 157 161 int moves = move.N; … … 184 188 } 185 189 186 moveOverbookedCapacity = slack.Select((v, i) => new { V = v, Index = i }).Where(x => x.V < 0.0).Select(x => -x.V / capacities[x.Index]).Sum() 187 - oldSlack.Select((v, i) => new { V = v, Index = i }).Where(x => x.V < 0.0).Select(x => -x.V / capacities[x.Index]).Sum(); 190 moveOverbookedCapacity = evaluator.EvaluateOverbooking(slack, capacities) - evaluator.EvaluateOverbooking(oldSlack, capacities); 188 191 } 189 192 190 193 public override IOperation Apply() { 194 var evaluator = EvaluatorParameter.ActualValue; 191 195 double moveFlowDistanceQuality, moveInstallationQuality, moveOverbookedCapacity; 192 196 double quality = QualityParameter.ActualValue.Value; 193 197 double transportationCosts = TransportationCostsParameter.ActualValue.Value; 194 double overbookedCapacityPenalty = OverbookedCapacityPenaltyParameter.ActualValue.Value;198 double expectedRandomQuality = ExpectedRandomQualityParameter.ActualValue.Value; 195 199 196 200 double flowDistanceQuality = FlowDistanceQualityParameter.ActualValue.Value; … … 203 207 InstallationCostsParameter.ActualValue, 204 208 DemandsParameter.ActualValue, CapacitiesParameter.ActualValue, 209 evaluator, 205 210 out moveFlowDistanceQuality, out moveInstallationQuality, out moveOverbookedCapacity); 206 211 … … 209 214 MoveOverbookedCapacityParameter.ActualValue = new DoubleValue(overbookedCapacity + moveOverbookedCapacity); 210 215 211 MoveQualityParameter.ActualValue = new DoubleValue( GQAPEvaluator.GetCombinedQuality(216 MoveQualityParameter.ActualValue = new DoubleValue(evaluator.GetFitness( 212 217 flowDistanceQuality + moveFlowDistanceQuality, 213 218 installationQuality + moveInstallationQuality, 214 219 overbookedCapacity + moveOverbookedCapacity, 215 transportationCosts, 216 overbookedCapacityPenalty)); 220 transportationCosts, expectedRandomQuality)); 217 221 return base.Apply(); 218 222 }
Note: See TracChangeset
for help on using the changeset viewer.