Python 在解决问题之前,你能舍入纸浆变量吗?还是绕开这个问题?

Python 在解决问题之前,你能舍入纸浆变量吗?还是绕开这个问题?,python,optimization,linear-programming,pulp,purchase-order,Python,Optimization,Linear Programming,Pulp,Purchase Order,我正在尝试优化来自多个工厂的采购订单。我所需的数量已确定。 我可以很容易地解决这个问题,同时遵守每个工厂的生产能力,除了在装运时将产品的生产分配给制造部分集装箱的工厂。根据公司政策,我们不订购部分集装箱。此外,几乎不可能获得准确的容器,因此我想确保,如果我们从工厂订购,所有包含产品的容器都需要达到99%的满度,并写下以下内容: for f in factory: model += (lp.lpSum([m3.loc[i,f] * qty[i,f]] for i in items) / m

我正在尝试优化来自多个工厂的采购订单。我所需的数量已确定。 我可以很容易地解决这个问题,同时遵守每个工厂的生产能力,除了在装运时将产品的生产分配给制造部分集装箱的工厂。根据公司政策,我们不订购部分集装箱。此外,几乎不可能获得准确的容器,因此我想确保,如果我们从工厂订购,所有包含产品的容器都需要达到99%的满度,并写下以下内容:

for f in factory:
    model += (lp.lpSum([m3.loc[i,f] * qty[i,f]] for i in items) / m3_per_container) / \
        math.ceil(lp.lpSum([m3.loc[i,f] * qty[i,f]] for i in items) / m3_per_container) * M) \
            >= 0.99
但是,当我使用此约束运行问题时,会出现以下错误:

TypeError: must be real number, not LpAffineExpression
我猜,这是因为在我解决问题并首先给它赋值之前,我无法将LpVariable四舍五入到最接近的更高整数

有没有人有办法实现这样一个目标,即确保在工厂下的订单制造的集装箱介于.99的倍数(0.99、1.98、2.97等)和1的倍数(1、2、3等)之间,而不会出现此错误


提前谢谢

您可以在MIP模型中模拟天花板功能,如下所示:

 y=ceil(x)
大约相当于

 y >= x
 y <= x+0.999
 y integer
y>=x
Y