183540 (Модель экспертной оценки), страница 4
Описание файла
Документ из архива "Модель экспертной оценки", который расположен в категории "". Всё это находится в предмете "экономико-математическое моделирование" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "экономико-математическое моделирование" в общих файлах.
Онлайн просмотр документа "183540"
Текст 4 страницы из документа "183540"
Среди двух языков – Паскаль и Си, – я изберу Паскаль как более привычный для себя.
-
Структура программы
Структурно данную программу можно разделить на блоки.
Каждый блок может быть отнесен к одной из функциональных групп:
-
Построение интерфейса;
-
Реализация алгоритмов, представленных в разделе 4.
Следовательно, программа имеет следующую структуру:
Процедура victory – это реализация алгоритма определения победителя, описанного в предыдущем разделе. Во время вызова данной процедуры задается массив оценок Борда или Копленда, а также текст, для выведения результатов (им служат слова "Копленда" и"Борда"). В предыдущем разделе уже было обосновано, почему для определения победителя за разными правилами использован единственный алгоритм. Процедура help выводит список имен кандидатов в нижней строке экрана. Она введена для облегчения ввода информации пользователем.
Рис. 5.1 Структура программы.
Процедура example содержит данные контрольного примера. Она введена для облегчения проверки правильности работы программы и носит демонстрационный характер.
Процедура right предназначена для проверки правильности вводу символа. Она используется при выборе внесения информации (демонстрация контрольного примера или самостоятельное внесение профиля) и выборе способа заноса данных (отдельными избирателями или работниками избирательного комитета).
Перейдем к рассмотрению основной программы.
Прежде всего в ней проходит вызов и взаимосвязь описанных выше процедур.
Процедуры построения интерфейса вызываются в начале работы программы. Они предназначенные для облегчения внесения данных.
Процедура victory определяет победителя и выводит результат голосования по определенному правилу. Потому ее вызов происходит напоследок основной программы.
Опишем переменные, которые используются в основной программе.
N: кол-во избирателей;
M: кол-во кандидатов;
s: кол-во групп;
rang: профиль преимуществ;
а,b: для определения оценки Копленда (используется в бинарных сравнениях);
kopl: массив оценок Копленда;
vybor1, vybor2: переменные внешних циклов при определении оценки Копленда;
bord: массив оценок Борда;
name: массив имен кандидатов;
к, и, j, l, r: вспомогательные переменные;
many: массив групп избирателей.
Опишем структуру программы.
Сначала программа просит внести всю нужную информацию. Пользователь должен указать количество избирателей и кандидатов и способ заноса информации (будет ли свои преимущества вносить каждый избиратель отдельно, будет ли это проводить комиссия, оперируя сгруппированными данными). Дальше идет внесение профиля преимуществ и проверка на его корректность. Профиль является некорректным, если в нем встречается имя лица, которое не является выше указанным кандидатом, или же имена кандидатов повторяются.
В программе используются алгоритмы правил Борда и Копленда, указанные в предыдущем разделе. Согласно полученных оценок определяется победитель с помощью процедуры victory, и проходит выведение результата.
Следует заметить, что полученные победители Копленда и Борда могут не совпадать, что еще раз свидетельствует о несовершенстве правил голосования большинством голосов. Результаты работы алгоритма будут показаны в соответствующем разделе.
Сложность программы (в данном случае понимается время, тратящее на выполнение), прямо пропорционально зависит от величины количества избирателей и кандидатов.
Так как данная программа носит более демонстрационный характер, то я ввела границу для количества избирателей и кандидатов для того, чтобы ограничить время выполнения – 200 и 50 соответственно. В общем оно не является существенным, так как всегда можно разбить избирательный округ на более малый с условием того, чтобы выполнялось данное ограничение.
-
Инструкция пользователю
Данная программа предназначенная для определения победителя выборов по правилам Копленда и Борда и сравнение полученных результатов.
В начале работы программы пользователь может выбрать, просматривать ли результаты решения контрольного примера, вносить ли собственные данные. В обоих случаях определяются победители за Коплендом и Борда.
Сначала работники избирательного органа вносят общую информацию: количество избирателей в данном округе то количество кандидатов. Дальше заносятся имена кандидатов и указывается способ заноса профилей преимуществ: каждым избирателем отдельно или работниками избирательного округа. В последнем случае информация сгруппирована (аналогично к контрольному примеру).
Внизу екрана выводятся имена всех кандидатов. Каждый избиратель (работник ли избирательного округа) вносит профиль преимуществ, располагая кандидатов в строго определенном порядке.
Для каждого избирателя не допускается случаев безразличия; кроме того, кандидаты должны быть строго ранджовани (то есть каждый из них занимает свое место в преимуществе избирателя, и на одном уровне не могут находиться два кандидата). Имена кандидатов, которые заносятся избирателями, повинны совпадать с именами, указанными в начале заполнения информации.
После заноса всех этих данных выдается результат работы программы.
Сначала выводится победитель Копленда и указывается, определен ли он с сохранением нейтральности. Для победителя указывается его оценка. В противном случае выводится множественное число победителей (кандидатов, сумма глазков которых равняется максимальной оценке).
Аналогично определяется победитель Борда.
Как будет показано в контрольном примере, оценки кандидатов, полученных по правилам Борда и Копленда, могут ранджуватись в противоположном порядке.
-
Контрольный пример
Пусть дан следующий профиль для 9 избирателей и 5-ти кандидатов:
1 | 4 | 1 | 3 |
a b c d e | c d b e a | e a d b c | e a b d c |
В каждом столбце кандидаты расположенные в порядке уменьшения их значимости для каждой группы избирателей. То есть, для первого столбца можно определить преимущества следующим образом: группа избирателей, которая состоит из одного лица, считает кандидата а наилучшим. На втором месте они ставят кандидата b, на третьем месте c и т.д.
Продемонстрируем решение контрольного примера по правилу Копленда. Определяем оценку Копленда.
Кандидат а является лучшим за b для 1+1+3 избирателей, а для 4-х избирателей кандидат b является лучшим за а. Определим такие преимущества для каждого кандидата, сравним его со всеми другими.
ab – 5 ac – 5 ad – 5 ae – 1 | ba – 4 ca – 4 da – 4 ea – 8 | bc – 5 bd – 4 de – 5 | cb – 4 db – 5 eb – 4 | cd – 5 ce – 5 | dc – 4 ec – 4 | de – 5 | ed – 4 |
Определим оценку Копленда для каждого кандидата. Кандидат а является лучшим за b (добавляем +1); он также является лучшим за c и d (добавляем два разы +1) и худшим за e (добавляем –1). Следовательно, оценка Копленда для а ровна 2.
Найдем оценку для других кандидатов.
a=+1+1+1-1=2
b=-1+1-1+1=0
c=-1-1+1+=0
d=-1+1-1+1=0
e=+1-1-1-1=-2
Среди полученных оценок определяем максимальную. Как видим, она равняется 2 и принадлежит кандидату а. Следовательно, а – победитель Копленда.
Если бы у нас получились два кандидата с максимальной оценкой, например b и f, мы бы избрали кандидата b, так как он расположен ближе за алфавитом.
Для этого же профиля найдем победителя Борда.
Следовательно, получаем такие оценки:
a=1*4+4*0+1*3+3*3=16
b=3*1+2*4+1*1+2*3=18
c=2*1+4*4+0+0=18
d=1*1+4*3+2*1+1*3=18
e=1*4+1*4+3*4+0=20
Победителем за Борда является кандидат е.
Как видим, оценки Борда ранжируют кандидатов в порядке, противоположном до того, который получается по оценкам Копленда.
Выводы
Данная курсовая работа была посвящена обзору методов голосования большинством голосов. Была проведена сравнительная характеристика каждого из методов и из их множественного числа избраны наилучшие. К ним относятся:
1. зажиточные за Кондорсе правила Копленда и Симпсона, дерево многоэтапного исключения;
2. один из методов подсчета очков – правило Борда.
Все эти правила удовлетворяют условиям оптимума по Парето, монотонности и анонимности. Кроме того, правило Борда удовлетворяет также аксиоме участия и пополнения.
Для программной реализации были избраны методы Копленда и Борда.
Результаты работы программы продемонстрированы на контрольном примере.
Список литературы
-
Мулен Э. "Кооперативное принятие решений: Аксиомы и модели" – Москва, Мир, 1991.
-
Миркин Б. Проблема группового выбора. – Москва, Наука, 1974.
-
Льюс Р.Д., Райфа Х. Игры и решения. М.: ИЛ, 1961.
-
Антонов А. В. "Системный анализ", М.-2004г.
-
Ларичев О.И. Наука и искусство принятия решений. – М: Наука, 1979. – 200 с.
-
Макаров И.М. Теория выбора и принятия решений. – М.: Наука,1987. – 350 с.
-
Кузнецов А.В., Сакович В.А., Холод Н.И. "Высшая математика. Математическое программирование ", Минск, Вышейшая школа, 2001г.
-
Красс М.С., Чупрынов Б.П. "Основы математики и ее приложения в экономическом образовании", Издательство "Дело", Москва 2001г.
-
В.И. Ермаков "Общий курс высшей математики для экономистов", Москва, Инфра-М, 2000г.
-
Теория прогнозирования и принятия решений. М:1989. 160 стр.
Дополнения
Программа
uses wincrt;
label в, z;
type mas = string[6];
type ball =array[1..10] of shortint;
var N: byte; {кол-во избирателей}
M: byte; {кол-во кандидатов}
s: byte; {кол-во групп}
rang: array[1..10,1..100] of mas; {профиль преимуществ}
к,i,j,l,r,contrl: byte;
а,b: byte; {для проведения парных сравнений}
kopl: ball; {массив оценок Копленда}
vybor1, vybor2: mas;
bord: ball; {массив оценок Борда}
name: array[1..10] of mas; {массив имен кандидатов}
many: array[1..100] of byte; {массив групп избирателей}
n1: array[1..10] of mas;
c: char;
{данные контрольного примера}
{---------------------------}
procedure example;
var и, j: byte;
begin
clrscr; M:=5; n:=9; s:=4;
name[1]:='a'; name[2]:='b'; name[3]:='c'; name[4]:='d'; name[5]:='e';
many[1]:=1; many[2]:=4; many[3]:=1; many[4]:=3;
rang[1,1]:='a'; rang[1,2]:='c'; rang[1,3]:='e'; rang[1,4]:='e';
rang[2,1]:='b'; rang[2,2]:='d'; rang[2,3]:='a'; rang[2,4]:='a';
rang[3,1]:='c'; rang[3,2]:='b'; rang[3,3]:='d'; rang[3,4]:='b';
rang[4,1]:='d'; rang[4,2]:='e'; rang[4,3]:='b'; rang[4,4]:='d';
rang[5,1]:='e'; rang[5,2]:='a'; rang[5,3]:='c'; rang[5,4]:='c';
gotoXY(15,1);
writeln; writeln('Число избирателей: ', N);
writeln('Число кандидатов: ', M);
writeln('Профиль преимуществ:');
for i:=1 to 40 do