0

我正在使用 Jump/Julia 来解决优化问题。这是一些源位置和一些目的地的运输问题。此外,我有不同的产品类型,因此将一种产品从源 i 发送到目的地 j 与其他类型的产品不同。通常当产品是同质的时,我可以这样写一个成本矩阵

tr =[0 2.82 4.24 5.83 4.12 0;
2.82 0 1.41 3.16 2.23 2.82;
4.24 1.41 0 2 2.23 4.24;
5.83 3.16 2 0 2.23 5.83;
4.12 2.23 2.23 2.23 0 4.12;
0 2.82 4.24 5.83 4.12 0]

它只是意味着将一种产品从 i 发送到 j 的成本。当移动成本也取决于产品类型时,我试图找到一种修改成本矩阵的方法。示例 c[1,2,3] 表示将产品类型 1 从源 2 移动到目标 3 的成本。谢谢。

4

2 回答 2

0

我可能误解了这个问题,但我认为您可以按照以下方式进行操作(为了说明起见,假设有 3 个产品):

tr_product_1 = [0 2.82 4.24 5.83 4.12 0;
2.82 0 1.41 3.16 2.23 2.82;
4.24 1.41 0 2 2.23 4.24;
5.83 3.16 2 0 2.23 5.83;
4.12 2.23 2.23 2.23 0 4.12;
0 2.82 4.24 5.83 4.12 0]

cost_matrix = zeros(6,6,3)
cost_matrix[:,:,1] = tr_product_1

tr_product_2然后为其他产品(例如和)编写二维源-目的地矩阵tr_product_3并重复该过程。为了说明起见,我刚刚使用了一个乘数:

tr_product_2 = 1.2 * tr_product_1
tr_product_3 = 1.5 * tr_product_1

cost_matrix[:,:,2] = tr_product_2
cost_matrix[:,:,3] = tr_product_3

cost_matrix

6×6×3 Array{Float64,3}:
[:, :, 1] =
 0.0   2.82  4.24  5.83  4.12  0.0 
 2.82  0.0   1.41  3.16  2.23  2.82
 4.24  1.41  0.0   2.0   2.23  4.24
 5.83  3.16  2.0   0.0   2.23  5.83
 4.12  2.23  2.23  2.23  0.0   4.12
 0.0   2.82  4.24  5.83  4.12  0.0 

[:, :, 2] =
 0.0    3.384  5.088  6.996  4.944  0.0  
 3.384  0.0    1.692  3.792  2.676  3.384
 5.088  1.692  0.0    2.4    2.676  5.088
 6.996  3.792  2.4    0.0    2.676  6.996
 4.944  2.676  2.676  2.676  0.0    4.944
 0.0    3.384  5.088  6.996  4.944  0.0  

[:, :, 3] =
 0.0    4.23   6.36   8.745  6.18   0.0  
 4.23   0.0    2.115  4.74   3.345  4.23 
 6.36   2.115  0.0    3.0    3.345  6.36 
 8.745  4.74   3.0    0.0    3.345  8.745
 6.18   3.345  3.345  3.345  0.0    6.18 
 0.0    4.23   6.36   8.745  6.18   0.0

在这种情况下,3 维矩阵的形式是[source, destination, product],但我认为这更适合 Julia 的布局方式。

于 2018-03-29T17:57:32.100 回答
0

我更喜欢使用字典来解决多维问题,因为我可以跟踪维度名称。

对于使用字典的非常相似的问题(规范传输问题),请参阅https://lobianco.org/antonello/personal:blog:2017:0203_jump_for_gams_users

基本上,您为向量中的每个维度定义一组允许的元素(例如plants = ["seattle","san_diego"]; markets = ["new_york","chicago","topeka"]),然后您可以在 JuMP 中使用类似这样的东西:

@constraints trmodel begin
    supply[p in plants],   # observe supply limit at plant p
        sum(x[p,m] for m in markets)  <=  a[p]
    demand[m in markets],  # satisfy demand at market m
        sum(x[p,m] for p in plants)  >=  b[m]

链接的示例仍然使用同质成本,但是使用字典将其扩展为异质成本非常简单。

于 2018-03-30T07:36:24.630 回答