Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • ownCloud
    • JupyterHub
    • JupyterHub 2
    • VNC
    • Soft
  1. ИСиТ
  2. РиОИИС
  3. Практика
  4. Лаб. работа “Методы одномерной оптимизации”
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Фомы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”

Содержание

  • Постановка задачи
  • Локализация экстремума
  • Метод оптимального пассивного поиска
  • Метод дихотомии
  • Метод золотого сечения
  • Метод Фибоначчи
  • Варианты индивидуальных заданий
  1. ИСиТ
  2. РиОИИС
  3. Практика
  4. Лаб. работа “Методы одномерной оптимизации”

Лаб. работа “Методы одномерной оптимизации”

Разработка и оптимизация интеллектуальных информационных систем
Практика
Автор

Бизюк Андрей

Дата публикации

29 февраля 2024 г.

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

Найти точку минимума функции с заданной погрешностью

\[ f(x)=(x-8)^2-7 \]

Локализация экстремума

Определим отрезок, на котором находится точка минимума

Функция имеет единственную точку минимума на отрезке \([0;20]\)

Метод оптимального пассивного поиска

Для решения задачи методом оптимального пассивного поиска будем использовать MsExcel или LibreOffice.

Зададим исходные данные

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

Выберем погрешность \(\epsilon = 0.5\). Количество точек найдем по формуле \(N=\frac{x_{max}-x_{min}}{2\epsilon}=\frac{20-0}{2\times 0.5}=20\)

Выберем точки \(x_i,\ i=1..N\), в которых нужно найти значение функции. Согласно методу оптимального пассивного поиска, точка \(x_1\) должна иметь координату \(x_{min}+\epsilon\). Остальные точки находятся по формуле: \(x_i=x_{i-1}+2\epsilon,\ i=2..N\).

Найдем значение функции для всех \(x_i\):

Построим график \(f(x)\) по полученным данным. Нужно вставить диаграмму точечного типа, а затем выбрать данные для нее.

Определим точку минимума и минимальное значение функции. Напишем формулы, которые найдут эти значения автоматически. Для этого нам потребуются функции МИН, ПОИСКПОЗ и ИНДЕКС.

Таким образом мы получили следующее решение:

\[ x_{opt}=7.5,\ f(x_{opt})=-6.75 \]

Найденное значение \(x_{opt}\) отличается от истинной точки минимума \(x^*=8\) на величину, не превышающую \(\epsilon\), следовательно, мы выполнили условие задачи.

Метод дихотомии

Для решения задачи методом дихотомии, необходимо написать программу, реализующую этот алгоритм.

Приведем пример реализации алгоритма метода дихотомии в виде рекурсивной функции в среде Maple:

dichotomy := proc(a, b, f, delta, eps)
local x1, x2; global count; 
if b - a < eps then return a; end if; 
count := count + 2; 
x1 := 1/2*a + 1/2*b - delta; 
x2 := 1/2*a + 1/2*b + delta; 
if f(x2) < f(x1) then 
  return dichotomy(x1, b, f, delta, eps); 
end if; 
return dichotomy(a, x2, f, delta, eps); 
end proc:

Пример использования этой функции для решения задачи поиска точки минимума функции:

f := x -> (x - 8)^2 - 7:
a := 0:
b := 20:
count := 0:
epsilon := 0.001:
delta := 0.00001:
x_o := dichotomy(a, b, f, delta, epsilon):
x_opt = x_o;
f_opt = f(x_o);
N = count;
 
#                      x_opt = 7.999869929
#                      f_opt = -6.999999983
#                             N = 30

Метод золотого сечения

Приведем пример реализации алгоритма метода золотого сечения в виде рекурсивной функции в среде Maple:

goldenratio := proc(a, b, f, x, y, n, eps) 
local x1, x2, f1, f2; global count; 
if b - a < eps then return a; end if;
count := count + 1;

if n = 1 then 
    x1 := b + a - x; 
    x2 := x; 
    f1 := f(x1); 
    f2 := y; 
else 
    x1 := x; 
    x2 := b + a - x; 
    f1 := y; 
    f2 := f(x2); 
end if; 

if evalf(f2) < evalf(f1) then 
    return goldenratio(x1, b, f, x2, f2, 2, eps);
end if;
return goldenratio(a, x2, f, x1, f1, 1, eps);
end proc:

Пример использования этой функции для решения задачи поиска точки минимума функции:

f := x -> (x - 8)^2 - 7:
tau := (1 + sqrt(5))/2:
a := 0:
b := 20:
x1 := evalf((b + a*(tau - 1))/tau):
count := 1:
goldenratio(a, b, f, x1, f(x1), 1, 0.001);
count;
#                           7.99948468
#                              22

Метод Фибоначчи

Приведем пример реализации алгоритма метода Фибоначчи в виде рекурсивной функции в среде Maple:

fibonacciseries := proc(n) 
local s, i; 
s := [1, 1]; 
for i from 3 to n do 
    s := [op(s), s[i - 1] + s[i - 2]]; 
end do; 
return s; 
end proc:
fibonacci := proc(a, b, f, x, y, n, s, l)
local x1, x2, f1, f2; global count;
if count >= nops(s) - 2 then return evalf(a); end if;
count := count + 1;
if n = 1 then
    x1 := a + l*s[nops(s) - count - 1]/s[nops(s)];
    x2 := x; f1 := f(x1);
    f2 := y;
else
    x1 := x;
    x2 := a + l*s[nops(s) - count]/s[nops(s)];
    f1 := y; f2 := f(x2);
end if;

if evalf(f2) < evalf(f1) then
    return fibonacci(x1, b, f, x2, f2, 2, s, l);
else
    return fibonacci(a, x2, f, x1, f1, 1, s, l);
end if;
end proc:

Пример использования этой функции для решения задачи поиска точки минимума функции:

f := x -> (x - 8)^2 - 7:
s2 := fibonacciseries(24);
x1 := a + (b - a)*s2[(nops(s2) - 1) - 1]/s2[nops(s2)]:
count := 1:
a := 0:
b := 20:
fibonacci(a, b, f, x1, f(x1), 1, s2, b - a);
count;

# s2 := [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368]
#                          7.999482402
#                              22

Варианты индивидуальных заданий

  1. \(f(x) = x^2 + 3x + 2\)
  2. \(f(x) = e^{0.5x} - 2x\)
  3. \(f(x) = \sin(2x) + x\)
  4. \(f(x) = -\ln(2x + 1)+x\)
  5. \(f(x) = 2x^3 - 5x^2 + x + 3\)
  6. \(f(x) = -\sqrt{3x} + x\)
  7. \(f(x) = \cos(2x) + \frac{1}{x+1}\)
  8. \(f(x) = x \cdot \ln(0.5x + 1)\)
  9. \(f(x) = 3x^3 - 2x^2 + 4x - 1\)
  10. \(f(x) = \frac{1}{2}x^2 - 2x + 4\)
  11. \(f(x) = e^{-0.5x} + \cos(x)\)
  12. \(f(x) = \frac{1}{x^2} + 2x + 1\)
  13. \(f(x) = \tan(0.5x) + x^2\)
  14. \(f(x) = \frac{1}{x} + \sqrt{2x}\)
  15. \(f(x) = \sinh(0.5x) + 0.5x\), где \(\sinh(x)=\frac{e^x-e^{-x}}{2}\)
Наверх
JupyterHub
Лаб. работа “Методы многомерной оптимизации”