МЕТОДЫ ОПТИМИЗАЦИИ. КОМПЛЕКТ 3
Лекция 3: симплексный метод.
Лабораторная работа 3: методы с использованием производных.

СОДЕРЖИМОЕ
simplex_exact.py — прямой симплекс-метод с правилом Бланда
                  и точной рациональной арифметикой.
derivative_methods.py — деление пополам по знаку производной,
                       метод хорд и метод Ньютона с защитными шагами.
run_experiments.py — расчёт индивидуального варианта, CSV и графики.
variants.json — параметры 18 вариантов из методички.

НАЧАЛО РАБОТЫ
Распакуйте все файлы в одну папку. Откройте терминал в этой папке.
Используйте Python 3. Если команда интерпретатора в вашей системе
называется python3, замените python на python3 во всех командах ниже.

1. Пример из лекции:
   python simplex_exact.py

   Значения целевой функции: 0, 15/2, 9.
   Итоговый вектор: (1, 3, 0, 0).
   Входная задача: max c^T x при A x = b, x >= 0.
   Начальный допустимый базис задаётся пользователем. Фаза поиска
   начального базиса в этой учебной программе не реализована.
   Индексы столбцов в аргументе basis начинаются с нуля:
   basis=[2, 3] означает математический базис (x3, x4).
   Для точных дробей задавайте строки '1/3' или объекты Fraction;
   десятичный float уже содержит двоичное приближение.

2. Контрольный пример лабораторной:
   python derivative_methods.py

   Программа сравнивает три метода при eps_x = 1e-2, 1e-4, 1e-6
   для f(x) = x^4/4 + x^2/2 - x на [0, 2].
   Контрольный минимум: x* = 0.6823278038280193,
   f(x*) = -0.3953530449018225.
   Для этих двух файлов дополнительных библиотек не требуется.

3. Индивидуальный вариант с таблицами и графиками:
   python -m pip install matplotlib
   python run_experiments.py 1

   Замените 1 своим номером от 1 до 18. Программа создаст
   в текущей папке каталог results_variant_01 (номер изменяется):
   results.csv — девять запусков: три метода и три допуска;
   history_bisection.csv, history_chord.csv, history_newton.csv —
   история пробных точек при eps_x = 1e-6;
   function_and_derivative.png — функция и первая производная;
   errors.png — ошибка аргумента по числу пробных точек.
   CSV записан в UTF-8 с BOM, разделитель — точка с запятой.
   Повторный запуск того же варианта заменяет его таблицы и рисунки.

УСЛОВИЯ И ОБОЗНАЧЕНИЯ ЛАБОРАТОРНОЙ
Методы предназначены для дважды непрерывно дифференцируемой функции
с известной нижней границей f''(x) >= mu > 0 на исходном отрезке.
Значение mu следует обосновать аналитически. Программа не доказывает
это условие по значениям функции в отдельных точках.

eps_x — допустимая абсолютная ошибка аргумента.
bound (E) — верхняя оценка ошибки при выполнении условий методички.
probes (k) — число внутренних пробных точек.
nf, ng, nh — число вычислений f, f' и f'' соответственно.
Проверки производной на двух концах входят в ng, но не в k.
history хранит границы отрезка до обновления на данном шаге.
Метод Ньютона периодически использует середину отрезка;
выходящий из текущего интервала шаг также заменяется серединой.

ПРОВЕРКА И ОТЧЁТ
Сначала воспроизведите контрольный пример. Затем выполните ручные
расчёты своего варианта и задания раздела 10 методички.
В таблице параметров известный минимум x*=h используется только
для проверки результата. Функция minimize не получает x*.
Сравнивайте фактическую ошибку, оценку E и заданный допуск.
Отдельно учитывайте стоимость вычисления второй производной.

Код проверен на всех 18 вариантах при трёх указанных допусках.
Для симплекс-метода проверены оптимум, неограниченность, нулевой шаг
и пример, в котором правило Бланда предотвращает зацикливание.
