설명
다음의 무작위 선형 곱셈 모델을 생성하고 해결합니다. "1번 유형." 문제 인스턴스는 다음이 제안한 대로 생성됩니다. 콘노와 쿠노. N. Sahinidis가 개발한 모델입니다.
대형 모델 유형 :NLP
카테고리 : 슬롯 사이트 추천 모델 라이브러리
메인 파일 : 슬롯 사이트 추천.gms
$title 선형 곱셈 프로그램 - 유형 1(슬롯 사이트 추천,SEQ=251)
$onText
다음의 무작위 선형 곱셈 모델을 생성하고 해결합니다.
"1번 유형." 문제 인스턴스는 다음이 제안한 대로 생성됩니다.
콘노와 쿠노. N. Sahinidis가 개발한 모델입니다.
H. Konno 및 T. Kuno, "선형 곱셈 프로그래밍",
수학적 프로그래밍, 56(51-64), 1992.
M. Tawarmalani 및 N. Sahinidis, 볼록화 및 글로벌
연속 및 혼합 정수 비선형의 최적화
프로그래밍: 이론, 알고리즘, 소프트웨어 및 응용 프로그램,
클루어 학술 출판사, 2002.
키워드: 비선형 계획법, 선형 곱셈 계획법, 수학,
비볼록 2차 계획법, 전역 최적화,
파라메트릭 단순 알고리즘
$offText
옵션 optCr = 0, optCa = 1.e-6, limRow = 0, limCol = 0, solPrint = off;
세트
mm / m1*m220 /
nn / n1*n200 /
pp / p1*p5 /;
세트
m(mm) '제약'
n(nn) '변수'
p(pp) '제품'
c '케이스' / c1*c10 /
i '인스턴스' / i1*i5 /;
* 해결해야 할 각 사례에 대해 서로 다른 (m,n,p) 삼중항을 사용합니다.
테이블 케이스(c,*)
m n p
c1 20 30 2
c2 120 100 2
c3 220 200 2
c4 20 30 3
c5 120 120 3
c6 200 180 3
c7 20 30 4
c8 100 100 4
c9 200 200 4
c10 200 200 5;
매개변수
cc(pp,nn) '비용 계수'
A(mm,nn) '제약 계수'
b(mm) '왼쪽'
rep(c,*) '요약 보고서'
ResMin
레스맥스
NodMin
노드맥스;
변수
y(pp)
x(nn)
obj;
방정식
목표
제약조건(mm)
제품(pp);
목적.. 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');
p(pp) = ord(pp) <= 케이스(c,'p');
ResMin = inf;
레스맥스 = 0;
NodMin = inf;
노드맥스 = 0;
루프(나,
cc(p,n) = 균일(0,100);
A(m,n) = 균일(0,100);
b(m) = 균일(0,100);
* 모든 모델의 초기 시작점을 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);
디스플레이 담당자;