我正在使用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的成本 . 谢谢 .
2 回答
我可能误解了这个问题,但我认为你可以按照以下方式做到(假设有三种产品为了说明):
然后为其他产品(例如
tr_product_2
和tr_product_3
)编写二维源 - 目标矩阵并重复该过程 . 为了便于说明,我刚刚使用了乘数:在这种情况下,三维矩阵的形式为
[source, destination, product]
,但我认为这与Julia的解决方式相比更好 .我更喜欢使用字典来处理多维问题,因为我可以跟踪维度名称 .
对于使用字典的非常类似的问题(规范传输问题),请参阅https://lobianco.org/antonello/personal:blog:2017:0203_jump_for_gams_users
基本上你定义了向量中每个维度的允许元素集(例如
plants = ["seattle","san_diego"]; markets = ["new_york","chicago","topeka"]
),然后你可以在JuMP中使用这样的东西:链接的示例仍然使用同构成本,但使用字典对于异构成本进行扩展非常简单 .