2016-05-27 3 views
0

Мне нужно сделать лучший сценарий анализа сценария в шине с расширенным расположением, построенным над Power Pivot.Линейное программирование с силовым поворотным устройством

Так что мне было интересно, можно ли сделать линейную оптимизацию внутри ПП.

Проблема заключается в следующем:

У меня есть N носителей, каждый с ценой на проезд и мощности (путешествия/неделю). Мне нужно свести к минимуму стоимость ($/неделю) путем распределения X путешествий по этим перевозчикам.

На самом деле, мне не нужно знать, как распространять его, только минимальная стоимость

Пример:

Carrier | Цена | Емкость

A $ 20 10

B $ 30 20

C $ 15 5

Для X = 20, информация мне нужно, это просто, что в лучшем случае будет стоить $ 425 (5 * $ 15 + 10 * $ 20 + 5 * $ 30).

Я не мог понять, как сделать итерации, для подделки их с помощью нескольких вычисляемых столбцов

+0

Я не уверен, что вы подразумеваете под «внутри PP», но надстройка Excel Solver может обрабатывать линейное программирование, и если нет встроенного интерфейса, VBA может взаимодействовать между решателем и powerpivot. –

+0

Под «внутри PP» я подразумеваю через DAX и отношения данных и т. Д. Я хорошо знаю, что Solver - отличный инструмент для линейного программирования, но проблема, которую я описал, - это один маршрут, и у меня примерно 600 из них. . И так как это не окончательный анализ, было бы неплохо иметь возможность манипулировать результатами с помощью силового стержня. –

+0

DAX вообще не является полноценным языком программирования, поэтому я не думаю, что вы могли бы реализовать на нем симплекс. –

ответ

3

Это cummulative общая проблема, за исключением. Предположим, что значение для X хранится как столбец на одном и том же элементе с силовым шарниром. Мы будем называть X TotalPeople. Добавить вычисляемый столбец под названием CummulativeCapacity:

= 
CALCULATE (
    SUM (Table1[Capacity]), 
    FILTER (ALL (Table1), Table1[Price] <= EARLIER (Table1[Price])) 
) 

Затем добавьте еще один столбец, чтобы сохранить стоимость для перевозчика:

= 
IF (
    [TotalPeople] > [CummulativeCapacity], 
    [Price] * [Capacity], 
    IF (
     (
      [TotalPeople] 
       - CALCULATE (
        MAX ([CummulativeCapacity]), 
        FILTER (Table1, Table1[Price] < EARLIER (Table1[Price])) 
       ) 
     ) 
      * [Price] 
      < 0, 
     0, 
     [TotalPeople] 
      - CALCULATE (
       MAX ([CummulativeCapacity]), 
       FILTER (Table1, Table1[Price] < EARLIER (Table1[Price])) 
      ) 
    ) 
     * [Price] 
) 

Сумма общей стоимости будет минимальная стоимость.

+0

Ничего себе, ты полностью прибил его! При надлежащих приспособлениях я получил именно то, что хотел. Большое спасибо!Я думаю, что для DAX мне понадобится гораздо больше опыта, чтобы получить этот результат. –

+0

Спасибо @VituTomaz. Это не так сложно, как может показаться. Единственное важное понятие, которое нужно понять, это то, что означает EARLIER. – Rory

Смежные вопросы