Модель экспертной оценки
Через очевидную простоту алгоритма для реализации задачи лучше всего выбрать процедурную парадигму программирования и языка Паскаль или Си. Конечно, для написания красивого интерфейса можно взять объектно-ориентированные языки C Builder или Delphi. Однако, как можно было увидеть из рассмотрения алгоритма задачи, построение интерфейса сводилось бы к последовательному выведению окон. Еще одним ар
гументом в интересах словно Паскаль или Си есть размеры программы, которые бы при использовании C Builder или Delphi были намного большими.
Среди двух языков – Паскаль и Си, – я изберу Паскаль как более привычный для себя.
5.2 Структура программы
Структурно данную программу можно разделить на блоки.
Каждый блок может быть отнесен к одной из функциональных групп:
1. Построение интерфейса;
2. Реализация алгоритмов, представленных в разделе 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 соответственно. В общем оно не является существенным, так как всегда можно разбить избирательный округ на более малый с условием того, чтобы выполнялось данное ограничение.
5.3 Инструкция пользователю
Данная программа предназначенная для определения победителя выборов по правилам Копленда и Борда и сравнение полученных результатов.
В начале работы программы пользователь может выбрать, просматривать ли результаты решения контрольного примера, вносить ли собственные данные. В обоих случаях определяются победители за Коплендом и Борда.
Сначала работники избирательного органа вносят общую информацию: количество избирателей в данном округе то количество кандидатов. Дальше заносятся имена кандидатов и указывается способ заноса профилей преимуществ: каждым избирателем отдельно или работниками избирательного округа. В последнем случае информация сгруппирована (аналогично к контрольному примеру).
Внизу екрана выводятся имена всех кандидатов. Каждый избиратель (работник ли избирательного округа) вносит профиль преимуществ, располагая кандидатов в строго определенном порядке.
Для каждого избирателя не допускается случаев безразличия; кроме того, кандидаты должны быть строго ранджовани (то есть каждый из них занимает свое место в преимуществе избирателя, и на одном уровне не могут находиться два кандидата). Имена кандидатов, которые заносятся избирателями, повинны совпадать с именами, указанными в начале заполнения информации.
После заноса всех этих данных выдается результат работы программы.
Сначала выводится победитель Копленда и указывается, определен ли он с сохранением нейтральности. Для победителя указывается его оценка. В противном случае выводится множественное число победителей (кандидатов, сумма глазков которых равняется максимальной оценке).
Аналогично определяется победитель Борда.
Как будет показано в контрольном примере, оценки кандидатов, полученных по правилам Борда и Копленда, могут ранджуватись в противоположном порядке.
6. Контрольный пример
Пусть дан следующий профиль для 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 и т.д.
Другие рефераты на тему «Экономико-математическое моделирование»:
Поиск рефератов
Последние рефераты раздела
- Выборочные исследования в эконометрике
- Временные характеристики и функция времени. Графическое представление частотных характеристик
- Автоматизированный априорный анализ статистической совокупности в среде MS Excel
- Биматричные игры. Поиск равновесных ситуаций
- Анализ рядов распределения
- Анализ состояния финансовых рынков на основе методов нелинейной динамики
- Безработица - основные определения и измерение. Потоки, запасы, утечки, инъекции в модели