close

Вход

Забыли?

вход по аккаунту

?

курсовик

код для вставкиСкачать
Министерство образования Российской Федерации
Ульяновский государственный технический университет
Кафедра "Вычислительная техника"
Дисциплина: "Моделирование элементов ВС"
Курсовая работа
"Моделирование принятия решения"
Выполнил:ст. гр. ЭВМд-32 Романов А.А.
Проверил:Куцоконь Н.С.
Ульяновск 2005г
Задание.
Сделать выбор между LCD и ЭЛТ-монитором.
Цель.
Выбрать максимально выгодный по функциональности вариант.
В настоящее время в связи с уменьшением стоимости LCD мониторов при выборе встает вопрос о выборе между обычным ЭЛТ и LCD монитором. Кроме того, новые технологии сократили разрыв в качестве между ними.
Ограничения.
В курсовой работе я хотел сделать следующие ограничения:
- рассмотрение только 17-ти дюймовых мониторов
- не берется во внимание цена, т. к. первостепенная задача - максимально выгодная функциональность, а так же из-за широкого разброса цен на оба типа мониторов.
- не учитывается качество изображения с точки зрения цветопередачи при нормальном взгляде, т.е. под прямым углом к плоскости экрана.
Критерии.
1.Частота вертикальной развертки. Как известно обновление изображения в ЭЛТ-мониторах происходит за счет прохода луча по внутренней поверхности трубки, вследствие чего заметно мерцание изображения. В LCD хоть и используется другая технология, которая должна исключать данное явление, мерцание присутствует в той или иной степени.
2.Инертность. Как уже говорилось, в ЖК изменение изображения происходит за счет изменения напряжения на кристаллах. Но жидкие кристаллы не могут мгновенно изменить свое состояние. На графике приведена зависимость прозрачности кристалла от времени (кристалл меняет свое состояние с полностью закрытого на полностью открытое).
Данное явление довольно отчетливо заметно на ЖК мониторах при движении отдельных объектов. В ЭЛТ это отсутствует (практически незаметно для человеческого глаза).
3.Угол обзора. Данный критерий несущественен для ЭЛТ т. к. свечение люминофора распространяется практически во все стороны. В ЖК при изменении угла обзора страдает как контрастность, так и цветопередача. В настоящее время среднее значение угла обзора ЖК примерно равно 130°.
4.Потребляемая мощность. В ЭЛТ для приобретения электронами нужной скорости необходима высокая разность потенциалов, следовательно, большая мощность по сравнению с ЖК.
5.Разрешение. В силу специфики производства разрешение ЖК меньше разрешения ЭЛТ-монитора. Оговоримся, что разрешение будет обозначаться одной первой цифрой (Например: 1280х1024 будет обозначено 1280).
6.Видимая область. Видимая область у CRT-мониторов, как правило, меньше, чем заявленная в характеристиках. LCD-матрица избавлена от этого несоответствия. Размер видимой области 19" LCD-монитора не намного отличается от размера видимой области 21" CRT монитора.
7.Занимаемая площадь. Т.к. основным элементом ЭЛТ-мониторов является электронная пушка, требующая значительной длины, соответственно и занимаемая площадь будет больше, чем у ЖК.
Все данные критерии относятся к группе технических факторов, характеризующиеся как контролируемые (управляемые).
Альтернативы. Альтернативы вытекают из постановки задачи:
1.LCD - монитор.
2.ЭЛТ-монитор.
Алгоритм программы.
1.Получение данных из файлов.
2.Моделирование
2.1.Нормализация критериев.
2.2.Создание матрицы выигрышей.
3.Вывод результатов.
Принцип работы программы.
Вводимые данные считываются из файла, содержащего весовой вектор, параметры критериев. Число альтернатив заданных вначале не может быть изменено. Далее действия показаны на схеме:
Задание и учёт приоритета критериев.
Приоритет локальных критериев может быть задан с помощью ряда приоритета, вектора приоритета, весового вектора. Ряд приоритета является упорядоченным множеством индексов локальных критериев ={l,2,...,k}
Критерии, индексы которых стоят слева, доминируют над критериями, индексы которых стоят справа. При этом доминирование является качественным: критерий f1 всегда более важен, чем f2 и т.д.
В этом случае, если среди критериев имеются равно-приоритетные, они
выделяются в ряде приоритета скобками, например: = {1,2,(3,4),.. .,k}
В своей задаче я задал следующий ряд приоритетов: ={Частота вертикальной развертки, Разрешение, Занимаемая площадь, Угол обзора, Инертность, Видимая область, Потребляемая мощность}. А также весовым вектором: а ={0.3, 0.2, 0.15, 0.12, 0.1, 0.08, 0.05}, (соответственно ряду приоритетов). Весовой вектор: представляет собой k-мерный вектор, компоненты которого связаны соотношениями:
Компонента αq вектора имеет смысл весового коэффициента, определяющего относительное превосходство критерия fq над всеми остальными.
Нормализация локальных критериев.
В качестве нормализации локальных критериев используется метод, в котором в качестве идеального вектора выбирают вектор, параметрами которого являются максимально возможные значения локальных критериев.
Задача была реализована методом максимизации локальных критериев. Использовалось 3 способа поиска оптимального решения:
Критерий Лапласа. Поскольку вероятности возникновения той или иной ситуации неизвестны, будем считать их равновероятными. Тогда для каждой строки матрицы выигрышей подсчитывается среднее арифметическое значение оценок. Оптимальному решению будет соответствовать такое решение, которому соответствует максимальное значение этого среднего арифметического.
Критерий Вальда (случай крайнего пессимизма). В каждой строке матрицы выбираем минимальную оценку. Оптимальному решению соответствует такое решение, которому соответствует максимум этого минимума. Этот критерий очень осторожен. Он ориентирован на наихудшие условия, только среди которых и отыскивается наилучший, и теперь уже гарантированный результат.
Критерий Гурвица (с различным коэффициентом оптимизма). Вводится некоторый коэффициент , называемый коэффициентом оптимизма, 01. В каждой строке матрицы выигрышей находится самая большая оценка и самая маленькая . Они умножаются соответственно на и (1-) и затем вычисляется их сумма. Оптимальному решению будет соответствовать такое решение, которому соответствует максимум этой суммы, то есть .
При =0 критерий Гурвица трансформируется в критерий Вальда. Это случай "крайнего пессимизма". При =1 (случай крайнего оптимизма) человек, принимающий решение, рассчитывает на то, что ему будет сопутствовать самая благоприятная ситуация. Коэффициент оптимизма назначается субъективно, исходя из опыта, интуиции и т.п. Чем более опасна ситуация, тем более осторожным должен быть подход к выбору решения и тем меньшее значение присваивается коэффициенту .
Пример используемых значений критериев:
ТипLCDЭЛТЧастота вертикальной развертки, Гц7085Инертность, мс100Угол обзора, градусы140180Потребляемая мощность, Вт4080Максимальное разрешение, пикселей по горизонтали12801600Видимая область, м по диагонали0,4350,40Занимаемая площадь, м20,0830,16 Примеры расчета для различных коэффициентов уступок:
Уступка 0%
ЛапласВальдГурвиц, коэффициент оптимизма 0%Гурвиц, коэффициент оптимизма 100%LCD++ЭЛТ++
Уступка 9%
ЛапласВальдГурвиц, коэффициент оптимизма 0%Гурвиц, коэффициент оптимизма 100%LCDЭЛТ++++
Уступка 18%
ЛапласВальдГурвиц, коэффициент оптимизма 0%Гурвиц, коэффициент оптимизма 100%LCDЭЛТ++++
Уступка 27%
ЛапласВальдГурвиц, коэффициент оптимизма 0%Гурвиц, коэффициент оптимизма 100%LCDЭЛТ++++
Уступка 30%
ЛапласВальдГурвиц, коэффициент оптимизма 0%Гурвиц, коэффициент оптимизма 100%LCDЭЛТ++++
Как видно из приведенных таблиц и графиков видно, что наиболее часто оптимальным вариантом становится ЭЛТ. Но в некоторых случаях предпочтение отдается LCD. Остановимся подробнее. Метод Лапласа при различных коэффициентах уступки дает одно и то же значение т.к. значения критериев второй альтернативы имеют некоторое превосходство (если так же учитывать вектор приоритетов и весовой вектор). В случае метода Вальда наблюдается расхождение: при "строгих значениях" (уступка = 0) оптимальной признается 1-я альтернатива (как самая пессимистичная). Дальше же выбирается 2-я, т.к. существует разброс параметров. При выборе с помощью метода Гурвица наблюдается аналогичная картина: при коэффициенте оптимизма = 0 и уступке = 0 выбор делается в пользу первой альтернативы (в случае пессимизма), и в пользу второй при оптимизме = 1. При увеличении уступки коэффициент оптимизма уже не влияет на выбор.
Выводы.
Охарактеризуем результаты исследований. В целом можно сказать, что оптимальной признана 2-я альтернатива, т.е. ЭЛТ-монитор. Это объясняется как отсутствием некоторых признаков присущих ЖК (инертность, угол обзора), так и превосходством по ряду параметров (разрешение, частота обновления). Но результат зависит от векторов и параметров критериев, которые выбирались субъективно, следовательно, не является эталоном.
Исходный текст программы.
using System;
using System.IO;
using System.Text;
namespace Model_kurs
{
class Kurs
{
private double []vectorVesov;
public struct kriter
{
public double val;
public bool mustMax;
}
private kriter [,]matr_znach;
private int kriterii;
private int alternativy;
private double [,]matr_vyigr;
private const int procent = 33;
private void loadVectorVesov(string fileName)
{
try
{
StreamReader reader = new StreamReader(fileName);
string inStr = reader.ReadLine();
string[] arr = inStr.Split(' ');
vectorVesov = new double[arr.Length];
for(int i = 0; i < arr.Length; i++)
{
vectorVesov[i] = double.Parse(arr[i]);
}
} catch(Exception ex){Console.WriteLine(ex);}
}
private double maximum(double firstVal, double secondVal)
{
if(firstVal > secondVal)
{
return firstVal;
}
else
{
return secondVal;
}
}
private double getMax(double []arr)
{
double max = arr[0];
for(int i = 1; i < kriterii; i++)
{
if(max < arr[i])
{
max = arr[i];
}
}
return max;
}
private double getMin(double []arr)
{
double min = arr[0];
for(int i = 1; i < kriterii; i++)
{
if(min > arr[i])
{
min = arr[i];
}
}
return min;
}
private void Normal()
{
double []arr = new double[kriterii];
for(int i = 0; i < kriterii; i++)
{
arr[i] = matr_znach[i, 0].val;
}
double max = getMax(arr);
for(int i = 0; i < kriterii; i++)
{
arr[i] = matr_znach[i, 1].val;
}
if(getMax(arr) > max)
{
max = getMax(arr);
}
for(int i = 0; i < kriterii; i++)
{
matr_znach[i, 0].val = matr_znach[i, 0].val / max;
matr_znach[i, 1].val = matr_znach[i, 1].val / max;
}
}
private void createMatrVyigr()
{
matr_vyigr = new double[kriterii, alternativy];
for(int i = 0; i < kriterii; i++)
{
for(int j = 0; j < alternativy; j++)
{
matr_vyigr[i, j] = matr_znach[i, j].val * vectorVesov[i];
}
}
}
public Kurs()
{
StreamReader reader = new StreamReader("in.txt");
string inStr = reader.ReadLine();
inStr = reader.ReadLine();
string[] arr = inStr.Split(' ');
matr_znach = new kriter[arr.Length, 2];
for(int i = 0; i < arr.Length; i++)
{
matr_znach[i, 0].val = double.Parse(arr[i]);
}
inStr = reader.ReadLine();
arr = inStr.Split(' ');
for(int i = 0; i < arr.Length; i++)
{
matr_znach[i, 1].val = double.Parse(arr[i]);
}
inStr = reader.ReadLine();
arr = inStr.Split(' ');
for(int i = 0; i < arr.Length; i++)
{
if(0 != int.Parse(arr[i]))
{
matr_znach[i, 0].mustMax = true;
matr_znach[i, 1].mustMax = true;
}
else
{
matr_znach[i, 0].mustMax = false;
matr_znach[i, 1].mustMax = false;
}
}
kriterii = arr.Length;
alternativy = 2;
}
private int Laplas(double ustupka)
{
double []sum = new double[2];
for(int i = 0; i < kriterii; i++)
{
if (matr_znach[i, 0].mustMax)
{
sum[0] += matr_vyigr[i, 0] - maximum(matr_vyigr[i, 0], matr_vyigr[i, 1]) * (ustupka / procent);
}
else
{
sum[0] += matr_vyigr[i, 0] + maximum(matr_vyigr[i, 0], matr_vyigr[i, 1]) * ((ustupka/procent));
}
}
for(int i = 0; i < kriterii; i++)
{
if (matr_znach[i, 0].mustMax)
{
sum[1] += matr_vyigr[i, 1] - maximum(matr_vyigr[i, 0], matr_vyigr[i, 1]) * (ustupka / procent);
}
else
{
sum[1] += matr_vyigr[i, 1] + maximum(matr_vyigr[i, 0], matr_vyigr[i, 1]) * ((ustupka/procent));
}
}
sum[0] = sum[0]/kriterii;
sum[1] = sum[1]/kriterii;
if(sum[0] > sum[1])
{
return 0;
}
else
{
return 1;
}
}
private int Vald(double ustupka)
{
double []arr0 = new double[kriterii];
double []arr1 = new double[kriterii];
for(int i = 0; i < kriterii; i++)
{
arr0[i] = matr_vyigr[i, 0];
}
for(int i = 0; i < kriterii; i++)
{
if(matr_znach[i, 0].mustMax)
{
arr0[i] = arr0[i] - maximum(arr0[i], arr1[i])* (ustupka / procent);
}
else
{
arr0[i] = arr0[i] + maximum(arr0[i], arr1[i])* ((ustupka / procent));
}
}
for(int i = 0; i < kriterii; i++)
{
arr1[i] = matr_vyigr[i, 1];
}
for(int i = 0; i < kriterii; i++)
{
if(matr_znach[i, 0].mustMax)
{
arr1[i] = arr1[i] - maximum(arr0[i], arr1[i])* (ustupka / procent);
}
else
{
arr1[i] = arr1[i] + maximum(arr0[i], arr1[i])* ((ustupka / procent));
}
}
double val1 = getMin(arr0);
double val2 = getMin(arr1);
if(val1 > val2)
{
return 0;
}
else
{
return 1;
}
}
private int Gurvic(double ustupka, double optimizm)
{
double []arr0 = new double[kriterii];
double []arr1 = new double[kriterii];
double max0;
double max1;
double min0;
double min1;
for(int i = 0; i < kriterii; i++)
{
if(matr_znach[i, 0].mustMax)
{
arr0[i] = matr_vyigr[i, 0] - maximum(matr_vyigr[i, 0], matr_vyigr[i, 1]) * (ustupka / procent);
}
else
{
arr0[i] = matr_vyigr[i, 0] + maximum(matr_vyigr[i, 0], matr_vyigr[i, 1]) * ((ustupka/procent));
} }
for(int i = 0; i < kriterii; i++)
{
if(matr_znach[i, 0].mustMax)
{
arr1[i] = matr_vyigr[i, 1] - maximum(matr_vyigr[i, 0], matr_vyigr[i, 1]) * (ustupka / procent);
}
else
{
arr1[i] = matr_vyigr[i, 1] + maximum(matr_vyigr[i, 0], matr_vyigr[i, 1]) * ((ustupka/procent));
} }
max0 = getMax(arr0);
min0 = getMin(arr0);
max1 = getMax(arr1);
min1 = getMin(arr1);
double val1 = (optimizm / 10) * max0 + (1 - (optimizm/10)) * min0;
double val2 = (optimizm / 10) * max1 + (1 - (optimizm/10)) * min1;
if(val1 > val2)
{
return 0;
}
else
{
return 1;
}
}
private void printMatr()
{
Console.WriteLine("╠рЄЁшЎр чэрўхэшщ");
for(int i = 0; i < kriterii; i++)
{
for(int j = 0; j < alternativy; j++)
{
Console.Write(matr_znach[i, j].val + " ");
}
Console.Write(matr_znach[i, 0].mustMax + "\n");
}
Console.WriteLine("\n╠рЄЁшЎр т√шуЁ√°хщ");
for(int i = 0; i < kriterii; i++)
{
for(int j = 0; j < alternativy; j++)
{
Console.Write(matr_vyigr[i, j] + " ");
}
Console.WriteLine();
}
}
[STAThread]
static void Main()
{
Kurs kurs = new Kurs();
kurs.loadVectorVesov("in.txt");
kurs.Normal();
kurs.createMatrVyigr();
Console.Write("\nLaplas");
for(int i = 0; i < 10; i++)
{
Console.Write(" " + kurs.Laplas(i));
}
Console.Write("\nVald ");
for(int i = 0; i < 10; i++)
{
Console.Write(" " + kurs.Vald(i));
}
Console.Write("\nGurvic optimizm = 0% ");
for(int i = 0; i < 10; i++)
{
Console.Write(" " + kurs.Gurvic(i, 0));
}
Console.Write("\nGurvic optimizm = 100%");
for(int i = 0; i < 10; i++)
{
Console.Write(" " + kurs.Gurvic(i, 1));
} Console.WriteLine("\nPress enter...");
Console.ReadLine();
}
}
}
1
Документ
Категория
Рефераты
Просмотров
29
Размер файла
182 Кб
Теги
курсовик
1/--страниц
Пожаловаться на содержимое документа