목차
소개
캘리포니아 몬테레이에 있는 해군 대학원의 Richard E. Rosenthal은 작고 간단한 최적화 문제를 공식화, 해결 및 분석하기 위해 슬롯 머신를 사용하는 자세한 예를 작성했습니다. 이 예는 슬롯 머신와 그 주요 기능에 대한 간략한 개요입니다. 문서의 다른 부분에 대한 많은 참조가 이루어졌지만 이는 단지 더 자세한 내용을 찾을 수 있는 곳을 알려주기 위한 것입니다. 여기에 있는 자료는 나머지 문서를 참조하지 않고도 유익하게 읽을 수 있습니다.
이 예는 역사적으로 다음과 같은 역할을 했던 선형 프로그래밍의 운송 문제의 예입니다.'실험실 동물'최적화 기술 개발에 힘쓰고 있습니다. [예를 들어 Dantzig(1963) 참조1)] 이는 슬롯 머신와 같은 대수 모델링 언어의 힘을 설명하는 데 좋은 선택입니다. 왜냐하면 운송 문제는 현재 인스턴스의 크기에 관계없이 간단하고 활용 가능한 대수 구조를 갖고 있기 때문입니다. 훨씬 더 큰 운송 문제를 고려한다면 우리가 제시하려고 하는 슬롯 머신 입력 파일의 거의 모든 설명은 변경되지 않은 상태로 유지된다는 것을 알 수 있습니다.
익숙한 운송 문제에서 우리는 단일 상품에 대한 여러 공장의 공급과 여러 시장의 수요가 주어지며, 공장에서 시장까지 상품을 운송하는 데 드는 단위 비용이 주어집니다. 경제적인 문제는 총 운송 비용을 최소화하기 위해 각 공장과 각 시장 간에 얼마나 많은 배송이 이루어져야 하는가입니다.
이 문제의 대수적 표현은 일반적으로 다음과 유사한 형식으로 표시됩니다.
색인:
\(i\) = 식물
\(j\) = 시장
주어진 데이터:
\(a_i\) = 식물 원자재 공급 \(i\) (경우에 따라)
\(b_j\) = 시장의 상품 수요 \(j\)
\(c_ij\) = 공장\(i\)과 시장\(j\) 간 단위 선적당 비용
결정 변수:
\(x_ij\) = 공장 \(i\)에서 시장 \(j\)까지 배송할 상품의 양
여기서 \(x_ij \geq 0\), 모든 \(i\), \(j\)
제약조건:
공장 \(i\)의 공급 제한을 관찰하십시오: \(\sum_j x_ij \leq a_i\) 모든 \(i\) (케이스)
시장 수요 충족 \(j\): \(\sum_i x_ij \geq b_j\) 모든 \(j\) (건)
목적 함수: \(\sum_i \sum_j c_ij x_ij\) ($K) 최소화
이 간단한 예는 우리가 일반적으로 좋은 습관으로 간주하고 슬롯 머신 설계와 일치하는 일부 모델링 관행을 보여줍니다. 첫째, 모델의 모든 엔터티는 유형별로 식별(및 그룹화)됩니다. 둘째, 엔터티의 순서는 기호가 정의되기 전에 참조되지 않도록 선택됩니다. 셋째, 모든 엔터티의 단위를 지정하고, 넷째, 최적화 프로그램에서 접하게 되는 수치 값이 상대적으로 작은 절대 크기 차수를 갖도록 단위를 선택합니다. (여기서 $K 기호는 수천 달러를 의미합니다.)
엔티티 유형의 이름은 모델러마다 다를 수 있습니다. 예를 들어 경제학자들은 다음 용어를 사용합니다.외생변수그리고내생변수용주어진 데이터그리고결정 변수입니다. 슬롯 머신에서는 다음과 같은 용어를 사용합니다. 지수를 호출합니다.세트, 주어진 데이터가 호출됩니다.매개변수, 결정 변수가 호출됩니다.변수, 제약 조건과 목적 함수가 호출됩니다.방정식.
교통 문제에 대한 슬롯 머신 표현은 위의 대수적 표현과 매우 유사합니다. 그러나 가장 중요한 차이점은 슬롯 머신 버전은 컴퓨터에서 읽고 처리할 수 있다는 것입니다.
표 1: 운송 문제에 대한 데이터(Dantzig, 1963에서 수정)는 공장에서 시장까지의 배송 거리(1000마일)와 시장 수요 및 공장 공급을 보여줍니다.
| 식물↓ | 뉴욕 | 시카고 | 토피카 | ←시장 |
|---|---|---|---|---|
| 시애틀 | 2.5 | 1.7 | 1.8 | 350 |
| 샌디에이고 | 2.5 | 1.8 | 1.4 | 600 |
| 요구사항→ | 325 | 300 | 275 | 공급품↑ |
운송 문제의 예로서, 표에 주어진 데이터와 함께 2개의 통조림 공장과 3개의 시장이 있다고 가정합니다.표 1. 배송 거리는 수천 마일 단위이며 배송 비용은 천 마일당 케이스당 $90.00로 가정됩니다. 이 문제에 대한 슬롯 머신 표현은 다음과 같습니다.
$title 교통 모델
세트
i 통조림 공장 / 시애틀, 샌디에고 /
j 마켓 / 뉴욕, 시카고, 토피카 / ;
매개변수
a(i) 경우에 따라 공장 i의 생산 능력
/시애틀 350
샌디에이고 600 /
b(j) 다음과 같은 경우 시장 j의 수요
/ 뉴욕 325
시카고 300
토피카 275 / ;
테이블 d(i,j) 거리(천 마일)
뉴욕 시카고 토피카
시애틀 2.5 1.7 1.8
샌디에고 2.5 1.8 1.4 ;
스칼라 f 운임(1,000마일당 케이스당 달러) /90/ ;
매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
c(i,j) = f * d(i,j) / 1000 ;
변수
x(i,j) 케이스의 배송 수량
z 총 운송 비용(단위: 수천 달러);
양수 변수 x ;
방정식
비용 정의 목적 함수
공급(i) 공장 i의 공급 제한을 준수합니다.
수요(j)는 시장 j의 수요를 충족시킵니다.
비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
공급(i) .. sum(j, x(i,j)) =l= a(i) ;
수요(j) .. sum(i, x(i,j)) =g= b(j) ;
모델 전송 /all/ ;
z 를 최소화하는 lp를 사용하여 전송을 해결합니다.
x.l, x.m 표시 ;
위의 내용이 포함된 파일을 슬롯 머신에 대한 입력으로 제출하면 운송 모델이 공식화되고 해결됩니다. 자세한 내용은 컴퓨터에 따라 슬롯 머신를 호출하는 방법에 따라 다르지만 가장 간단한 방법은('장식 없음') 슬롯 머신를 호출하는 방법은 슬롯 머신라는 단어와 입력 파일 이름을 입력하는 것입니다. 출력이 기록되는 파일의 이름을 포함하여 슬롯 머신의 진행 상황을 설명하는 간결한 여러 줄이 표시됩니다. 슬롯 머신가 완료되면 이 파일을 검토하고 모든 것이 잘 진행되면 다음과 같이 최적의 배송이 하단에 표시됩니다.
뉴욕 시카고 토피카
시애틀 50.000 300.000
샌디에고 275.000 275.000
당신은 또한 아래의 한계 비용(단순 승수)을 받게 됩니다.
시카고 토피카
시애틀 0.036
샌디에고 0.009
이러한 결과는 예를 들어 시애틀에서 토피카로 아무 것도 보내지 않는 것이 최적이라는 것을 나타냅니다. 하지만 하나의 케이스만 보내려고 한다면 최적의 비용에 .036 $K(또는 $36.00)가 추가됩니다.
슬롯 머신 모델의 구조
튜토리얼의 나머지 부분에서는 위의 예를 참조하여 슬롯 머신 모델의 기본 구성 요소에 대해 논의하겠습니다. 기본 구성 요소는 표에 나열되어 있습니다.표 2.
| 유형 | 구성요소 |
|---|---|
| 입력 | 세트
|
데이터 (매개변수, 테이블, 스칼라)
| |
변수
| |
| 변수 경계 및/또는 초기값 할당(선택사항) | |
수식
| |
| 모델링 및 해결 문 | |
| 표시문(선택사항) | |
| 출력 | 에코 프린트 |
| 참조 지도 | |
| 수식 목록 | |
| 상태 보고서 | |
| 솔루션 보고서 |
잘못된 데이터에 대한 편집 확인 및 사용자 정의 결과 보고서 요청과 같은 선택적 입력 구성 요소가 있습니다. 기타 선택적 고급 기능에는 이전 모델 저장 및 복원, 단일 실행으로 여러 모델 생성이 포함되지만 이 튜토리얼에서는 기본 구성요소만 설명합니다.
개별 구성 요소를 다루기 전에 몇 가지 일반적인 사항을 알려드립니다.
- 슬롯 머신 모델은 슬롯 머신 언어로 된 명령문 모음입니다. 문의 순서를 결정하는 유일한 규칙은 모델의 엔터티가 존재한다고 선언되기 전에는 참조될 수 없다는 것입니다.
- 슬롯 머신 문은 사용자가 좋아하는 거의 모든 스타일로 인쇄적으로 배치될 수 있습니다. 문당 여러 줄, 삽입된 빈 줄, 한 줄에 여러 줄이 허용됩니다. 이 튜토리얼의 예시를 통해 무엇이 허용되는지 잘 알 수 있지만 정확한 도로 규칙은 다음 장에서 제공됩니다.
- 초보 슬롯 머신 사용자라면 예시에서와 같이 모든 명령문을 세미콜론으로 종료해야 합니다. 슬롯 머신 컴파일러는 대문자와 소문자를 구분하지 않으므로 어느 쪽이든 자유롭게 사용할 수 있습니다.
- 문서화는 수학적 모델의 유용성에 매우 중요합니다. 별도로 작성하는 것보다 모델 자체에 내장하면 더 유용하고 정확할 가능성이 높습니다. 슬롯 머신 모델 내에 문서를 삽입하는 방법에는 최소한 두 가지가 있습니다. 첫째, 열 1에서 별표로 시작하는 줄은 슬롯 머신 컴파일러에서 주석 줄로 무시됩니다. 둘째, 아마도 더 중요한 점은 특정 슬롯 머신 명세서 내에 다큐멘터리 텍스트를 삽입할 수 있다는 것입니다.
- 위의 입력 구성 요소 목록에서 볼 수 있듯이 슬롯 머신 엔터티 생성에는 선언과 할당 또는 정의의 두 단계가 포함됩니다.선언무언가의 존재를 선언하고 이름을 부여하는 것을 의미합니다.과제또는정의무언가에 특정 값이나 형식을 부여하는 것을 의미합니다. 방정식의 경우 별도의 슬롯 머신 문에서 선언과 정의를 작성해야 합니다. 그러나 다른 모든 슬롯 머신 엔터티의 경우 동일한 명세서에서 또는 별도로 선언 및 할당을 수행할 수 있습니다.
- 모델의 개체에 부여된 이름은 문자로 시작해야 하며 뒤에 최대 62개의 문자나 숫자가 더 올 수 있습니다.
세트
세트는 슬롯 머신 모델의 기본 구성 요소이며 모델의 대수적 표현의 인덱스에 정확히 해당합니다. 위의 교통 예시에는 하나만 포함되어 있습니다.설정진술:
세트
i 통조림 공장 / 시애틀, 샌디에고 /
j 마켓 / 뉴욕, 시카고, 토피카 / ;
이 진술의 효과는 아마도 자명할 것입니다. 우리는 두 개의 세트를 선언하고 이름을 지정했습니다.i그리고j. 또한 다음과 같이 세트에 멤버를 할당했습니다.
\(i\) = 시애틀, 샌디에이고
\(j\) = 뉴욕, 시카고, 토피카.
세트의 요소를 나열하기 위한 슬롯 머신 형식과 일반적인 수학적 형식 간의 인쇄상의 차이점에 유의해야 합니다. 슬롯 머신는 집합을 묘사하기 위해 중괄호 '' 대신 슬래시 '/'를 사용합니다. 또한 'New York'과 같은 여러 단어 이름은 따옴표로 묶어야 하거나(예: 'New York' 또는 "New York") 공백 대신 하이픈을 사용해야 합니다(예: New-York).
세트 이름 뒤의 단어세트위의 문이 호출됩니다.텍스트. 텍스트는 선택사항입니다. 이는 내부 문서용으로만 존재하며 모델에서 공식적인 목적을 제공하지 않습니다. 슬롯 머신 컴파일러는 텍스트를 해석하려고 시도하지 않지만 텍스트와 '앵무새' 귀하의 편의를 위해 여러 번 다시 연락드리겠습니다.
세트 \(i\) 및 \(j\) 생성을 하나의 명령문에 결합할 필요는 없었습니다. 다음과 같이 별도의 문에 넣을 수도 있습니다.
통조림 공장 설정 / 시애틀, 샌디에고 / ;
j 시장 설정 / 뉴욕, 시카고, 토피카 / ;
공백과 줄의 배치(대문자 또는 소문자 선택 포함)는 귀하에게 달려 있습니다. 각 슬롯 머신 사용자는 개별적인 문체 규칙을 개발하는 경향이 있습니다. (단수의 사용설정그것도 당신에게 달렸습니다. 사용설정단일 선언을 하는 문에서세트여러 개를 만드는 것이 좋은 영어이지만 슬롯 머신는 단수형과 복수형을 동의어로 취급합니다.)
구성원을 세트에 할당할 때 사용할 수 있는 편리한 기능은 별표입니다. 요소가 순서를 따르는 경우에 적용됩니다. 예를 들어 다음은 유효합니다.설정슬롯 머신의 문.
t 기간 /1991*2000/ 설정;
m개 머신 설정 /mach1*mach24/;
여기서 효과는 할당하는 것입니다
\(t\) = 1991,1992,1993, ....., 2000
\(m\) = 마하 \(_1\), 마하 \(_2\),......, 마하 \(_24\) .
집합 요소는 문자열로 저장되므로 \(t\)의 요소는 숫자가 아닙니다.
또 다른 편리한 기능은별명문은 이전에 선언된 세트에 다른 이름을 부여하는 데 사용됩니다. 다음 예에서는:
별칭(t,tp);
이름tp은 수학 표기법의 \(t'\)와 같습니다. 동일한 세트 내 요소의 상호 작용과 관련된 모델에 유용합니다.
세트i, j, t및m위 명령문에는 정적 세트의 예가 있습니다. 즉, 사용자가 직접 구성원을 할당하고 변경되지 않습니다. 슬롯 머신에는 집합 이론 및 논리 연산을 실행하여 해당 구성원을 획득하는 동적 집합을 생성하는 여러 기능이 있습니다. 동적 집합은 장에서 논의됩니다.동적 세트. 또 다른 중요한 고급 기능은 다차원 세트입니다. 이에 대해서는 섹션에서 설명합니다.다차원 세트.
데이터
교통 문제에 대한 슬롯 머신 모델은 데이터 입력에 허용되는 세 가지 형식을 보여줍니다. 세 가지 형식은 다음과 같습니다.
- 목록
- 테이블
- 직접 할당
다음 세 개의 하위 섹션에서는 이러한 각 형식을 차례로 논의합니다.
목록별 데이터 입력
첫 번째 형식은 예제의 첫 번째 매개변수 문으로 설명되며 아래에서 반복됩니다.
매개변수
a(i) 경우에 따라 공장 i의 생산 능력
/시애틀 350
샌디에이고 600 /
b(j) 다음과 같은 경우 시장 j의 수요
/ 뉴욕 325
시카고 300
토피카 275 / ;
이 진술에는 여러 가지 효과가 있습니다. 다시 말하지만, 자명할 수도 있지만 자세히 분석해 볼 가치가 있습니다. 이 명령문은 두 매개변수의 존재를 선언하고 매개변수에 이름을 부여합니다.a그리고b, 선언합니다도메인되다i그리고j입니다. (도메인은 매개변수, 변수 또는 방정식이 정의되는 집합 또는 집합의 튜플입니다.) 이 명령문은 또한 각 매개변수에 대한 문서 텍스트를 제공하고 값을 할당합니다.a(i)그리고b(j)각 요소에 대해i그리고j. 원하는 경우 다음과 같이 이 하나의 진술을 두 개로 나누는 것이 완벽하게 허용됩니다.
매개변수 a(i) 경우에 공장 i의 용량
/시애틀 350
샌디에이고 600 / ;
매개변수 b(j) 경우에 시장 j의 수요
/ 뉴욕 325
시카고 300
토피카 275 / ;
다음은 목록 형식을 사용할 때 기억해야 할 몇 가지 사항입니다.
- 도메인 요소 목록과 해당 매개변수 값은 원하는 거의 모든 방식으로 배치될 수 있습니다. 유일한 규칙은 전체 목록을 슬래시로 묶어야 하며 요소-값 쌍을 쉼표로 구분하거나 별도의 줄에 입력해야 한다는 것입니다.
- 요소-값 목록과 그 앞에 오는 이름, 도메인 및 텍스트를 구분하는 세미콜론은 없습니다. 이는 목록 형식을 사용할 때 선언과 할당에 동일한 문이 사용되기 때문입니다. (요소-값 목록 자체는 슬롯 머신에서 해석할 수 없으며 오류 메시지가 표시됩니다.)
- 슬롯 머신 컴파일러에는 다음과 같은 특이한 기능이 있습니다.도메인 확인는 목록의 각 도메인 요소가 실제로 적절한 집합의 구성원인지 확인합니다. 예를 들어, 다음 선언문에서 'Seattle'의 철자를 올바르게 입력했다면
설정i하지만 후속 요소-값 목록에서 'Seatle'로 철자를 잘못 입력하면 슬롯 머신 컴파일러는 'Seatle' 요소가 세트에 속하지 않는다는 오류 메시지를 표시합니다.i. - 0은 모든 매개변수의 기본값입니다. 따라서 요소-값 목록에 0이 아닌 항목만 포함하면 되며 순서에 관계없이 입력할 수 있습니다.
- 스칼라는 도메인이 없는 매개변수로 간주됩니다. a로 선언하고 할당할 수 있습니다.
스칼라다음을 포함하는 문퇴화운송 모델의 다음 명령문에서와 같이 단 하나의 값 목록입니다.천 마일당 케이스당 달러 단위의 스칼라 f 화물 /90/;
매개변수의 도메인에 2개 이상의 차원이 있는 경우 목록 형식으로 입력된 값을 가질 수 있습니다. 이는 희소(0이 아닌 항목이 거의 없음) 및 초저밀도(0이 아닌 고유한 항목이 거의 없음) 배열을 입력하는 데 매우 유용합니다.
테이블별 데이터 입력
최적화 실무자들은 대규모 모델에 대한 많은 입력 데이터가 상대적으로 작은 숫자 테이블에서 파생된다는 사실을 한동안 알아차렸습니다. 따라서 데이터 입력을 위한 테이블 형식을 갖는 것이 매우 유용합니다. 2차원 테이블(또는 행렬)의 예가 운송 모델에 제공됩니다.
테이블 d(i,j) 거리(천 마일)
뉴욕 시카고 토피카
시애틀 2.5 1.7 1.8
샌디에고 2.5 1.8 1.4 ;
이 명령문의 효과는 매개변수를 선언하는 것입니다.d그리고 그 도메인을 데카르트 곱의 순서쌍 집합으로 지정합니다.i그리고j. 의 값d또한 이 명령문의 해당 제목 아래에 제공됩니다. 테이블에 빈 항목이 있으면 0으로 해석됩니다.
목록 형식에서와 마찬가지로 슬롯 머신는 도메인 검사를 수행하여 테이블의 행 및 열 이름이 적절한 세트의 구성원인지 확인합니다. 한 줄에 들어갈 수 있는 것보다 더 많은 열이 있는 테이블을 입력하고 차원이 2개 이상인 테이블을 입력하는 형식은 장에 나와 있습니다.데이터 항목: 매개변수, 스칼라 및 테이블.
직접 할당에 의한 데이터 입력
데이터 입력의 직접 할당 방법은 매개변수 선언 및 매개변수 할당 작업을 별도의 명령문으로 나눈다는 점에서 목록 및 테이블 방법과 다릅니다. 운송 모델에는 이 방법의 다음 예가 포함되어 있습니다.
매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
c(i,j) = f * d(i,j) / 1000 ;
첫 번째 줄 끝에 세미콜론이 있음을 강조하는 것이 중요합니다. 이것이 없으면 슬롯 머신 컴파일러는 두 줄을 모두 동일한 명령문의 일부로 해석하려고 시도합니다. (슬롯 머신는 유효한 해석을 식별하지 못하여 오류 메시지를 보냅니다.)
위의 첫 번째 문의 효과는 매개변수를 선언하는 것입니다.c, 도메인 지정(i,j)및 일부 다큐멘터리 텍스트를 제공합니다. 두 번째 문은 다음과 같이 할당됩니다.c(i,j)매개변수 값의 곱f그리고d(i,j). 당연히 이는 이미 값을 할당한 경우에만 슬롯 머신에서 허용됩니다.f그리고d(i,j)이전 진술에서.
위의 직접 할당은 모두에게 적용됩니다.(i,j)다음 도메인의 쌍c. 도메인의 특정 요소에 할당하려면 요소 이름을 따옴표로 묶습니다. 예를 들어,
c('시애틀','뉴욕') = 0.40;
유효한 슬롯 머신 할당문입니다.
동일한 매개변수에 값이 두 번 이상 할당될 수 있습니다. 각 할당문은 즉시 적용되며 이전 값을 재정의합니다. (반면, 동일한 매개변수는 두 번 이상 선언할 수 없습니다. 이는 서로 다른 두 항목에 실수로 동일한 이름을 사용하는 것을 방지하기 위한 슬롯 머신 오류 검사입니다.)
할당 문의 오른쪽에는 다양한 수학적 표현과 내장 함수가 포함될 수 있습니다. C와 같은 과학적인 프로그래밍 언어에 익숙하다면 슬롯 머신에서 할당문을 작성하는 데 어려움이 없을 것입니다. (그러나 슬롯 머신에는 C와 공유되지 않는 일부 효율성이 있습니다. 예를 들어 다음을 할당할 수 있었습니다.c(i,j)모두에 대한 값(i,j)'을(를) 구성하지 않고 쌍루프'.)
슬롯 머신 표준 연산 및 제공되는 기능은 나중에 제공됩니다. 다음은 유효한 할당의 몇 가지 예입니다. 모든 경우에 왼쪽 매개변수가 이미 선언되었고 오른쪽 매개변수에는 이전 문에서 이미 값이 할당되었다고 가정합니다.
csquared = sqr(c);
e = m*c제곱;
w = 1/람다;
eoq(i) = sqrt( 2*수요(i)*ordcost(i)/holdcost(i));
t(i) = min(p(i), q(i)/r(i), log(s(i)));
유클리드(i,j) = qrt(sqr(xi(i) - xi(j) + sqr(x2(i) - x2(j)));
현재(j) = 미래(j)*exp(-interest*time(j));
나중에 소개될 합산 및 곱셈 연산자는 직접 할당에도 사용할 수 있습니다.
변수
슬롯 머신 표현 모델의 결정 변수(또는 내생 변수)는 다음으로 선언되어야 합니다.변수성명. 각 변수에는 이름, 해당하는 경우 도메인 및 (선택 사항) 텍스트가 지정됩니다. 운송 모델에는 다음과 같은 예가 포함되어 있습니다.변수진술.
변수
x(i,j) 케이스의 배송 수량
z 총 운송 비용(단위: 수천 달러) ;
이 명령문은 각 배송 변수를 선언하게 됩니다.(i,j)쌍. (장에서 볼 것입니다.수식, 슬롯 머신가 다음 중 일부만 발생하는 일반적인 실제 상황을 처리하는 방법(i,j)쌍은 배송이 허용됩니다.)
그z변수는 스칼라 수량이므로 도메인 없이 선언되었습니다. 모든 슬롯 머신 최적화 모델에는 최소화 또는 최대화되는 양의 역할을 하는 변수가 하나 포함되어야 합니다.
한번 선언되면 모든 변수에는 유형이 할당되어야 합니다. 허용되는 유형의 선택이 표에 나와 있습니다.표 3. 전체 목록은 섹션을 참조하세요.변수 유형.
| 변수 유형 | 변수 허용 범위 |
|---|---|
무료(기본값) | \(-\infty\)에서 \(+\infty\)로 |
긍정적 | \(0\) ~ \(+\infty\) |
부정 | \(-\infty\) ~ \(0\) |
바이너리 | \(0\) 또는 \(1\) |
정수 | \(0,1,\ldots,100\) (기본값) |
최적화할 수량으로 사용되는 변수는 스칼라여야 하며 다음과 같아야 합니다.무료유형. 운송 예시에서는,z기본적으로 무료로 유지되지만x(i,j)다음 명령문에 의해 음수가 아닌 것으로 제한됩니다.
양수 변수 x ;
도메인은x유형 할당에서 반복되어서는 안 됩니다. 도메인의 모든 항목은 자동으로 동일한 변수 유형을 갖습니다.
섹션.lo, .l, .up, .m 데이터베이스하한, 상한 및 초기값을 변수에 할당하는 방법을 설명합니다.
수식
슬롯 머신와 같은 대수적 모델링 언어의 힘은 구축 중인 모델을 구성하는 방정식과 부등식의 생성에서 가장 분명하게 드러납니다. 이는 방정식이나 부등식의 그룹이 동일한 대수 구조를 가질 때마다 그룹의 모든 구성원이 개별적으로 생성되는 것이 아니라 동시에 생성되기 때문입니다.
수식 선언
수식은 별도의 명령문으로 선언되고 정의되어야 합니다. 선언 형식은 다른 슬롯 머신 엔터티와 동일합니다. 먼저 키워드가 나옵니다.수식이 경우 선언되는 하나 이상의 방정식 또는 부등식 그룹의 이름, 영역 및 텍스트가 뒤에 옵니다. 우리의 운송 모델에는 다음 방정식 선언이 포함되어 있습니다.
방정식
비용 정의 목적 함수
공급(i) 공장 i의 공급 제한을 준수합니다.
수요(j)는 시장 j의 수요를 충족시킵니다. ;
다음 단어를 명심하세요수식슬롯 머신에서는 넓은 의미를 갖습니다. 이는 평등 및 불평등 관계를 모두 포함하며 단일 이름을 가진 슬롯 머신 방정식은 이러한 관계 중 하나 또는 여러 개를 참조할 수 있습니다. 예를 들어,비용정역이 없으므로 단일 방정식이지만공급도메인에 대해 정의된 불평등 집합을 나타냅니다.i.
슬롯 머신 요약(및 곱) 표기법
방정식 정의를 시작하기 전에 슬롯 머신의 합계 표기법을 설명합니다. 슬롯 머신는 표준 키보드 및 한 줄씩 입력하는 리더용으로 설계되었으므로 합계에 표준 수학 표기법을 사용하는 것이 불가능합니다(사용자에게도 편리하지 않음).
슬롯 머신의 합계 표기법은 단순하고 복잡한 표현에 사용될 수 있습니다. 이 형식은 항상 합계를 두 개의 인수가 있는 연산자로 생각한다는 아이디어를 기반으로 합니다.Sum(합계 인덱스, summand)쉼표는 두 인수를 구분하며 첫 번째 인수에 쉼표가 필요한 경우 괄호 안에 있어야 합니다. 두 번째 인수는 다른 합계를 포함한 모든 수학적 표현식이 될 수 있습니다.
간단한 예로 교통 문제에는 다음 표현이 포함됩니다.
합계(j, x(i,j))
\(\sum_j x_ij\)와 동일합니다.
다음 예에서는 약간 더 복잡한 합계가 사용됩니다:
합계((i,j), c(i,j)*x(i,j))
\(\sum_i \sum_j c_ij x_ij\)와 동일합니다.
마지막 표현식은 다음과 같이 중첩된 합계로 작성될 수도 있습니다:
합계(i, 합(j, c(i,j)*x(i,j)))
섹션에서조건부 색인 작업, 사용 방법을 설명합니다.달러 연산자합산 연산자에 제한을 가하여 다음 요소만 사용하도록 합니다.i그리고j지정된 조건을 만족하는 것은 합계에 포함됩니다.
제품은 합계와 정확히 동일한 형식을 사용하여 슬롯 머신에서 정의됩니다.합계by생산. 예를 들어,
prod(j, x(i, j))
다음과 같습니다: \(\Pi_j x_ij\).
합산 및 곱 연산자는 매개변수에 대한 직접 할당문에 사용될 수 있습니다. 예를 들어,
스칼라는 모든 식물에 총 공급량을 공급합니다.
totsupply = sum(i, a(i));
방정식 정의
방정식 정의는 다양성 측면에서 슬롯 머신에서 가장 복잡한 명령문입니다. 방정식 정의의 구성요소는 순서대로 다음과 같습니다.
- 정의되는 방정식의 이름
- 도메인
- 도메인 제한 조건(선택 사항)
- 기호 '
..' - 왼쪽 표현
- 관계 연산자:
=l=,=e=,=g=또는 기타. 전체 목록은 표를 참조하세요.수식 유형. - 오른쪽 표현
운송 예시에는 다음 세 가지 진술이 포함되어 있습니다.
비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
공급(i) .. sum(j, x(i,j)) =l= a(i) ;
수요(j) .. sum(i, x(i,j)) =g= b(j) ;
여기에 기억해야 할 몇 가지 사항이 있습니다.
- 단일 슬롯 머신 문으로 여러 방정식을 생성하는 기능은 도메인에 의해 제어됩니다. 예를 들어,
수요제약으로 인해 도메인의 각 요소에 대해 하나의 제약이 생성됩니다.j, 다음 슬롯 머신 출력에서 발췌한 내용과 같습니다.수요(뉴욕)..x(시애틀,뉴욕) + x(샌디에이고,뉴욕)=g=325 ; 수요(시카고).. x(시애틀,시카고) + x(샌디에고,시카고) =g=300 ; 수요(토피카).. x(시애틀,토피카) + x(샌디에고,토피카) =g=275 ; - 여기서 핵심 아이디어는 위의 장난감 크기의 예를 해결하든 20,000노드의 실제 문제를 해결하든 수요 제약 조건의 정의가 정확히 동일하다는 것입니다. 두 경우 모두 사용자는 대수적으로 하나의 일반 방정식만 입력하고 슬롯 머신는 현재 모델 인스턴스에 적합한 특정 방정식을 생성합니다. (다른 최적화 패키지를 사용하면 위의 추출과 같은 내용이 출력이 아닌 입력의 일부가 됩니다.)
- 많은 실제 문제에서 방정식 영역의 일부 구성원은 일종의 예외로 인해 생략되거나 다른 구성원의 패턴과 구별되어야 합니다. 슬롯 머신는 다음과 같은 강력한 기능을 사용하여 이러한 구조 손실을 쉽게 수용할 수 있습니다.달러또는 '그렇게요' 여기에 설명되지 않은 연산자입니다. 도메인 제한 기능은 해결 가능성 범위 내에서 실제 모델의 크기를 유지하는 데 절대적으로 필요할 수 있습니다.
- 관계 연산자의 의미는 다음과 같습니다:
=l=이하
=g=이상
=e=같음 - '기호'의 차이점을 이해하는 것이 중요합니다.
=' 그리고 '=e='. '=' 기호는 직접 할당에만 사용되며 '=e=' 기호는 방정식 정의에만 사용됩니다. 이 두 가지 맥락은 매우 다릅니다. 직접 할당은 솔버가 호출되기 전에 매개변수에 원하는 값을 제공합니다. 방정식 정의는 원하는 관계도 설명하지만 솔버가 호출될 때까지 만족할 수 없습니다. 방정식 정의에는 변수가 포함되어야 하며 직접 할당은 포함되어서는 안 됩니다. - 변수는 방정식의 왼쪽이나 오른쪽 또는 둘 다에 나타날 수 있습니다. 동일한 변수가 방정식에 두 번 이상 나타날 수 있습니다. 슬롯 머신 프로세서는 솔버를 호출하기 전에 방정식을 동등한 표준 형식(왼쪽의 변수, 중복된 모양 없음)으로 자동 변환합니다.
- 방정식 정의는 방정식과 그것이 참조하는 모든 변수 및 매개변수가 이전에 선언된 경우 슬롯 머신 입력의 어느 곳에나 나타날 수 있습니다. (정의 후에 방정식에 나타나는 매개변수에 값을 할당하거나 재할당하는 것이 허용됩니다. 이는 하나의 슬롯 머신 입력으로 여러 모델을 실행할 때 유용합니다.) 방정식은 선언된 순서와 동일한 순서로 정의될 필요가 없습니다.
목적 함수
이것은 단지 슬롯 머신에는 다음과 같은 명시적인 개체가 없다는 점을 상기시켜드리는 것입니다.목적 함수. 최적화할 함수를 지정하려면 자유(부호 제한 없음) 및 스칼라 값(정역 없음)이면서 목적 함수와 동일시되는 방정식 정의에 나타나는 변수를 생성해야 합니다.
모델링 및 해결 문
단어모델슬롯 머신에서는 매우 정확한 의미를 갖습니다. 그것은 단순히 방정식의 모음입니다. 다른 슬롯 머신 엔터티와 마찬가지로 선언에 이름을 지정해야 합니다. 선언 형식은 키워드입니다.모델다음에는 모델 이름이 오고 그 뒤에는 슬래시로 묶인 방정식 이름 목록이 옵니다. 이전에 정의된 모든 방정식을 포함하려면 다음을 입력할 수 있습니다./모두/명시적인 목록 대신. 이 예에는 하나가 있습니다.모델성명:
모델 수송 /all/ ;
이 설명은 불필요한 것처럼 보일 수 있지만 한 번의 슬롯 머신 실행으로 여러 모델을 생성할 수 있는 고급 사용자에게 유용합니다. 바로가기 대신 명시적 목록을 사용한다면/모두/, 명령문은 다음과 같이 작성됩니다.
모델 운송 / 비용, 공급, 수요 / ;
도메인은 방정식 이름의 일부가 아니기 때문에 목록에서 생략되었습니다. 목록 옵션은 기존 방정식의 하위 집합만 생성 중인 특정 모델(또는 하위 모델)을 구성하는 경우에 사용됩니다.
모델이 선언되고 방정식이 할당되면 솔버를 호출할 준비가 된 것입니다. 이는 다음과 같이 수행됩니다.해결문, 우리 예에서는 다음과 같이 작성되었습니다.
z를 최소화하는 lp를 사용하여 전송을 해결합니다.
solv 문의 형식은 다음과 같습니다:
- 핵심 단어
해결 - 해결할 모델의 이름
- 핵심 단어
사용 중 - 사용 가능한 솔루션 절차입니다. 전체 목록은 아래에 나와 있습니다. 자세한 내용은 섹션을 참조하세요.모델 분류.
해결책 설명 lp선형 프로그래밍용 qcp2차 제약 조건 프로그래밍용 nlp비선형 프로그래밍용 dnlp불연속 도함수를 사용한 비선형 프로그래밍용 미프혼합 정수 프로그래밍용 rmip편안한 혼합 정수 프로그래밍용 miqcp혼합 정수 2차 제약 조건 프로그래밍용 rmiqcp완화된 혼합 정수 2차 제약 조건 프로그래밍용 minlp혼합 정수 비선형 프로그래밍용 rminlp완벽한 혼합 정수 비선형 프로그래밍용 mcp혼합 상보성 문제의 경우 mpec평형 제약 조건이 있는 수학 프로그램용 rmpec평형 제약 조건이 있는 편안한 수학 프로그램의 경우 cns제약된 비선형 시스템용 EMP확장 수학 프로그래밍용 - 키워드 '
최소화' 또는 '최대화' - 최적화할 변수의 이름
표시문
그해결문이 실행될 때 여러 가지 일이 발생하게 됩니다. 모델의 특정 관심 인스턴스가 생성되고, 이 문제를 솔버에 입력하기 위한 적절한 데이터 구조가 생성되고, 솔버가 호출되고, 솔버의 출력이 파일로 인쇄됩니다. 원시 및/또는 쌍대 변수의 최적 값을 얻으려면 솔버 출력을 확인하거나 원하는 경우 슬롯 머신에 이러한 결과 표시를 요청할 수 있습니다. 우리의 예에는 다음 문이 포함되어 있습니다.
디스플레이 x.l, x.m ;
최종 레벨의 인쇄가 필요합니다.x.l및 한계(또는 감소된 비용),x.m, 배송 변수 중,x(i,j). 슬롯 머신는 이 인쇄물을 적절한 제목이 포함된 차원 테이블 형식으로 자동으로 지정합니다.
.lo, .l, .up, .m 데이터베이스
슬롯 머신는 변수와 방정식에 대한 기록이 유지되는 소규모 데이터베이스 시스템으로 설계되었습니다. 각 레코드에서 가장 중요한 필드는 다음과 같습니다.
.lo하한
.l수준 또는 원시 값
.up상한
.m한계 또는 이중 값
이 수량을 참조하는 형식은 변수 또는 방정식 이름, 필드 이름, (필요한 경우) 도메인(또는 도메인의 요소) 순입니다.
슬롯 머신는 사용자가 데이터베이스에 대한 완전한 읽기 및 쓰기 액세스를 허용합니다. 지금은 이 기능이 눈에 띄지 않을 수도 있지만 고급 사용에서는 매우 유용한 기능이 될 수 있습니다. 데이터베이스 사용의 몇 가지 예는 다음과 같습니다.
변수 경계 및/또는 초기값 할당
변수의 하한과 상한은 변수 유형에 따라 자동으로 설정됩니다. (무료, 양수, 음수, 이진또는정수), 그러나 이러한 경계는 슬롯 머신 사용자가 덮어쓸 수 있습니다. 다음은 몇 가지 예입니다.
x.up(i,j) = 용량(i,j) ;
x.lo(i,j) = 10.0 ;
x.up('시애틀','뉴욕') = 1.2*capacity('시애틀','뉴욕') ;
첫 번째와 세 번째 예에서는 다음과 같이 가정합니다.용량(i,j)은 이전에 선언되어 값이 할당된 매개변수입니다. 이러한 문은 변수 선언 뒤와 앞에 나타나야 합니다.해결성명. 직접 할당에 사용할 수 있는 모든 수식은 오른쪽에서 사용할 수 있습니다.
비선형 프로그래밍에서는 모델러가 하한과 상한 사이의 범위를 최대한 좁게 지정하여 솔버를 돕는 것이 매우 중요합니다. 솔버가 최적값 검색을 시작할 수 있는 초기 솔루션을 지정하는 것도 매우 유용합니다. 예를 들어, 제한된 재고 모델에서 변수는 다음과 같습니다.수량(i), 그리고 문제의 제약이 없는 버전에 대한 최적의 솔루션은라는 매개변수인 것으로 알려져 있습니다.eoq(i). 제한된 문제의 최적에 대한 추측으로 우리는 입력합니다.
수량.l(i) = 0.5*eoq(i) ;
(0이 경계 범위 내에 있지 않는 한 기본 초기 레벨은 0이며, 이 경우 0에 가장 가까운 경계입니다.)
다음을 이해하는 것이 중요합니다..lo그리고.up필드는 전적으로 슬롯 머신 사용자가 제어합니다..l그리고.m반면에 필드는 사용자가 초기화할 수 있지만 솔버에 의해 제어됩니다.
최적 값의 변환 및 표시
(원하는 경우 처음 읽을 때 이 섹션을 건너뛸 수 있습니다.)
최적화 프로그램이 다음을 통해 호출된 후해결문에서 원시 및 이중 변수에 대해 계산된 값은 데이터베이스의.l그리고.m필드. 그런 다음 이러한 결과를 읽고 이를 슬롯 머신 문으로 변환하고 표시할 수 있습니다.
예를 들어, 운송 문제에서 각 공장이 충족하는 각 시장의 수요 비율을 알고 싶다고 가정해 보겠습니다. 풀이 문 다음에 다음을 입력합니다.
매개변수 pctx(i,j) 공장 i가 충족하는 시장 j 수요의 백분율;
pctx(i,j) = 100.0*x.l(i,j)/b(j) ;
pctx를 표시 ;
원래 교통 문제 입력에 이 명령을 추가하면 다음과 같은 출력이 나옵니다:
시장 j 수요의 pctx%가 공장 I에 의해 채워집니다.
뉴욕 시카고 토피카
시애틀 15.385 100.000
샌디에고 84.615 100.000
한계와 관련된 예를 들어, 우리는 간략하게 다음을 고려합니다.비율 제약 조건혼합 및 정제 문제에서 흔히 나타나는 현상입니다. 이러한 선형 프로그래밍 모델은 원하는 여러 완제품 각각에 투입할 수 있는 여러 가지 원자재 각각의 최적량을 결정하는 것과 관련이 있습니다. 하자y(i,j)완제품에 투입되는 원자재의 톤수 \(i\)에 대한 변수가 됩니다.j. 가정해보자비율 제약어떤 제품도 한 가지 성분이 25% 이상 포함될 수 없다는 것입니다. 즉,
y(i,j)/q(j) =l= .25 ;모두를 위해i, j. 모델을 선형으로 유지하기 위해 제약 조건은 다음과 같이 작성됩니다.
비율(i,j)..y(i,j) - .25*q(j) =l= 0.0 ;명시적인 비율이 아닌.
여기서 문제는 바로 그것입니다.비율.m(i,j)73385_73585
y(i,j) - .25*q(j) =l= 1.0 ;
안타깝게도 이 완화된 제약은 현실적인 의미가 없습니다. 우리가 완화(또는 강화)하려는 제약은 배급 제약의 비선형 형태입니다. 예를 들어, 비율 제약 조건을 다음으로 변경함으로써 발생하는 한계 이익을 알고 싶습니다.
y(i,j)/q(j) =l= .26 ;
실제로 우리는 원하지 않는 한계에 다음 변환을 입력하여 원하는 한계를 얻을 수 있습니다:
매개변수 amr(i,j) 비율 제약에 대한 적절한 한계 ;
amr(i,j) = ratio.m(i,j)*0.01*q.l(j) ;
amr 표시 ;
다음에 대한 할당문에 주목하세요.amr두 가지 모두에 액세스.m그리고.l데이터베이스의 레코드입니다. 변화의 이면에 있는 아이디어는 다음을 주목하는 것입니다.
y(i,j)/q(j) =l= .26 ;다음과 동일함
y(i,j) - .25*q(j) =l= 0.01*q(j) ;
슬롯 머신 출력
슬롯 머신 실행의 기본 출력은 광범위하고 유익합니다. 전체 논의를 보려면 장을 참조하세요.슬롯 머신 출력. 이 튜토리얼에서는 다음과 같이 출력을 부분적으로 설명합니다.
- 에코 프린트
- 참조 지도
- 상태 보고서
- 오류 메시지
- 모델 통계
- 솔루션 보고서
맥박수가 있는 사람이라면 누구나 고급 소프트웨어를 완벽하게 사용하는 것이 쉬워야 한다는 잘못된 인상을 독자에게 주는 교과서와 사용자 설명서로 인해 많은 불필요한 불안이 발생했습니다. 슬롯 머신는 가장 숙련된 사용자라도 오류가 발생할 수 있다는 점을 이해하고 설계되었습니다. 슬롯 머신는 가능한 한 빨리 오류를 포착하고 그 결과를 최소화하려고 노력합니다.
에코 프린트
오류로 인해 최적화 문제가 해결되지 않는지 여부에 관계없이 슬롯 머신 실행 출력의 첫 번째 섹션은 입력 파일의 에코 또는 복사본입니다. 향후 참조를 위해 슬롯 머신는 에코의 왼쪽에 줄 번호를 배치합니다. 운 좋게도 오류가 없는 운송 예시의 경우 에코 프린트는 다음과 같습니다.
2 세트 3 i 통조림 공장 / 시애틀, 샌디에이고 / 4개 J 마켓 / 뉴욕, 시카고, 토피카 / ; 5 6개의 매개변수 7 8 a(i) 경우에 따라 플랜트 i의 용량 9 / 시애틀 350 10 샌디에이고 600 / 11 12 b(j) 경우에 따라 시장 j의 수요 13 / 뉴욕 325 14 시카고 300 15 토피카 275 / ; 16 17 표 d(i,j) 거리(천 마일) 18 뉴욕 시카고 토피카 19 시애틀 2.5 1.7 1.8 20 샌디에이고 2.5 1.8 1.4 ; 21 22 스칼라 f 운임(단위: 천 마일당 케이스당 달러) /90/ ; 23 24 매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ; 25 26 c(i,j) = f * d(i,j) / 1000 ; 27 28개의 변수 케이스에 29 x(i,j) 배송 수량 30 z 총 운송 비용(단위: 수천 달러) ; 31 32 양수 변수 x ; 33 34 방정식 35 비용 정의 목적 함수 36 공급(i) 공장 i의 공급 제한을 준수합니다. 37 수요(j)는 시장 j의 수요를 충족시킵니다. 38 39 비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ; 40 41 공급(i) .. sum(j, x(i,j)) =l= a(i) ; 42 43 수요(j) .. sum(i, x(i,j)) =g= b(j) ; 44 45 모델 전송 /all/ ; 46 47 z를 최소화하는 lp를 사용하여 전송 문제 해결; 48 49 디스플레이 x.l, x.m ; 50
이 에코 인쇄가 라인 번호 1이 아닌 라인 번호 2로 시작하는 이유는 입력 파일에 다음이 포함되어 있기 때문입니다.달러 인쇄 제어문장. 이 유형의 명령어는 출력 인쇄를 제어하지만 최적화 모델 정의와는 아무 관련이 없으므로 에코에서 생략됩니다. 달러 인쇄 컨트롤은 열 1에서 시작해야 합니다.
$교통 모델 이름 지정
그$title문은 후속 텍스트가 출력의 각 페이지 상단에 인쇄되도록 합니다. 사용 가능한 다른 지침은 장에 나와 있습니다.달러 통제 옵션.
오류 메시지
슬롯 머신 컴파일러가 입력 파일에서 오류를 발견하면 위반 현장 바로 다음 줄의 에코 인쇄 내부에 코딩된 오류 메시지를 삽입합니다. 이 메시지는 항상로 시작합니다.****및 '를 포함$' 컴파일러가 오류가 발생했다고 생각하는 지점 바로 아래에 있습니다.$다음에는 숫자 오류 코드가 따르는데, 이는 에코 인쇄 후에 설명됩니다. 몇 가지 예가 이어집니다.
예 1 :문장 입력
q 분기별 기간 설정 / 봄, sos1, 가을, wtr / ;에코 결과 발생
1 q 분기별 기간 설정 / 봄, sos1, 가을, wtr / ; **** $160이 경우 슬롯 머신 컴파일러는 설정된 요소 합계에 문제가 있음을 나타냅니다. 에코 프린트 하단에 오류 코드 160의 해석이 표시됩니다.
오류 메시지 160 고유 요소가 예상됩니다....문제는 그것이다
sos1은 예약어이므로 일반적으로 식별자로 사용할 수 없습니다. 예약어의 전체 목록은 다음과 같습니다.이 장. 따라서 우리의 집합 요소는 다음과 같은 고유한 이름을 가져야 합니다.'여름'. 이는 초보자가 흔히 저지르는 실수입니다.
예 2 :또 다른 일반적인 오류는 직접 할당 또는 방정식 정의 앞에 세미콜론을 생략하는 것입니다. 운송 예시에서 를 할당하기 전에 세미콜론을 생략했다고 가정해 보겠습니다.c(i,j)다음과 같습니다.
매개변수 c(i,j) 운송 비용(케이스당 1000달러) c(i,j) = f * d(i,j) / 1000 ;결과 출력은 다음과 같습니다.
16 매개변수 c(i,j) 운송 비용(케이스당 1000달러) 17 c(i,j) = f * d(i,j)/1000 **** $97 $195,96,409 오류 메시지 96 식별자와 텍스트 사이에 공백이 필요합니다. (또는 식별자의 잘못된 문자) (-또는- 이전 줄에 ';'이 누락되었는지 확인) 97 설명 텍스트는 '$', '=' 또는 '..'으로 시작할 수 없습니다. (-또는- 이전 줄에 ';'이 누락되었는지 확인) 195 다른 유형으로 재정의된 기호 409 인식할 수 없는 항목 - 새 명세서를 찾으려면 건너뛰세요. ';'을(를) 찾고 있습니다. 또는 다시 시작하기 위한 키워드세미콜론 누락과 같은 작은 위반으로 인해 5개의 위협적인 오류 메시지가 생성되는 것은 드문 일이 아닙니다. 여기서의 교훈은 첫 번째 오류를 수정하는 데 집중하고 다른 오류는 무시한다는 것입니다. 발견된 첫 번째 오류(17행)인 코드 97은 슬롯 머신가 17행의 기호가 우리가 의도한 대로 직접 할당한 것이 아니라 16행 끝에 있는 문서 텍스트의 연속이라고 생각함을 나타냅니다. 또한 오류 메시지는 이전 줄에서 세미콜론이 누락되었는지 확인하라고 적절하게 조언합니다.
안타깝게도 오류 메시지가 그들의 조언에서 그렇게 정확할 것이라고 항상 기대할 수는 없습니다. 컴파일러는 당신의 마음을 읽을 수 없습니다. 때로는 의도를 이해하지 못할 수도 있으므로 슬롯 머신 출력에 풍부한 단서를 포착하여 오류의 원인을 탐지하는 방법을 배우십시오. 예를 들어, 누락된 세미콜론은 상호 참조 목록(다음 섹션에서 설명)에서 c 항목을 찾아 해당 항목이 할당되지 않았음을 확인함으로써 감지될 수 있습니다.
기호 유형 참조 c PARAM 선언 15 참조 17
예 3 :많은 오류는 단순히 철자 실수로 인해 발생하며 피해를 입기 전에 발견됩니다. 예를 들어 '시애틀' 집합 선언에 소개된 방식과 다르게 테이블에 철자를 입력하면 다음과 같은 오류 메시지가 나타납니다.
4세트 5 i 통조림 공장 /시애틀, 샌디에고 / 6개 J 마켓 /뉴욕, 시카고, 토피카 / ; 7 8 테이블 d(i,j) 거리(천 마일) 9 뉴욕 시카고 토피카 10 시애틀 2.5 1.7 1.8 **** $170 11 샌디에고 2.5 1.8 1.4 ; 오류 메시지 170 요소에 대한 도메인 위반
예 4 :마찬가지로, 실수로 입력한 경우dem(j)대신에b(j)수요 제약 조건의 오른쪽에 있는 결과는 다음과 같습니다.
45 수요(j) .. sum(i, x(i,j) ) =g= dem(j) ;
**** $140
오류 메시지
140 알 수 없는 기호
예 5 :다음 예는 초보 모델러가 범하는 수학적 오류로, 슬롯 머신는 이를 포착하는 데 능숙합니다. 다음은 수학적으로 일관성이 없으므로 해석 가능한 진술이 아닙니다.
\[ \mbox모든 $i$에 대해,\quad \sum_i x_ij = 100 \]
이 방정식에는 두 가지 오류가 있는데 둘 다 지수 제어와 관련이 있습니다. 인덱스 \(i\)는 과도하게 제어되고 인덱스 \(j\)는 과소 제어됩니다.
인덱스 \(i\)가 충돌하는 명령을 받는 것을 볼 수 있습니다. 수량자 '에 표시됨모든 \(i\)에 대해', 방정식의 각 인스턴스에 대해 고정된 상태로 유지되어야 합니다. 그러나 합계의 지표로 나타나므로 다양할 것으로 예상됩니다. 둘 다 할 수는 없습니다. 반면에 인덱스 \(j\)는 어떤 방식으로든 제어되지 않으므로 가능한 값 중 어떤 값을 사용할지 알 수 없습니다.
이 무의미한 방정식을 슬롯 머신에 입력하면 두 오류 모두 올바르게 진단됩니다.
의미 없음(i) .. sum(i, x(i,j)) =e= 100 ; **** $125 $149 오류 메시지 125 세트가 이미 제어되고 있습니다. [이것은 세트 i를 나타냅니다.] 149 제어되지 않는 집합이 상수로 입력되었습니다. [이것은 집합 j를 나타냅니다.]
오류 보고에 대한 자세한 내용은 섹션에 나와 있습니다.오류 보고. 포괄적인 오류 감지와 잘 설계된 오류 메시지는 모델을 빠르고 정확하게 구현하는 데 큰 도움이 됩니다.
참조 지도
오류가 감지된 경우 마지막 출력인 다음 섹션은 다음 쌍입니다.참조 지도디버깅 및 문서화 목적으로 입력 파일의 요약 및 분석이 포함되어 있습니다.
첫 번째 참조 맵은 a상호 참조 지도대부분의 최신 컴파일러에서 발견되는 것과 같습니다. 이는 모델의 모든 엔터티(세트, 매개변수, 변수 및 방정식)가 상호 참조된 알파벳순 목록입니다. 목록에는 각 엔터티의 유형과 입력에 있는 엔터티의 각 모양에 대한 코드화된 참조가 표시됩니다. 운송 예시에 대한 상호 참조 지도는 다음과 같습니다(모든 표를 표시하지는 않습니다). 돌리려면상호 참조 지도on, 다음 줄을 추가해주세요
$onSymXRef
다음 바로 모델의 시작 부분에$title진술.
기호 유형 참조 PARAM 선언 9 정의 10 참조 42 b PARAM 선언 13 정의 14 참조 44 c PARAM 선언 25 할당 27 참조 40 비용 EQU 선언 36 정의 40 impl-asn 48 참조 46 d PARAM 선언 18 정의 18 참조 27 수요 EQU 선언 38 정의 44 impl-asn 48 참조 46 f PARAM 선언 23 정의 23 참조 27 i SET 선언됨 4 정의됨 4 참조 9 18 25 27 30 37 2*40 2*42 44 제어 27 40 42 44 j SET 선언됨 5 정의됨 5 참조 13 18 25 27 30 38 2*40 42 2*44 제어 27 40 42 44 공급 EQU 선언 37 정의 42 impl-asn 48 참조 46 전송 모델 선언 46 정의 46 impl-asn 48 참조 48 x VAR 선언 30 impl-asn 48 참조 33 40 42 44 2*50 z VAR 선언 31 impl-asn 48 참조 40 48
예를 들어, 상호 참조 목록은 기호가 다음과 같이 알려줍니다.a는 9행에서 선언되고, 10행에서 정의(할당된 값)되고, 42행에서 참조되는 매개변수입니다. 기호i상호 참조 목록에 더 복잡한 항목이 있습니다. 4행에서 선언하고 정의한 집합인 것으로 표시됩니다. 9, 18, 25, 27, 30, 37, 44행에서 한 번 참조되고 40, 44행에서 두 번 참조됩니다. Seti또한 27, 40, 42 및 44행의 합계, 방정식 정의 또는 직접 매개변수 할당에서 제어 색인으로 사용됩니다.
슬롯 머신 초보자에게는 상호 참조 목록의 상세한 분석이 중요하지 않을 수 있습니다. 아마도 참조 맵에서 얻을 수 있는 가장 큰 이점은 구두점이나 구문 오류로 인해 실수로 모델에 입력된 원치 않는 엔터티를 발견하는 것일 것입니다.
참조 맵의 두 번째 부분은 유형별로 그룹화되고 관련 문서 텍스트와 함께 나열되는 모델 개체 목록입니다. 예를 들어 이 목록은 다음과 같습니다.
세트
나는 통조림 식물
J 시장
매개변수
경우에 따라 플랜트 i의 용량
b 시장 j의 수요
c 운송 비용(케이스당 수천 달러)
d 거리(천 마일)
f 천 마일당 케이스당 화물(달러)
변수
x 케이스의 배송 수량
z 총 운송 비용(단위: 수천 달러)
방정식
비용 정의 목적 함수
수요는 시장 j의 수요를 충족시킵니다.
공급 공장 i의 공급 제한을 준수하십시오.
모델
운송
수식 목록
컴파일 오류 없이 입력 파일을 만드는 데 성공하면 슬롯 머신는 모델을 생성할 수 있습니다. 질문은 남아 있으며 오직 귀하만이 답할 수 있습니다. 슬롯 머신는 귀하가 의도한 모델을 생성합니까?
방정식 목록은 아마도 이 매우 중요한 질문을 연구하기 위한 최고의 장치일 것입니다. 해석 명령의 결과인 방정식 목록은 세트 및 매개변수의 현재 값이 모델의 일반 대수 형식에 연결될 때 생성되는 모델의 특정 인스턴스를 보여줍니다. 예를 들어 운송 모델에 대한 입력 파일에 제공된 일반 수요 제약 조건은 다음과 같습니다.
수요(j) .. 합계(i, x(i,j)) =g= b(j) ;특정 제약 조건의 방정식 목록은 다음과 같습니다.
---------수요 =g= 시장 j의 수요 충족 수요(뉴욕).. x(시애틀, 뉴욕) +x(샌디에이고, 뉴욕) =g= 325 ; 수요(시카고).. x(시애틀, 시카고) +x(샌디에고, 시카고 ) =g= 300 ; 수요(토피카).. x(시애틀, 토피카) +x(샌디에고, 토피카) =g= 275 ;
기본 출력은 각 일반 방정식에 대한 최대 3개의 특정 방정식입니다. 기본값을 변경하려면 풀이 문 앞에 입력 문을 삽입하세요.
옵션 limrow = r ;어디에서r원하는 숫자입니다.
기본 출력에는 각 일반 변수에 대한 세 가지 특정 변수의 계수를 보여주는 방정식 목록과 유사한 열 목록이라는 섹션도 포함되어 있습니다. 이 목록은 이전에 MPS 형식으로 구현된 슬롯 머신 모델을 검증하는 데 특히 유용합니다. 일반 변수당 특정 열 인쇄의 기본 수를 변경하려면 위 명령을 확장할 수 있습니다.
옵션 limrow = r, limcol = c ;어디에서c은 원하는 열 수입니다. (설정림로우그리고림콜to 0은 모델이 디버깅된 후 lst 파일의 크기를 줄이는 좋은 방법입니다.) 비선형 모델에서 슬롯 머신 방정식 목록은 비선형 방정식의 1차 Taylor 근사치를 보여줍니다. 근사값은 변수의 시작 값에서 취해집니다.
모델 통계
슬롯 머신가 솔버를 호출하기 전에 생성하는 출력의 마지막 섹션은 아래 운송 예시와 같이 모델 크기에 대한 통계 그룹입니다.
모델 통계 방정식 블록 3 단일 방정식 6 변수 블록 2 단일 변수 7 0이 아닌 요소 19
그차단counts는 일반 방정식 및 변수의 수를 나타냅니다.싱글수는 생성되는 특정 모델 인스턴스의 개별 행과 열을 나타냅니다. 비선형 모델의 경우 문제의 비선형성 정도를 설명하기 위해 몇 가지 다른 통계가 제공됩니다.
상태 보고서
솔버가 실행된 후 슬롯 머신는 간략한 내용을 인쇄합니다.해결 요약가장 중요한 두 항목은 다음과 같습니다.솔버 상태그리고모델 상태. 운송 문제에 대한 해결 요약은 다음과 같습니다.
솔루션 요약
모델 운송 목표 z
유형 LP 방향 최소화
라인 49의 솔버 CPLEX
**** 솔버상태 1 정상완료
**** 모델 상태 1 최적
**** 목표 값 153.6750
자원 사용량, 한도 0.031 1000.000
반복 횟수, 제한 4 2000000000상태 보고서 앞에는 동일한 내용이 붙습니다****문자열을 오류 메시지로 표시하므로 출력 파일을 처음 볼 때마다 이 문자열이 나타나는 모든 항목을 검색하는 습관을 길러야 합니다. 원하는 솔버 상태는 다음과 같습니다.1 정상 완료, 그러나 섹션에 설명된 다른 가능성도 있습니다.해결 요약, 다양한 유형의 오류 및 사고와 관련됩니다.
일반적인 선형 프로그래밍 종료 상태를 포함하여 11개의 가능한 모델 상태가 있습니다. (1 최적, 3 무제한, 4 실행 불가능) 및 비선형 및 정수 프로그래밍과 관련된 기타 항목입니다. 비선형 프로그래밍에서 찾아야 할 상태는 다음과 같습니다.2 로컬 최적. 비선형 프로그래밍에 대해 소프트웨어가 보장할 수 있는 최대치는 로컬 최적해입니다. 사용자는 문제의 볼록성을 분석하여 지역적 최적성이 전역적 최적성에 충분한지 여부를 판단할 책임이 있습니다. 정수 계획법에서 찾아야 할 상태는 다음과 같습니다.8 정수 해. 이는 실현 가능한 정수 해를 찾았음을 의미합니다. 솔루션이 사용자가 지정하는 상대적 및 절대 최적성 허용 오차를 충족하는지 여부에 대한 자세한 내용은 다음과 같습니다.
솔루션 보고서
솔버 상태와 모델 상태가 허용 가능하다면 최적화 결과를 검토하는 데 관심이 있으실 것입니다. 결과는 먼저 방금 해결된 특정 모델에 적합한 이름에 따라 행과 열이 그룹화되고 레이블이 지정되는 추가 기능과 함께 표준 수학 프로그래밍 출력 형식으로 표시됩니다. 이 형식에는 각 행과 열에 대해 하한, 수준, 상한 및 한계를 제공하는 인쇄 라인이 있습니다. 일반 방정식 블록과 열 출력은 일반 변수 블록별로 행 출력을 그룹화합니다. 쉽게 읽을 수 있도록 세트 요소 이름이 출력에 포함됩니다. 운송 예시에서 솔버는 다음을 출력합니다.공급(i), 수요(j)및x(i,j)다음과 같습니다:
---- EQU 공급은 공장 i의 공급 제한을 준수합니다.
하위 레벨 상위 한계
시애틀 -INF 350.000 350.000 EPS
샌디에고 -INF 550.000 600.000 .
---- EQU 수요는 시장 j의 수요를 충족시킵니다.
하위 레벨 상위 한계
뉴욕 325.000 325.000 +INF 0.225
시카고 300.000 300.000 +INF 0.153
토피카 275.000 275.000 +INF 0.126
---- VAR x 케이스의 배송 수량
하위 레벨 상위 한계
시애틀.뉴욕. 50,000 +INF .
시애틀.시카고. 300.000 +INF .
시애틀 .topeka . . +INF 0.036
샌디에고.뉴욕. 275.000 +INF .
샌디에고.시카고. . +INF 0.009
샌디에고.topeka . 275.000 +INF .단일 점 '.' 출력에서는 0을 나타냅니다. 항목EPS는 다음을 의미합니다.엡실론는 매우 작지만 0이 아님을 의미합니다. 이 경우,EPS퇴행을 나타냅니다. (시애틀 공급 제약에 대한 여유 변수는 기본적으로 0 수준입니다. 한계는 다음과 같이 표시됩니다.EPS이전 기준에서 최적화 프로그램을 쉽게 다시 시작할 수 있도록 0이 아닌.)
솔버 결과에 잘못된 부호의 불가능성 또는 한계 비용이 포함된 경우 문제가 되는 항목은 다음과 같이 표시됩니다.INFES또는NOPT입니다. 문제가 무제한으로 종료되면 극한 광선에 해당하는 행과 열이 표시됩니다.UNBND.
솔버 솔루션 보고서가 끝나면 매우 중요합니다.보고서 요약: 최적이 아니고 실행 불가능하며 제한이 없는 행과 열의 총 개수를 집계합니다. 예를 들어 보고서 요약에는 원하는 대로 0개의 집계가 모두 표시됩니다.
**** 보고서 요약: 0 NONOPT
0 불가능
0 무제한솔버의 보고서가 작성된 후 제어권은 솔버에서 슬롯 머신로 다시 반환됩니다. 솔버가 얻은 모든 수준과 한계는 슬롯 머신 데이터베이스에 입력됩니다..l그리고.m필드. 그런 다음 이러한 값을 변환하여 원하는 보고서에 표시할 수 있습니다. 앞서 언급했듯이 사용자는 표시할 수량만 나열하면 슬롯 머신는 자동으로 적절한 배열의 형식을 지정하고 레이블을 지정합니다. 예를 들어 입력 문입니다.
디스플레이 x.l, x.m ;결과는 다음과 같습니다.
-- 케이스에 50개의 VARIABLE x.L 배송 수량
뉴욕 시카고 토피카
시애틀 50.000 300.000
샌디에고 275.000 275.000
---- 50개 가변 x.M 배송 수량(케이스 포함)
시카고 토피카
시애틀 0.036
샌디에고 0.009참조 지도, 방정식 목록, 솔루션 보고서 및 선택적 디스플레이에서 볼 수 있듯이 슬롯 머신는 문서 텍스트와 '앵무새' 모델을 잘 문서화하는 데 도움이 되도록 출력 전체에 걸쳐 이를 다시 표시합니다.
요약
이 튜토리얼에서는 실용적인 최적화 모델을 빠르고 효과적으로 구축할 수 있는 슬롯 머신의 여러 설계 기능을 시연했습니다. 다음 논의에서는 슬롯 머신와 같은 대수적 모델링 언어와 행렬 생성기 또는 대화형 솔버를 사용하는 것의 장점을 요약합니다.
- 대수 기반 표기법을 사용하면 수학적으로 훈련받은 다른 사람에게 설명하는 것처럼 쉽게 최적화 모델을 컴퓨터에 설명할 수 있습니다.
- 문제에 대한 대수적 설명은 일반성을 갖기 때문에 동일하거나 관련된 문제의 새로운 인스턴스가 발생할 때 슬롯 머신 모델의 대부분의 설명은 재사용이 가능합니다. 이는 모델이 끊임없이 변화하는 환경에서 특히 중요합니다.
- 하나의 명령문에서 밀접하게 관련된 전체 제약조건 세트를 생성하여 시간을 절약하고 생성 오류를 줄입니다.
- 데이터를 명시적으로 입력하는 대신 데이터 계산 공식을 제공하여 시간을 절약하고 입력 오류를 줄일 수 있습니다.
- 모델은 자체 문서화됩니다. 모델 개발 작업과 모델 문서화 작업을 동시에 수행할 수 있으므로 모델러는 문서를 정확하고 최신 상태로 유지하는 데 훨씬 더 성실할 가능성이 높습니다.
- 슬롯 머신의 결과는 읽고 사용하기 쉽습니다. 솔버의 솔루션 보고서는 관련 방정식과 변수가 함께 그룹화되고 적절하게 레이블이 지정되도록 자동으로 형식이 다시 지정됩니다. 또한,
디스플레이명령을 사용하면 결과를 매우 쉽게 수정하고 표로 만들 수 있습니다. - 모델링을 가르치거나 배우는 경우 모든 방정식이 수학적으로 일관성이 있다는 슬롯 머신 컴파일러의 주장으로부터 이점을 얻을 수 있습니다. 숙련된 모델러라도 오류를 감지하는 수백 가지 방법을 통해 개발 시간을 크게 단축할 수 있습니다.
- 다음을 사용하여달러이 튜토리얼에서 다루지 않은 연산자 및 기타 고급 기능을 사용하면 대규모 모델을 효율적으로 구현할 수 있습니다. 달러 연산자의 구체적인 적용은 다음과 같습니다.
- 모델에 포함될 변수 및 방정식에 대해 허용되는 인덱스 조합에 논리적 제한을 적용할 수 있습니다. 이를 통해 불필요한 행과 열을 걸러내고 문제의 크기를 해결 가능한 범위 내에서 유지할 수 있습니다.
- 복잡한 합계와 곱을 작성하는 데 사용할 수 있으며, 방정식이나 사용자 정의 보고서에 사용할 수 있습니다.
- 경고 메시지를 발행하거나 상황별 데이터 편집 시 조기 조건부 종료를 위해 사용될 수 있습니다.
1)댄치히, 조지 B. (1963).선형 프로그래밍 및 확장, 프린스턴 대학 출판부, 프린스턴 뉴저지