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);
        }
Esempio n. 2
0
        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]);
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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;
            }
        }