Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python/线性规划/优化挑战_Python_Optimization_Pandas_Linear Programming - Fatal编程技术网

python/线性规划/优化挑战

python/线性规划/优化挑战,python,optimization,pandas,linear-programming,Python,Optimization,Pandas,Linear Programming,因此,我有一个优化问题,可能可以通过线性规划(使用纸浆?)来解决。我在这方面的经验有限,所以也许另一种解决方案会更好 问题如下: 有37件物品需要购买。每件商品都必须购买特定数量、特定颜色的商品。 对于每种商品,我都有不同数量的商店出售该商品。总共有大约8000家商店出售这37种商品。没有一家商店能销售全部37种商品。每个商店都有该商品的可变数量(如果有)和可变价格。此外,每家商店都有最低购买量 在python中,我有两个数据帧,它们应该包含我需要的所有信息。(商店名称“模糊”) 存储数据帧已经

因此,我有一个优化问题,可能可以通过线性规划(使用
纸浆
?)来解决。我在这方面的经验有限,所以也许另一种解决方案会更好

问题如下:

有37件物品需要购买。每件商品都必须购买特定数量、特定颜色的商品。 对于每种商品,我都有不同数量的商店出售该商品。总共有大约8000家商店出售这37种商品。没有一家商店能销售全部37种商品。每个商店都有该商品的可变数量(如果有)和可变价格。此外,每家商店都有最低购买量

在python中,我有两个数据帧,它们应该包含我需要的所有信息。(商店名称“模糊”)

存储
数据帧已经过预处理,因此它不包含任何NaN值。请注意,
store\u minu\u buy
是需要在该商店花费的最低金额


挑战在于最大限度地降低购买37件物品的成本。除此之外,我还需要实际的解决方案:哪些商品需要从哪些商店购买。

最小购买限制有点烦人,其余的则更明显

所以有一些决策变量:

x[i,j] = number of item i to buy at store j
u[j]   = store j is used at all
然后是明显的限制:

sum(x[i,any]) >= wanted[i]  (>= because the min_buy constraint may force you to buy extra)
min_buy约束。这很烦人,因为它有点像一个条件约束

sum(x[any,j]) <= M * u[j]  (ban u[j]=0 if some item is bought here)
min_buy[j] * u[j] <= sum(x[i,j] * price[i]) (force buying enough)

sum(x[any,j])颜色是否有特殊含义,或者我们是否可以将商品id和颜色id的组合视为新的唯一商品?你在这家商店买的东西是只适用于一件东西,还是适用于你在这家商店买的所有东西的总和?这甚至意味着有9.14的最小购买量,我能以某种方式购买9%和14%的物品吗?@harold,我很抱歉弄糊涂了。对于您的第一个问题:是的,item_id和color_id的组合构成了一个新的独特项
store\u minu\u buy
是在该商店需要花费的最低金额。因此,9.14欧元的最低购买价意味着该店至少需要花费9.14欧元/美元。
sum(x[any,j]) <= M * u[j]  (ban u[j]=0 if some item is bought here)
min_buy[j] * u[j] <= sum(x[i,j] * price[i]) (force buying enough)