Скачиваний:
2
Добавлен:
02.11.2025
Размер:
33.71 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА»

Факультет инфокоммуникационных сетей и систем

Кафедра вычислительной техники и программной инженерии

ПРАКТИЧЕСКАЯ РАБОТА №9

По дисциплине

«Оптимизация и математические методы принятия решений»

Вариант 22

Выполнил:

Студент 2-го курса

Дневного отделения

Группы ИКПИ-32

Андреев А. А.,

Жилкин Д. А,

Яковлев М. А.

Преподаватель:

Владимиров С. А.

Санкт-Петербург

2025

Цель работы

Выполнить постановку и нахождение оптимального решения в нелинейных задачах, записанных в виде аналитических функций, используя метод множителей Лагранжа и теорему Каруша-Куна-Таккера.

Постановка задачи

Найти решение для следующей задачи:

Ход работы

  1. Определение типа задачи.

Составим матрицу вторых производных целевой функции f(x):

Главные миноры этой матрицы:

Главные миноры неотрицательные. Таким образом, целевая функция является выпуклой. Ограничения задачи линейны. Следовательно, исходная задача является задачей выпуклого программирования.

  1. Введем множество 𝑄 = {𝑥: 𝑥1 ≥ 0, 𝑥2 ≥ 0, 𝑥 ∈ 𝑅3 }. Запишем задачу в виде

𝑓(𝑥) = 𝑥12 + 𝑥22 + 𝑥32 → 𝑚𝑖𝑛

Ограничения задачи выражены в виде линейных функций, значит, проверка условия Слейтера не требуется.

  1. Составим функцию Лагранжа:

𝐹(𝑥, 𝜆) = 𝑥12 + 𝑥22 + 𝑥32 + 𝜆1(2𝑥1 − 𝑥2 + 4𝑥3 − 1) + 𝜆2(𝑥1 − 𝑥3 − 3),

𝑥 ∈ 𝑄, 𝜆 ∈ 𝑅2, 𝜆2

Найдем стационарные точки функции Лагранжа:

Решив данную систему методом Гаусса, получим: x1 = 0.61, x2 = 0.84, x3 = 0.15, 𝜆1 = −0.28, 𝜆2 = −0.65, что противоречит условию. Стационарных точек нет. Будем проверять наличие решения на границах множества 𝑄:

  • 𝐿1 = {𝑥: 𝑥1 = 0, 𝑥2 ≥ 0, 𝑥3 ≥ 0}

  • 𝐿2 = {𝑥: 𝑥1 ≥ 0, 𝑥2 = 0, 𝑥3 ≥ 0}

  • 𝐿3 = {𝑥: 𝑥1 ≥ 0, 𝑥2 ≥ 0, 𝑥3 = 0}

  • 𝐿4 = {𝑥: 𝑥1 = 0, 𝑥2 = 0, 𝑥3 ≥ 0}

  • 𝐿5 = {𝑥: 𝑥1 ≥ 0, 𝑥2 = 0, 𝑥3 = 0}

  • 𝐿6 = {𝑥: 𝑥1 = 0, 𝑥2 ≥ 0, 𝑥3 = 0}

  • 𝐿7 = {𝑥: 𝑥1 = 𝑥2 = 𝑥3 = 0}

  1. Рассмотрим 𝐿1 = {𝑥: 𝑥2 ≥ 0, 𝑥1 = 0, 𝑥3 ≥ 0}.

Задача примет вид 𝑓(𝑥) = 𝑥22 + 𝑥32 → 𝑚𝑖𝑛

Запишем функцию Лагранжа для задачи на границе 𝐿1:

𝐹(𝑥, 𝜆) = 𝑥22 + 𝑥32 + 𝜆1(−𝑥2 + 4𝑥3 − 1) + 𝜆2(3𝑥2 – 𝑥3 − 3), 𝑥2 ≥ 0, 𝜆2 ≥ 0

Составим систему для нахождения стационарных точек:

Получим x1 = 0, x2 = 1.1, x3 = 0.54, 𝜆1 = −0.951 𝜆2 = −0.95, что противоречит условию 𝜆2 ≥ 0.

  1. Рассмотрим 𝐿2 = {𝑥: 𝑥1 ≥ 0, 𝑥2 = 0, 𝑥3 ≥ 0}.

Задача примет вид 𝑓(𝑥) = 𝑥12 + 𝑥32 → 𝑚𝑖𝑛

Запишем функцию Лагранжа для задачи на границе 𝐿2:

𝐹(𝑥, 𝜆) = 𝑥12 + 𝑥32 + 𝜆1(2𝑥1 + 4𝑥3 − 1) + 𝜆2(𝑥1 − 𝑥3 − 3), 𝑥1,3 ≥ 0, 𝜆2 ≥ 0

Составим систему для нахождения стационарных точек:

Из решения методом Гаусса, получим:

𝜆1 = ; 𝜆2 = ; ;

Так как 𝜆2 ≥ 0, то решение не подходит.

  1. Рассмотрим 𝐿3 = {𝑥: 𝑥1 ≥ 0, 𝑥2 ≥ 0, 𝑥3 = 0}.

Задача примет вид 𝑓(𝑥) = 𝑥12 + 𝑥22 → 𝑚𝑖𝑛

Запишем функцию Лагранжа для задачи на границе 𝐿3:

𝐹(𝑥, 𝜆) = 𝑥12 + 𝑥22 + 𝜆1(2𝑥1 + 𝑥2 − 1) + 𝜆2(𝑥1 + 3𝑥2 − 3), 𝑥1,2 ≥ 0, 𝜆2 ≥ 0

Составим систему для нахождения стационарных точек:

Из решения методом Гаусса, получим:

𝜆1 = ; 𝜆2 = ; ;

Так как 𝜆2 ≥ 0, то решение не подходит.

  1. Рассмотрим 𝐿4 = {𝑥: 𝑥1 = 0, 𝑥2 = 0, 𝑥3 ≥ 0}.

Задача примет вид 𝑓(𝑥) = 𝑥32 → 𝑚𝑖𝑛

Запишем функцию Лагранжа для задачи на границе 𝐿4:

𝐹(𝑥, 𝜆) = 𝑥32 + 𝜆1(4𝑥3 − 1) + 𝜆2(𝑥3 − 3), 𝜆2 ≥ 0

Составим систему для нахождения стационарных точек:

Из решения этой системы методом Гаусса, получим, что нет решений.

  1. Рассмотрим 𝐿5 = {𝑥: 𝑥1 ≥ 0, 𝑥2 = 0, 𝑥3 = 0}.

Задача примет вид 𝑓(𝑥) = 𝑥12 → 𝑚𝑖𝑛

Запишем функцию Лагранжа для задачи на границе 𝐿5:

𝐹(𝑥, 𝜆) = 𝑥12 + 𝜆1(2𝑥1 − 1) + 𝜆2(𝑥1 − 3), 𝜆2 ≥ 0

Составим систему для нахождения стационарных точек:

Система решений не имеет.

  1. Рассмотрим 𝐿6 = {𝑥: 𝑥1 = 0, 𝑥2 ≥ 0, 𝑥3 = 0}.

Задача примет вид 𝑓(𝑥) = 𝑥22 → 𝑚𝑖𝑛

Запишем функцию Лагранжа для задачи на границе 𝐿6:

𝐹(𝑥, 𝜆) = 𝑥22 + 𝜆1(−𝑥2 − 1) + 𝜆2(3𝑥2 − 3), 𝜆2 ≥ 0

Составим систему для нахождения стационарных точек:

Условия и противоречивы, система не имеет решений.

  1. Рассмотрим 𝐿7 = {𝑥: 𝑥1 = 0, 𝑥2 = 0, 𝑥3 = 0}.

Решение не может быть найдено.

  1. Заключение.

Оптимального решения не найдено.

Программа

#include <iostream>

#include <vector>

#include <cmath>

using namespace std;

int main() {

// Создаем матрицу коэффициентов

vector<vector<double>> matrix = {

{2, 0, 0, 2, 1, 0},

{0, 2, 0, -1, 3, 0},

{0, 0, 2, 4, -1, 0},

{2, -1, 4, 0, 0, 1},

{1, 3, -1, 0, 0, 3}

};

int n = matrix.size();

// Прямой ход метода Гаусса

for (int i = 0; i < n; i++) {

// Поиск максимального элемента в столбце

int maxRow = i;

for (int k = i + 1; k < n; k++) {

if (abs(matrix[k][i]) > abs(matrix[maxRow][i])) {

maxRow = k;

}

}

// Обмен строк

if (maxRow != i) {

swap(matrix[i], matrix[maxRow]);

}

// Приведение к треугольному виду

for (int k = i + 1; k < n; k++) {

double factor = matrix[k][i] / matrix[i][i];

for (int j = i; j <= n; j++) {

matrix[k][j] -= factor * matrix[i][j];

}

}

}

// Обратный ход

vector<double> solution(n);

for (int i = n - 1; i >= 0; i--) {

solution[i] = matrix[i][n];

for (int j = i + 1; j < n; j++) {

solution[i] -= matrix[i][j] * solution[j];

}

solution[i] /= matrix[i][i];

}

cout << "Решение системы:" << endl;

cout << "x = " << solution[0] << endl;

cout << "y = " << solution[1] << endl;

cout << "z = " << solution[2] << endl;

cout << "a = " << solution[3] << endl;

cout << "b = " << solution[4] << endl;

return 0;

}