Расширяя мой комментарий выше, эта проблема сильно зависит от точной структуры стоимости доставки.Предположим, что стоимость доставки линейна с (потенциально) ненулевым постоянным членом.А именно, стоимость доставки = C + Rw, где C и R - константы, а w - вес заказа.Затем оказывается, что оптимальное решение простое: сгруппируйте каждый товар, где скидка меньше C, в один заказ и закажите каждый товар, где скидка больше C, отдельно (оставлено для читателя в качестве упражнения).В вырожденном случае, когда C = 0, вы просто разместите отдельный заказ для каждого элемента.
С другой стороны, если стоимость доставки имеет более пороговую структуру - например, если весотгрузка меньше, чем B, тогда стоимость составляет C1, но если она больше, чем B, тогда стоимость составляет C2 - ситуация становится формой проблемы полной упаковки NP.Здесь я должен отметить, что только потому, что ситуация имеет форму NP-полной проблемы, вы не должны сразу терять надежду.Для многих реальных ситуаций существует хорошая эвристика, и вполне возможно, что диапазон реальных входных данных ограничивает проблему управляемыми экземплярами.
В реальной жизни шансы на то, что затраты на доставку, вероятно, являются комбинациейиз множества разных вещей (например, кусочно-линейный с разрывами), что делает моделирование проблемы намного сложнее.Но я надеюсь, что продемонстрировал, что очень важно иметь четкое представление о том, как эти затраты структурированы, чтобы понять вашу проблему.