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]);
┌ ┌ ┐┐
│ │ 5. ││
│ │ ││
│2.,│ 3. ││
│ │ ││
│ │ ││
└ └2.50000000000000000┘┘
Ряд других подобных примеров применения функции LPSolve можно найти в справке по этой функции.
6.6.4. Квадратичное программирование — QPSolve
Для реализации квадратичного программирования служит функция
QPSolve(obj, constr, bd, opts)
С параметрами, описанными выше для функции LPSolve. Пример реализации квадратичного программирования представлен на рис. 6.5. Здесь оптимизируется выражение -3х²-2y², которое квадратично зависит от переменных
Рис. 6.5. Пример квадратичного программирования
Эта функция также может быть записана в матричной форме:
QPSolve(obj, lc, bd, opts)
Пример применения этой функции дан ниже:
> с := Vector([2, 5.1 , datatype=float):
H := Matrix([[6, 3], [3, 4]], datatype=float):
A := Matrix([[-1,1]], datatype=float):
b := Vector([-2], datatype=float): QPSolve([с, H], [A, b]);
┌ ┌0.46666666666666564┐┐
│-3.5333333333333,│ ││
│ │-1.6000000000000030││
└ └ ┘┘
Ряд подобных примеров можно найти в справке по данной функции.
6.6.5. Нелинейное программирование — NLPSolve
Нелинейное программирование позволяет решать задачи оптимизации при нелинейных зависимостях целевой функции от ее аргументов. Для этого в пакете Optimization имеется функция:
NLPSolve(obj, constr, bd, opts)
NLPSolve(opfobj, ineqcon, eqcon, opfbd, opts)
Ее параметры те же, что и у ранее описанных функций. В связи с этим ограничимся парой примеров ее применения при целевых функциях одной и двух переменных:
> NLESolve(х*ехр(-х), х=0..6, maximize);
> NLPSolve(х*y*ехр(-х)*ехр(-y), х=0..6, y=0..6,maximize);
В оптимизируемых функциях этих примеров присутствует экспоненциальная зависимость, что и указывает на решение задачи нелинейного программирования. Однако следует отметить, что ограничения должны быть линейными — в противном случае возвращается сообщение об ошибке с указанием на необходимость обеспечения линейности ограничивающих условий.
Возможна и матричная форма функции:
NLPSolve(n, р, nc, nlc, lc, bd, opts)
NLPSolve(n, р, lc, bd, opts)
Примеры на ее применение можно найти в справке по функции NLPSolve.
6.6.6. Работа с функцией импорта данных из файлов — ImportMPC
Для импорта данных из файлов служит функция:
ImportMPS(filename [, maxm, maxn, lowbnd, upbnd, opts])
В ней используются следующие параметры:
• filename — имя файла для MPS(X) в виде строки;
• maxm — максимальное число линейных ограничений;
• maxn — максимальное число переменных;
• lowbnd — значение нижней границы для переменных;
• upbnd — значение верхней границы для переменных;
• opts — выражения в виде опций, записываемых в форме option=value, где option один из объектов rhsname, rangename или boundsname, заданный для Import MPS команд.
С деталями применения этой функции можно ознакомиться по справке по ней.