슬롯 게임되지 않은 모델 처리

게시일: 2020년 7월 6일 맥칼 뉴스레터

최적화 문제로 인해 때때로 무한한 솔루션이 생성됩니다. 원인을 찾으려면 모델을 수정하고 해결하여 정보를 얻을 수 있습니다. 이는 "인위적으로" 큰 경계를 적용하여 수행됩니다. 선형 프로그래밍 솔버는 더 크게 만들 수 있는 변수를 찾을 때 무한성을 발견하지만 변수가 슬롯 게임 없이 증가할 수 있음을 발견합니다. GAMS에서 일부 솔버는 이러한 정보를 반환하지만 일반적으로 슬롯 게임되지 않은 변수는 하나만 보고되며, 검사되지 않았거나 슬롯 게임되지 않은 다른 변수가 많이 있을 수 있습니다. 불행하게도 LST 파일은 일반적으로 무한성의 원인을 진단하고 수정하는 데 충분한 정보를 제공하지 않으며 사전 해결에서는 이러한 문제를 거의 발견하지 못합니다. 일반적으로 솔루션 보고서에는 특정 항목이 무슬롯 게임(UNBND 표시 사용)으로 태그가 지정된 인스턴스가 포함되어 있지만, 무슬롯 게임일 수도 있고 아닐 수도 있는 비최적(NOPT)으로 표시된 다른 변수도 있습니다. 마지막으로, GAMSCHK 분석의 사용과 식별된 모든 문제 및 모델의 수정은 여전히 ​​슬롯 게임될 수 있습니다. 따라서 대부분의 모델러는 때때로 슬롯 게임이 없는 모델과 씨름하게 되며 해당 조건의 원인을 찾아내야 합니다.

무슬롯 게임 모델의 원인

슬롯 게임되지 않은 모델의 원인이 항상 쉽게 식별되는 것은 아닙니다. 실제로는 다른 변수나 변수 간의 상호 작용이 실제 원인인 경우 솔버는 특정 변수를 무한한 것으로 보고할 수 있습니다. 다음 예를 고려해보세요.

최대 3X1- X2+ X3s.t.  엑스1- X2= 0
                    엑스3≤ 20  
      엑스1, X2, X3≥ 0

여기서 무한성은 $X_1$와 $X_2$ 사이의 상호 관계로 인해 발생합니다. 무한성이 존재하는 이유에 대해 여러 가지 잠재적인 설명이 있을 수 있습니다. $X_1$ 및 $X_2$의 이익 기여는 수량 독립적이지 않을 수 있으며 매출 증가에 따른 일부 형태의 수익 감소 또는 비용 증가가 생략될 수 있습니다. 둘째, $X_1$ 또는 $X_2$에 제약 조건이 생략될 수 있습니다. 셋째, 위의 경우에는 다수의 오류가 있을 수 있습니다. CPLEX를 사용한 실행으로 인해 $X_2$가 무슬롯 게임 항목으로 표시되었습니다. 이는 실수를 일으키는 문제를 적절하게 식별할 수도 있고 그렇지 않을 수도 있습니다. 실수는 $X_1$ 쪽에 있을 수 있으며 출력에서는 이에 대해 아무것도 볼 수 없습니다. 여기에는 일반적으로 솔버가 표시하는 하나의 변수가 아니라 여러 변수와 제약 조건의 상호 작용으로 인해 무한성이 발생한다는 일반적인 점이 있습니다. 보다 복잡한 모델에서는 잠재적으로 50개의 변수 및 제약 조건 세트가 포함될 수 있습니다. 따라서 관련된 변수 및 방정식 세트를 찾은 다음 무한성의 근본 원인을 찾아야 합니다. 그러면 이것을 발견하는 방법은 무엇입니까? 이번에도 모델 수정이 필요할 수 있습니다.

무한성의 원인 찾기 - 기본 이론

슬롯 게임되지 않은 모델에 대한 확실한 해결책은 모델을 바인딩하는 것입니다. 따라서 우리는 잠재적으로 무한하다고 생각되는 변수를 바인딩하여 1010과 같은 매우 큰 숫자보다 작거나 같습니다. 결과 모델은 슬롯 게임되지만 솔루션에는 상당히 큰 값의 변수가 있을 수 있습니다. 이 경우 $X_1$ 및 $X_3$ 변수는 둘 다 목적 함수에 수익을 기여하므로 바인딩됩니다.

최대 3X1-X2+X3s.t.    엑스1-X2= 0
                     엑스3≤ 20
        엑스1≤ 1000000000
                     엑스3≤ 1000000000

        엑스1, X2, X3≥ 0

참고로 우리는 문제를 "인위적으로" 슬롯 게임하고 있습니다. 만약 그것이 정말로 무슬롯 게임이라면, 우리는 솔루션이 예상되는 "인위적이지 않은" 값보다 훨씬 큰 큰 값을 취하는 $X_1$ 및 $X_2$를 보여줄 것이라고 예상해야 합니다. 그러나 무한성이 존재하지 않는 경우 큰 상한 제약 조건은 솔루션에 영향을 주지 않고 중복되어야 합니다. 단, 이중 심플렉스를 사용하는 솔버에서는 수렴 속도가 상당히 느려질 수 있습니다. 결과적인 해결책은 다음과 같습니다.

목적 : 20000000040.000000

                하위 레벨 상위 한계
---- EQU obj .          .            .        1.0000      
---- EQU r1 -INF .            .        1.0000      
---- EQU r2 -INF 20.0000 20.0000 2.0000      

                하위 레벨 상위 한계
---- VAR objmax -INF 2.000000E+10 +INF .     
---- VAR x1 .1.000000E+10  1.000000E+102.0000      
---- VAR x2 .1.000000E+10      +INF.     
---- VAR x3 .       20.00001.000000E+10    .

이 솔루션은 변수 수준을 통해 무엇이 잘못되었는지 알려줍니다. $X_1$ 및 $X_2$ 모두의 레벨이 왜곡되지만 $X_3$는 영향을 받지 않습니다. 따라서 모델러는 무한성이 $X_1$ 및 $X_2$의 상호 작용과 관련되어 있다는 신호를 받게 됩니다. 차례로, 무한성을 수정하기 위해 이러한 변수와 이들 변수와 관련된 바인딩 방정식을 검사합니다. 위의 자료는 무한성의 원인을 찾는 방법을 나타냅니다. 즉, 큰 경계가 존재하는 모델을 설정하고 이를 해결한 후 왜곡된(큰) 수준을 찾아 원인이 되는 변수 및 방정식 세트를 찾습니다. 한 가지 주의할 점은 이는 항상 무한한 원인 중 일부를 식별하지만, 퇴행성 또는 대체 최적해로 인해 발생하는 고유하지 않은 원초 솔루션에 직면하여 모든 원인을 밝혀내지 못할 수 있다는 것입니다. 따라서 절차를 여러 번 적용해야 할 수도 있습니다.

무슬롯 게임성 해결을 위한 대규모 경계 접근 방식에 대한 세부정보

다음은 무한 원인을 찾는 단계를 제공합니다.

1단계인위적으로 큰 경계를 추가해야 하는 관련 변수를 식별하십시오.
2단계해당 변수에 경계를 추가하세요.
3단계모델을 해결하세요.
4단계모델 솔루션을 조사하세요. 지나치게 큰 변수 및 방정식의 해 수준이 발견되면 이를 실현불가능성의 원인을 조사할 변수 및 방정식으로 식별합니다.
5단계모델을 수정하고 필요한 경우 프로세스를 반복하십시오. 위의 절차에는 몇 가지 질문이 내재되어 있습니다. 특히 어떤 항목에 경계가 필요합니까? 어떤 유형의 경계를 입력해야 합니까? 지나치게 큰 레벨을 어떻게 찾을 수 있나요? 각각은 아래에서 논의됩니다.

어디에 큰 경계를 추가합니까?

경계가 필요한 장소는 여러 가지 방법으로 결정될 수 있습니다. 모델 솔루션을 보고 솔버가 경계가 없거나 최적이 아닌 것으로 표시된 변수에 경계를 추가할 수 있습니다. 그러나 이는 예제 모델의 적절한 위치를 쉽게 가리키지만 항상 그런 것은 아닙니다. 사용할 수 있는 한 가지 접근 방식은 잠재적으로 슬롯 게임되지 않은 모든 변수에 경계를 추가하는 것입니다. 솔버가 변수 값을 변경하여 목적 함수를 개선할 수 있지만 변수가 제약 조건에 의해 슬롯 게임되지 않는다는 것을 발견하면 선형 계획법 모델은 슬롯 게임이 없습니다. 따라서 잠재적으로 슬롯 게임되지 않은 모든 변수를 식별하려면 목적 함수에 기여하지만 직접적으로 슬롯 게임되지는 않는 모든 변수를 찾아야 합니다. 극대화 맥락에서 이러한 경우는 다음과 같습니다.

a) 양의 목적 계수가 있고 상한이 없는 음이 아닌 변수 b) 음의 목적 계수를 갖고 하한이 없는 비양수 변수 c) 양의 목적 계수를 갖고 상한이 없는 무슬롯 게임 또는 자유 변수 d) 음의 목적 계수를 갖고 하한이 없는 무슬롯 게임 또는 자유 변수

이러한 경우는 제약 세트에 의해 부과된 슬롯 게임이 고려되지 않기 때문에 필요한 것보다 더 큰 세트를 식별합니다. 그러나 이러한 제약 조건을 고려하려면 더 복잡한 테스트가 필요합니다. GAMSCHK의 ADVISORY 및 NONOPT 프로시저는 이러한 사례의 모든 발생 목록을 생성하기 위해 작성되었습니다. ADVISORY를 사용하면 모델을 해석할 필요가 없거나 IDENTIFY 모드의 NONOPT는 모델 해석 후에만 작동합니다.

GAMS는 문제를 슬롯 게임하기 위한 대체 기술을 허용합니다. 즉, 최대화할 변수에 큰 상한을 제공하거나 문제가 최소화 문제인 경우 큰 음의 하한을 제공할 수 있습니다.

왜곡된 레벨을 어떻게 찾나요?

다음 질문은 왜곡된 수준을 찾는 것입니다. 이것의 간단한 측면은 출력을 간단하게 검토하여 큰 지수가 있는 변수 수준을 찾을 수 있다는 것입니다. 더 복잡한 측면은 수천 개의 변수와 방정식이 있는 모델에서 이 정보가 잘 숨겨질 수 있다는 것입니다. 이 탐구를 돕기 위해 GAMSCHK NONOPT 프로시저가 작성되었습니다. 필터 값에 대한 절대값이 10보다 큰 최적 솔루션의 수준을 가진 모든 항목은 무한성의 잠재적 원인으로 출력됩니다.

경계 기술 비교

위에서 언급했듯이 사용할 수 있는 두 가지 경계 접근 방식이 있습니다.

  • 목적 함수의 바람직성에 기여하는 여러 개별 변수를 묶었습니다(예: 최대화 문제에서 수익성이 있는 변수)
  • 문제에서 최적화되고 있는 단일 변수를 묶었습니다.

이 두 기술로 생성된 정보에는 상당한 차이가 있을 수 있습니다. 가장 눈에 띄는 특징은 사용의 단순성과 정보의 완전성입니다.

  • 사용의 단순성- 단순히 최적화되는 변수의 경계를 정할 때 어떤 변수가 목적 함수에 바람직한지 고민할 필요 없이 단일 경계를 추가한 다음 그 위에 여러 개의 경계 문을 추가합니다.
  • 정보의 완전성단순함에는 비용이 듭니다. 솔루션의 정보 내용은 일반적으로 더 단순한 기술에 비해 적기 때문입니다. 즉, 무한 모델이 해결되고 무한을 유발하는 변수 세트가 두 개 이상인 경우 단일 경계를 사용하면 한 번에 하나의 무한 사례만 드러납니다.

NLP, MIP 및 무한성

혼합 정수 프로그램이나 비선형 프로그램에서 무한한 경우를 처리할 때 접근 방식은 기본적으로 위와 같습니다. 그러나 비선형 프로그래밍의 경우에는 목적 함수 형식과 솔버 수치 속성이라는 두 가지 추가 문제도 고려해야 합니다.

  • 목적 함수 형태의 측면에서, 비선형 계획법 이론은 최대화 문제에서 전역 최적성을 달성하기 위해 오목 목적 함수가 필요하고 최소화 문제의 경우 볼록 목적 함수가 필요합니다. 비선형 프로그래밍 모델이 무한하다고 판단되면 목적 함수의 볼록함/오목함 특성을 조사해야 합니다.
  • 비선형 프로그래밍 모델이 슬롯 게임되지 않으면 수치 문제에 봉착할 수 있습니다. 특히 스케일링, 시작점, 공차 및 기타 수치 문제와 같은 문제가 문제가 될 수 있습니다. 위의 경계 기술은 저자의 작업에 나와 있습니다. 유용하지만 경우에 따라 진행하기 전에 해결해야 하는 수치적 문제가 발생했습니다.

브루스 맥칼의 글에서GAMS 뉴스레터 번호 45, 2020년 7월

모든 뉴스레터 아카이브