在目的地之间分配源

计算科学 优化 算法
2021-11-27 23:22:23

n具有以下正量的来源:p1,...,pn并且有m具有以下正量的目的地:q1,...,qm. 众所周知p1+...+pn=q1+...+qm. 每个源都将使用其体积来填充一个或多个目的地。如果一个来源填满一个目的地,我们支付1为了它。如果满了k我们支付的目的地k为了它。问题是使用来源填充目的地,以使价格尽可能低。

我需要帮助提出解决问题的算法。

坦率地说,我在这里很迷茫,无法想出至少比遍历所有可能的填充物并选择价格最低的算法更好的算法。

我思考的事情是按升序对源进行排序,然后逐个取源,但我无法证明这种方法的正确性。

1个回答

让您的决策变量为XRn×mZ{0,1}n×m, 在哪里Xij是生产者生产的数量i发送给消费者j.Zij是一个二进制变量,如果生产者为 1i向消费者发送任何东西j, 否则为 0。

您的目标是最小化成本函数:

c(X,Z)=i,jZij
受以下约束:
iXij=qjj{1...m}(Demand satisfied)jXijpii{1...n}(Producer supply constraint)Xij0(Nonnegative production)XijZijpi(Zij must equal 1 if Xij0)Zij{0,1}

通常,整数程序要求您使用分支定界算法。但是,由于这个问题中唯一的整数变量被限制为二进制变量,我相信你可以把Zij作为连续并使用线性规划求解器解决问题。

如果您对用于求解线性程序的算法特别感兴趣,您应该搜索“Dantzig 单纯形算法”,这是解决中等到中等大小的线性程序的最常用方法。对于更大规模的问题,“内点”求解器往往比基于单纯形的求解器执行得更好。