了解Lingo派生集

时间:2015-05-24 04:22:53

标签: optimization lingo

我对LINGO全新,我在LINGO找到了这个例子 MODEL:

foreach (var fi in new DirectoryInfo(@"C:\Temp").EnumerateFiles("*.txt"))
    File.Create(Path.Combine(@"C:\Results", "result_" + fi.Name)).Dispose();

我在这段代码中有几件我不理解的事情 enter image description here

  1. 在派生集! 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 中,如何知道LINKS成员应为LINKS( WAREHOUSES, VENDORS): COST, VOLUME;
    这就是当V1WH1,V1WH2,..,V1WH6,V2WH1,V2WH2,...,V6WH6,...,V8WH1,...,V8WH6

  2. 指定每个供应商连接到所有仓库时,它是如何知道的
  3. 这里给出了体积数据吗?它是如何获得的?

1 个答案:

答案 0 :(得分:1)

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

1)自动生成笛卡尔积[{1}}的所有集合成员(通过连接标签,考虑所有'组合')。

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

2)5, 5, , 6...是变量,而不是参数。求解器可以找到VOLUME的值 - 它们将代表最佳的出货量(每个供应商都会得到他/她的要求,并且运输的总成本将是最小的。)