我正在学习一门利用数学建模的课程,并且正在研究一个优化交通路线的模型。在这个问题中,我们得到了集合C(问题中的所有运输公司)、I(所有公司可用的所有供应点)和J(所有公司可用的所有需求点)。公司生产的商品是相同的,因此公司之间有可能合作以满足对方的需求。供应点和需求点的任何组合都是可能的,而且我们知道哪些供应/需求点属于每一家公司(我假设这里没有重叠)。所有的需求都应该得到满足。
我想出了以下几点:
制约因素:
从供应点i到需求点j的所有流量之和必须小于或等于i点的供应能力。
从供应点i到需求点j的所有流量之和必须等于在需求点j处对所有j的需求量。
还有一个非负性约束,它要求所有供给点i到需求点j的流量必须是非负的。
然而,还有一些额外的限制,使我很难建模(在这门课程之前,我没有数学建模的经验)。最后一个要求是,除了自身之外,最多应该有两家不同的公司提供给另一家公司的需求点。我将如何将这样的东西纳入模型?我混淆的是,如果两间公司不包括经营需求点的公司,则只有两间公司可以将货物供应至一个需求点,而如果原来的公司亦有供应,则只有三间公司可以供应货物。例如,公司A、B和C可以向公司A的需求点供应,但B、C和D公司不能供应到同一需求点。是否有办法将这种类型的索引合并到问题中?
作为附带说明,我也将非常感谢教科书的任何建议,这些建议从基本的角度研究了这类数学建模方法。到目前为止,这门课程的运作假设学生对数学建模有些熟悉,而我不是。
提前感谢您的帮助!
发布于 2019-10-27 00:37:57
我混淆的是,如果两间公司不包括经营需求点的公司,则只有两间公司可以将货物供应至一个需求点,而如果原来的公司亦有供应,则只有三间公司可以供应货物。例如,公司A、B和C可以向公司A的需求点供应,但B、C和D公司不能供应到同一需求点。是否有办法将这种类型的索引合并到问题中?
细节将根据您如何实现这个问题而有所不同,但是下面是一个如何在AMPL中编码的示例。(我还没有机会测试这段代码,所以它可能有点错误。)
关键是使用有关供需点所有权的信息来定义一个不包括向自己的点提供服务的公司的总和。
set SupplyPoints;
set DemandPoints;
set Companies;
set SupplyPointsByCompanies dimen 2 within {SupplyPoints,Companies};
# a set of (supply point, company) tuples. Following code assumes that
# each supply point has only one owning company.
set DemandPointsByCompanies dimen 2 within {DemandPoints,Companies};
# similarly for demand
param biggestsupply;
# to be defined as the largest value that any one point could supply to any other
var Supply{i in SupplyPoints, j in DemandPoints} >= 0;
# actual amount to be supplied from i to j
var PosSupply{i in SupplyPoints, j in DemandPoints} binary;
subject to DefinePosSupply{i in SupplyPoints, j in DemandPoints}: PosSupply[i,j]*biggestsupply >= Supply[i,j];
# forces PosSupply to equal 1 if Supply is non-zero
subject to limit_num_suppliers{(j,co) in DemandPointsByCompanies}:
sum{j in SupplyPoints: (i,co) not in SupplyPointsByCompanies} PosSupply[i,j] <= 2;
根据您的决策变量的规模,您可能需要使用容差设置,以避免PosSupply =0但最大供应量*PosSupply被认为是非零的奇怪之处,有关详细信息,请参阅这个论坛的讨论。
https://stackoverflow.com/questions/58570752
复制相似问题