2017-04-04 12 views
0

은 내가항목에서 길이를 얻기는

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

가이 방법은 수행 다음 코드를 사용하여 각 항목의 길이를 얻기 위해 노력하고

# 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; 

이 형식의 데이터 세트를 설정 개별 항목 길이에 액세스하지 못하게하십시오. 내가하려는 것은

display 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과 동시에 설정 "항목을"정의하는 것이 가능하다고 생각하고 ID 번호를 복제 할 필요가 없습니다. AMPL Book의 섹션 9.2에서는 단일 인덱스 세트가있는 매개 변수에 대해이를 수행하는 방법을 보여 주지만 위와 같이 두 개의 인덱스 세트가있을 때이 작업을 수행하는 구문에 대해서는 잘 모릅니다. (아무도 모른다면 추가하십시오!)