Академический Документы
Профессиональный Документы
Культура Документы
Отчёт
по лабораторной работе № 4
по дисциплине «Теория систем и системный анализ»
Вариант 12
Выполнил:
Проверил:
г. Москва,
20// г.
Цель работы
Изучить постановку задачи многокритериальной оптимизации (МКО); овладеть
навыками решения задач МКО с помощью различных методов, осуществить
сравнительный анализ результатов, полученных при помощи разных методов.
Постановка задачи
Выбрать лучшую из альтернатив решения предложенной задачи по варианту из
табл.
точки зрения указанных критериев следующими методами:
1) заменой критериев ограничениями;
2) формированием и сужением множества Паррето;
3) методом взвешивания и объединения критериев;
4) методом анализа иерархий.
Условие варианта
№пп Задача, Критерии Описание предпочтений
альтернативы
Header.hpp
#pragma once
#include <vector>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <cstddef>
void displayHead() {
std::cout << " || A - Oxford || B - MSU || C - MIPT || D - TSU || " <<
std::endl;
std::cout << " Best variant
bad variant " <<
std::endl << std::endl;
std::cout << " 1) Grant : Oxford -> TSU -> MIPT
-> MSU " << std::endl;
std::cout << " 2) Qualification : Oxford -> MSU -> MIPT
-> TSU " << std::endl;
std::cout << " 3) Cost : TSU -> MIPT -> MSU
-> Oxford" << std::endl;
std::cout << " 4) Degree : Oxford -> MSU -> MIPT
-> TSU " << std::endl <<
std::endl << std::endl;
void answer(int i) {
if (i == 1) {
std::cout << std::endl << " Best : Oxford " << std::endl;
}
else if (i == 2) {
std::cout << std::endl << " Best : MSU " << std::endl;
}
else if (i == 3) {
std::cout << std::endl << " Best : MIPT " << std::endl;
}
else if (i == 4) {
std::cout << std::endl << " Best : TSU " << std::endl;
}
}
// 1
void limitedCriterialMethod(std::vector <double> first,
std::vector <double> second,
std::vector <double> third, std::vector <double> fouth) {
std::cout << std::endl << std::endl << " Norm matrix: " << std::endl <<
std::endl;
}
// 2
void parettoMethod(std::vector <double> first, std::vector
<double> second,
std::vector <double> third, std::vector <double> fouth) {
displayHead();
auto maxX = 0;
auto maxY = 0;
for (int i = 0; i<4; ++i) {
std::vector <double> line;
line.push_back(second[i]);
line.push_back(third[i]);
double maxXi = *std::max_element(std::begin(line), std::end(line));
double maxYi = *std::max_element(std::begin(line), std::end(line));
if (i == 0 || maxXi > maxX) maxX = maxXi;
if (i == 0 || maxYi > maxY) maxY = maxYi;
}
if (maxX>maxY) maxY = maxX;
else maxX = maxY;
auto minL = -1;
auto l = -1;
auto iter = 0;
// 3
void weightOfCriteris(std::vector <double> first, std::vector
<double> second,
std::vector <double> third, std::vector <double> fouth) {
std::cout << std::endl << " 3) " << std::endl;
displayHead();
displayMatrix(first, second, third, fouth, 1);
auto sum = 0;
for (int i = 0; i < 4; i++) {
sum += first[i];
}
for (int i = 0; i < 4; i++) {
first[i] /= sum;
}
sum = 0;
for (int i = 0; i < 4; i++) {
sum += second[i];
}
for (int i = 0; i < 4; i++) {
second[i] /= sum;
}
sum = 0;
for (int i = 0; i < 4; i++) {
sum += third[i];
}
for (int i = 0; i < 4; i++) {
third[i] /= sum;
}
sum = 0;
for (int i = 0; i < 4; i++) {
sum += fouth[i];
}
for (int i = 0; i < 4; i++) {
fouth[i] /= sum;
}
//-------------------------------------------------------------------------
---------------------------------------------
std::cout << std::endl << " Normalize matrix " << std::endl;
displayMatrix(first, second, third, fouth, 1);
std::vector<double> ownKrit;
sum = 0;
for (int i = 0; i < 4; i++) {
sum += firstn[i];
}
ownKrit.push_back(sum);
sum = 0;
for (int i = 0; i < 4; i++) {
sum += secondn[i];
}
ownKrit.push_back(sum);
sum = 0;
for (int i = 0; i < 4; i++) {
sum += thirdn[i];
}
ownKrit.push_back(sum);
sum = 0;
for (int i = 0; i < 4; i++) {
sum += fouthn[i];
}
ownKrit.push_back(sum);
sum = 0;
for (int i = 0; i < 4; i++) {
sum += ownKrit[i];
}
for (int i = 0; i < 4; i++) {
ownKrit[i] /= sum;
}
matrix2(first, second, third, fouth, ownKrit);
std::cout << std::endl << std::endl << std::endl;
// 4
void functionSogl(std::vector <std::vector <double>> one) {
std::vector<double> oneSum;
for (int i = 0; i < 4; ++i) {
double psum = 1;
for (int j = 0; j < 4; ++j) {
psum *= one[i][j];
}
oneSum.push_back(psum);
}
for (int i = 0; i < 4; ++i) {
oneSum[i] = pow(oneSum[i], 0.25);
}
double sumOfSum = 0;
for (int i = 0; i < 4; ++i) {
sumOfSum += oneSum[i];
}
for (int i = 0; i<4; ++i) {
oneSum[i] /= sumOfSum;
}
double alpha =
oneSum[0] * (one[0][0] + one[1][0] + one[2][0] + one[3][0]) +
oneSum[1] * (one[0][1] + one[1][1] + one[2][1] + one[3][1]) +
oneSum[2] * (one[0][2] + one[1][2] + one[2][2] + one[3][2]) +
oneSum[3] * (one[0][3] + one[1][3] + one[2][3] + one[3][3]);
std::cout << " Onoshenie soglasovannosty: " << (alpha - 4.) / (3.*0.9) <<
std::endl;
}
void analizIerarhij() {
std::cout << std::endl << " 4) " << std::endl;
displayHead();
std::vector<std::vector<double>> normalize;
functionSogl(cost);
std::cout << std::endl << std::endl << " Priorites: " << std::endl <<
std::endl;
std::vector<double> prioritestSum = functionSum(priorites, 1);
functionSogl(priorites);
main.cpp
#include <iostream>
#include "Header.hpp"
int main() {