Вот реальная проблема комбинаторной оптимизации.
Нам дан большой набор ценностных предложений для определенного продукта.Ценностные предложения бывают разных типов, но каждый тип независим и добавляет равную выгоду для всего продукта.При создании продукта мы можем включить любое неотрицательное целое число «единиц» каждого типа.Однако после добавления первой единицы определенного типа предельная выгода от дополнительных единиц этого типа постоянно уменьшается.Фактически, предельная выгода для новой единицы - это обратное число единиц этого типа после добавления новой единицы.Наш продукт должен иметь как минимум одну единицу какого-либо типа, и из-за этого требования мы должны внести небольшую поправку в общее значение.
Пусть T[]
будет массивом, представляющим номер каждого типав определенном производственном цикле продукта.Тогда общее значение V
определяется как (псевдокод):
V = 1
For Each t in T
V = V * (t + 1)
Next t
V = V - 1 // correction
Что касается затрат, то единицы одного типа имеют одинаковую стоимость.Но единицы разных типов имеют уникальные иррациональные затраты.Количество типов велико, но нам дан массив значений типа C[]
, который отсортирован от наименьшего к наибольшему.Далее предположим, что массив типа type T[]
также отсортирован по стоимости от наименьшего к наибольшему.Тогда общая стоимость U
- это просто сумма каждой удельной стоимости:
U = 0
For i = 0, i < NumOfValueTypes
U = U + T[i] * C[i]
Next i
Пока все хорошо.Итак, вот проблема: для данного продукта P
со значением V
и стоимостью U
найдите продукт Q
со стоимостью U'
и значением V'
, имеющий минимальное значение U'
, такое, что U' > U
, V'/U' > V/U
.