Оптимизационные задачи
Поиск максимального и минимального чисел в списке
В практике математических прикладных вычислений важная роль принадлежит оптимизационным задачам, например таким, как поиск минимальных и максимальных значений функций одной или нескольких переменных. Mathematica дает разнообразные возможности решения задач оптимизации – от поиска элементов списка с минимальным или максимальным значением до поиска локальных и даже глобальных минимумов функций, заданных аналитически.
Для поиска максимального и минимального значений ряда чисел, входящих в список, система Mathematica предоставляет следующие средства:
- Max [x1, х2,…]– возвращает наибольшее значение из xi;
- Max[{x1, x2,…}, {y1,…},…] – выбирает наибольший элемент из нескольких списков;
- Min[x1, x2,…] – возвращает наименьшее значение из xi;
- Min[{x1, x2,…}, {y1,…},…] – выбирает наименьший элемент из нескольких списков.
Следующие примеры показывают действие этих простых функций.
Ввод (In) | Вывод(Out) |
---|---|
Мах [1.5.2.6.5.3.4] | 6.5 |
Мах [ {1.3.2},{4.5.6},{9.8.7} ] | 9 |
Min [1.5.2.6.5,-3.4] | -3 |
Min [ {1.3.2},{4.5.6},{9.8.7} ] | 1 |
Поиск локального минимума аналитической функции
Если нужен поиск локального минимума некоторой аналитической функции, используется функция FindMinimum [ f, {х, х0 } ], которая выполняет поиск локального минимума функции f, начиная со значения х=х0, и возвращает его значение.
Для указания градиента минимизируемой функции используется опция Gradient.
Приведем примеры применения функции FindMinimum:
FindMinimum[
-
xExp[
-
2
x], {x,
1
}]
{
-
0.18394
, {x
^
0.5
}}
FindMinimum[
-
xExp[
-
2
x], {x,
0.2
,
6
,
1
}]
{
-
0.18394
, {x
^
0.5
}}
FindMinimum [
-
5xExp
[
-
x
/
2
] (
2
+
Sin[
3x
]), {x,
1
}]
{
-
7.17833
, {x
^
0.783139
}}
FindMinimum[
-
5xExp
[
-
x
/
2
] (
2
+
Sin[
3
x]), {x,
3
}]
(
-
10.6299
, {x
^
2.5805
}}
FindMinimum[
-
5xExp
[
-
x
/
2
] (
2
+
Sin[
3x
]), {x,
4
}]
{
-
6.79134
, {x
^
4.6179
}}
FindMinimum[
100
(y
-
x2)
2
+
(
1
-
x)
2
, {x,
0
}, {y,
0
},
AccuracyGoal
>
>
Automatic]
{
9.90511
*
10
-
13
, {x
>
1
., y
^
0.999999
}}
Эти примеры показывают, что выбирая разные начальные значения х, можно найти ряд минимумов функции f(x), разумеется, если таковые имеют место. Если необходимо разыскивать локальные максимумы, достаточно перед функцией поставить знак "минус" или умножить ее на -1.
Поиск глобального максимума и минимума аналитической функции
Следующие две функции служат для поиска глобального максимума и минимума аналитически заданной функции:
- ConstrainedMax [f, {inequalities}, {x, у,…}] – ищет глобальный максимум функции f в области, определяемой неравенствами inequalities. Полагается, что все переменные х, у… неотрицательны;
- ConstrainedMin [f, {inequalities}, {x, у,…}]– ищет глобальный минимум функции f в области, определяемой неравенствами inequalities. Все переменные х, у… полагаются неотрицательными.
Решение задач линейного программирования
Две последние функции решают типовые задачи линейного программирования. В дополнение к ним может использоваться функция LinearProgramming[с, m, b], которая ищет вектор х, минимизирующий величину с. х в соответствии с условиями m.x>=b и х>=0.
Рассмотрим типичный пример на линейное программирование. Пусть цех малого предприятия должен изготовить 100 изделий трех типов, причем не менее 20 штук каждого. На изготовление этих изделий уходит, соответственно, 4, 3.4 и 2 кг металла. Имеющийся в наличии запас материала – 700 кг. Спрашивается, сколько изделий x1, х2 и х3 каждого типа надо выпустить для обеспечения максимальной стоимости продукции, если цена изделий равна, соответственно, 4, 3 и 2 рубля.
Ниже представлено решение этой задачи с помощью функции ConstrainedMax:
ConstrainedMax [
4
*
x1
+
3
*
x2
+
2
*
x3,
{x1
>
=
20
, x2
>
=
20
, x3
>
=
20
,
4
*
x1
+
3
.
4
*
x2
+
2
*
x3
<
=
340
,
4.75
*
x1
+
11
*
x2
+
2
*
x3
<
=
700
,
x1
+
x2
+
x3
=
=
100
},
{x1, x2, x3}]
{
332
., {x1
^
56
^
x2
^
20
., x3
^
24
.}}
После имени функции указывается максимизируемая целевая функция, затем перечисляются все ограничения и, наконец, задается список искомых переменных. Результатом вычислений является максимально достижимая стоимость продукции и список переменных, отражающих количество изделий каждого типа.
Примечание:
Задачи минимизации традиционно относятся к сложным задачам программирования – особенно при поиске глобального минимума. Наличие в ядре системы Mathematica их реализаций делает систему привлекательной для решения задач этого класса.