p> for (int j = 0; j
list.Add (Convert.ToInt32 (dataGridView1 [j, i]. Value.ToString ()));
y.Add (list);
}
}
else if (tabControl1.SelectedIndex == 1)
{
for (int i = 0; i
{
var list = new List ();
for (int j = 0; j
{
int sum = 0;
for (int k = 0; k
{
int ai = Convert.ToInt32 (dgA [k, j]. Value.ToString ());
int ki = Convert.ToInt32 (dgK [k, j]. Value.ToString ());
int xi = Convert.ToInt32 (dgX [k, i]. Value.ToString ());
sum + = ai * Convert.ToInt32 (Math.Pow ((double) xi, (double) k));
}
list.Add (sum);
}
y.Add (list);
}
}
}
private void button2_Click (object sender, EventArgs e)
{
textBox1.Text = "";
paretoSet = new List ();
if (y.Count == 0)
GetValuesFromGrid ();
pareto = new Pareto ();
paretoSet = pareto.GetPareto (y);
paretoSet2 = pareto.GetPareto2 (y);
WriteList ("метод1:", paretoSet);
WriteList ("метод2:", paretoSet2);
SolutionsView solView = new SolutionsView (pareto.GetParetoList (y));
solView.Show ();
if (krit == 2 | | n == 2)
DrawGraph ();
}
private void WriteList (string text, List set)
{
textBox1.Text + = text;
foreach (int val in set)
textBox1.Text + = (val +1). ToString () + ";";
}
private void InitGrid ()
{
krit = Convert.ToInt32 (comboBox3.Text);
var = Convert.ToInt32 (comboBox4.Text);
comp = Convert.ToInt32 (comboBox5.Text);
dgA.ColumnCount = comp;
dgK.ColumnCount = comp;
dgX.ColumnCount = comp;
dgA.RowCount = krit;
dgK.RowCount = krit;
dgX.RowCount = var;
}
private void button3_Click (object sender, EventArgs e)
{
InitGrid ();
for (int q = 0; q
{
dgK.Columns [q]. Name = (q + 1). ToString ();
dgA.Columns [q]. Name = (q + 1). ToString ();
dgX.Columns [q]. Name = (q + 1). ToString ();
}
}
private void dataGridView1_CellFormatting (object sender, DataGridViewCellFormattingEventArgs e)
{
}
// Двовимірний випадок/графічне представлення
private void DrawGraph ()
{
GraphView form2 = new GraphView ();
form2.Show ();
GetValuesFromGrid ();
int cnt;
if (m == 0)
cnt = var;
else cnt = m;
int [] x_ = new int [cnt - paretoSet.Count];
int [] y_ = new int [cnt - paretoSet.Count];
for (int i = 0; i
{
x_ [i] = y [pareto.deleted [i]] [0];
y_ [i] = y [pareto.deleted [i]] [1];
}
cnt = paretoSet.Count;
int [] pareto_x = new int [cnt];
int [] pareto_y = new int [cnt];
for (int i = 0; i
{
pareto_x [i] = y [paretoSet [i]] [0];
pareto_y [i] = y [paretoSet [i]] [1];
}
panel1 = form2.GetPanel ();
var control = new Graph (). DisplayGrahpics (panel1, x_, y_, pareto_x, pareto_y);
panel1.Controls.Clear ();
panel1.Controls.Add (control);
panel1.Invalidate ();
}
// Random values ​​
private void button2_Click_1 (object sender, EventArgs e)
{
Random random = new Random ();
if (tabControl1.SelectedIndex == 0)
{
for (int i = 0; i
{
for (int j = 0; j
{
dataGridView1 [j, i]. Value = random.Next (20);
}
}
}
else if (tabControl1.SelectedIndex == 1)
{
for (int i = 0; i
{
for (int j = 0; j
{
dgA [i, j]. Value = random.Next (5);
dgK [i, j]. Value = random.Next (5);
}
for (int q = 0; q
{
dgX [i, q]. Value = random.Next (5);
}
}
}
}
private void сохранітьКакToolStripMenuItem_Click (object sender, EventArgs e)
{
if (this.saveFileDialog1.ShowDialog () == DialogResult.OK)
{
if (y.Count == 0)
GetValuesFromGrid ();
new File (). WriteData (y, this.saveFileDialog1.FileName);
}
}
private void откритьToolStripMenuItem_Click (object sender, EventArgs e)
{
if (this.openFileDialog1.ShowDialog () == DialogResult.OK)
{
y = new File (). ReadData (this.openFileDialog1.FileName);
FillGridFromList (y);
}
}
private void FillGridFromList (List > list)
{
n = list [0]. Count;
m = list.Count;
dataGridView1.ColumnCount = n;
dataGridView1.RowCount = m;
comboBox1.Text = n.ToString ();
comboBox2.Text = m.ToString ();
for (int i = 0; i
{
for (int j = 0; j
dataGridView1 [j, i]. Value = list [i] [j];
}
}
}
}
4. Приклад роботи програми
4.1 Багатокритеріальна задача
1) Реалізуємо приклад, описаний у посібнику № 1 з переліку використаної літератури. Для цього скористаємося вже заготовленим файлом прімер1.txt:
2) Знайдемо Парето-оптимальні рішення:
4.2 Двухкрітеріальная завдання
1) Продемонструємо роботу програми для двухкрітеріальной завдання. Нехай кількість рішень буде одно 11.
2) Результат роботи програми:
Червоним кольором виділені Парето-оптимальні рішення. Чорним - домініруемие рішення.
3. Аналітичне завдання критеріїв
Нехай кількість критеріїв 6
Кількість рішень 16
Вагові значення будуть знаходитися за формулою:
, де p - число критеріїв, n - кількість компонент рішення, a, k, x - задаються в таблиці:
В результаті отримуємо список Парето-оптимальних рішень, які складаються з трьох векторів:
Висновки
У результаті проробленої роботи було розроблено програмний засіб для пошуку Парето-оптимальних рішень для багатокритеріальних задач.
Цей додаток може використовуватися лише як демонстраційно-навчальне по темі В«Багатокритеріальні завдання. Безліч Парето В»дисципліниВ« Теорія прийняття рішень В». Це пов'язано з тим, що практично неможливо формалізувати математичну модель векторних оцінок. Кожна задача пошуку оптимальних рішень вимагає власного підходу.
Використана література
1. В.Д. Ногін. Прийняття рішень при багатьох критеріях. Учебнометодіческое
посібник. - СПб. Видавництво В«ЮТАСВ», 2007. - 104 с.
2. Парето-оптимальні рішення багатокритеріальних задач. Подінвоскій В.В., Ногін В.Д. -М. Головна редакція фізико-математичної літератури, 1982. - 256с.
Використовувані програмні засоби
Microsoft Visual Studio 2010