Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        private void graphA5Panel_Paint(object sender, PaintEventArgs e)
        {
            var scale = FuzzyScaleRepository.ForA5();

            DrawGraph(scale, e.Graphics);
        }