mathopt6.gms : MathOptimizer 예 6

설명

100달러, 100자리 챌린지 문제
N. Trefethen, 옥스포드 대학교.

전역 및
지역 코드. lo = 0 또는 lo = 2로 게임을 실행하여 줄일 수 있습니다.
로그에 출력합니다.

자세한 내용은 https://www.wolfram.com/products/applications/mathoptimizer/를 참조하세요.

소형 모델 유형 :DNLP


카테고리 : 슬롯 커뮤니티 모델 라이브러리


메인 파일 : mathopt6.gms

$title MathOptimizer 예 6 (MATHOPT6,SEQ=260)

$onText
100달러, 100자리 챌린지 문제
N. Trefethen, 옥스포드 대학교.

전역 및
지역 코드. lo = 0 또는 lo = 2로 게임을 실행하여 줄일 수 있습니다.
로그에 출력합니다.

자세한 내용은 https://www.wolfram.com/products/applications/mathoptimizer/를 참조하세요.

N. Trefethen, SIAM 뉴스, 2002년 1월~2월, 3페이지.

Mathematica, MathOptimizer - 고급 모델링 및 최적화 시스템
Mathematica 사용자의 경우, https://www.wolfram.com/products/applications/mathoptimizer/

Janos D Pinter, 글로벌 최적화 실행, Kluwer Academic 출판사,
도르드레흐트/보스턴/런던, 1996.

Janos D Pinter, 비선형 시스템의 전산 전역 최적화,
Lionheart Publishing, Inc., 애틀랜타, 조지아, 2001

키워드: 비선형 계획법, 불연속 도함수, 수학, 전역
          최적화
$offText

$eolCom //

변수 x, y, obj;

방정식 objdef;

objdef.. obj =e= exp(sin(50*x)) + sin(60*exp(y)) + sin(70*sin(x))
              + sin(sin(80*y)) - sin(10*(x + y)) + (sqr(x) + sqr(y))/4;

x.lo = -3;
x.up = 3;
y.lo = -3;
y.up = 3;

모델 m / objdef /;

매개변수 보고서 '요약 보고서';
보고서('최고','x0') = -0.0244030796935730;
보고서('최고','y0') = 0.2106124271552849;
보고서('최고','obj') = -3.306868647475235;
보고서('최고','x.l') = 보고서('최고','x0');
보고서('최고','y.l') = 보고서('최고','y0');

스칼라 글로벌 '가장 잘 알려진 솔루션';
글로벌 = 보고서('최고','obj')

i '임의 샘플' / rand1*rand100 /을 설정합니다.

* 로그에 대한 출력을 줄이기 위해 lo = 0 또는 lo = 2로 게임을 실행할 수 있습니다.
m.limRow = 0;
m.limCol = 0;
m.solPrint = %solPrint.report%;

스칼라 최고 / inf /;

* 임의의 시작점을 시도하고 더 나은 솔루션만 보고합니다.
loop(i$(best > (global + 1e-6)),
   x.l = 균일(x.lo,x.up);  // 얻다
   y.l = 균일(y.lo,y.up);  // 무작위
   보고서(i,'x0') = x.l;      // 시작점
   보고서(i,'y0') = y.l;      // 그리고 저장

   dnlp min obj를 사용하여 m을 해결합니다.
   m.solPrint = %solPrint.quiet%; // 솔루션 목록 끄기

   if(m.solveStat <> %solveStat.normalCompletion%,
      '솔버 실패 - 더 이상의 솔루션 없음'을 표시합니다.
      최고 = -inf;
   );   // 루프를 중지합니다.
   if(obj.l >= 최고인지 아닌지(m.modelStat=%modelStat.optimal% 또는
                           m.modelStat=%modelStat.feasibleSolution% 또는
                           m.modelStat=%modelStat.locallyOptimal%),
      보고서(i,'x0') = 0;  // 보고서에서 항목 제거
      보고서(i,'y0') = 0;  // 보고서에서 항목 제거
   그렇지 않으면
      최고 := obj.l;
      보고서(i,'obj') = obj.l;
      보고서(i,'x.l') = x.l;
      보고서(i,'y.l') = y.l;
      보고서(i,'optcr') = -(obj.l - 보고서('최고','obj'))/report('최고','obj');
      보고서(i,'cpu') = m.resUsd;
   );
);

보고서 표시;