• LPSolve — линейное программирование;
• LSSolve — улучшенная реализация метода наименьших квадратов;
• QPSolve — квадратичное программирование;
• NLPSolve — нелинейное программирование.
Функция ImportMPC обеспечивает ввод данных для оптимизации из файла, а функций Interactive позволяет работать с интерактивным Maplet-окном для оптимизации.
С пакетом Optimization можно познакомиться по его справке. В ее разделе Examples есть довольно обширный документ с примерами применения пакета — дополнительными к тем, которые даются к функциям пакета в справке. Начало этого документа представлено на рис. 6.3. В нем представлены основные задачи, решаемые пакетом Optimization — линейное, квадратичное и нелинейное программирование, а также приближение данных и функциональных зависимостей методом наименьших квадратов (нелинейная регрессия).
Рис. 6.3. Начало документа с примерами применения пакета Optimization
6.6.2. Работа с функциями Minimize и Maximize
Функции Minimize и Maximize служат для поиска минимумов и максимумов математических выражений с учетом ограничений самыми современными численными методами. Функции записываются в виде:
Minimize(obj [, constr, bd, opts])
Minimize(opfobj [, ineqcon, eqcon, opfbd, opts])
Maximize(obj [, constr, bd, opts])
Maximize(opfobj [, ineqcon, eqcon, opfbd, opts])
Параметры функций следующие:
• obj — алгебраический объект, целевая функция;
• constr — список с ограничивающими условиями;
• bd — последовательность вида name=range, задающая границы для одной или более переменных;
• opts — равенство или равенства вида option=value, где option одна из опции feasibilitytolerance, infinitebound, initialpoint, iterationlimit или optimalitytolerance, специфицированных в команде Minimize или Maximize.
• opfobj — процедура, целевая функция;
• ineqcon — множество или список процедур с ограничениями типа неравенств;
• eqcon — множество или список процедур с ограничениями типа равенств;
• opfbd — последовательность пределов; границы для всех переменных; Примеры применения этих функций представлены ниже:
> Maximize(sin(х)/х);
[1., [х=2.93847411867272567 10 -11]]
> Minimize(х^2+у^2);
[0., [х=0., у=0.]]
> Minimize(sin(х)/х, initialpoint={x=5});
[-0.217233628211221636 , [х=4.49340945792364720 ]]
> Maximize(sin(x*y*z));
[1., [x=1.16244735150962364, z=1.16244735150962364, y=1.16244735150962364]]
> Minimize(2*х+3*y, {3*х-y<=9, х+y>=2}, assume=nonnegative);
[4., [х=2., y=0.]]
Из этих примеров видно, что результаты вычислений представляются в виде чисел с плавающей точкой с так называемой двойной точностью (правильнее было бы сказать с двойной длиной или разрядностью). При вычислениях используются алгоритмы группы NAG и решатели, описанные ниже.
6.6.3. Линейное программирование — LPSolve
Для решения задач линейного программирования в пакете Optimization введена функция:
LPSolve(obj [, constr, bd, opts])
Она имеет следующие параметры:
• obj — алгебраическое выражений, целевая функция;
• constr — множество или список линейных ограничений;
• bd — последовательность вида name=range, задающая границы одной или многих переменных;
• opts — равенство или равенства в форме option=value, где option одна из опций assume, feasibilitytolerance, infinitebound, initialpoint, iterationlimit или maximize, специализированных для команды LPSolve.
Пример на решение задачи линейного программирования дан на рис. 6.4. Здесь оптимизируется целевая функция -3x-2у, которая линейно зависит от переменных х и у. В этом примере интересна техника графической визуализации решения.
Рис. 6.4. Пример решения задачи линейного программирования
Эта функция может задаваться также в матричной форме:
LPSolve(c [, lc, bd, opts])
Здесь с вектор, задающий целевую функция, остальные параметры были определены выше. Пример применения функции LPSolve в матричном виде представлен ниже:
> с := Vector([-1,4,-2], datatype=float):
bl := Vector([2,3,1], datatype=float):
bu := Vector([5,8,2.5], datatype=float):
LPSolve(с, [], [bl, bu]);
┌ ┌ ┐┐
Читать дальше
Конец ознакомительного отрывка
Купить книгу