gpt4 book ai didi

python - 强制变量为整数 CVXPY

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:30 26 4
gpt4 key购买 nike

我试图在 Python 中使用 cvxpy 强制变量为整数(整数约束),但结果仍然是 float :

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 变量以节省空间,这将每个解决方案转换为 float 。我只是将输出设置为 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-int(x) 更好的方法来获取整数 x 的小数部分(例如 Math.modf(x)numpy.modf(x)),但这不需要导入包。

请注意,您可以将阈值设置为 0.9999999999,而不仅仅是 0.9。 cvxpy 的输出似乎是一个 int ,几乎达到了 numpy 矩阵 float 的完整精度。

(如果有人可以使这个想法更精确,请这样做)。

关于python - 强制变量为整数 CVXPY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43194615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com