Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102

Многокритериальный выбор компаний на основе нечеткого выбора

16.05.2014, 16:23. Показов 3449. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день господа! у меня такая задача, есть некоторые критерии = альтернативы их порядком штук 14, которые имеют значения от 0 до 2 некоторые от 0 до 1, может подскажете мне нужно разработать приложение для выбора наилучшей компании на основе оценки этих критериев.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2014, 16:23
Ответы с готовыми решениями:

Многокритериальный поиск
Приветствую всех! Необходимо выполнить поиск по выбранным значениям. Можно сделать конечно через if, но куча запросов это на мой взгляд...

Многокритериальный поиск по БД
Всем доброго вечера! Прошу помощи в организации поиска по бд по нескольким условиям.. При моем "знании" синтаксиса VBA я...

Формирование таблицы (в датагриде) на основе выбора пользователя
Доброго времени суток! Подскажите, пожалуйста, начинающему где и что искать по теме. Имеется некая база данных MS SQL, содержащая сведения...

18
Заблокирован
16.05.2014, 16:26
Использутей корреляционный анализ или же кластерный.
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
16.05.2014, 16:52  [ТС]
оо еще бы знать это, по идее в Matlab есть уэе готовая прога тока я не знаю как внедрить ее и откуда скачать сам matlab(
0
9 / 9 / 2
Регистрация: 11.12.2013
Сообщений: 30
16.05.2014, 18:43
с рутрекера, там есть подробное описание по установке
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
16.05.2014, 18:54  [ТС]
ок, благодарю
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.05.2014, 19:35
Ali002, лол что? Парето-оптимальность обычная, пишется программа за 10 минут максимум:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using System;
using System.Windows.Forms;
 
namespace SysAnal3
{
    public partial class Form1 : Form
    {
        private const int N = 8, M = 5;
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            gridview.RowCount = N;
 
        }
 
 
        private void CalculateButton_Click(object sender, EventArgs e)
        {
            outputTextBox.Text = traceTextBox.Text = "";
            try
            {
                var g = new int[N];
                int m = 1;
                for (int i = 0; i < M; i++)
                    for (int j = 0; j < N; j++)
                        gridview[i, j].Value = gridview[i, j].Value.ToString().Replace('.', ',');
                for (int i = 0; i < N - 1; i++)
                    for (int k = 0; k < N - 1; k++)
                        if ((i < k) &&
                            (double.Parse(gridview[0, i].Value.ToString()) <=
                             double.Parse(gridview[0, k].Value.ToString())) &&
                            (double.Parse(gridview[1, i].Value.ToString()) <=
                             double.Parse(gridview[1, k].Value.ToString())) &&
                            (double.Parse(gridview[2, i].Value.ToString()) <=
                             double.Parse(gridview[2, k].Value.ToString())) &&
                            (double.Parse(gridview[3, i].Value.ToString()) <=
                             double.Parse(gridview[3, k].Value.ToString())) &&
                            (double.Parse(gridview[4, i].Value.ToString()) <=
                             double.Parse(gridview[4, k].Value.ToString())))
                            if ((i < k) &&
                                (double.Parse(gridview[0, i].Value.ToString()) <
                                 double.Parse(gridview[0, k].Value.ToString())) &&
                                (double.Parse(gridview[1, i].Value.ToString()) <
                                 double.Parse(gridview[1, k].Value.ToString())) &&
                                (double.Parse(gridview[2, i].Value.ToString()) <
                                 double.Parse(gridview[2, k].Value.ToString())) &&
                                (double.Parse(gridview[3, i].Value.ToString()) <
                                 double.Parse(gridview[3, k].Value.ToString())) &&
                                (double.Parse(gridview[4, i].Value.ToString()) <
                                 double.Parse(gridview[4, k].Value.ToString())))
                            {
                                bool b = true;
                                for (int j = 1; j <= N; j++)
                                    if (g[j - 1] == i + 1)
                                    {
                                        b = false;
                                        break;
                                    }
                                traceTextBox.Text += (k + 1) + " доминирует над " + (i + 1) + "\r\n";
                                if (b)
                                    g[m++] = i + 1;
                            }
                for (int i = 0; i < N - 1; i++)
                    for (int k = 0; k < N - 1; k++)
                        if ((i < k) &&
                            (double.Parse(gridview[0, i].Value.ToString()) >=
                             double.Parse(gridview[0, k].Value.ToString())) &&
                            (double.Parse(gridview[1, i].Value.ToString()) >=
                             double.Parse(gridview[1, k].Value.ToString())) &&
                            (double.Parse(gridview[2, i].Value.ToString()) >=
                             double.Parse(gridview[2, k].Value.ToString())) &&
                            (double.Parse(gridview[3, i].Value.ToString()) >=
                             double.Parse(gridview[3, k].Value.ToString())) &&
                            (double.Parse(gridview[4, i].Value.ToString()) >=
                             double.Parse(gridview[4, k].Value.ToString())))
                            if ((i < k) &&
                                (double.Parse(gridview[0, i].Value.ToString()) >
                                 double.Parse(gridview[0, k].Value.ToString())) &&
                                (double.Parse(gridview[1, i].Value.ToString()) >
                                 double.Parse(gridview[1, k].Value.ToString())) &&
                                (double.Parse(gridview[2, i].Value.ToString()) >
                                 double.Parse(gridview[2, k].Value.ToString())) &&
                                (double.Parse(gridview[3, i].Value.ToString()) >
                                 double.Parse(gridview[3, k].Value.ToString())) &&
                                (double.Parse(gridview[4, i].Value.ToString()) >
                                 double.Parse(gridview[4, k].Value.ToString())))
                            {
                                bool b = true;
                                for (int j = 1; j <= N; j++)
                                    if (g[j - 1] == k + 1)
                                    {
                                        b = false;
                                        break;
                                    }
                                traceTextBox.Text += (k + 1) + " доминирует над " + (i + 1) + "\r\n";
                                if (b)
                                    g[m++] = k + 1;
                            }
                for (int j = 1; j <= N; j++)
                {
                    bool b = true;
                    for (int k = 1; k < N - 1; k++)
                        if (j == g[k - 1])
                        {
                            b = false;
                            break;
                        }
                    if (b)
                        outputTextBox.Text += j + " ";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
Добавлено через 23 секунды
извиняюсь за говнокод, писалось на коленке за 10 минут.
Вложения
Тип файла: rar Sis_analiz_3_2.rar (583.5 Кб, 103 просмотров)
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
17.05.2014, 00:27  [ТС]
Огромное спасибо за код, только я не совсем уверен это сравнение на основе не чёткого вывода? Именно альтернативы, нахождение максиминного значения, матрица?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.05.2014, 11:28
Ali002, почитайте про Паретто-оптимальность. Это множество оптимальных альтернатив, если у вас нет скалярной свертки векторного критерия оптимизации, то выбрать из этих альтернатив компьютер не сможет. Как правило, человеку предоставляется уже это множество, а из него он выбирает то, что ему больше нравится.
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
17.05.2014, 22:12  [ТС]
хмм ваш вариант весьма привлекателен, но у меня чуть другая задача -Многокритериальный выбор методом максимннной свертки( вот все данные по моей задаче только я функцию принадлежности не знаю как расчитать откуда взять ееМножество критериев оценки следующие.rar
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
17.05.2014, 22:20  [ТС]
тока там в моей файле я не правильно обозначил там есть X1- первая группа критериев и X2 -вторая группа критериев.По сути X1 и X2 в конечном счете складутся и на этом основании уже будет оценка компаний
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.05.2014, 00:40
Ali002, ну так значит у вас свертка есть и все вообще элементарно обычная задача оптимизации , например покоординатным спуском
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
18.05.2014, 09:41  [ТС]
А можно по подробнее об этом спуске. Примерно как будет выглядеть
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.05.2014, 14:18
http://ru.wikipedia.org/wiki/%... B.D1.8F.29
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
18.05.2014, 19:45  [ТС]
Что то я запутался(, а вы не подскажите как расчитать μ - функцию принадлежности?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.05.2014, 20:39
Ali002, считай сумму квадратов.
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
18.05.2014, 21:55  [ТС]
Извиняюсь за глупый вопрос, но не могли бы вы мне предоставить/объяснить ваше видение моей задачи, просто у меня складывается двоякое впечатление то ли я вообще делаю, начинал с нечеткостей а теперь оптимизация? суть задачи же в экспертной оценке на основе нечеткой логики, выбор наилучшей альтернативы путем вычислений на основе максиминной свертки
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.05.2014, 22:19
Ali002, у вас заданна максиминная свертка - то есть сущестует скалярная свертка векторного критерия. Конечно, я ТПР уже давно и прочно забыл Но насколько я понимаю, у вас просто есть N-мерная функция - ваши нечеткие параметры. Целевая функция - сумма квадратов максиминов. То есть для каждого критерия на каждом шаге считаем максимин, после этого все эти максимины возводим в квадрат и суммируем. Получаем квадрат длины вектора в N-мерном пространстве (теорема Пифагора a2 + b2 = c2, только обобщаем на N-мерный случай, в вашем случае - 14-мерный). А его можно уже использовать как целевую функцию, которую устремляем в -> min или max. Варьируя параметры с помощью того же покоординатного спуска и анализируя значения целевой функции можно получить параметры, дающие экстремальное значение функции.

Такое мое виденье.
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
18.05.2014, 22:31  [ТС]
Хмм, несколько иначе, есть некие Альтернативы - n-ное количство, и есть критерии по которым эти альтернативы будут сравниваться, для каждой альтернативы расчитывается функция принадлежности μ, допустим есть 5 альтернатив для которых расчитаны значения функций принадлежности, которые берутся из графиков на рисунках есть графики и пояснения

я свои расчеты делала по этому примеру, у меня несколько отличается но все же суть одна и таже, только вот в программной реализации я ноль, нашел код только он на ява а увы я яву не знаю http://habrahabr.ru/post/136160/
Миниатюры
Многокритериальный выбор компаний на основе нечеткого выбора  
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
19.05.2014, 11:54  [ТС]
Я вот тут очень упростил решение моей задачи и оно сводится только к тому чтобы написать правила с выводами для каждого критерия и при расчете рейтинга компаний методом обычного слодения и перемножения значений критериев чтобы эти правила выводились сообщением, а вот как это программно реализовать подскажите пожалуйста?Множество критериев оценки следующие.rar
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2014, 11:54
Помогаю со студенческими работами здесь

Вывод данных в label на основе выбора значений из combobox
Всем привет, подскажите каким способом можно это реализовать? У меня на форме есть combobox, который получает данных из таблицы БД SQL....

Выпадающий список на основе предыдущего выбора из выпадающего списка
Помогите пожалуйста. Есть таблица с отделениями (Список реанимаций), есть таблица с фамилиями врачей, работающих в этих отделениях. ...

Создать алгоритм выбора на основе возвращаемого значения MsgBox
Помогите. В школе задали по информатике создать программу в Visual Basic, но я работаю в Visual Studio 2008. Программа состоит из ListBox и...

Как Суммировать Значения На Основе Выбора Раскрывающихся Списков
Доброго дня всем форумачанам! Подскажите пожалуйста, как реализовать подсчёт. Исходные данные В таблице есть градация цен...

Как создать ComboBox2 на основе выбора ComboBox1 / UserForm
У меня стоит следующая задача, как в UserForm на основе выбора в листинге ComboBox1 (C:\Temp\Fol1) представить в ComboBox2 выбранные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru