설명
표준에 대한 일련의 변형 중 첫 번째 슬롯 사이트 추천 공식화. 후속 모델은 데이터를 활용합니다. 그리고 문제 구조는 다음과 같은 공식에 도달합니다. 놀라운 계산적 이점을 가지고 있습니다. 추가 정보는 다음에서 찾을 수 있습니다: /modlib/adddocs/qp1doc.htm
소형 모델 유형 :NLP
카테고리 : 슬롯 사이트 추천 모델 라이브러리
메인 파일 : 슬롯 사이트 추천x.gms 포함: qpdata.inc
$title GDX 데이터 입력이 있는 표준 슬롯 사이트 추천 모델(QP1X,SEQ=246)
$onText
표준에 대한 일련의 변형 중 첫 번째
슬롯 사이트 추천 공식화. 후속 모델은 데이터를 활용합니다.
그리고 문제 구조는 다음과 같은 공식에 도달합니다.
놀라운 계산적 이점을 가지고 있습니다. 추가
정보는 다음에서 찾을 수 있습니다:
/modlib/adddocs/qp1doc.htm
Kalvelagen, E, GAMS를 사용한 모델 구축. 곧
de Wetering, AV, 개인 통신.
키워드: 비선형 계획법, 2차 계획법, 금융
$offText
* MIT StockMaster에서 발췌
세트
days '95년 11월 27일부터 96년 4월 29일까지 100일'
종목 '170개 종목'
상단(주식,주식)
lower(주식,주식);
별칭(주식,주식);
매개변수
val(stocks,days) '종가'
return(stocks,days) '일일 수익률 - 파생';
* 우리는 Posix 호환 유틸리티 테스트를 사용하여 다음 사항을 확인합니다.
* qpdata.gdx는 qpdata.inc보다 최신 버전입니다. 그렇다면 우리는 할 수 있다
* qpdata.inc 처리를 건너뜁니다. 테스트를 통해 더 많은 검사를 수행할 수 있습니다. 테스트 실행
* --간략한 개요를 보려면 도움말을 참조하세요.
*
* WINDOWS만 해당: GAMS 프로그램 테스트 내에서
* 다른 Posix 유틸리티는 자동으로 사용 가능합니다. 다른 것에서
* 환경에서는 GAMS의 gbin 하위 디렉터리를 추가해야 합니다.
* 시스템 디렉터리를 PATH에 추가합니다(Windows에만 해당).
$call = 테스트 qpdata.gdx -nt qpdata.inc
$ifE errorLevel<>0 $call =gams qpdata.inc lo=0 a=c gdx=qpdata
$ifE errorLevel<>0 $abort qpdata.gdx 생성 문제
$gdxIn qpdata
$로드 일 주식
* 종가의 실행시간 로드
Execute_load 'qpdata', val;
return(주식,일-1) = val(주식,일) - val(주식,일-1);
upper(주식,sstocks) = ord(주식) <= ord(sstocks);
lower(stocks,sstocks) = not upper(stocks,sstocks);
세트
d(days) '선택한 날짜'
s(stocks) '선택된 주식';
별칭(s,t);
* 주식 및 기간의 하위 집합을 설정합니다.
d(일) = ord(일) > 1 및 ord(일) < 31;
s(주식) = ord(주식) < 51;
매개변수
평균(주식) '일일 수익률 평균'
dev(주식,일) '편차'
covar(stocks,sstocks) '수익률의 공분산 행렬(상위)'
totmean '총 평균 수익률';
평균(들) = sum(d, return(s,d))/card(d);
dev(s,d) = return(s,d) - 평균(들);
* 공분산 계산
* 메모리와 시간을 절약하기 위해 상부 삼각함수만 계산합니다.
* 공분산 행렬이 대칭인 부분
covar(upper(s,t)) = sum(d, dev(s,d)*dev(t,d))/(card(d) - 1);
totmean = 합계(들, 평균(들))/(카드(들));
변수
z '객관 변수'
x(주식) '투자';
양수 변수 x;
방정식
obj '목표'
예산
retcon '반환 제약';
obj.. z =e= sum(upper(s,t), x(s)*covar(s,t)*x(t))
+ sum(lower(s,t), x(s)*covar(t,s)*x(t));
예산.. 합계(s, x(s)) =e= 1.0;
retcon.. sum(s, 평균(들)*x(s)) =g= totmean*1.25;
모델 qp1 / 모두 /;
* 일부 솔버에는 더 많은 메모리가 필요합니다.
qp1.workFactor = 10;
z를 최소화하는 nlp를 사용하여 qp1을 해결합니다.
디스플레이 x.l;
* GDX 파일에 솔루션 덤프
Execute_unload 'qp1xsol', x = xsol;
* 용액이 올바르게 저장되었는지 확인해보세요
x.l(s) = 0;
Execute_load 'qp1xsol', x = xsol;
qp1.iterLim = 20;
z를 최소화하는 nlp를 사용하여 qp1을 해결합니다.
* 재최적화된 솔루션을 GDX 파일로 덤프합니다.
Execute_unload 'qp1xso2', x = xsol;
* 두 GDX 파일 비교
'gdxdiff qp1xsol qp1xso2 %system.redirlog%'를 실행합니다.
* diff GDX 파일 덤프
'gdxdump difffile %system.redirlog%'를 실행합니다.