猿问

纸浆调度优化问题 - 随着时间的推移,多个供应输入

我目前正在构建纸浆调度计划,但是我正在努力了解如何表示纸浆解析的供应变量,因为数据包含在多索引数据帧中。

问题我试图尽量减少任何增量,以便按工厂,按月计算的供应量与需求相匹配。注意,并非所有工厂产品都是所需产品

电流供应数据

我知道pulp接受变量字典作为输入,即:

LpVariable.dicts("Route",(plant, output)

但是我不确定我如何在这里表示供应

(月份、工厂、产品、production_output)

任何帮助都非常感谢。


胡说叔叔
浏览 97回答 2
2回答

天涯尽头无女友

您可以使用月份、工厂和产品的元组作为变量字典的键,也可以使用它从数据帧中获取生产输出 Mt。import pulpmonths = range(1,12)plants = ['A', 'B', 'C', 'D', 'E']products = ['AFS', 'GDF', 'POD', 'PPI']# set up binary variables for plant-month-productvar_dict = {}for month in months:    for plant in plants:        for product in product:            combo = (month, plant, product)            var_name = '_'.join([str(c) for c in combo])            var_dict[combo] = LpVariable(var_name, cat=LpBinary)prob = LpProblem('Schedule', LpMinimize)# objective function# assume data in df and has index of month, plant, and productprob += lpSum([var * df.loc[('at', k), 'Production Output (Mt)']               for k, v in var_dict.items()]# then add the relevant constraints# for example, one and only one product per plant per month# remember that in var_dict the key is a tuple of month, plant, product# and the value is the binary variablefor month in months:    for plant in plants:        prob += lpSum([v for k, v in var_dict.items()                       if k[0] == month and k[1] == plant]) == 1

拉莫斯之舞

我认为你想做的是有决策变量,即每个工厂每个月每种产品的供应量。换句话说,你有指数:(月份,植物,产品)。这当然会创建一个变量总数,在示例中为12 * 5 * 4 = 240个变量。len(months)*len(plants)*len(products)我会通过将该工厂的产品的产能设置为零来处理无法生产某种产品的工厂的情况。import pulpmonths = range(1,12)plants = ['A', 'B', 'C', 'D', 'E']products = ['AFS', 'GDF', 'POD', 'PPI']supply = pulp.LpVariable.dicts("supply", (months, plants, products))print(supply)这将返回可以引用为的变量,例如:supply[3]['A']['POD']
随时随地看视频慕课网APP

相关分类

Python
我要回答