설명
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;
);
);
보고서 표시;