optimization of sum of multi variable functions

Refresh

December 2018

Views

431 time

2

Imagine that I'm a bakery trying to maximize the number of pies I can produce with my limited quantities of ingredients.

Each of the following pie recipes A, B, C, and D produce exactly 1 pie:

A = i + j + k
B = t + z
C = 2z
D = 2j + 2k

*The recipes always have linear form, like above.

I have the following ingredients:

4 of i
5 of z
4 of j
2 of k
1 of t

I want an algorithm to maximize my pie production given my limited amount of ingredients.

The optimal solution of these example inputs would yield me the following quantities of pies:

2 x A
1 x B
2 x C
0 x D
= a total of 5 pies

I can solve this easily enough by taking the maximal producer of all combinations, but the number of combos becomes prohibitive as the quantities of ingredients increases. I feel like there must be generalizations of this type of optimization problem, I just don't know where to start.

While I can only bake whole pies, I would be still be interested in seeing a method which may produce non integer results.

2 answers

1

Поскольку все ваши функции линейны, это звучит , как вы ищете либо линейное программирование (если непрерывные значения являются приемлемыми) или целочисленным программированием (если требуется переменные быть целыми числами).

Линейное программирование является стандартным методом, и эффективно разрешимый. Традиционный алгоритм для этого является симплекс - метод .

Integer программирование неразрешимое в целом, так как добавление интегральных ограничений позволяет описать трудноразрешимые задачи комбинаторных. Там, кажется, большое количество методов приближения (например, вы можете попробовать только с помощью регулярного линейного программирования, чтобы посмотреть, что получает вас), но, конечно, они зависят от специфики вашей проблемы.

3

Вы можете определить линейное программирование задачи. Я покажу использование на примере, но это , конечно , могут быть обобщены на любые данные.

Обозначим ваши пирожки как ваши переменные (x1 = A, x2 = B, ...) и задачи ЛП будет выглядеть следующим образом:

maximize x1 + x2 + x3 + x4
s.t. x1 <= 4  (needed i's)
     x1 + 2x4 <= 4 (needed j's)
     x1 + 2x4 <= 2 (needed k's)
     x2 <= 1 (needed t's)
     x2 + 2x3 <= 5 (needed z's)
and x1,x2,x3,x4 >= 0

Дробно решение этой проблемы является solveable Полиномиально, но целочисленные линейное программирование является NP-полным.

Проблема действительно NP-полный , потому что дана целочисленное линейное программирование проблема, вы можете уменьшить проблему «увеличить количество пирогов» , используя тот же подход, при котором каждое ограничении является ингредиентом пирога и переменные число пироги.

Для задачи целых - существует много методов аппроксимации в литературе проблемы , если вы можете сделать с «закрыть до некоторой границы», (например , местной техника отношения или прямой-двойственной часто используется) , или если вам нужно точное решение - экспоненциальное решение, вероятно , ваш лучший снимок. (Если, конечно, P = NP )