설명
RAS 절차(Richard A. Stone의 이름을 따서 명명)는 다음을 수행하는 반복 절차입니다. 매트릭스를 업데이트합니다. 이 수치 예는 Miller의 7.4.2장에서 가져온 것입니다. 그리고 블레어. 몇 가지 추가 최적화 공식이 적용됩니다. 이 장난감 문제.
소형 모델 유형 :NLP
카테고리 : 슬롯 모델 라이브러리
메인 파일 : iobalance.gms
$title 계수 업데이트 및 투영: RAS 접근 방식(IOBALANCE,SEQ=378)
$onText
RAS 절차(Richard A. Stone의 이름을 따서 명명)는 다음을 수행하는 반복 절차입니다.
매트릭스를 업데이트합니다. 이 수치 예는 Miller의 7.4.2장에서 가져온 것입니다.
그리고 블레어. 몇 가지 추가 최적화 공식이 적용됩니다.
이 장난감 문제.
Miller R E 및 Blair P D, 입출력 분석: 기초 및 확장,
캠브리지 대학 출판부, 뉴욕, 2009.
키워드: 선형 계획법, 비선형 계획법, 2차 제약 조건, 통계,
RAS 접근 방식
$offText
i / 1*3 / 설정;
별칭(i,j);
테이블 a0(i,j) '알려진 기본 행렬'
1 2 3
1 .120 .100 .049
2 .210 .247 .265
3 .026 .249 .145;
표 z1(i,j) '알 수 없는 산업 흐름'
1 2 3
1 98 72 75
2 65 8 63
3 88 27 44;
매개변수
x(j) '관측된 총 출력' / 1 421, 2 284, 3 283 /
u(i) '관찰된 행 합계'
v(j) '관찰된 열 합계'
a1(i,j) '알 수 없는 행렬 A';
u(i) = sum(j, z1(i,j));
v(j) = 합계(i, z1(i,j));
a1(i,j) = z1(i,j)/x(j);
u, v, a1을 표시합니다.
* --- 1: RAS 업데이트 중
매개변수
r(i) '행 조정'
s(j) '열 조정';
r(i) = 1;
s(j) = 1;
매개변수 oldr, olds, maxdelta;
최대델타 = 1;
반복하다
oldr(i) = r(i);
olds(j) = s(j);
r(i) = r(i)*u(i)/sum(j, r(i)*a0(i,j)*x(j)*s(j));
s(j) = s(j)*v(j)/sum(i, r(i)*a0(i,j)*x(j)*s(j));
maxdelta = max(smax(i, abs(oldr(i) - r(i))),smax(j, abs(olds(j) - s(j))));
최대 델타를 표시합니다.
maxdelta < 0.005까지;
매개변수 보고서(*,i,j) '요약 보고서';
옵션 보고서:3:1:2;
보고서('A0' ,i,j) = a0(i,j);
보고서('A1' ,i,j) = a1(i,j);
보고서('RAS',i,j) = r(i)*a0(i,j)*s(j);
* --- 2: 엔트로피 공식 a*ln(a/a0)
* RAS 절차는 엔트로피 공식에 대한 솔루션을 제공합니다.
변수
obj '객관적 값'
a(i,j) '추정된 A 행렬'
z(i,j) '추정된 Z 행렬';
양수 변수 a, z;
방정식
rowbal(i) '행 합계'
colbal(j) '열 합계'
defobjent '엔트로피 정의';
rowbal(i).. sum(j, a(i,j)*x(j)) =e= u(i);
colbal(j)..sum(i, a(i,j)*x(j)) =e= v(j);
defobjent.. obj =e= sum((i,j), x(j)*a(i,j)*log(a(i,j)/a0(i,j)));
모델 mEntropy / rowbal, colbal, defobjent /;
* 도메인 위반을 방지하려면 작은 값을 제외해야 합니다.
a.lo(i,j) = 1e-5;
nlp min obj를 사용하여 mEntropy를 해결합니다. Report('엔트로피',i,j) = a.l(i,j);
* --- 3: 흐름 변수가 있는 엔트로피
* A 매트릭스 대신 흐름 매트릭스의 균형을 맞출 수 있습니다.
변수 zv(i,j) '산업 흐름';
방정식
rowbalz(i) '행 합계'
colbalz(j) '열 합계 tive'
defobjentz '흐름을 사용한 엔트로피 목표';
rowbalz(i)..sum(j, zv(i,j)) =e= u(i);
colbalz(j)..sum(i, zv(i,j)) =e= v(j);
매개변수 zbar(i,j) '참조 흐름';
zbar(i,j) = a0(i,j)*x(j);
zv.lo(i,j) = 1;
defobjentz.. obj =e= sum((i,j), zv(i,j)*log(zv(i,j)/zbar(i,j)));
모델 mEntropyz / rowbalz, colbalz, defobjentz /;
* 세부 출력 끄기
옵션 limRow = 0, limCol = 0, solPrint = off;
nlp min obj를 사용하여 mEntropyz를 해결합니다. Report('EntropyZ',i,j) = zv.l(i,j)/x(j);
* --- 4. 절대 편차 공식으로 인해 LP가 생성됨
* MAD 평균 절대 편차
* MAPE 평균 절대 백분율 오차
* 린프 인피니티 노름
양수 변수
ap(i,j) '양의 편차'
an(i,j) '음의 편차'
amax '최대 절대값 개발';
방정식
defabs(i,j) '절대 정의'
defmaxp(i,j) '최대 양수'
defmaxn(i,j) '최대 부정'
defmad 'MAD 정의'
defmade '평균 절대 백분율 오류'
deflinf '무한대 노름';
defabs(i,j).. a(i,j) - a0(i,j) =e= ap(i,j) - an(i,j);
defmaxp(i,j).. a(i,j) - a0(i,j) =l= amax;
defmaxn(i,j).. a(i,j) - a0(i,j) =g= -amax;
defmad.. obj =e= 1/sqr(card(i))*sum((i,j), ap(i,j) + an(i,j));
defmade.. obj =e= 100/sqr(card(i))*sum((i,j),(ap(i,j) + an(i,j))/a0(i,j));
defLinf..obj =e= amax;
모델
mMAD / rowbal, colbal, defabs, defmad /
mMADE / rowbal, colbal, defabs, defmade /
mLinf / rowbal, colbal, defmaxp, defmaxn, deflinf /;
lp min obj를 사용하여 mMAD를 해결합니다. 보고서('MAD' ,i,j) = a.l(i,j);
lp min obj를 사용하여 mMADe를 푼다. 보고서('MADE',i,j) = a.l(i,j);
lp min obj를 사용하여 mLinf를 해결합니다. Report('Linf',i,j) = a.l(i,j);
* --- 5. 강력한 QP 코드로 제곱 편차를 해결할 수 있습니다.
* SD 제곱 편차
* RSD 상대 제곱 편차
방정식 defsd, defrsd;
defsd..obj =e= sum((i,j), sqr(a(i,j) + a0(i,j)));
defrsd..obj =e= sum((i,j), sqr(a(i,j) + a0(i,j))/a0(i,j));
모델
MSD / 로우발, 콜발, defsd /
mRSD / rowbal, colbal, defrsd /;
qcp min obj를 사용하여 MSD를 해결합니다. 보고서('SD',i,j) = a.l(i,j);
qcp min obj를 사용하여 mRSD를 해결합니다. 보고서('RSD',i,j) = a.l(i,j);
보고서 표시;