По сути, вы пытаетесь добиться, чтобы термины model.Amount[ProductCount]
принимали прерывистые значения (ноль или больше или равный 100 000). Для этого сначала вам нужно определить двоичную переменную: model.y = pyomo.Var(model.Products, within=pyomo.Binary)
.
Затем вам нужно будет добавить следующие ограничения:
def minTradesize_Constraint1(model):
return (model.Amount[ProductCount] >= 100000 * y[ProductCount] for ProductCount in model.Products)
def minTradesize_Constraint2(model):
return (model.Amount[ProductCount] <= M * y[ProductCount] for ProductCount in model.Products)
, где M достаточно большое число (может быть реалистичной c верхней границей для вашей model.Amount[ProductCount]
переменной).
В результате этой формулировки, если y[ProductCount]
равно нулю, то член model.Amount[ProductCount]
также будет равен нулю , Если сейчас модель хочет, чтобы переменная model.Amount[ProductCount]
принимала положительные значения, ей нужно будет установить двоичный код y[ProductCount]
в 1, следовательно, вынудив model.Amount[ProductCount]
стать больше или равным 100 000.
Примечание: Я сформулировал ограничения в том же стиле, что и в своем ответе. Однако, если я правильно понимаю вашу модель, я бы сказал, что первое ограничение, например, должно быть:
def minTradesize_Constraint1(model, ProductCount):
return (model.Amount[ProductCount] >= 100000 * y[ProductCount]
, а часть for ProductCount in model.Products
должна быть добавлена при создании ограничения Pyomo.