Я пытаюсь заставить переменную быть целым числом (целочисленное ограничение), используя cvxpy в Python, но результат остается с плавающей запятой:
from cvxpy import *
Fi = Int()
Or = Int()
constr = [Fi <= 3000,
Or <= 3000,
Or >= 1000,
1.25*Or - Fi >= 0,
Fi >= 0,
Or >= 0]
obj= Maximize(50000*Fi + 25000*Or)
prob = Problem(obj, constr)
prob.solve()
print ("Status: ", prob.status)
print ("Fi: ", Fi.value)
print ("Or: ", Or.value)
print ("Obj: ", obj.value)
Результат:
Status: optimal
Fi: 2999.9999999
Or: 2999.99999989
Obj: 224999999.992
Что я могу сделать, чтобы заставить его?
Я тоже пробовал:
Fi = Variable()
Or = Variable()
constr = [Fi <= 3000,
Or <= 3000,
Or >= 1000,
1.25*Or - Fi >= 0,
Fi >= 0,
Or >= 0,
Fi == Int(),
Or == Int()]
Fi и Or — переменные. Не только цифры.
Fi=Variable()
и добавлял ограничениеFi == Int()
, и оно не дублируется. В этом вопросе они не используют cvxpy - person Aleharu   schedule 04.04.2017numpy.matrix
для экономии места, что отбрасывает каждое решение как число с плавающей запятой. Я просто установил порог своего вывода для преобразования в int:np.matrix([0 if abs(el)<.99999 else 1 for el in x.value])
- person Zach Siegel   schedule 19.07.2017