コード例 #1
0
        private void btn_himmelblau_parallel_Click(object sender, EventArgs e)
        {
            int numSwarmsToLaunch = 10;
            Task<SwarmResult>[] taskArr = new Task<SwarmResult>[numSwarmsToLaunch];
            for (int i = 0; i < taskArr.Length; i++)
            {
                taskArr[i] = Task.Factory.StartNew<SwarmResult>(
                    (obj) =>
                    {
                        SwarmSystem ss = new SwarmSystem((int)obj);
                        ss.Intialize();
                        SwarmResult sr = ss.doPSO("Himmelblau");
                        return sr;
                    }, i);
            }

            List<SwarmResult> rList = new List<SwarmResult>();
            Task tskFinal = Task.Factory.ContinueWhenAll(taskArr,
                (tsks) =>
                {
                    Console.Write(tsks.Length.ToString() + " tasks");
                    for (int i = 0; i < tsks.Length; i++)
                        rList.Add(tsks[i].Result);
                }
                );
            tskFinal.Wait();
            rList.Sort();
            dataGridView1.DataSource = rList;
            dataGridView1.Refresh();
            label1.Text = rList[0].ToString();
        }
コード例 #2
0
 private void btn_seq_swarm_Click(object sender, EventArgs e)
 {
     SwarmSystem ss = new SwarmSystem(0);
     ss.Intialize();
     SwarmResult sr = ss.doPSO("Rosenbrock");
     label1.Text = sr.ToString();
 }
コード例 #3
0
        private void voBtnSequentialRosenbrock_Click(object sender, EventArgs e)
        {
            SwarmResult koResult;
            SwarmSystem koSys = new SwarmSystem(0);

            koSys.MInitialize(20, 20);
            koResult            = koSys.MDoPS0( );
            this.voLblBest.Text = koResult.ToString( );
        }
コード例 #4
0
        private void voBtnParallelRosenbrock_Click(object sender, EventArgs e)
        {
            int kiNumSwarms = 10;
            int kiI;

            Task <SwarmResult>[] koTask   = new Task <SwarmResult> [kiNumSwarms];
            List <SwarmResult>   koResult = new List <SwarmResult>( );
            Task koFinal;

            for (kiI = 0; kiI < koTask.Length; kiI++)
            {
                koTask[kiI] = Task.Factory.StartNew <SwarmResult>((aoContext) =>
                {
                    SwarmResult koRes;
                    SwarmSystem koSys = new SwarmSystem(( int )aoContext);
                    koSys.MInitialize(20, 20);
                    koRes = koSys.MDoPS0( );
                    return(koRes);
                }, kiI);
            }

            koFinal = Task.Factory.ContinueWhenAll(koTask, (aoTask) =>
            {
                Console.WriteLine(aoTask.Length.ToString( ) + " tasks");
                for (kiI = 0; kiI < aoTask.Length; kiI++)
                {
                    koResult.Add(aoTask[kiI].Result);
                }
            });

            koFinal.Wait( );
            koResult.Sort( );
            this.voDataGridView.DataSource = koResult;
            this.voDataGridView.Refresh( );
            this.voLblBest.Text = koResult[0].ToString( );
        }
コード例 #5
0
        private void voBtnParallelHimmelblau_Click(object sender, EventArgs e)
        {
            int kiNumSwarms = 80;
            int kiI;

            Task <SwarmResult>[] koTask   = new Task <SwarmResult> [kiNumSwarms];
            List <SwarmResult>   koResult = new List <SwarmResult>( );
            List <SwarmResult>   koUnique = new List <SwarmResult>( );
            Task koFinal;

            for (kiI = 0; kiI < koTask.Length; kiI++)
            {
                koTask[kiI] = Task.Factory.StartNew <SwarmResult>((aoContext) =>
                {
                    SwarmResult koRes;
                    SwarmSystem koSys = new SwarmSystem(( int )aoContext);
                    koSys.MInitialize(6, 6);
                    koRes = koSys.MDoHimmelblau( );
                    return(koRes);
                }, kiI);
            }

            koFinal = Task.Factory.ContinueWhenAll(koTask, (aoTask) =>
            {
                Console.WriteLine(aoTask.Length.ToString( ) + " tasks");
                for (kiI = 0; kiI < aoTask.Length; kiI++)
                {
                    koResult.Add(aoTask[kiI].Result);
                }
            });

            koFinal.Wait( );
            koResult.Sort( );
            koUnique.Add(koResult[0]);
            foreach (SwarmResult koSwarm in koResult)
            {
                bool kbUnique = true;
                foreach (SwarmResult koUSwarm in koUnique)
                {
                    if (koUSwarm.VdValue > 0.5)
                    {
                        kbUnique = false;
                    }
                    else
                    {
                        double kdDist = Math.Sqrt((koSwarm.VdX - koUSwarm.VdX) * (koSwarm.VdX - koUSwarm.VdX) + (koSwarm.VdY - koUSwarm.VdY) * (koSwarm.VdY - koUSwarm.VdY));
                        if (kdDist < 1.00000001)
                        {
                            kbUnique = false;
                        }
                    }
                }
                if (kbUnique)
                {
                    koUnique.Add(koSwarm);
                }
            }
            this.voDataGridView.DataSource = koUnique; // koResult;
            this.voDataGridView.Refresh( );
            this.voLblBest.Text = koResult[0].ToString( );
        }