我有一个优化器,可以使用所有可能路径的成本矩阵来解决运输问题。
优化器工作正常,但如果两个成本相等,则解决方案包含一个路径,即最小路径数。 (将其视为负载平衡路由器;如果两条路由的成本相同,则两者都使用它们。)
我想要最小数量的路线,并且要做到这一点我需要一个成本矩阵,它没有两个在一定容差范围内相等的成本。
目前,我正在通过烘焙函数传递成本矩阵,该烘焙函数测试每个条目是否与其他每个条目相等,并且如果匹配则将其移动固定的百分比。然而,这种方法似乎需要进行N ^ 2比较,并且如果起始值都相同,则最后的成本将是r ^ N更大。 (r是任意固定百分比)。还有一个问题是,乘以百分比,你最终会在另一个值之上。所以问题似乎有一个递归元素,或者至少是重复检查,这会使代码膨胀。
当前的实现基本上不是很好(我不会在这里粘贴我的GOTO代码,你们都要模拟),我想改进它。 我的目标是否有名称,是否有标准实施?
实施例: {1,1,2,3,4,5}(tol = 0.05)变为{1,1.05,2,3,4,5}
答案 0 :(得分:0)
而不是将所有值相互比较尝试更线性的方法:
危险!前面的伪代码......
seen = {}
for i=0:
for j=0:
if cost_matrix[i,j] in seen:
cost_matrix[i,j] = cost_matrix[i,j]+percentage
append cost_matrix[i,j] to seen
j++
i++
答案 1 :(得分:0)
不要过于挑剔,但我认为你在描述最短的路径问题。
OR中的“运输问题”是一个更具体的问题,有一组起源和一组目的地。在您的问题中,您有几个点的路径,但有时您会得到两条最短的路径,因为成本加起来相同。对?
这是一个很好的paper处理所有对中最短路径问题的冗余。