dqq.gms : 웜 스타트 쿼드 정밀도 MINOS

설명

DQQ 절차를 설명하십시오. 이 절차는 다중 규모에 사용됩니다.
LP 모델(즉, 다양한 계수 및/또는 변수가 있는 모델)
극단적인 범위에서). 쿼드 정밀도를 활용합니다.
솔버 QUADMINOS는 발생하는 값의 극단적인 범위를 처리합니다.

위의 참조에서 여러 사례가 DQQ로 해결되었습니다.
이러한 인스턴스 중 일부는 여기에서 다음을 지정하여 처리할 수 있습니다.
실행 시 GDX 입력, 예:

  > 게임 dqq --GDXNAME=파일럿

다음과 같은 경우에 대한 데이터를 포함합니다(난이도가 높아지는 순서대로).
  Pilot4, 조종사, Pilot87, tma_me, glcaerwt, glcalift
이러한 인스턴스는 mps2gms 유틸리티를 통해 MPS 파일에서 얻었습니다.

대형 모델 유형 :슬롯


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


메인 파일 : dqq.gms   포함: pilot4.gdx pilot.gdx pilot87.gdx tma_me.gdx glcaerwt.gdx glcalift.gdx

$title 웜 스타트 쿼드 정밀도 MINOS(DQQ,SEQ=414)

$onText
DQQ 절차를 설명합니다. 이 절차는 다중 규모에 사용됩니다.
LP 모델(즉, 다양한 계수 및/또는 변수가 있는 모델)
극단적인 범위에서). 쿼드 정밀도를 활용합니다.
솔버 QUADMINOS는 발생하는 값의 극단적인 범위를 처리합니다.

위의 참조에서 여러 사례가 DQQ로 해결되었습니다.
이러한 인스턴스 중 일부는 여기에서 다음을 지정하여 처리할 수 있습니다.
실행 시 GDX 입력, 예:

  > 게임 dqq --GDXNAME=파일럿

다음과 같은 경우에 대한 데이터를 포함합니다(난이도가 높아지는 순서대로).
  Pilot4, 조종사, Pilot87, tma_me, glcaerwt, glcalift
이러한 인스턴스는 mps2gms 유틸리티를 통해 MPS 파일에서 얻었습니다.

Ma, D., Yang, L., Fleming, R.M.T., Thiele, I., Palsson, B.O.,
Saunders, M.A. 게놈 규모 모델의 안정적이고 효율적인 솔루션
대사 및 고분자 발현, 과학 보고서 7,
품목 번호 40863(2017).
doi:10.1038/srep40863. http://rdcu.be/oCpn

키워드: 선형 프로그래밍, 웜 스타트, 멀티스케일 모델, 슬롯 언어 기능,
          4배 정밀도 부동 소수점 연산, QUADMINOS
$offText

$GDXNAME이 설정되지 않은 경우 $set GDXNAME 파일럿4

$ifThen LPNAME을 설정하지 않음
$ LPNAME MINOS 설정
$ 세트 OPTNUM 11
$else
$ 세트 OPTNUM 0
$endIf

세트
   i 'MPS 순서의 모든 행'
   ig(i) '보다 크거나 같은 행'
   il(i) '작거나 같은 행'
   즉(i) '동등 행'
   ir(i) '범위 지정 행';

세트
   j 'MPS 순서의 모든 열'
   jc(j) '연속 열';

매개변수
   c(j) '객관 계수'
   cobj '목적 상수'
   b(i) '오른쪽'
   ac(i,jc) '행렬 계수: 연속 변수';

mps2gms를 설정하십시오.

매개변수 mps2gmsstats(mps2gms);

방정식
   eobj '목적 함수'
   예(i) '보다 크거나 같은 동등'
   el(i) '작거나 같음'
   ee(i) '평등 평등'
   er(i) '범위 동등';

변수 obj '객관적 변수';

양수변수
   xc(j) '연속 변수'
   r(i) '범위 행 변수';

$gdxIn %GDXNAME%
$load i j mps2gms mps2gmsstats
$load ig il 즉 ir
$로드 jc
$load cobj cb
$로드 AC
$로드 xc r
$gdxIn

eobj..obj =e= sum(jc, c(jc)*xc(jc)) + cobj;

예(ig).. sum(jc, ac(ig,jc)*xc(jc)) =g= b(ig);

el(il)..sum(jc, ac(il,jc)*xc(jc)) =l= b(il);

ee(즉).. sum(jc, ac(ie,jc)*xc(jc)) =e= b(ie);

er(ir).. sum(jc, ac(ir,jc)*xc(jc)) =e= r(ir);

모델 m / 모두 /;

옵션 limCol = 0, limRow = 0, solPrint = off;

$onText
DQQ 절차를 구현합니다.
 1. 배정밀도 MINOS, 스케일링 온, optFile = 11로 해결
 2. Quad-precision MINOS, 스케일링 온, optFile = 12로 해결
 3. 쿼드 정밀도 MINOS, 스케일링 오프, optFile = 13으로 해결
$offText

$onEcho > minos.o11
* DQQ의 1단계(D)
스케일 옵션 2
타당성 공차 1e-7
최적성 허용오차 1e-7
주파수 100000 확장
LU 인자 허용오차 1.9
LU 업데이트 허용 오차 1.9
$offEcho

$onEcho >quadminos.o12
* DQQ의 2단계(Q1)
스케일 옵션 2
타당성 공차 1e-15
최적성 허용오차 1e-15
주파수 100000 확장
LU 인자 허용오차 10.0
LU 업데이트 허용 오차 10.0
$offEcho

$onEcho >quadminos.o13
* DQQ의 3단계(Q2)
스케일 옵션 0
타당성 공차 1e-15
최적성 허용오차 1e-15
주파수 100000 확장
LU 인자 허용오차 5.0
LU 업데이트 허용 오차 5.0
$offEcho

매개변수 xbar1(jc), xbar2(jc), xbar3(jc);

스칼라 obj1, itr1, obj2, itr2, dx2 / NA /, obj3, itr3, dx3 / NA /;

* 1단계: 정규(이중정밀도) MINOS로 풀기
m.opt파일 = %OPTNUM%;
옵션 lp = %LPNAME%;
obj를 최소화하는 lp를 사용하여 m을 해결합니다.
obj1 = m.objVal;
itr1 = m.iterUsd;
xbar1(jc) = xc.L(jc);

* 2단계: 쿼드 정밀도 MINOS로 해결
m.opt파일 = 12;
옵션 lp = 쿼드미노스;
obj를 최소화하는 lp를 사용하여 m을 해결합니다.
obj2 = m.objVal;
itr2 = m.iterUsd;
xbar2(jc) = xc.L(jc);

* 3단계: 4배 정밀도 MINOS로 풀기, 스케일링 없음
m.opt파일 = 13;
옵션 lp = 쿼드미노스;
obj를 최소화하는 lp를 사용하여 m을 해결합니다.
obj3 = m.objVal;
itr3 = m.iterUsd;
xbar3(jc) = xc.L(jc);

dx2 = smaxjc, abs(xbar1(jc) - xbar2(jc));
dx3 = smaxjc, abs(xbar2(jc) - xbar3(jc));

파일 로그 /''/;
putClose 로그 ' '
   / '인스턴스 이름: %GDXNAME%'
   / '1단계: itr =' itr1:10:0 ' obj =' obj1:18:8
   / '2단계: itr =' itr2:10:0 ' obj =' obj2:18:8 ' dx =' dx2:14:8
   / '3단계: itr =' itr3:10:0 ' obj =' obj3:18:8 ' dx =' dx3:14:8
   /;