public VRPProblemInstance() : base() { Parameters.Add(new ValueParameter <DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities.", new DoubleMatrix())); Parameters.Add(new OptionalValueParameter <DoubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); Parameters.Add(new ValueParameter <BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false.", new BoolValue(true))); Parameters.Add(new ValueParameter <IntValue>("Vehicles", "The number of vehicles.", new IntValue(0))); Parameters.Add(new ValueParameter <DoubleArray>("Demand", "The demand of each customer.", new DoubleArray())); Parameters.Add(new ValueParameter <DoubleValue>("EvalFleetUsageFactor", "The fleet usage factor considered in the evaluation.", new DoubleValue(0))); Parameters.Add(new ValueParameter <DoubleValue>("EvalDistanceFactor", "The distance factor considered in the evaluation.", new DoubleValue(1))); evaluator = Evaluator; AttachEventHandlers(); }
//helper method to evaluate an updated individual protected void UpdateEvaluation(IVRPEncoding updatedTours) { IVRPEvaluator evaluator = ProblemInstance.MoveEvaluator; try { this.ExecutionContext.Scope.Variables.Add(new Variable(evaluator.VRPToursParameter.ActualName, updatedTours)); IAtomicOperation op = this.ExecutionContext.CreateChildOperation(evaluator); op.Operator.Execute((IExecutionContext)op, CancellationToken); } finally { this.ExecutionContext.Scope.Variables.Remove(evaluator.VRPToursParameter.ActualName); } }
private void UpdateMoveEvaluation() { IVRPEvaluator evaluator = ProblemInstance.SolutionEvaluator; ICollection <IParameter> addedParameters = new List <IParameter>(); try { foreach (IParameter parameter in evaluator.Parameters) { if (parameter is ILookupParameter && parameter != evaluator.VRPToursParameter && parameter != evaluator.ProblemInstanceParameter) { ILookupParameter evaluatorParameter = parameter as ILookupParameter; string resultName = evaluatorParameter.ActualName; if (!this.Parameters.ContainsKey(resultName)) { ILookupParameter resultParameter = new LookupParameter <IItem>(resultName); resultParameter.ExecutionContext = ExecutionContext; this.Parameters.Add(resultParameter); addedParameters.Add(resultParameter); } string moveResultName = VRPMoveEvaluator.MovePrefix + resultName; if (!this.Parameters.ContainsKey(moveResultName)) { ILookupParameter moveResultParameter = new LookupParameter <IItem>(moveResultName); moveResultParameter.ExecutionContext = ExecutionContext; this.Parameters.Add(moveResultParameter); addedParameters.Add(moveResultParameter); } ILookupParameter result = Parameters[resultName] as ILookupParameter; ILookupParameter moveResult = Parameters[moveResultName] as ILookupParameter; result.ActualValue = moveResult.ActualValue; } } } finally { foreach (IParameter parameter in addedParameters) { this.Parameters.Remove(parameter); } } }
private void AfterDeserialization() { evaluator = Evaluator; AttachEventHandlers(); }
protected VRPProblemInstance(VRPProblemInstance original, Cloner cloner) : base(original, cloner) { evaluator = Evaluator; AttachEventHandlers(); }
public VRPProblemInstance() : base() { Parameters.Add(new ValueParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities.", new DoubleMatrix())); Parameters.Add(new OptionalValueParameter<DoubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); Parameters.Add(new ValueParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false.", new BoolValue(true))); Parameters.Add(new ValueParameter<IntValue>("Vehicles", "The number of vehicles.", new IntValue(0))); Parameters.Add(new ValueParameter<DoubleArray>("Demand", "The demand of each customer.", new DoubleArray())); Parameters.Add(new ValueParameter<DoubleValue>("EvalFleetUsageFactor", "The fleet usage factor considered in the evaluation.", new DoubleValue(0))); Parameters.Add(new ValueParameter<DoubleValue>("EvalDistanceFactor", "The distance factor considered in the evaluation.", new DoubleValue(1))); evaluator = Evaluator; AttachEventHandlers(); }