Предположим, что есть 5 компонентов, и каждый компонент имеет случайную поставку:
-------------------
| Comp | Quantity |
|------|----------|
| C1 | 500 |
| C2 | 700 |
| C3 | 400 |
| C4 | 1000 |
| C5 | 850 |
-------------------
И моя фабрика может производить 25 различных продуктов, каждый из которых нуждается в различном количестве каждого компонента:
--------------------------------------------
| Product | Price | C1 | C2 | C3 | C4 | C5 |
|---------|-------|----|----|----|----|----|
| P1 | $450 | 6 | 7 | 2 | 9 | 4 |
| P2 | $300 | 8 | 5 | 3 | 3 | 7 |
| P3 | $100 | 2 | 4 | 9 | 4 | 6 |
| P4 | $500 | 4 | 1 | 0 | 9 | 8 |
| .. | .. | .. | .. | .. | .. | .. |
--------------------------------------------
Мне нужно определить, сколько каждого продукта мне нужно построить, чтобы максимизировать конечный доход, не превышая при этом поставки каждого компонента?
Лучший алгоритм, который я написал до сих порпроходит по каждому продукту и находит максимальное количество, которое может быть произведено, а затем берет продукт с наибольшим доходом (цена * максимальное количество), затем удаляет этот продукт из списка и вычитает это количество компонентов из поставки, затем повторяет процессс остальными продуктами.
Вот псевдокод, который у меня есть:
foreach (var product in productList)
{
product.MaxQty = MaxQty(product, supply);
product.Revenue = product.Price * product.MaxQty;
}
// Take product with highest Revenue;
// Update supply;
// Repeat the loop;
Я знаю, что это не лучший подход, потому что иногда не оптимально брать продукт ссамый высокий доход, потому что моя цель состоит в том, чтобы иметь наибольшую сумму всех произведенных продуктов вместотолько один товар за раз ..