private string _GetResultForA1() { var result = ""; var clastResult = _result.GetResult(); var objectsInClasters = clastResult.Select(i => i.Value.Claster).GroupBy(i => i, (i, j) => (double)j.Count()).ToList(); double resultValue = objectsInClasters.StdDev(); var scale = FuzzyScaleRepository.ForA1(); var scaleValue = scale.GetAccessory((decimal)resultValue); if (scaleValue.Name == "P13") { result += $"<p>По числу элементов кластеры отличаются сильно (степень истинности {scaleValue.Value:0.00}).</p>"; } else if (scaleValue.Name == "P12") { result += $"<p>По числу элементов кластеры различаются не сильно (степень истинности {scaleValue.Value:0.00}).</p>"; } else if (scaleValue.Name == "P11") { result += $"<p>По числу элементов кластеры практически одинаковы (степень истинности {scaleValue.Value:0.00}).</p>"; } else { throw new ArgumentException(); } return(result); }
private string _GetResultForA2() { var result = "<h2>Подробная характеристика кластеров</h2>"; result += "<p><em>Собранность кластера означает, что значения объектов не выходят за пределы удвоенного среднеквадратического отклонения.</em></p>"; var clastResult = _result.GetResult(); var scale = FuzzyScaleRepository.ForA2(); result += "<ul>"; var clasters = clastResult.Select(i => i.Value.Claster).Distinct().ToList(); foreach (var claster in clasters) { var clastName = ClasterHelper.GetFullName(claster); var clastNum = clastResult.Count(i => i.Value.Claster == claster); var clastValue = clastResult.Where(i => i.Value.Claster == claster).Select(i => (double)i.Value.Points).ToList().StdDev(); var scaleValue = scale.GetAccessory((decimal)clastValue); var clastValueResult = (scaleValue.Name == "P21") ? "собранный" : "разрозненный"; result += $"<li><strong>Кластер {clastName}</strong>. Элементов: {clastNum}, {clastValueResult} (степень истинности {scaleValue.Value:0.00}).</li>"; } result += "</ul>"; return(result); }
private string _GetResultForA5() { var result = "<ul>"; var clastResult = _result.GetResult(); var scale = FuzzyScaleRepository.ForA5(); var rooms = clastResult.Select(i => i.Key.RoomNumber).Distinct().OrderBy(i => i).ToList(); foreach (var room in rooms) { var roomResults = clastResult.Where(i => i.Key.RoomNumber == room); var jCount = roomResults.Count(i => i.Value.Claster == 'J'); var mCount = roomResults.Count(i => i.Value.Claster == 'M'); var sCount = roomResults.Count(i => i.Value.Claster == 'S'); var smCount = mCount != 0 ? (double)sCount / mCount : 0.0; var sjCount = jCount != 0 ? (double)sCount / jCount : 0.0; var mjCount = jCount != 0 ? (double)mCount / jCount : 0.0; var roomValue = smCount + sjCount + mjCount; var roomValueResult = ""; var scaleValue = scale.GetAccessory((decimal)roomValue); if (scaleValue.Name == "P54") { roomValueResult = "крайне комфортная"; } else if (scaleValue.Name == "P53") { roomValueResult = "комфортная"; } else if (scaleValue.Name == "P52") { roomValueResult = "не комфортная"; } else if (scaleValue.Name == "P51") { roomValueResult = "крайне не комфортная"; } else { throw new ArgumentException(); } result += $"<li><strong>Комната {room}</strong>. Заполненность кабинета: {roomValueResult} (степень истинности: {scaleValue.Value:0.00}).</li>"; } result += "</ul>"; return(result); }
private string _GetResultForA3() { string result = "<h2>Уровень разработки в кластере</h2><table border=\"1\"><tr><th>Кластер</th>"; foreach (var key in _results.Select(d => d.Key).Distinct().OrderBy(d => d).Skip(1)) { result += $"<th>{key.ToString("MMMM yyyy")}</th>"; } result += "</tr>"; var scale = FuzzyScaleRepository.ForA3(); foreach (var pair in _temporaryResults) { result += $"<tr><td>{Helpers.ClasterHelper.GetFullName(pair.Key)}</td>"; foreach (var item in pair.Value.OrderBy(d => d.Month).Skip(1).Select((value, index) => new { index, value })) { var beforeItem = pair.Value[item.index]; var value = item.value.A3_Value - beforeItem.A3_Value; var absValue = Math.Abs(value); var stringValue = string.Empty; var scaleValue = scale.GetAccessory((decimal)value); if (scaleValue.Name == "P33") { stringValue = "стабильность"; } else if (scaleValue.Name == "P35") { stringValue = "сильный рост"; } else if (scaleValue.Name == "P31") { stringValue = "сильное падение"; } else if (scaleValue.Name == "P34") { stringValue = "слабый рост"; } else if (scaleValue.Name == "P32") { stringValue = "слабое падение"; } else { throw new ArgumentException(); } int cValueCount = 0, allCnt = 0; for (int i = 0; i < item.value.A3_Values.Count(); i++) { try { var cValue = item.value.A3_Values[i] - beforeItem.A3_Values[i]; var csacleValue = scale.GetAccessory((decimal)cValue); if (scaleValue.Name == csacleValue.Name) { cValueCount++; } allCnt++; } catch { } } var tendation = "распределено равномерно"; if (1.0 * cValueCount / allCnt > 0.5) { tendation = "типичная тенденция"; } result += $"<td>{stringValue}<br/><small>(с.и.: {scaleValue.Value:0.00})<br/>{tendation}</small></td>"; } result += "</tr>"; } result += "</table>"; return(result); }
private void graphA5Panel_Paint(object sender, PaintEventArgs e) { var scale = FuzzyScaleRepository.ForA5(); DrawGraph(scale, e.Graphics); }