Как применить функцию math.ceil к части целевой функции в мякоти питона - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь применить функцию math.ceil к одной части целевой функции в python-pulp. Но, получаю

"TypeError: must be real number, not LpAffineExpression" error.

Ниже приведен пример.

models = [A, B, C, D, E]
modelCost = {A: 10, B: 15, C: 20, D: 25, E: 30}
TotalModelsCost = pulp.lpSum([(model*modelCost[model]) for model in models])
OverHeadCost = (math.ceil(pulp.lpSum([model for model in models])/4))*100

prob += TotalModelsCost + OverHeadCost

Как применить функцию ceil к OverHeadCost?

1 Ответ

1 голос
/ 14 мая 2019

Создайте новую переменную решения, скажем, скажем, OverHeadCostCeil, которая является общей целочисленной (не двоичной) переменной:

OverHeadCostCeil = pulp.LpVariable('OverHeadCostCeil', 0, None, LpInteger)

Требуется OverHeadCostCeil >= OverHeadCost через ограничение:

prob += OverHeadCostCeil >= OverHeadCost

Заменить член в целевой функции:

prob += TotalModelsCost + OverHeadCostCeil

Затем решить.Обратите внимание, что вам нужно использовать решатель, который может обрабатывать общие целочисленные переменные.

...