【问题标题】:Understanding Lingo derived sets了解 Lingo 派生集
【发布时间】:2015-05-24 21:53:37
【问题描述】:

我对 LINGO 完全陌生,我在 LINGO 中找到了这个示例。
型号:

! A 6 Warehouse 8 Vendor Transportation Problem;
SETS:
WAREHOUSES / WH1 WH2 WH3 WH4 WH5 WH6/: CAPACITY;
VENDORS / V1 V2 V3 V4 V5 V6 V7 V8/ : DEMAND;
LINKS( WAREHOUSES, VENDORS): COST, VOLUME;
ENDSETS
! The objective;
MIN = @SUM( LINKS( I, J):
COST( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( VENDORS( J):
@SUM( WAREHOUSES( I): VOLUME( I, J)) =
DEMAND( J));
! The capacity constraints;
@FOR( WAREHOUSES( I):
@SUM( VENDORS( J): VOLUME( I, J)) <=
CAPACITY( I));
! Here is the data;
DATA:
CAPACITY = 60 55 51 43 41 52;
DEMAND = 35 37 22 32 41 32 43 38;
COST = 6 2 6 7 4 2 5 9
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
ENDDATA
END

这段代码中有几处我不明白的地方。

  1. 在派生集LINKS( WAREHOUSES, VENDORS): COST, VOLUME; 中它怎么知道LINKS 成员应该是V1WH1,V1WH2,..,V1WH6,V2WH1,V2WH2,...,V6WH6,...,V8WH1,...,V8WH6
    那就是LINKS( WAREHOUSES, VENDORS): COST, VOLUME;指定的时候怎么知道每个vendor都连接了所有的仓库

  2. 这里面有Volume数据吗?是怎么得到的?

【问题讨论】:

    标签: optimization lingo


    【解决方案1】:

    很久以前我曾经和 Lingo 一起工作过。从那以后情况发生了变化,但我查阅了他们的user manual(Lingo 14)——参见第 31 页,它解释了 SETS 定义的工作原理。

    1) 笛卡尔积WAREHOUSES x PRODUCTS 的所有集合成员都是自动生成的(通过连接标签,考虑所有“组合”)。

    现在,如果不应该连接某些对仓库供应商,则其COST 参数应未定义。在用户手册第 118 页中查找“省略数据部分中的值”。您需要在 COST 矩阵中使用逗号作为分隔符并使用空字段(例如 5, 5, , 6...)。

    2) VOLUME 是一个变量,而不是一个参数。 VOLUME 的值将由求解器找到 - 它们将代表最佳发货量(每个供应商都会得到他/她的需求,并且运输的总成本将是最低的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多