Это целочисленная программа с фиксированной стоимостью.
Давайте введем следующие переменные:
- x : непрерывное количество единиц произведенного товара
- y : переменная ноль-1, указывающая, понесены ли постоянные затраты
- c : выручка за единицу продукции X
- f : постоянные затраты на производство ненулевого количества X независимо от количества произведенных единиц
- m : большое число
Функция затрат с фиксированными затратами:
Мы преобразуемэто в следующую программу:
max cx - fy
s.t. x<=my
0<=x
y={0,1}
Обратите внимание, что если x = 0 , то функция стоимости установит y = 0 , чтобы избежать оплаты F .Однако, если x> 0 , то ограничения x <= my </em> y = 1 .Единственная проблема заключается в том, что m должно быть верхней границей x .Мы можем достичь этого либо тщательно продумав, какие значения может принимать x , либо установив m в очень большое число.
Мы можем решить программу с помощью cvxpyследующее.Обратите внимание, что если x1 + x2 <= 100 </em>, то лучше ничего не производить.Поскольку это скучно, я увеличил лимит с 100 до 300.
#!/usr/bin/env python3
import cvxpy as cp
b1 = cp.Variable(boolean=True)
b2 = cp.Variable(boolean=True)
x1 = cp.Variable()
x2 = cp.Variable()
m = 100000 #A very large number
obj = 10*x1+12*x2 - 1000*b1 - 2000*b2
cons = []
cons += [x1>=0]
cons += [x2>=0]
cons += [x1+x2<=300]
cons += [x1<=m*b1]
cons += [x2<=m*b2]
prob = cp.Problem(cp.Maximize(obj), cons)
objval = prob.solve()
print("Objective value: {0}".format(objval))
print("x1 = {0}".format(x1.value))
print("x2 = {0}".format(x2.value))
print("b1 = {0}".format(b1.value))
print("b2 = {0}".format(b2.value))