コード例 #1
0
        protected override PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2)
        {
            if (parent1.Length != parent2.Length)
            {
                return(parent1.Clone() as PrinsEncoding);
            }

            //note - the inner crossover is called here and the result is converted to a prins representation
            //some refactoring should be done here in the future - the crossover operation should be called directly

            InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
            IAtomicOperation op = this.ExecutionContext.CreateOperation(
                InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope);

            op.Operator.Execute((IExecutionContext)op, CancellationToken);

            string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName;

            if (ExecutionContext.Scope.Variables.ContainsKey(childName))
            {
                Permutation permutation = ExecutionContext.Scope.Variables[childName].Value as Permutation;
                ExecutionContext.Scope.Variables.Remove(childName);

                return(new PrinsEncoding(permutation, ProblemInstance));
            }
            else
            {
                return(null);
            }
        }
コード例 #2
0
    protected override PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2) {
      if (parent1.Length != parent2.Length)
        return parent1.Clone() as PrinsEncoding;

      //note - the inner crossover is called here and the result is converted to a prins representation
      //some refactoring should be done here in the future - the crossover operation should be called directly

      InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
      IAtomicOperation op = this.ExecutionContext.CreateOperation(
        InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope);
      op.Operator.Execute((IExecutionContext)op, CancellationToken);

      string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName;
      if (ExecutionContext.Scope.Variables.ContainsKey(childName)) {
        Permutation permutation = ExecutionContext.Scope.Variables[childName].Value as Permutation;
        ExecutionContext.Scope.Variables.Remove(childName);

        return new PrinsEncoding(permutation, ProblemInstance);
      } else
        return null;
    }
コード例 #3
0
        protected PrinsEncoding Manipulate(PrinsEncoding individual,
                                           double originalQuality, int u, int v)
        {
            PrinsEncoding child       = null;
            bool          improvement = false;

            if (u != v)
            {
                child = individual.Clone() as PrinsEncoding;
                M1(individual, child, u, v);
                improvement = GetQuality(child) < originalQuality;

                if (!improvement)
                {
                    child = individual.Clone() as PrinsEncoding;
                    M2(individual, child, u, v);
                    improvement = GetQuality(child) < originalQuality;
                }

                if (!improvement)
                {
                    child = individual.Clone() as PrinsEncoding;
                    M3(individual, child, u, v);
                    improvement = GetQuality(child) < originalQuality;
                }

                if (!improvement)
                {
                    child = individual.Clone() as PrinsEncoding;
                    M4(individual, child, u, v);
                    improvement = GetQuality(child) < originalQuality;
                }

                if (!improvement)
                {
                    child = individual.Clone() as PrinsEncoding;
                    M5(individual, child, u, v);
                    improvement = GetQuality(child) < originalQuality;
                }

                if (!improvement)
                {
                    child = individual.Clone() as PrinsEncoding;
                    M6(individual, child, u, v);
                    improvement = GetQuality(child) < originalQuality;
                }

                if (!improvement)
                {
                    child = individual.Clone() as PrinsEncoding;
                    M7(individual, child, u, v);
                    improvement = GetQuality(child) < originalQuality;
                }

                if (!improvement)
                {
                    child = individual.Clone() as PrinsEncoding;
                    M8(individual, child, u, v);
                    improvement = GetQuality(child) < originalQuality;
                }

                if (!improvement)
                {
                    child = individual.Clone() as PrinsEncoding;
                    M9(individual, child, u, v);
                    improvement = GetQuality(child) < originalQuality;
                }
            }

            if (improvement)
            {
                return(child);
            }
            else
            {
                return(null);
            }
        }
コード例 #4
0
    protected PrinsEncoding Manipulate(PrinsEncoding individual,
      double originalQuality, int u, int v) {
      PrinsEncoding child = null;
      bool improvement = false;

      if (u != v) {
        child = individual.Clone() as PrinsEncoding;
        M1(individual, child, u, v);
        improvement = GetQuality(child) < originalQuality;

        if (!improvement) {
          child = individual.Clone() as PrinsEncoding;
          M2(individual, child, u, v);
          improvement = GetQuality(child) < originalQuality;
        }

        if (!improvement) {
          child = individual.Clone() as PrinsEncoding;
          M3(individual, child, u, v);
          improvement = GetQuality(child) < originalQuality;
        }

        if (!improvement) {
          child = individual.Clone() as PrinsEncoding;
          M4(individual, child, u, v);
          improvement = GetQuality(child) < originalQuality;
        }

        if (!improvement) {
          child = individual.Clone() as PrinsEncoding;
          M5(individual, child, u, v);
          improvement = GetQuality(child) < originalQuality;
        }

        if (!improvement) {
          child = individual.Clone() as PrinsEncoding;
          M6(individual, child, u, v);
          improvement = GetQuality(child) < originalQuality;
        }

        if (!improvement) {
          child = individual.Clone() as PrinsEncoding;
          M7(individual, child, u, v);
          improvement = GetQuality(child) < originalQuality;
        }

        if (!improvement) {
          child = individual.Clone() as PrinsEncoding;
          M8(individual, child, u, v);
          improvement = GetQuality(child) < originalQuality;
        }

        if (!improvement) {
          child = individual.Clone() as PrinsEncoding;
          M9(individual, child, u, v);
          improvement = GetQuality(child) < originalQuality;
        }
      }

      if (improvement)
        return child;
      else
        return null;
    }