Реферати українською » Информатика, программирование » Багатокритеріальні задачі. Метод альтернативних рішень


Реферат Багатокритеріальні задачі. Метод альтернативних рішень

1. Постановка завдання

Необхідно розробити програмне засіб на допомогу пошуку альтернативних рішень для наступній завдання:

· багатокритерійну завдання

вхідні дані: кількість критеріїв і рішень; вагові значення, задані безпосередньо, ступінь важливості критеріїв, інтервали переваги, ціна переходу значення сусідній клас.

вихідних даних: матриця згоди; матриця незгоди; ядро бінарного відносини.

програмний альтернативний рішення >многокритериальний


2. Стислі теоретичні відомості

Нехай заданий набір числових функцій , певних на безліч імовірних рішень X. Залежно від змісту завдання вибору цих функцій називають критеріями оптимальності, критеріями ефективності чи цільовими функціями.

Зазначені вище числові функції утворюють векторний критерій , котра приймає значення просторіm-мерних векторів . Це простір називаютькритериальним простором чи простором оцінок, а всяке значення називають векторної оцінкою можливого рішення x. Усі можливі векторні оцінки утворюють безліч можливих оцінок (можливих чи допустимих векторів)

Зазвичай, між множинами можливих рішень X і відповідатиме безліччю векторів Y можна встановити взаємно однозначне відповідність, тобто. кожному можливого рішенню експортувати відповідність певний можливий вектор, і навпаки – кожному можливого вектору зіставити певне можливе рішення. У разі вибір в багатьох рішень з математичної погляду рівнозначний вибору в багатьох векторів і всі ухвали і результати можна формулювати як і термінах рішень, і у термінах векторів, причому за бажання можна легко перейти від однієї форми викладу в іншу.

Завдання вибору, що включає безліч допустимих рішень X і векторний критерійf, зазвичай називаютьмногокритериальной завданням чи завданняммногокритериальной оптимізації.

Слід зазначити, формування математичну модель прийняття рішень (тобто. побудова безлічі X і векторного критерію >f ) нерідко є складного процесу, у якому тісно взаємодіють фахівці обох сторін. Як-от, представники конкретної області знань, до якої належить досліджувана проблема, і з прийняттю рішень (математики). З одного боку, треба врахувати все найважливіші риси і деталі реальної завдання, з другого, – побудована модель має виявитися надмірно складної про те, щоб на її дослідження та рішення можна було успішно застосувати розроблений на сьогодні відповідний математичний апарат. Саме тому етап побудови математичну модель значною мірою залежить від досвіду, інтуїції і надзвичайно мистецтва дослідників обох сторін. Його неможливо ототожнити з простим формальним застосуванням вже, добре описаних алгоритмів.

Тут треба ще додати, будь-яка завдання вибору (зокрема і багатокритерійну) міцно пов'язана з конкретною >ЛПР(обличчя, яка набирає рішення). Уже формування математичну модель при побудові безлічі можливих прийняття рішень та векторного критерію справа не обходиться без рад, рекомендацій та вказівокЛПР, тим більше векторний критерій таки служить. Прийняття рішення за багатьох критеріях висловлення цілейЛПР. У цьому ясно, що модель з точністю відповідну всім реальним обставинам неможливо. Модель завжди є спрощенням дійсності. Важливо домогтися, щоб він містила ті риси і деталі, які у найбільшою мірою впливають на остаточний вибір найкращого рішення.

Розглянемо два довільних можливих рішення і . Їх має місце сам і лише з наступних трьох випадків:

1) справедливо співвідношення (>ЛПР перше рішення воліє другому),

2) справедливо співвідношення (>ЛПР друге рішення воліє першому),

3) не виконується ні співвідношення , ні співвідношення (>ЛПР неспроможна віддавати перевагу жодному із зазначених двох рішень).

Зауважимо, що четвертий випадок, коли обидва що беруть участь тут співвідношення і виконуються, неможливий завдяки асиметричності відносини переваги

У першому із зазначених вище випадків, тобто. і під час співвідношення , кажуть, що розв'язання цієї домінує рішення .

Якщо ж реалізується третій випадок, то кажуть, що рішення і можна порівняти стосовно переваги.


3. Реалізація програмного кошти

Середовище розробки:Visual Studio 2008 Мова програмування: З#

3.1 Проектування

Під час проектування програмного кошти використовуватимемообъектно-ориентированний підхід. Список класів з коротким описом:

1)Program.cs – це головне вікно, служить для введення даних, запуску роботи алгоритму пошукупарето-оптимальних рішень, містить методи на вирішення поставленого завдання.

2)Reader.cs – методи для завантаження даних із файла

3)Writer.cs – методи задля збереження даних в файл

3.2 Алгоритм пошуку альтернативних рішень

 

Крок 1. Призначення терезів. Призначаються позитивні ваги кожного із критеріїв Крок 2. Побудова індексу згоди. Для кожної пари альтернатив j іk безліч критеріїв розбивається втричі групи:

,,

Безліч включає ті категорії, якимиj-я альтернатива кращеk-й, безліч , складається з критеріїв, якимj-я альтернатива гіршеk-й, а безліч , складається з тих критеріїв, якимиj-я іk-я альтернативи еквівалентні. Індекс згоди про те , що альтернатива j краще альтернативиk визначається так:


,

Де – параметр,

Крок 3. Побудова списку незгоди. Для кожної пари j іk індекс виступати проти тим, що альтернатива j краще альтернативиk визначається за такою формулою:

Де інтервал перевагиk-й альтернативи надj-й поi-му критерію визначає число послідовних переходів з класу до класу, що слід здійснити у тому, щобj-й варіант став еквівалентнийk-му поi-му критерію, помножена на ціну одного розподілу такого переходу. У цьому потрібно, щоб величини не перевищували одиницю

Крок 4. Побудова вирішального правила. За підсумками чисел і , обумовленіЛПР, на безлічі альтернатив будується таке бінарну ставлення:j-яальтернтива визнається краще альтернативиk, за умови те, що . Відразу можна побачити, що з вказане бінарну ставлення стає аналогом бінарного відносини Слейтера, що у цьому випадкуj-я альтернатива домінуєk-ю буде лише тоді, коли , тобто. всім . При виникатимуть інші пари альтернатив, пов'язані запровадженим бінарним ставленням.

Коли бінарну ставлення побудовано, представляється безлічвзаимнонедоминирующих альтернатив, у якому побудоване бінарну ставлення маєНМ-свойством. ДаліЛПР вибирає остаточне рішення від цього безлічі. Отже даний метод дозволяє скоротити кількість аналізованих варіантів, полегшуючи цим вибірЛПР.

3.3Листинг програмного коду

publicpartialclassForm1 :Form

{

privateintcountOfVariant;

privateintcountOfCriterion;

privatedoublep;

privatedoubleq;

privatedoublealfa;

privateintmax = 0;

privatedoubleInterval = 0;

privateintcount1 = 0;

privateintcount2 = 0;

privateintrow1;

privateintcol1;

privatestaticintrows;

privatestaticintcols;

privateDouble[,]tablesWeight;

privateDouble[,]tablesCriterionImportance;

privateDouble[,]tablesIntervalSuperiority;

privateDouble[,]TableOfAgreementIndex;

privateDouble[,]TableOfDisagreementIndex;

privateString[,]TableofDecisiveRule;

// privateDouble[,]tablesCriterionImportance;

privatedoubleCriterionSumm = 0;

publicForm1()

{

>InitializeComponent();

}

// отримання числа варіантів, числа критеріїв і параметра альфа

privatevoidGetDate()

{

>countOfVariant = (>int)numericUpDown1.Value;

>countOfCriterion = (>int)numericUpDown2.Value;

>alfa =Convert.ToDouble(comboBox1.Text);

}

// створення умов та заповнення таблиці терезів з форми

privatevoidcreateTableOfWeightFromForm()

{

>tablesWeight = newdouble[rows,cols];

>for (>int і = 0; і <rows; і++)

{

>for (>int j = 0; j <cols; j++)

{

>tablesWeight[i, j] =Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value);

}

}

}

// створення умов та заповнення таблиці важливості критеріїв, числа інтервалів переваги

//і вартість переходу з рівня до рівня з форми

privatevoidcreateTableOfCriterionImportanceFromForm()

{

>tablesCriterionImportance = newdouble[cols, 3];

>for (>int і = 0; і <cols; і++)

{

>tablesCriterionImportance[i, 0] =Convert.ToDouble(dataGridView5.Rows[i].Cells[0].Value);

>CriterionSumm +=tablesCriterionImportance[i, 0];

//>textBox1.AppendText(CriterionSumm.ToString());

}

}

//створення таблиці інтервалів переваги з форми

privatevoidcreateTableOfIntervalSuperiorityFromForm()

{

>tablesIntervalSuperiority = newdouble[cols, (>max + 1)];

>for (>int і = 0; і <cols; і++)

{

>for (>int j = 0; j < (>max + 1); j++)

>tablesIntervalSuperiority[i, j] =Convert.ToDouble(dataGridView6.Rows[i].Cells[j].Value);

}

}

//створення таблиці терезів на формі

privatevoidCreateTableOfWeightOnForm(introw,intcol)

{

>int _>row =row;

>int _>col =col;

>dataGridView1.ColumnCount = _>col;

>dataGridView1.RowHeadersVisible =false;

>dataGridView1.AutoSizeRowsMode =DataGridViewAutoSizeRowsMode.AllCells;

>dataGridView1.AutoSizeColumnsMode =DataGridViewAutoSizeColumnsMode.AllCells;

>dataGridView1.RowCount = _>row;

}

// створення таблиці важливості критеріїв на формі

privatevoidCreateTableOfCriterionImportanceOnForm(introw)

{

>int _>row =row;

>int _>col = 3;

>dataGridView5.ColumnCount = _>col;

>dataGridView5.RowHeadersVisible =false;

>dataGridView5.AutoSizeRowsMode =DataGridViewAutoSizeRowsMode.AllCells;

>dataGridView5.AutoSizeColumnsMode =DataGridViewAutoSizeColumnsMode.AllCells;

>dataGridView5.RowCount = _>row;

}

// створення таблиці ядра з форми

privatevoidCreateTableofDecisiveRuleFromForm()

{

>TableofDecisiveRule = newstring[rows, 1];

>for (>int і = 0; і <rows; і++)

{

>TableofDecisiveRule[i, 0] =dataGridView4.Rows[i].Cells[0].Value.ToString();

}

}

privatevoidbutton1_Click(objectsender,EventArgs e)

{

>GetDate();

>rows = (>int)countOfVariant;

>cols = (>int)countOfCriterion;

>CreateTableOfWeightOnForm(rows,cols);

>CreateTableOfCriterionImportanceOnForm(cols);

}

//додавання інтервалу переваги

privatevoidIntervalSuperiority(introw)

{

>for (>int і = 0; і <cols; і++)

{

>if (>max <Convert.ToDouble(dataGridView5.Rows[i].Cells[1].Value))

{

>max =Convert.ToInt16(dataGridView5.Rows[i].Cells[1].Value);

}

}

>int _>row =row;

>int _>col = (>max + 1);

>dataGridView6.ColumnCount = _>col;

>dataGridView6.RowHeadersVisible =false;

>dataGridView6.AutoSizeRowsMode =DataGridViewAutoSizeRowsMode.AllCells;

>dataGridView6.AutoSizeColumnsMode =DataGridViewAutoSizeColumnsMode.AllCells;

>dataGridView6.RowCount = _>row;

}

// отримання матриці індексів згоди

privatevoidGetTableOfAgreementIndex(introw,intcol)

{

>doubleIPlus = 0;

>doubleIMinus = 0;

>doubleIZero = 0;

>int _>row =row;

>int _>col =col;

>dataGridView2.ColumnCount = _>col;

>dataGridView2.RowHeadersVisible =false;

>dataGridView2.AutoSizeRowsMode =DataGridViewAutoSizeRowsMode.AllCells;

>dataGridView2.AutoSizeColumnsMode =DataGridViewAutoSizeColumnsMode.AllCells;

>dataGridView2.RowCount = _>row;

>TableOfAgreementIndex = newdouble[rows,rows];

>for (>int і = 0; і <rows; і++)

{

>for (>int j = 0; j <rows; j++)

{

>if (і == j)

{

>TableOfAgreementIndex[i, j] = 0;

}

>else

{

>IPlus = 0;

>IMinus = 0;

>IZero = 0;

>for(intk = 0;k <cols;k++)

{

>if (>Convert.ToDouble(dataGridView1.Rows[i].Cells[k].Value) >Convert.ToDouble(dataGridView1.Rows[j].Cells[k].Value))

{

>IPlus +=Convert.ToDouble(dataGridView5.Rows[k].Cells[0].Value);

}

>elseif (>Convert.ToDouble(dataGridView1.Rows[i].Cells[k].Value) ==Convert.ToDouble(dataGridView1.Rows[j].Cells[k].Value))

{

>IZero +=Convert.ToDouble(dataGridView5.Rows[k].Cells[0].Value);

}

>else

{

>IMinus +=Convert.ToDouble(dataGridView5.Rows[k].Cells[0].Value);

}

}

>TableOfAgreementIndex[i, j] = (>IPlus +alfa *IZero) / (>CriterionSumm);

}

>dataGridView2.Rows[i].Cells[j].Value =TableOfAgreementIndex[i, j];

}

}

}

отримання матриці індексів незгоди

privatevoidGetTableOfDisagreementIndex(introw,intcol)

{

>Double[,]count;

>int _>row =row;

>int _>col =col;

>dataGridView3.ColumnCount = _>col;

>dataGridView3.RowHeadersVisible =false;

>dataGridView3.AutoSizeRowsMode =DataGridViewAutoSizeRowsMode.AllCells;

>dataGridView3.AutoSizeColumnsMode =DataGridViewAutoSizeColumnsMode.AllCells;

>dataGridView3.RowCount = _>row;

>count = newdouble[cols, 2];

>TableOfDisagreementIndex = newdouble[rows,rows];

>for (>int і = 0; і <rows; і++)

{

>for (>int j = 0; j <rows; j++)

{

>if (і == j)

{

>TableOfDisagreementIndex[i, j] = 0;

}

>else

{

>Interval = 0;

>for (>intk = 0;k <cols;k++)

{

>count[k, 0] = 0;

>count[k, 1] = 0;

>count1 = 0;

>count2 = 0;

>for (>intm = 0;m < (>Convert.ToInt32(dataGridView5.Rows[k].Cells[1].Value) + 1);m++)

{

>if (>Convert.ToDouble(dataGridView1.Rows[i].Cells[k].Value) >Convert.ToDouble(dataGridView6.Rows[k].Cells[m].Value))

{

>count1 += 1;

}

>else

{

>count1 =count1;

}

>if (>Convert.ToDouble(dataGridView1.Rows[j].Cells[k].Value) >Convert.ToDouble(dataGridView6.Rows[k].Cells[m].Value))

{

>count2 += 1;

}

>else

{

>count2 =count2;

}

/*textBox1.AppendText(" ");

>textBox1.AppendText(count1.ToString());

>textBox1.AppendText(" ");

>textBox1.AppendText(count2.ToString());

//>textBox1.AppendText(" ");

//>textBox1.AppendText(dataGridView1.Rows[i].Cells[k].Value.ToString());*/

}

>count[k, 0] =count1;

>count[k, 1] =count2;

>if (>count[k, 0] <count[k, 1])

{

>Interval += (>count[k, 1] -count[k, 0]) * (>Convert.ToDouble(dataGridView5.Rows[k].Cells[2].Value));

}

>else

{

>Interval =Interval;

}

>TableOfDisagreementIndex[i, j] =Interval/100;

>textBox1.AppendText(" ");

>textBox1.AppendText(Interval.ToString());

}

}

>dataGridView3.Rows[i].Cells[j].Value =TableOfDisagreementIndex[i, j];

}

}

}

отримання параметрівp іq

privatevoidGetParametrsForDecisiveRule()

{

>p =Convert.ToDouble(numericUpDown3.Value);

>q =Convert.ToDouble(numericUpDown4.Value);

}

//побудова вирішального правила

privatevoidGetDecisiveRule(introw,intcol)

{

>boolflag =false;

>intcount = 0;

>intcountOfq = 0;

>intcountOfp = 0;

>int _>row =row;

>int _>col =col;

>dataGridView4.ColumnCount = _>col;

>dataGridView4.RowHeadersVisible =false;

>dataGridView4.AutoSizeRowsMode =DataGridViewAutoSizeRowsMode.AllCells;

>dataGridView4.AutoSizeColumnsMode =DataGridViewAutoSizeColumnsMode.AllCells;

>dataGridView4.RowCount = _>row;

>for (>int і = 0; і <rows; і++)

{

>count = 0;

>countOfq = 0;

>countOfp = 0;

>for (>int j = 0; j <cols; j++)

{

>count += 1;

>if (і != j)

{

>if (>Convert.ToInt32(dataGridView3.Rows[i].Cells[j].Value) <q)

{

>countOfq += 1;

>if (>Convert.ToInt32(dataGridView2.Rows[i].Cells[j].Value) <p)

{

>countOfp += 1;

}

>else

{

>if ((>count ==cols) & (>countOfp == 0))

{

>flag =true;

}

}

}

>else

{

>if ((>count ==cols) & (>countOfq == 0))

{

>flag =true;

}

}

}

}

>dataGridView4.Rows[i].Cells[0].Value =flag;

}

}

privatevoidbutton2_Click(objectsender,EventArgs e)

{

>createTableOfCriterionImportanceFromForm();

>createTableOfWeightFromForm();

>GetTableOfAgreementIndex(rows,rows);

}

privatevoidbutton3_Click(objectsender,EventArgs e)

{

>GetTableOfDisagreementIndex(rows,rows);

}

privatevoidзакритьToolStripMenuItem_Click(objectsender,EventArgs e)

{

>Close();

}

privatevoidbutton6_Click(objectsender,EventArgs e)

{

>IntervalSuperiority(cols);

}

privatevoidbutton5_Click(objectsender,EventArgs e)

{

>GetDecisiveRule(rows, 1);

>CreateTableofDecisiveRuleFromForm();

}

privatevoidbutton4_Click(objectsender,EventArgs e)

{

>GetParametrsForDecisiveRule();

}

//завантаження таблиці терезів

privatevoidbutton8_Click(objectsender,EventArgs e)

{

>stringFN;

>if (>openFileDialog1.ShowDialog() ==DialogResult.OK)

{

>openFileDialog1.InitialDirectory = ">G:temp";

>openFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>FN =openFileDialog1.FileName;

>ReaderMy = newReader(FN);

>My.ReadTable(outtablesWeight, outrows, outcols);

>alfa =Convert.ToDouble(comboBox1.Text);

>CreateTableOfWeightOnForm(rows,cols);

>for (>int і = 0; і <rows; і++)

{

>for (>int j = 0; j <cols; j++)

{

>dataGridView1.Rows[i].Cells[j].Value =tablesWeight[i, j];

}

}

}

}

// збереження таблиці терезів

privatevoidbutton7_Click(objectsender,EventArgs e)

{

>stringFN;

>saveFileDialog1.InitialDirectory = ">G:temp";

>saveFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>if (>saveFileDialog1.ShowDialog() ==DialogResult.OK)

{

>FN =saveFileDialog1.FileName;

>Writer.WriteTable(FN,tablesWeight);

}

}

// завантаження таблиці критеріїв важливості

privatevoidbutton9_Click(objectsender,EventArgs e)

{

>stringFN;

>if (>openFileDialog1.ShowDialog() ==DialogResult.OK)

{

>openFileDialog1.InitialDirectory = ">G:temp";

>openFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>FN =openFileDialog1.FileName;

>ReaderMy = newReader(FN);

>My.ReadTable(outtablesCriterionImportance, outrow1, outcol1);

>alfa =Convert.ToDouble(comboBox1.Text);

>CreateTableOfCriterionImportanceOnForm(row1);

>for (>int і = 0; і <row1; і++)

{

>for (>int j = 0; j <col1; j++)

{

>dataGridView5.Rows[i].Cells[j].Value =tablesCriterionImportance[i, j];

}

}

}

}

// завантаження таблиці інтервалів переваги

privatevoidbutton11_Click(objectsender,EventArgs e)

{

>stringFN;

>if (>openFileDialog1.ShowDialog() ==DialogResult.OK)

{

>openFileDialog1.InitialDirectory = ">G:temp";

>openFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>FN =openFileDialog1.FileName;

>ReaderMy = newReader(FN);

>My.ReadTable(outtablesIntervalSuperiority, outrow1, outcol1);

>alfa =Convert.ToDouble(comboBox1.Text);

>IntervalSuperiority(row1);

>for (>int і = 0; і <row1; і++)

{

>for (>int j = 0; j <col1; j++)

{

>dataGridView6.Rows[i].Cells[j].Value =tablesIntervalSuperiority[i, j];

}

}

}

}

//збереження таблиці критеріїв важливості

privatevoidbutton10_Click(objectsender,EventArgs e)

{

>stringFN;

>saveFileDialog1.InitialDirectory = ">G:temp";

>saveFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>if (>saveFileDialog1.ShowDialog() ==DialogResult.OK)

{

>FN =saveFileDialog1.FileName;

>Writer.WriteTable(FN,tablesCriterionImportance);

}

}

// збереження таблиці інтервалів переваги

privatevoidbutton12_Click(objectsender,EventArgs e)

{

>stringFN;

>saveFileDialog1.InitialDirectory = ">G:temp";

>saveFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>if (>saveFileDialog1.ShowDialog() ==DialogResult.OK)

{

>FN =saveFileDialog1.FileName;

>Writer.WriteTable(FN,tablesIntervalSuperiority);

}

}

// збереження матриці індексів згоди

privatevoidbutton13_Click(objectsender,EventArgs e)

{

>stringFN;

>saveFileDialog1.InitialDirectory = ">G:temp";

>saveFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>if (>saveFileDialog1.ShowDialog() ==DialogResult.OK)

{

>FN =saveFileDialog1.FileName;

>Writer.WriteTable(FN,TableOfAgreementIndex);

}

}

//збереження матриці індексів незгоди

privatevoidbutton14_Click(objectsender,EventArgs e)

{

>stringFN;

>saveFileDialog1.InitialDirectory = ">G:temp";

>saveFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>if (>saveFileDialog1.ShowDialog() ==DialogResult.OK)

{

>FN =saveFileDialog1.FileName;

>Writer.WriteTable(FN,TableOfDisagreementIndex);

}

}

//збереження ядра

privatevoidbutton15_Click(objectsender,EventArgs e)

{

>stringFN;

>saveFileDialog1.InitialDirectory = ">G:temp";

>saveFileDialog1.Filter = ">diagfiles(*.diag)|*.abs|Allfiles|*.*";

>if (>saveFileDialog1.ShowDialog() ==DialogResult.OK)

{

>FN =saveFileDialog1.FileName;

>Writer.WriteTableOfRule(FN,TableofDecisiveRule);

}

}

}

>classReader

{

privatestringfileName;

privatestring[]inputTxt;

privatedouble[,]matrix;

privateintrow;

privateintcol;

privateSystem.Globalization.NumberFormatInfonumberFormat;

publicReader(stringName)

{

>fileName =Name;

}

publicvoidReadTable(outdouble[,]table, outintrows, outintcols)

{

>numberFormat = newSystem.Globalization.NumberFormatInfo();

>numberFormat.CurrencyDecimalSeparator = ".";

>string[]output =File.ReadAllLines(fileName);

>string[]aloneString =output[0].Split(newchar[] { ' ' });

//>double[,]temp = newdouble[output.Length,aloneString.Length];

>table = newdouble[output.Length,aloneString.Length];

>rows =output.Length;

>cols =aloneString.Length;

>for (>int і = 0; і <aloneString.Length; і++)

{

>table[0, і] =double.Parse(aloneString[i],numberFormat);

}

>for (>int і = 1; і <output.Length; і++)

{

>aloneString =output[i].Split(newchar[] { ' ' });

>for (>int j = 0; j <aloneString.Length; j++)

{

>table[i, j] =double.Parse(aloneString[j],numberFormat);

}

}

}

}

>classWriter

{

privatestaticstringfileName;

privatestaticstring[]outputTxt;

privatestaticdouble[,]matrix;

privatestaticstring[,]matrix1;

privatestaticintrow;

privatestaticintcol;

privatestaticSystem.Globalization.NumberFormatInfonumberFormat;

publicstaticvoidWriteTable(stringnameFile,double[,]table)

{

>Writer.fileName =nameFile;

>Writer.matrix =table;

>if (>Writer.matrix !=null)

{

>row =matrix.GetLength(0);

>col =matrix.GetLength(1);

>outputTxt = newstring[row];

>for (>int і = 0; і <row; і++)

{

>for (>int j = 0; j <col; j++)

{

>outputTxt[i] +=matrix[i,j].ToString();

>if(j != (>col - 1))

>outputTxt[i] += " ";

}

}

>File.WriteAllLines(nameFile,outputTxt);

}

}

publicstaticvoidWriteTableOfRule(stringnameFile,string[,]table)

{

>Writer.fileName =nameFile;

>Writer.matrix1 =table;

>if (>Writer.matrix1 !=null)

{

>row =matrix1.GetLength(0);

>col =matrix1.GetLength(1);

>outputTxt = newstring[row];

>for (>int і = 0; і <row; і++)

{

>for (>int j = 0; j <col; j++)

{

>outputTxt[i] +=matrix1[i, j];

>if (j != (>col - 1))

>outputTxt[i] += " ";

}

}

>File.WriteAllLines(nameFile,outputTxt);

}

}

}


4. Приклад роботи програми

4.1Многокритериальная завдання

1) Реалізуємо приклад. І тому скористаємося вже заготовленими файлами із вхідними даними:

>Рис

Знайдемо матрицю згоди:

>Рис

Знайдемо матрицю індексів незгоди:

>Рис


Знайдемо ядро бінарного відносини:

>Рис


Висновки

Через війну зробленого було розроблено програмне засіб на допомогу пошуку альтернативних варіантів рішень длямногокритериальних завдань.

Дане додаток можна використовувати лише якдемонстрационно-обучающее на тему «>Многокритериальние завдання. Метод альтернативних рішень» дисципліни «Теорія прийняття рішень».


Використовувана література

1. А.ВЛотов, І.І. ПоспєловаМногокритериальние завдання прийняття рішень Навчальний посібник.– М. : МАКР Пресс, 2008. – 197 з.

Використовувані програмні кошти

MicrosoftVisual Studio 2008

 


Схожі реферати:

Навігація