强制变量为整数 CVXPY
Force a variable to be an integer CVXPY
我试图在 Python 中使用 cvxpy 将变量强制为整数(整数约束),但结果一直是浮点数:
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是变量。不只是数字。
我有同样的问题(有更多的变量)!我认为 cvxpy 将解决方案存储为 numpy.matrix
变量以保存 space,这会将每个解决方案转换为浮点数。我只是将我的输出阈值化为 int
。这应该适合你:
Fi_val = int(Fi.value)+(1 if (Fi.value - int(Fi.value)) >0.9 else 0)
Or_val = int(Or.value)+(1 if (Or.value - int(Or.value)) >0.9 else 0)
获取整数 x
的小数部分比 x-int(x)
有更好的方法(例如 Math.modf(x)
和 numpy.modf(x)
),但这不需要包导入.
请注意,您可以将阈值设置为 0.9999999999 而不仅仅是 0.9。 cvxpy 的输出似乎是一个 int
,几乎达到了 numpy 矩阵浮点数的完全精度。
(如果有人可以使这个想法更精确,请做)。
我试图在 Python 中使用 cvxpy 将变量强制为整数(整数约束),但结果一直是浮点数:
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是变量。不只是数字。
我有同样的问题(有更多的变量)!我认为 cvxpy 将解决方案存储为 numpy.matrix
变量以保存 space,这会将每个解决方案转换为浮点数。我只是将我的输出阈值化为 int
。这应该适合你:
Fi_val = int(Fi.value)+(1 if (Fi.value - int(Fi.value)) >0.9 else 0)
Or_val = int(Or.value)+(1 if (Or.value - int(Or.value)) >0.9 else 0)
获取整数 x
的小数部分比 x-int(x)
有更好的方法(例如 Math.modf(x)
和 numpy.modf(x)
),但这不需要包导入.
请注意,您可以将阈值设置为 0.9999999999 而不仅仅是 0.9。 cvxpy 的输出似乎是一个 int
,几乎达到了 numpy 矩阵浮点数的完全精度。
(如果有人可以使这个想法更精确,请做)。