/// <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(); }
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()); }
/// <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(); }
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()); }
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()); }
/// <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); }
/// <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("Решения найдены"); } }