我对LINGO全新,我在LINGO找到了这个例子 MODEL:
foreach (var fi in new DirectoryInfo(@"C:\Temp").EnumerateFiles("*.txt"))
File.Create(Path.Combine(@"C:\Results", "result_" + fi.Name)).Dispose();
我在这段代码中有几件我不理解的事情
在派生集! 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
这里给出了体积数据吗?它是如何获得的?
答案 0 :(得分:1)
我很久以前曾经和Lingo一起工作过。事情发生了变化,但是我已经查找了他们的user manual(Lingo 14) - 参见第31页,它解释了SETS定义的工作原理。
1)自动生成笛卡尔积[{1}}的所有集合成员(通过连接标签,考虑所有'组合')。
现在,如果不应该连接某个对仓库供应商,则应该保留其WAREHOUSES x PRODUCTS
参数未定义。在用户手册(第118页)中查找“在数据部分中省略值”。您需要在COST
矩阵中使用逗号作为分隔符并使用空字段(例如COST
)。
2)5, 5, , 6...
是变量,而不是参数。求解器可以找到VOLUME
的值 - 它们将代表最佳的出货量(每个供应商都会得到他/她的要求,并且运输的总成本将是最小的。)