public object Clone() { return(new BionicModel() { Attributes = (NamedModelEntityCollection <Parameter>)Attributes.Clone(), FitnessCriterion = (Criterion)FitnessCriterion.Clone(), FunctionalConstraints = (NamedModelEntityCollection <Constraint>)FunctionalConstraints.Clone(), CurrentPopulation = (Population)CurrentPopulation.Clone(), CurrentGeneration = CurrentGeneration }); }
/// <summary> /// Creates a deep copy of <see cref="IdentificationModel"/> instance /// </summary> /// <returns>Deep copy of self</returns> public object Clone() { return(new IdentificationModel() { IdentificationExperiments = (IdentificationExperimentCollection)IdentificationExperiments.Clone(), RealExperiments = (ExperimentCollection)RealExperiments.Clone(), IdentificationParameters = (ParameterCollection)IdentificationParameters.Clone(), OptimizationParameters = (ParameterCollection)OptimizationParameters.Clone(), Criteria = (CriterionCollection)Criteria.Clone(), FunctionalConstraints = (ConstraintCollection)FunctionalConstraints.Clone(), Properties = (PropertyCollection)Properties.Clone() }); }
private void ApplyFunctionalConstraints(Individual individual) { individual.IsActive = true; foreach (KeyValuePair <TId, double> constraint in individual.ConstraintValues) { if (FunctionalConstraints.ContainsKey(constraint.Key)) { if (!Comparer.CompareValuesWithSign( constraint.Value, FunctionalConstraints[constraint.Key].Value, FunctionalConstraints[constraint.Key].ConstraintRelation) ) { individual.IsActive = false; // It is enough to fail only one f. c. break; } } } }
private void ApplyFunctionalConstraints(Experiment experiment) { experiment.IsActive = true; foreach (KeyValuePair <TId, double> constraint in experiment.ConstraintValues) { if (FunctionalConstraints.ContainsKey(constraint.Key)) { if (!Comparer.CompareValuesWithSign( constraint.Value, FunctionalConstraints[constraint.Key].Value, FunctionalConstraints[constraint.Key].ConstraintRelation) ) { // Не вписывается в ограничение, сбрасываем experiment.IsActive = false; // Условие И на ограничения, поэтому если хоть // по одному не проходит - дальше не проверяем break; } } } }