private void UpdateData_Click(object sender, RoutedEventArgs e) { var collection = myListBox.SelectedItems; guids.Clear(); foreach (var pair in collection) { PairRelation newpair = pair as PairRelation; if (newpair != null) { guids.Add(newpair.Key1.ToString()); } } LoadInitialData(false); }
protected double GetThreshold(List<double[]> wt) { //double min = Double.MaxValue; //for(int i = 0; i < wt.Count(); i++) //{ // for(int j = i + 1; j < wt.Count; j++) // { // double tp = distance(wt[i], wt[j]); // if (min > tp) min = tp; // } //} double[] center = new double[this.numObjectives]; for (int i = 0; i < this.numObjectives; i++) center[i] = 1.0 / this.numObjectives; PairRelation[] pr = new PairRelation[wt.Count]; for(int i = 0;i < wt.Count; i++) { pr[i] = new PairRelation(i, -1); } for(int i = 0;i < wt.Count; i++) { pr[i].val = Distance(center, wt[i]); } Array.Sort(pr); int len = pr.Length - 1; double[] ct = new double[this.numObjectives]; for (int i = 0; i < this.numObjectives; i++) ct[i] = 0.0; for(int i = 0;i < this.numObjectives; i++) { for(int j = 0;j < this.numObjectives; j++) { ct[j] += wt[pr[len - i].pos][j]; } } for (int i = 0; i < this.numObjectives; i++) ct[i] /= this.numObjectives; return Distance(ct, wt[pr[len-0].pos]); }
private void Associate(ref Boolean[] flag, ref List <MoChromosome> result, ref List <MoChromosome> Fl) { if (result.Count == 0) { //List<MoChromosome> li = Fl.OrderBy(r => r.fitnessValue).ToList(); for (int i = 0; i < this.numObjectives; i++) { double min = 10; int pos = -1; for (int j = 0; j < Fl.Count; j++) { double tp = Tool.GetAngle(TranObj(Fl[j]), unitVec[i]); if (tp < min) { min = tp; pos = j; } } result.Add(Fl[pos]); flag[pos] = false; } PairRelation[] li = new PairRelation[Fl.Count]; for (int i = 0; i < li.Length; i++) { li[i] = new PairRelation(i, Fl[i].fitnessValue); } li = li.OrderBy(r => r.val).ToArray(); int cnt = 0; while (result.Count < 2 * this.numObjectives) { if (flag[li[cnt].pos] == false) { result.Add(Fl[li[cnt].pos]); flag[li[cnt].pos] = true; } cnt++; } } for (int i = 0; i < Fl.Count; i++) { if (flag[i] == true) { continue; } double minA = Double.MaxValue; int pos = -1; for (int j = 0; j < result.Count; j++) { double tp = Tool.GetAngle(TranObj(result[j]), TranObj(Fl[i])); if (tp < minA) { minA = tp; pos = j; } } Fl[i].angle = minA; Fl[i].subProbNo = pos; } }
protected void EnviromentSelection(List <MoChromosome> pop) { mainpop.Clear(); if (GlobalValue.IsNormalization) { UpdateNadirPoint(NSGA.NonDominatedSolutions(pop)); } List <List <PairRelation> > aggr = new List <List <PairRelation> >(); for (int i = 0; i < popsize; i++) { List <PairRelation> li = new List <PairRelation>(); for (int j = 0; j < pop.Count(); j++) { PairRelation pair = new PairRelation(j, updateCretia(i, pop[j])); li.Add(pair); } aggr.Add(li); } for (int i = 0; i < popsize; i++) { aggr[i] = aggr[i].OrderBy(r => r.val).ToList(); } List <MoChromosome> result = new List <MoChromosome>(); int cnt = 0; for (int i = 0; i < popsize; i++) { for (int j = 0; j < pop.Count(); j++) { if (j >= topK) { break; } if (pop[aggr[i][j].pos].selected != true) { mainpop.Add(pop[aggr[i][j].pos]); pop[aggr[i][j].pos].selected = true; //pop[aggr[i][j].pos].crdistance = dist(pop.get(aggr[i][j].pos)); if (j == 0) { cnt++; } result.Add(pop[aggr[i][j].pos]); //cnt++; break; } } } if (result.Count() != popsize) { int[] count = new int[popsize]; for (int i = 0; i < popsize; i++) { count[i] = 0; } for (int i = 0; i < result.Count(); i++) { double min = Double.MaxValue; int pos = -1; double temp = 0; for (int j = 0; j < popsize; j++) { temp = this.GetAngle(j, result[i], GlobalValue.IsNormalization); //getAngle1 if (temp < min) { min = temp; pos = j; } } Distance(this.idealpoint, this.narpoint); result[i].angle = min; count[pos]++; } List <int> minPos = new List <int>(); while (result.Count() < popsize) { minPos.Clear(); int min = count[0]; minPos.Add(0); for (int i = 1; i < popsize; i++) { if (count[i] < min) { min = count[i]; minPos.Clear(); minPos.Add(i); } else if (count[i] == min) { minPos.Add(i); } } int pos = minPos[random.Next(minPos.Count())]; double valmin = Double.MaxValue; int _pos = -1; for (int i = 0; i < pop.Count(); i++) { if (pop[i].selected == true) { continue; } double tp = this.GetAngle(pos, pop[i], GlobalValue.IsNormalization); //getAngle1 if (tp < valmin) { valmin = tp; _pos = i; } } count[pos]++; pop[_pos].selected = true; pop[_pos].angle = valmin; result.Add(pop[_pos]); } } mainpop.Clear(); mainpop.AddRange(result); for (int i = 0; i < popsize; i++) { mainpop[i].selected = false; } }