Exemplo n.º 1
0
        protected void UpdatePoint(MoChromosome indiv)
        {
            // update the idealpoint.

            if (P1.P_X > indiv.objectivesValue[0])
            {
                P1.P_X = indiv.objectivesValue[0];
                P1.P_Y = indiv.objectivesValue[1];
            }
            if (P2.P_Y > indiv.objectivesValue[1])
            {
                P2.P_X = indiv.objectivesValue[0];
                P2.P_Y = indiv.objectivesValue[1];
            }
            if (this.ItrCounter > 0.9 * this.TotalItrNum)
            {
                P1.P_X = 0;
                P1.P_Y = 1;
                P2.P_X = 1;
                P2.P_Y = 0;
            }

            lambda1 = Math.Abs(P1.P_X - P2.P_X);
            lambda2 = Math.Abs(P1.P_Y - P2.P_Y);
        }
Exemplo n.º 2
0
        public override void evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            double g = 0, tp;

            for (int i = 1; i < parDimension; i++)
            {
                tp = sp[i] - Math.Sin(0.5 * Math.PI * sp[i]);
                g += tp * tp - Math.Cos(2 * Math.PI * tp);
            }
            g      = 2 * Math.Sin(0.5 * Math.PI * sp[0]) * (parDimension - 1 + g);
            obj[0] = (1 + g) * Math.Pow((sp[0] + 0.05 * Math.Sin(6 * Math.PI * sp[0])), 2);
            obj[1] = (1 + g) * Math.Pow((1 - sp[0] + 0.05 * Math.Sin(6 * Math.PI * sp[0])), 2);

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 3
0
        public override void evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            double g = 0;

            for (int i = 2; i < this.parDimension; i++)
            {
                g += (1 + Math.Pow(sp[i], 2) - Math.Cos(2 * Math.PI * sp[i]));
            }
            g /= 10;

            obj[0] = Math.Pow(Math.Cos(0.5 * Math.PI * sp[0]), 4) * Math.Pow(Math.Cos(0.5 * Math.PI * sp[1]), 4);
            obj[1] = Math.Pow(Math.Cos(0.5 * Math.PI * sp[0]), 4) * Math.Pow(Math.Sin(0.5 * Math.PI * sp[1]), 4);
            obj[2] = Math.Pow((1 + g) / (1 + Math.Pow(Math.Cos(0.5 * Math.PI * sp[0]), 2)), 1 / (1 + g));

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 4
0
        public override void Evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            double g = 0;

            for (int i = 2; i < parDimension; i++)
            {
                g += Math.Pow(sp[i] - 0.5, 2);
            }

            obj[0] = (1 + g) * ((1 - sp[0]) * sp[1]);
            obj[1] = (1 + g) * ((1 - sp[1]) * sp[0]);
            obj[2] = (1 + g) * Math.Pow(1 - sp[0] - sp[1] + 2 * sp[0] * sp[1], 6);

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 5
0
        public override void evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            // objection function

            double g = 0, ti = 0;

            for (int j = 2; j <= parDimension; j++)
            {
                ti = sp[j - 1] - Math.Sin(0.5 * Math.PI * sp[0]);
                ti = Math.Abs(ti);
                g += ti / (1 + Math.Exp(5 * ti));
            }
            g = 10 * Math.Sin(Math.PI * sp[0]) * g;

            obj[0] = (1 + g) * sp[0];
            obj[1] = (1 + g) * (1 - sp[0] * sp[0]);

            //

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 6
0
        protected MoChromosome SBXCrossover(int i, Boolean flag = false)
        {//SBXCrossover
            int k = 0;

            if (flag == true && random.NextDouble() < 0.5)
            {
                do
                {
                    k = neighbourTable[i][random.Next(this.neighbourSize)];
                }while (k == i);
            }
            else
            {
                do
                {
                    k = random.Next(this.popsize);
                }while (k == i);
            }

            MoChromosome offSpring = this.createChromosome();

            offSpring.SBX(this.mainpop[i], mainpop[k], random);

            offSpring.mutate(1d / offSpring.parDimension, random);

            offSpring.selected = false;
            //offSpring.mutate(this.randomGenerator, 1d/this.popsize);
            return(offSpring);
        }
Exemplo n.º 7
0
        public override void evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            double g = 0;

            for (int i = 3; i < this.parDimension; i++)
            {
                g += Math.Pow(sp[i] - 2, 2);
            }
            obj[0] = (1 + g) * sp[0] / Math.Sqrt(sp[1] * sp[2]);
            obj[1] = (1 + g) * sp[1] / Math.Sqrt(sp[0] * sp[2]);
            obj[2] = (1 + g) * sp[2] / Math.Sqrt(sp[0] * sp[1]);

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 8
0
        public override void Evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            obj[0] = -1 * (25 * Math.Pow(sp[0] - 2, 2) + Math.Pow(sp[1] - 2, 2) + Math.Pow(sp[2] - 1, 2) + Math.Pow(sp[3] - 4, 2) + Math.Pow(sp[4] - 1, 2));
            obj[1] = sp[0] * sp[0] + sp[1] * sp[1] + sp[2] * sp[2] + sp[3] * sp[3] + sp[4] * sp[4] + sp[5] * sp[5];

            chromosome.cneqValue[0] = 2 - sp[0] - sp[1];
            chromosome.cneqValue[1] = sp[0] + sp[1] - 6;
            chromosome.cneqValue[2] = sp[1] - sp[0] - 2;
            chromosome.cneqValue[3] = sp[0] - 3 * sp[1] - 2;
            chromosome.cneqValue[4] = Math.Pow(sp[2] - 3, 2) + sp[3] - 4;
            chromosome.cneqValue[5] = 4 - Math.Pow(sp[4] - 3, 2) - sp[5];



            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 9
0
        protected double techScalarObj(int idx, MoChromosome var, Boolean flag = false)
        {
            double[] namda   = this.Transweights[idx];
            double   max_fun = -1 * Double.MaxValue;

            for (int n = 0; n < numObjectives; n++)
            {
                double diff = 0.0;
                if (flag == true)
                {
                    diff = Math.Abs((var.objectivesValue[n] - idealpoint[n]) / (this.narpoint[n] - this.idealpoint[n]));
                }
                else
                {
                    diff = Math.Abs(var.objectivesValue[n] - idealpoint[n]);
                }
                double feval;
                if (namda[n] == 0)
                {
                    feval = 0.00001 * diff;
                }
                else
                {
                    feval = diff * namda[n];
                }
                if (feval > max_fun)
                {
                    max_fun = feval;
                }
            }
            return(max_fun);
        }
Exemplo n.º 10
0
        public override void Evaluate(MoChromosome chromosome)
        {
            // TODO Auto-generated method stub
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            double[] y;

            y = normalise(sp);
            y = t1(y, k_);
            y = t2(y, k_);
            y = t3(y, k_, M_);

            double[] x = calculate_x(y);
            for (int m = 1; m <= M_ - 1; m++)
            {
                obj[m - 1] = D_ * x[M_ - 1] + S_[m - 1] * (new WFG.Shapes()).convex(x, m);
            }
            obj[M_ - 1] = D_ * x[M_ - 1] + S_[M_ - 1] * (new WFG.Shapes()).disc(x, 5, (double)1.0, (double)1.0);

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 11
0
        public override void evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            // objection function

            double g = 0, ti = 0;

            for (int j = 3; j <= parDimension; j++)
            {
                ti = sp[j - 1] - sp[0] * sp[1];
                g += -0.9 * ti * ti + Math.Pow(Math.Abs(ti), 0.6);
            }
            g = 2 * Math.Sin(Math.PI * sp[0]) * g;

            obj[0] = (1 + g) * Math.Cos(sp[0] * Math.PI / 2) * Math.Cos(sp[1] * Math.PI / 2);
            obj[1] = (1 + g) * Math.Cos(sp[0] * Math.PI / 2) * Math.Sin(sp[1] * Math.PI / 2);
            obj[2] = (1 + g) * Math.Sin(sp[0] * Math.PI / 2);

            //

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 12
0
        public MoChromosome createChromosome(int type = 0) //ref MoChromosome chromosome
        {
            MoChromosome chromosome = new MoChromosome();

            chromosome.parDimension    = this.parDimension;
            chromosome.objectDimension = this.numObjectives;
            chromosome.objectivesValue = new double[this.numObjectives];
            chromosome.domainInfo      = new double[this.parDimension, 2];
            chromosome.ceqValue        = new double[this.ceqNum];
            chromosome.cneqValue       = new double[this.cneqNum];

            //long tick = DateTime.Now.Millisecond;
            //Random random = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
            Random rm = new Random(random.Next());

            if (type == 0)
            {
                chromosome.realGenes = new double[this.parDimension];
                for (int i = 0; i < chromosome.realGenes.Length; i++)
                {
                    chromosome.realGenes[i] = rm.NextDouble();
                }
            }
            else
            {
                chromosome.realBGenes = new int[this.parDimension];
                for (int i = 0; i < chromosome.realGenes.Length; i++)
                {
                    chromosome.realBGenes[i] = rm.Next() % 2;
                }
            }
            return(chromosome);
        }
Exemplo n.º 13
0
        public override void Evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            double f1 = 0, f2 = 0;
            int    cnt1 = 0, cnt2 = 2;

            for (int i = 2; i <= this.parDimension; i++)
            {
                if (i % 2 == 1)
                {
                    f1 += Math.Pow(sp[i - 1] - Math.Sin(6.0 * Math.PI * sp[0] + i * 1.0 * Math.PI / parDimension), 2);
                    cnt1++;
                }
                else
                {
                    f2 += Math.Pow(sp[i - 1] - Math.Sin(6.0 * Math.PI * sp[0] + i * 1.0 * Math.PI / parDimension), 2);
                    cnt2++;
                }
            }
            obj[0] = sp[0] + 2 * f1 / (this.parDimension / 2);
            obj[1] = 1 - Math.Sqrt(sp[0]) + 2 * f2 / (this.parDimension / 2);

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 14
0
        protected void updateNeighbours(int i, MoChromosome offSpring)
        {
            int cnt = 0;

            for (int j = 0; j < this.neighbourSize; j++)
            {
                int          weightindex = neighbourTable[i][j];
                MoChromosome sol         = mainpop[weightindex];

                double d = updateCretia(weightindex, offSpring);
                double e = updateCretia(weightindex, sol);

                if (isCave == true)
                {
                    if (d < e)
                    {
                        offSpring.copyTo(mainpop[weightindex]);
                        cnt++;
                    }
                }
                else
                {
                    if (d > e)
                    {
                        offSpring.copyTo(mainpop[weightindex]);
                        cnt++;
                    }
                }

                if (cnt >= nr)
                {
                    break;
                }
            }
        }
Exemplo n.º 15
0
        public override void evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            obj[0] = (1.0 - Math.Exp(-4.0 * sp[0])
                      * Math.Pow(Math.Sin(6.0 * Math.PI * sp[0]), 6));

            double g = 0, h = 0;

            g = gf(sp);
            h = 1.0 - ((obj[0] / g) * (obj[0] / g));

            obj[1] = g * h;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 16
0
        protected void updatePoint(MoChromosome indiv)
        {
            // update the idealpoint.

            if (P1.f1 > indiv.objectivesValue[0])
            {
                P1.f1 = indiv.objectivesValue[0];
                P1.f2 = indiv.objectivesValue[1];
            }
            if (P2.f2 > indiv.objectivesValue[1])
            {
                P2.f1 = indiv.objectivesValue[0];
                P2.f2 = indiv.objectivesValue[1];
            }
            if (this.ItrCounter > 0.9 * this.TotalItrNum)
            {
                P1.f1 = 0;
                P1.f2 = 1;
                P2.f1 = 1;
                P2.f2 = 0;
            }

            lambda1 = Math.Abs(P1.f1 - P2.f1);
            lambda2 = Math.Abs(P1.f2 - P2.f2);
        }
Exemplo n.º 17
0
        protected double pbiScalarObj(int idx, MoChromosome var, Boolean flag = false)
        {
            double[] namda = this.weights[idx];
            double   lenv = 0, mul = 0;

            for (int i = 0; i < numObjectives; i++)
            {
                if (flag == true)
                {
                    mul += ((var.objectivesValue[i] - this.idealpoint[i]) / (narpoint[i] - idealpoint[i] + 1e-5)) * namda[i];
                }
                else
                {
                    mul += (var.objectivesValue[i] - this.idealpoint[i]) * namda[i];
                }
                lenv += Math.Pow(namda[i], 2);
            }
            double d1 = mul / Math.Sqrt(lenv);

            double d2 = 0;

            for (int i = 0; i < numObjectives; i++)
            {
                if (flag == true)
                {
                    d2 += Math.Pow(((var.objectivesValue[i] - this.idealpoint[i]) / (narpoint[i] - idealpoint[i] + 1e-5)) - d1 * namda[i] / Math.Sqrt(lenv), 2);
                }
                else
                {
                    d2 += Math.Pow(var.objectivesValue[i] - this.idealpoint[i] - d1 * namda[i] / Math.Sqrt(lenv), 2);
                }
            }
            return(d1 + 5 * Math.Sqrt(d2));
        }
Exemplo n.º 18
0
        public override void Evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }


            obj[0] = 1640.2823 + 2.3573285 * sp[0] + 2.3220035 * sp[1] + 4.5688768 * sp[2] + 7.7213633 * sp[3] + 4.4559504 * sp[4];

            obj[1] = 6.5856 + 1.15 * sp[0] - 1.0427 * sp[1] + 0.9738 * sp[2] + 0.8364 * sp[3] - 0.3695 * sp[0] * sp[3] +
                     0.0861 * sp[0] * sp[4] +
                     0.3628 * sp[1] * sp[3] - 0.1106 * sp[0] * sp[0] + 0.3437 * sp[2] * sp[2] + 0.1764 * sp[3] * sp[3];

            obj[2] = -0.0551 + 0.0181 * sp[0] + 0.1024 * sp[1] + 0.0421 * sp[2] - 0.0073 * sp[0] * sp[1] + 0.024 * sp[1] * sp[2] -
                     0.0118 * sp[1] * sp[3] - 0.0204 * sp[2] * sp[3] - 0.008 * sp[2] * sp[4] - 0.0241 * sp[1] * sp[1] +
                     0.0109 * sp[3] * sp[3];

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 19
0
 private Boolean Dominate(MoChromosome mo1, MoChromosome mo2)
 {
     if (mo1.fcd < mo2.fcd && mo1.fpr < mo2.fpr)
     {
         return(true);
     }
     return(false);
 }
Exemplo n.º 20
0
 public double ObjectiveLen(MoChromosome mo)
 {
     double[] arr = new double[this.numObjectives];
     for (int i = 0; i < this.numObjectives; i++)
     {
         arr[i] = mo.objectivesValue[i] - this.idealpoint[i];
     }
     return(Tool.VectorLen(arr));
 }
Exemplo n.º 21
0
 private double[] TranObj(MoChromosome mo)
 {
     double[] v = new double[this.numObjectives];
     for (int i = 0; i < this.numObjectives; i++)
     {
         v[i] = (mo.objectivesValue[i] - this.idealpoint[i]) / (this.narpoint[i] - this.idealpoint[i]);
     }
     return(v);
 }
Exemplo n.º 22
0
 protected void InitialPopulation()
 {
     for (int i = 0; i < this.popsize; i++)
     {
         MoChromosome chromosome = this.CreateChromosome();
         Evaluate(chromosome);
         mainpop.Add(chromosome);
         UpdateReference(chromosome);
     }
 }
Exemplo n.º 23
0
        protected double GetObjSum(MoChromosome mo)
        {
            double sum = 0.0;

            foreach (double e in mo.objectivesValue)
            {
                sum += e;
            }
            return(sum);
        }
Exemplo n.º 24
0
        protected void initialPopulation()
        {
            for (int i = 0; i < this.popsize; i++)
            {
                MoChromosome chromosome = this.createChromosome();

                evaluate(chromosome);
                mainpop.Add(chromosome);
            }
        }
Exemplo n.º 25
0
        protected double wsScalarObj(int idx, MoChromosome var)
        {
            double[] namda = this.weights[idx];
            double   sum   = 0;

            for (int n = 0; n < numObjectives; n++)
            {
                sum += (namda[n]) * (var.objectivesValue[n] - this.idealpoint[n]);
            }
            return(sum);
        }
Exemplo n.º 26
0
        public override void evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            int    count1, count2;
            double prod1, prod2;
            double sum1, sum2, yj, hj, pj;

            sum1   = sum2 = 0.0;
            count1 = count2 = 0;
            prod1  = prod2 = 1.0;

            int    N_       = 2;
            double epsilon_ = 0.1;

            for (int j = 2; j <= this.parDimension; j++)
            {
                yj = sp[j - 1] - Math.Sin(6.0 * Math.PI * sp[0] + j * Math.PI / parDimension);
                pj = Math.Cos(20.0 * yj * Math.PI / Math.Sqrt(j));
                if (j % 2 == 0)
                {
                    sum2  += yj * yj;
                    prod2 *= pj;
                    count2++;
                }
                else
                {
                    sum1  += yj * yj;
                    prod1 *= pj;
                    count1++;
                }
            }
            hj = 2.0 * (0.5 / N_ + epsilon_) * Math.Sin(2.0 * N_ * Math.PI * sp[0]);
            if (hj < 0.0)
            {
                hj = 0.0;
            }

            obj[0] = sp[0] + hj + 2.0 * (4.0 * sum1 - 2.0 * prod1 + 2.0) / (double)count1;
            obj[1] = 1.0 - sp[0] + hj + 2.0 * (4.0 * sum2 - 2.0 * prod2 + 2.0) / (double)count2;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 27
0
        public override void evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            int    j, count1, count2, count3, nx;
            double sum1, sum2, sum3, yj, E;

            E      = 0.1;
            sum1   = sum2 = sum3 = 0.0;
            count1 = count2 = count3 = 0;
            nx     = sp.Length;     // dimension of decision space


            for (j = 3; j <= nx; j++)
            {
                yj = sp[j - 1] - 2.0 * sp[1] * Math.Sin(2.0 * Math.PI * sp[0] + j * Math.PI / nx);
                if (j % 3 == 1)
                {
                    sum1 += yj * yj;
                    count1++;
                }
                else if (j % 3 == 2)
                {
                    sum2 += yj * yj;
                    count2++;
                }
                else
                {
                    sum3 += yj * yj;
                    count3++;
                } // end if/else
            }     // end for
            yj = (1.0 + E) * (1.0 - 4.0 * (2.0 * sp[0] - 1.0) * (2.0 * sp[0] - 1.0));
            if (yj < 0.0)
            {
                yj = 0.0;
            }
            obj[0] = 0.5 * (yj + 2 * sp[0]) * sp[1] + 2.0 * sum1 / (double)count1;
            obj[1] = 0.5 * (yj - 2 * sp[0] + 2.0) * sp[1] + 2.0 * sum2 / (double)count2;
            obj[2] = 1.0 - sp[1] + 2.0 * sum3 / (double)count3;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }
Exemplo n.º 28
0
        double CalculateHypervolumeIndicator(MoChromosome solutionA, MoChromosome solutionB, int d,
                                             double[] maximumValues, double[] minimumValues)
        {
            double a, b, r, max;
            double volume;
            double rho = 2.0;

            r   = rho * (maximumValues[d - 1] - minimumValues[d - 1]);
            max = minimumValues[d - 1] + r;

            a = solutionA.objectivesValue[d - 1];
            if (solutionB == null)
            {
                b = max;
            }
            else
            {
                b = solutionB.objectivesValue[d - 1];
            }

            if (d == 1)
            {
                if (a < b)
                {
                    volume = (b - a) / r;
                }
                else
                {
                    volume = 0;
                }
            }
            else
            {
                if (a < b)
                {
                    volume =
                        CalculateHypervolumeIndicator(solutionA, null, d - 1, maximumValues, minimumValues) * (b
                                                                                                               - a) / r;
                    volume +=
                        CalculateHypervolumeIndicator(solutionA, solutionB, d - 1, maximumValues, minimumValues)
                        * (max - b) / r;
                }
                else
                {
                    volume =
                        CalculateHypervolumeIndicator(solutionA, solutionB, d - 1, maximumValues, minimumValues)
                        * (max - a) / r;
                }
            }

            return(volume);
        }
Exemplo n.º 29
0
        protected double UTechScalarObj(int idx, MoChromosome var)
        {
            double max_fun = -1 * Double.MaxValue;

            double alpha = (double)(this.popsize - idx) * 1d / (this.popsize - 1);

            Common.Point2 r = new Common.Point2();
            r.P_X = alpha * P1.P_X + (1 - alpha) * P2.P_X;
            r.P_Y = alpha * P1.P_Y + (1 - alpha) * P2.P_Y;

            max_fun = Math.Max(lambda2 * (var.objectivesValue[0] - r.P_X), lambda1 * (var.objectivesValue[1] - r.P_Y));
            return(max_fun);
        }
Exemplo n.º 30
0
        public override void Evaluate(MoChromosome chromosome)
        {
            double[] sp  = chromosome.realGenes;
            double[] obj = chromosome.objectivesValue;

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = domain[i, 0] + sp[i] * (domain[i, 1] - domain[i, 0]);
            }

            double[] theta = new double[objDimension - 1];
            double   g     = 0.0;
            int      k     = parDimension - objDimension + 1;

            for (int i = parDimension - k; i < parDimension; i++)
            {
                g += (sp[i] - 0.5) * (sp[i] - 0.5);
            }

            double t = Math.PI / (4.0 * (1.0 + g));

            theta[0] = sp[0] * Math.PI / 2.0;
            for (int i = 1; i < (objDimension - 1); i++)
            {
                theta[i] = t * (1.0 + 2.0 * g * sp[i]);
            }

            for (int i = 0; i < objDimension; i++)
            {
                obj[i] = 1.0 + g;
            }

            for (int i = 0; i < objDimension; i++)
            {
                for (int j = 0; j < objDimension - (i + 1); j++)
                {
                    obj[i] *= Math.Cos(theta[j]);
                }
                if (i != 0)
                {
                    int aux = objDimension - (i + 1);
                    obj[i] *= Math.Sin(theta[aux]);
                } // if
            }     //for

            for (int i = 0; i < this.parDimension; i++)
            {
                sp[i] = (sp[i] - domain[i, 0]) / (domain[i, 1] - domain[i, 0]);
            }
        }