コード例 #1
0
        /// <summary>
        /// Подстановка данных из перебора и вычисление решения
        /// </summary>
        /// <param name="_n">Массив индексов решений из А2</param>
        /// <param name="f">Файл для записей логов</param>
        private void GetSolution(List <int> _n)
        {
            var tempA = CopyMatrix(_a);

            for (var j = 0; j < _countType; j++)
            {
                if (_n[j] >= 0)
                {
                    tempA[j] = CopyVector(SetTempAFromA2(j, _n[j])[j]);
                }
            }
            var shedule = new Shedule(tempA);

            shedule.ConstructShedule();
            var r    = shedule.RetyrnR();
            var sets = new Sets(Form1.compositionSets, Form1.timeSets);

            sets.GetSolution(r);
            var time = sets.GetNewCriterion(Form1.direct);
            var s    = PrintA(tempA);

            //f.Write(s + " - " + fBuf);
            //MessageBox.Show(s + " Время обработки " + fBuf);
            if (time < _f1Buf)
            {
                _abuf             = CopyMatrix(tempA);
                _typeSolutionFlag = true;
                _f1Buf            = time;
                //file.Write(" +");
            }
            //f.WriteLine();
        }
コード例 #2
0
ファイル: GAA.cs プロジェクト: sasha2567/diplom-magister
        public int calcSetsFitnessList(bool directedTime, decimal GenerationCount, int countHromos = 50)
        {
            var flagmanHromosom = new List <List <int> >();


            for (var i = 0; i < _countType; i++)
            {
                flagmanHromosom.Add(new List <int> {
                    _n - 2, 2
                });
            }


            var        r           = ToArrayList();
            var        test        = new Sets(Form1.compositionSets, Form1.timeSets);
            var        FitnessList = new List <int>();
            List <int> CountTime   = new List <int>();

            for (int i = 0; i < GenerationCount + 1; i++)
            {
                this.SetXrom(countHromos);
                r = ToArrayList();
                r.Add(flagmanHromosom);
                foreach (var elem in r)
                {
                    var shedule = new Shedule(elem);
                    shedule.ConstructShedule();
                    test.GetSolution(shedule.RetyrnR());
                    CountTime.Add(test.GetNewCriterion(directedTime));
                }
            }

            return(CountTime.ToArray().Min());
        }
コード例 #3
0
        /// <summary>
        /// Подстановка данных из перебора и вычисление решения
        /// </summary>
        /// <param name="_n">Массив индексов решений из А2</param>
        /// <param name="f">Файл для записей логов</param>
        private void GetSolution(List <int> _n, StreamWriter f)
        {
            var tempA = CopyMatrix(_a);

            for (var j = 0; j < _countType; j++)
            {
                if (_n[j] >= 0)
                {
                    tempA[j] = CopyVector(SetTempAFromA2(j, _n[j])[j]);
                }
            }
            var shedule = new Shedule(tempA);

            shedule.ConstructShedule();
            var fBuf = shedule.GetTime();
            var s    = PrintA(tempA);

            //f.Write(s + " - " + fBuf);
            //MessageBox.Show(s + " Время обработки " + fBuf);
            if (fBuf < _f1Buf)
            {
                _abuf             = CopyMatrix(tempA);
                _typeSolutionFlag = true;
                _f1Buf            = fBuf;
                //file.Write(" +");
            }
            //f.WriteLine();
        }
コード例 #4
0
ファイル: GAA.cs プロジェクト: sasha2567/diplom-magister
        public int[] calcGAFitnessList()
        {
            var        r              = ToArrayList();
            List <int> CountTime      = new List <int>();
            var        FitnessList    = new List <int>();
            var        GaaSecondLevel = new GaaSecondLevel();

            foreach (var elem in r)
            {
                var listint = new List <Shedule>();
                for (var i = 0; i < 50; i++)
                {
                    var shedule = new Shedule(GaaSecondLevel.GetGaaSecondLevelGroup(elem));
                    shedule.ConstructShedule();
                    listint.Add(shedule);
                }
                var timelist = listint.Select(list => list.GetTime());
                FitnessList.Add(timelist.Min());
            }
            _fitnesslist = FitnessList;
            return(CountTime.ToArray());
        }
コード例 #5
0
        public int[] calcFitnessList()
        {
            List <int> FitnessList = new List <int>();
            var        r           = this.ToArrayList();

            int[] ni   = { 8, 12, 16 /*, 24, 32 */ };
            int[] time = { 2, 4, 8, 16, 32 };
            int[] l    = { 5, 10 };
            int[] n    = { 5, 10 };
            int[,] compositionSetsForType =
            {
                { 2, 2, 0, 2, 2, 0, 0, 0, 0, 0 },
                { 2, 0, 2, 2, 2, 0, 0, 0, 0, 0 },
                { 0, 2, 2, 2, 2, 0, 0, 0, 0, 0 },
                { 2, 2, 2, 0, 2, 0, 0, 0, 0, 0 },
                { 2, 2, 2, 2, 0, 0, 0, 0, 0, 0 }
            };

            var CompositionSets = new List <List <int> >();
            var TimeSets        = new List <List <int> >();

            TimeSets.Add(new List <int>());
            TimeSets[0].Add(65);
            TimeSets[0].Add(70);
            TimeSets.Add(new List <int>());
            TimeSets[1].Add(70);
            TimeSets[1].Add(75);
            TimeSets.Add(new List <int>());
            TimeSets[2].Add(65);
            TimeSets[2].Add(75);
            TimeSets.Add(new List <int>());
            TimeSets[3].Add(75);
            TimeSets[3].Add(80);
            TimeSets.Add(new List <int>());
            TimeSets[4].Add(70);
            TimeSets[4].Add(75);
            for (int i = 0; i < 5; i++)
            {
                CompositionSets.Add(new List <int>());
                for (int j = 0; j < 10; j++)
                {
                    CompositionSets[i].Add(compositionSetsForType[i, j]);
                }
            }

            var        test           = new Sets(CompositionSets, TimeSets);
            List <int> CountKit       = new List <int>();
            var        GaaSecondLevel = new GaaSecondLevel();

            foreach (var elem in r)
            {
                var listint = new List <Shedule>();
                for (var i = 0; i < 50; i++)
                {
                    var shedule = new Shedule(GaaSecondLevel.GetGaaSecondLevelGroup(elem));
                    shedule.ConstructShedule();
                    listint.Add(shedule);
                }
                var timelist = listint.Select(list => list.GetTime());
                FitnessList.Add(timelist.Min());
                test.GetSolution(listint[timelist.ToList().IndexOf(timelist.Min())].RetyrnR());
                CountKit.Add(test.GetCriterion());
            }
            _fitnesslist = FitnessList;
            return(CountKit.ToArray());
        }
コード例 #6
0
        /// <summary>
        /// Алгоритм формирования решения по составам паритй всех типов данных
        /// </summary>
        public int[] GenetateSolutionForAllTypesSecondAlgorithm()
        {
            var sets   = new Sets(Form1.compositionSets, Form1.timeSets);
            var result = new[] { 0, 0 };

            //using (var f = new StreamWriter("standartOutData.txt", true))
            {
                GenerateStartSolution();
                var shedule = new Shedule(_a);
                shedule.ConstructShedule();
                var r = shedule.RetyrnR();
                sets.GetSolution(r);
                var time = sets.GetNewCriterion(Form1.direct);
                var _f1  = time;
                _f1Buf    = _f1;
                result[0] = _f1Buf;
                var maxA = CopyMatrix(_a);
                _typeSolutionFlag = true;
                if (!_staticSolution)
                {
                    while (CheckType(_i))
                    {
                        // Буферезируем текущее решение для построение нового на его основе
                        _ai = CopyMatrix(_a);
                        if (_typeSolutionFlag)
                        {
                            _a1 = new List <List <List <int> > >();
                            for (var i = 0; i < _countType; i++)
                            {
                                _a1.Add(new List <List <int> >());
                                _a1[i].Add(new List <int>());
                                _a1[i][0] = CopyVector(_a[i]);
                            }
                            _typeSolutionFlag = false;
                        }

                        var tempA = CopyMatrix(_ai);
                        _abuf  = CopyMatrix(_ai);
                        _f1Buf = _f1;

                        // Для каждого типа и каждого решения в типе строим новое решение и проверяем его на критерий
                        _a2 = new List <List <List <int> > >();
                        string s;
                        for (var i = 0; i < _countType; i++)
                        {
                            _a2.Add(new List <List <int> >());
                            if (_i[i] <= 0)
                            {
                                continue;
                            }
                            _a2[i] = NewData(i);
                            for (var j = 0; j < _a2[i].Count; j++)
                            {
                                tempA   = SetTempAFromA2(i, j);
                                shedule = new Shedule(tempA);
                                shedule.ConstructShedule();
                                r    = shedule.RetyrnR();
                                sets = new Sets(Form1.compositionSets, Form1.timeSets);
                                sets.GetSolution(r);
                                time = sets.GetNewCriterion(Form1.direct);
                                s    = PrintA(tempA);
                                //f.Write(s + " - " + time);
                                if (time < _f1Buf)
                                {
                                    _abuf             = CopyMatrix(tempA);
                                    _typeSolutionFlag = true;
                                    _f1Buf            = time;
                                }
                                //f.WriteLine();
                            }
                        }
                        if (!_typeSolutionFlag)
                        {
                            List <int> _n = new List <int>();
                            _nTemp = new List <int>();
                            for (int i = 0; i < _countType; i++)
                            {
                                _nTemp.Add(0);
                                _n.Add(_a2[i].Count);
                                if (_n[i] == 0)
                                {
                                    _n[i] = -1;
                                }
                            }
                            GenerateCombination(0, _nTemp);
                        }
                        if (_typeSolutionFlag)
                        {
                            _a  = CopyMatrix(_abuf);
                            _f1 = _f1Buf;
                        }
                        else
                        {
                            for (int i = 0; i < _countType; i++)
                            {
                                _a1[i] = CopyMatrix(_a2[i]);
                                if (!_a1[i].Any() || !_a1[i][0].Any())
                                {
                                    _i[i] = 0;
                                }
                            }
                        }
                        //f.WriteLine("------------------");
                    }
                }
                result[1] = _f1;
                //f.Close();
            }
            return(result);
        }
コード例 #7
0
        /// <summary>
        /// Алгоритм формирования решения по составам паритй всех типов данных
        /// </summary>
        public void GenetateSolutionForAllTypes(string fileName)
        {
            using (var file = new StreamWriter(fileName))
            {
                GenerateStartSolution();
                var shedule = new Shedule(_a);
                shedule.ConstructShedule();
                _f1 = shedule.GetTime();
                //MessageBox.Show(PrintA(A) + " Время обработки " + f1);
                _f1Buf = _f1;
                file.WriteLine(_f1Buf);
                var maxA = CopyMatrix(_a);
                _typeSolutionFlag = true;
                if (!_staticSolution)
                {
                    while (CheckType(_i))
                    {
                        // Буферезируем текущее решение для построение нового на его основе
                        _ai = CopyMatrix(_a);
                        if (_typeSolutionFlag)
                        {
                            _a1 = new List <List <List <int> > >();
                            for (var i = 0; i < _countType; i++)
                            {
                                _a1.Add(new List <List <int> >());
                                _a1[i].Add(new List <int>());
                                _a1[i][0] = CopyVector(_a[i]);
                            }
                            _typeSolutionFlag = false;
                        }

                        var tempA = CopyMatrix(_ai);
                        _abuf  = CopyMatrix(_ai);
                        _f1Buf = _f1;

                        // Для каждого типа и каждого решения в типе строим новое решение и проверяем его на критерий
                        _a2 = new List <List <List <int> > >();
                        string s;
                        //file.WriteLine("окрестность 1 вида");
                        for (var i = 0; i < _countType; i++)
                        {
                            _a2.Add(new List <List <int> >());
                            if (_i[i] <= 0)
                            {
                                continue;
                            }
                            _a2[i] = NewData(i);
                            for (var j = 0; j < _a2[i].Count; j++)
                            {
                                tempA           = SetTempAFromA2(i, j);
                                !!!!!!!!shedule = new Shedule(tempA);
                                shedule.ConstructShedule();
                                var fBuf = shedule.GetTime();
                                s = PrintA(tempA);
                                //file.Write(s + " " + fBuf);
                                //MessageBox.Show(s + " Время обработки " + fBuf);
                                if (fBuf < _f1Buf)
                                {
                                    _abuf             = CopyMatrix(tempA);
                                    _typeSolutionFlag = true;
                                    _f1Buf            = fBuf;
                                    //file.Write(" +");
                                }
                                //file.WriteLine();
                            }
                        }
                        if (!_typeSolutionFlag)
                        {
                            //file.WriteLine("комбинации типов");
                            for (var i = 0; i < _countType - 1; i++)
                            {
                                if (_i[i] <= 0)
                                {
                                    continue;
                                }
                                for (var j = i + 1; j < _countType; j++)
                                {
                                    if (_i[j] <= 0)
                                    {
                                        continue;
                                    }
                                    _a2[i] = NewData(i);
                                    _a2[j] = NewData(j);
                                    for (var ii = 0; ii < _a2[i].Count; ii++)
                                    {
                                        for (var jj = 0; jj < _a2[j].Count; jj++)
                                        {
                                            {
                                                tempA               = SetTempAFromA2(i, ii);
                                                tempA[j]            = CopyVector(SetTempAFromA2(j, jj)[j]);
                                                !!!!!!!!!!!!shedule = new Shedule(tempA);
                                                shedule.ConstructShedule();
                                                var fBuf = shedule.GetTime();
                                                s = PrintA(tempA);
                                                //file.Write(s + " " + fBuf);
                                                //MessageBox.Show(s + " Время обработки " + fBuf);
                                                if (fBuf < _f1Buf)
                                                {
                                                    _abuf             = CopyMatrix(tempA);
                                                    _typeSolutionFlag = true;
                                                    _f1Buf            = fBuf;
                                                    //file.Write(" +");
                                                }
                                                //file.WriteLine();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if (_typeSolutionFlag)
                        {
                            //MessageBox.Show("Лучшее решение "+PrintA(Abuf) + " Время обработки " + f1Buf);
                            _a  = CopyMatrix(_abuf);
                            _f1 = _f1Buf;
                        }
                        else
                        {
                            for (int i = 0; i < _countType; i++)
                            {
                                _a1[i] = CopyMatrix(_a2[i]);
                                if (!_a1[i].Any() || !_a1[i][0].Any())
                                {
                                    _i[i] = 0;
                                }
                            }
                        }
                    }
                }
                file.WriteLine(_f1);
                file.Close();
                //MessageBox.Show("Решения найдены");
            }
        }