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); }
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]); } }
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]); } }
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]); } }
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]); } }
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); }
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]); } }
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]); } }
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); }
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]); } }
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]); } }
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); }
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]); } }
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; } } }
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]); } }
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); }
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)); }
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]); } }
private Boolean Dominate(MoChromosome mo1, MoChromosome mo2) { if (mo1.fcd < mo2.fcd && mo1.fpr < mo2.fpr) { return(true); } return(false); }
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)); }
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); }
protected void InitialPopulation() { for (int i = 0; i < this.popsize; i++) { MoChromosome chromosome = this.CreateChromosome(); Evaluate(chromosome); mainpop.Add(chromosome); UpdateReference(chromosome); } }
protected double GetObjSum(MoChromosome mo) { double sum = 0.0; foreach (double e in mo.objectivesValue) { sum += e; } return(sum); }
protected void initialPopulation() { for (int i = 0; i < this.popsize; i++) { MoChromosome chromosome = this.createChromosome(); evaluate(chromosome); mainpop.Add(chromosome); } }
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); }
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]); } }
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]); } }
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); }
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); }
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]); } }