슬롯 나라.gms : 선형 곱셈 모델 - 유형 2

설명

다음의 무작위 선형 곱셈 모델을 생성하고 해결합니다.
"2번 유형." 문제 인스턴스는 다음에서 제안한 대로 생성됩니다.
토아이. N. Sahinidis가 개발한 모델입니다.

대형 모델 유형 :NLP


카테고리 : 슬롯 나라 모델 라이브러리


메인 파일 : 슬롯 나라.gms

$title 선형 곱셈 프로그램 - 유형 2 (슬롯 나라,SEQ=252)

$onText
다음의 무작위 선형 곱셈 모델을 생성하고 해결합니다.
"2번 유형." 문제 인스턴스는 다음이 제안한 대로 생성됩니다.
토아이. N. Sahinidis가 개발한 모델입니다.

N. V. Thoai, "문제 해결을 위한 글로벌 최적화 접근 방식
볼록 곱셈 프로그래밍 문제",
글로벌 최적화 저널, 1(341-357), 1991.

M. Tawarmalani 및 N. Sahinidis, 볼록화 및 글로벌
연속 및 혼합 정수 비선형의 최적화
프로그래밍: 이론, 알고리즘, 소프트웨어 및 응용 프로그램,
클루어 학술 출판사, 2002.

키워드: 비선형 계획법, 선형 곱셈 계획법, 전역 최적화
$offText

옵션 optCr = 0, optCa = 1.e-6, limRow = 0, limCol = 0, solPrint = off;

세트
   mm / m1*m200 /
   nn / n1*n200 /;

세트
   m(mm) '제약'
   n(nn) '변수'
   p '제품' / p1*p2 /
   c '케이스' / c1*c5 /
   i '인스턴스' / i1*i5 /;

* 해결해야 할 각 사례에 대해 서로 다른 (m,n) 쌍을 사용합니다.
테이블 케이스(c,*)
         m n
   c1 10 20
   c2 20 30
   c3 60 100
   c4 100 100
   c5 200 200;

매개변수
   cc(p,nn) '비용 계수'
   f(p) '상수'
   A(mm,nn) '제약 계수'
   b(mm) '왼쪽'
   rep(c,*) '요약 보고서'
   ResMin
   레스맥스
   NodMin
   노드맥스;

변수
   와이(피)
   x(nn)
   obj;

방정식
   목표
   제약조건(mm)
   제품(p);

목적.. obj =e= prod(p, y(p));

제품(p).. y(p) =e= sum(n, cc(p,n)*x(n));

제약 조건(m).. b(m) =l= sum(n, A(m,n)*x(n));

x.lo(nn) = 0;

모델 슬롯 나라 / 모두 /;

슬롯 나라.workSpace = 32;

담당자(c,'AvgResUsd') = 0;
담당자(c,'AvgNodUsd') = 0;

루프(c,
   m(mm) = ord(mm) <= 건수(c,'m');
   n(nn) = ord(nn) <= 케이스(c,'n');
   ResMin = inf;
   레스맥스 = 0;
   NodMin = inf;
   노드맥스 = 0;

   루프(나,
      f(p) = 균일(0,1);
      cc(p,n) = 균일(0,1);
      A(m,n) = 2*균일(0,1) - 1;
      b(m) = (합(n, A(m,n)) + 2*균일(0,1));

* 모든 모델의 초기 시작점을 0으로 설정
      x.l(n) = 0;
      y.l(p) = 0;

      nlp를 사용하여 obj를 최소화하는 슬롯 나라를 해결합니다.

      담당자(c,'AvgResUsd') = 담당자(c,'AvgResUsd') + 슬롯 나라.resUsd;
      담당자(c,'AvgNodUsd') = 담당자(c,'AvgNodUsd') + 슬롯 나라.nodUsd;
      ResMin = min(ResMin, 슬롯 나라.resUsd);
      NodMin = min(NodMin, 슬롯 나라.nodUsd);
      ResMax = max(ResMax, 슬롯 나라.resUsd);
      NodMax = max(NodMax, 슬롯 나라.nodUsd);
   );
   담당자(c,'MinResUsd') = ResMin;
   담당자(c,'MaxResUsd') = ResMax;
   담당자(c,'MinNodUsd') = nodMin;
   담당자(c,'MaxNodUsd') = nodMax;
);
담당자(c,'AvgResUsd') = 담당자(c,'AvgResUsd')/카드(i);
담당자(c,'AvgNodUsd') = 담당자(c,'AvgNodUsd')/카드(i);

디스플레이 담당자;