2017-04-04 63 views
0

我有一組數據以這種格式從項目獲取長度設置

# Input Data for items in the format (i,l,w,h) 
i for item, l for length , w for width, h for height 
set itemData := 
271440 290 214 361 
1504858 394 194 114 
4003733 400 200 287 
4012512 396 277 250 
4013886 273 221 166; 

我試圖讓每個項目的長度,使用下面的代碼

set IL = setof {i in items, (i,l,w,h) in itemData} (i,l); #length of item i 

這種方法不僅會不允許我訪問單個項目的長度。 我想要做的是有

顯示IL [271440] = 290;

我該如何去做這件事?

回答

0

小心使用術語。在AMPL術語中,該表不是「集合」。你有一個參數的表格。您的集合是該表格的行和列索引:列「{」l「,」w「,」h「}以及行的項目ID編號。

在AMPL它會處理這樣的事情:

(.mod part) 
set items; 
set attributes := {"l","w","h"}; 
param itemData{items, attributes}; 
(.dat part) 

set items := 
271440 
1504858 
4003733 
4012512 
4013886 
; 

param itemData: l w h := 
271440 290 214 361 
1504858 394 194 114 
4003733 400 200 287 
4012512 396 277 250 
4013886 273 221 166 
; 

那麼你可以這樣做:

ampl: display itemData[271440,"l"]; 
itemData[271440,'l'] = 290 

我認爲這是可能的定義集「項目」在同一時間的ItemData和避免需要複製身份證號碼。 AMPL Book的第9.2節展示瞭如何爲具有單個索引集的參數執行此操作,但當您有兩個索引集時,我不確定這樣做的語法。 (如果有人知道,請加上!)