ABSTRACT
2. LINGO 프로그램
가. 개요
공급지(source) S1, S2에서 수요지(destination) D1, D2, D3, D4 등으로 물량을 수송할 때 총 수송비용을 최소화하는 문제를 대상으로 하여
LINGO 프로그램의 사용방법을 설명한다. 단위당 수송비용은 COST, 수
송량은 VOLUME으로 표현하고, 이들을 간단히 표로 나타내면 다음과
같다.
공급지 공급량
S1 20
S2 30
<표 7-5> 공급량 데이터
수요지 수요량
D1 10
D2 12
D3 8
D4 20
<표 7-6> 수요량 데이터
수요지
공급지 D1 D2 D3 D4
S1 1.0 0.8 1.2 1.5
S2 1.5 1.4 1.1 0.7
<표 7-7> 수송비용 데이터
나. SET
LINGO 프로그램에서 유사한 객체들은 SET를 사용해서 표현하고 있
다. 예제에서 유사한 객체들은 공급지 및 수요지, 그리고 공급지에서 수요지로 수송되는 물량의 수송비용(LINKS)으로 나눌 수 있다 또한 공급지의 공급량, 수요지의 수요량을 생각할 수 있다. 공급량, 수요량, 수송비용 등은 주어진 값을 갖고 있는데, 이러한 값들을 속성이라 한 다. SET를 정의할 때 각 객체들의 이름과 함께 각 객체들의 이러한 속성을 동시에 정의해야 한다. 예제에서는 공급량의 속성을
CAPACITY, 수요량의 속성을 DEMAND, 수송비용의 속성을 COST와
VOLUME의 결합으로 정의하였다.
SET를 LINGO 프로그램으로 작성하면 다음과 같다.
SETS:
SOURCES / S1 S2/: CAPACITY;
DESTINATION / D1 D2 D3 D4/: DEMAND;
LINKS( SOURCES, DESTINATION): COST, VOLUME;
ENDSETS
다. 목적함수/제약식
목적함수는 공급지에서 수요지로의 총 수송비용을 최소화하는 것으로 서 목적함수를 수식으로 표현하면 다음과 같다.
× ×
× ×
× ×
× ×
···(7-13)
이것을 다시 간단하게 표현하면 다음과 같다.
×···(7-14)
이러한 수식은 <표 7-8>을 이용하여 LINGO 프로그램으로 전환할 수 있다.
수식 LINGO 프로그램
MIN
@SUM( LINKS( I, J) COST( I, J)
× *
VOLUME( I, J)
<표 7-8> 목적함수의 LINGO 프로그램 변환
여기서 @SUM은 공급지 I에서 수요지 J로의 모든 수송비용 LINKS(I,
J)를 더하는 LINGO 명령어이다. 또한 목적함수를 LINGO 프로그램으로
작성하면 다음과 같다.
MIN = @SUM( LINKS( I, J): COST( I, J) * VOLUME( I, J))
한편 각 공급지에서 모든 수요지로 출하되는 총 물량은 항상 공급량 보다 작거나 같으므로, 이러한 관계를 수식으로 표현하면 다음과 같다.
≤ ···(7-15)
이러한 공급량에 대한 제약조건을 나타내는 수식은 <표 7-9>의 변환 관계를 이용하여 LINGO 프로그램으로 전환할 수 있다.
수식 LINGO 프로그램
@FOR( SOURCES( I)
@SUM( DESTINATION( J) VOLUME( I, J)
× *
CAPACITY( I)
<표 7-9> 공급량 제약조건의 LINGO 프로그램 변환
여기서 @FOR는 공급지 I에서 출하되는 모든 수송량을 표현하기 위한
LINGO 명령어이다. 공급지에 대한 제약조건을 LINGO 프로그램으로
작성하면 다음과 같다.
@FOR( SOURCES( I):
@SUM( DESTINATION( J): VOLUME( I, J)) <= CAPACITY( I));
한편 수요지로 들어오는 총 물량은 수요량과 같아야 하므로, 이러한 제약조건을 수식으로 표현하면 다음과 같다.
(7-16)
이러한 수요량에 대한 제약조건은 <표 7-10>의 관계를 이용하여
LINGO 프로그램으로 전환할 수 있다.
수식 LINGO 프로그램
@FOR( DESTINATION( J)
@SUM( SOURCES( I) VOLUME( I, J)
× *
DEMAND( J)
<표 7-10> 수요량 제약조건의 LINGO 프로그램 변환
한편 수요지에 대한 제약조건을 LINGO 프로그램으로 작성하면 다음 과 같다.