mathopt5.gms : MathOptimizer 예 5

설명

간단한 상자 제약 조건을 갖춘 8개의 일변량 테스트 모델. 비교하다
8개 모델의 성능.

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

소형 모델 유형 :DNLP


카테고리 : 슬롯 무료체험 모델 라이브러리


메인 파일 : mathopt5.gms

$title MathOptimizer 예 5 (MATHOPT5,SEQ=259)

$onText
간단한 상자 제약 조건을 갖춘 8개의 일변량 테스트 모델. 비교하다
8개 모델의 성능.

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

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 //

세트
   ff / f1*f8 /
   k / k0*k6 /
   k5(k) / k1*k5 /
   f(ff) 'ff의 동적 버전'
   frun(ff) '실행할 모델';

$if set frun set frun / %frun% /;
$frun을 설정하지 않은 경우 frun(ff) = yes;

매개변수
   c4(k) / k4 2, k3 -13, k2 18, k1 -10, k0 3 /
   c7(k) / k5 0.2, k4 -1.6995, k3 0.998266, k2 -0.0218343, k1 -0.000089248 /
   c8(k) / k2 2, k4 -1.05, k6 0.1666667, k1 -1 /;

* 8개의 서로 다른 모델을 정의하는 대신
* 모델을 하나의 단일 목적 함수로 만듭니다. 사용법 참고하세요
* 동적 집합 f와 다음을 허용하는 함수 sameas()
* 런타임에 구성요소를 선택하도록 합니다. 방정식 objdef는 다음과 같습니다.
* 도메인 ff를 사용하여 선언되었지만 동적 집합 f로 정의되었습니다.
* 이를 통해 8개 모델 모두를 편리하게 테스트할 수 있습니다.

변수 x, obj;

방정식 objdef(ff);

objdef(f)..
   obj =e= (exp(-x) - power(Sin(x),3) )$sameas('f1',f)
        + (sqr(x) - cos(18*x) )$sameas('f2',f)
        + (sin(x)*sqr(cos(x) - sin(x)) )$sameas('f3',f)
        + (sqr(sum(k, c4(k)*power(x,ord(k)-1))) )$sameas('f4',f)
        + (sum(k5, ord(k5)*sin((ord(k5)+1)*x+ord(k5))))$sameas('f5',f)
        + (0.1*x + sqrt(abs(x))*sqr(sin(x)) )$sameas('f6',f)
        + (0.01*sum(k, c7(k)*power(x,ord(k)-1)) )$sameas('f7',f)
        + (sum(k, c8(k)*power(x,ord(k)-1)) )$sameas('f8',f);

모델 m / objdef /;

* 변환 옵션을 사용하여 모든 방정식을 확장하여 다음을 허용할 수 있습니다.
* 원본 소스로 더 나은 검증이 가능합니다.
*
* f(ff) = 그렇습니다; 옵션 dnlp = 변환; dnlp min obj를 사용하여 m을 해결합니다.

Tablebounds(ff,*) 'J Pinter에서 사용하는 경계 및 시작 값'
         안녕 나
   f1 -5 10 1
   f2 -5 5 2
   f3 0 10 3
   f4 -1 4 3
   f5 -10 10 5
   f6 -10 5 6
   f7 0 8 2
   f8 -2 2.5 1;

col / x_initial, f_solver, f_global, f_reldiff, x_solver, x_global, status /를 설정합니다.

글로벌, 로컬, 실패, 기능의 약어입니다.

스칼라 통계;

* 경우에 따라 여러 전역 최적값이 있는 경우도 있습니다. 에 대한
* 예시 f5에는 2*pi 간격으로 떨어진 3개의 전역 최적값이 있습니다.
* x_global은 가능한 시작점으로 사용됩니다.
* 로컬 최적화 프로그램.

테이블 데이터(ff,col) '솔루션 요약'
           x_글로벌 f_글로벌
   f1 7.85411102 -0.99961182
   f2 0 -1
   f3 5.22405862 -1.61642493
   f4 1
   f5 -7.39728499 -14.83795000
   f6 -9.44104654 -0.94329150
   f7 6.32565486 -4.43672834
   f8 1.75767181 -0.68607228;

* 목적함수의 각 구성요소를 풀어서 수집합니다.
* 성과보고 결과입니다.

f(ff) = 아니오;
루프(frun(ff),
   x.lo = 경계(ff,'lo');
   x.up = 경계(ff,'up');
   x.l = 경계(ff,'l');

* 다른 출발점을 시도해보세요
* x.l = 균일(x.lo,x.up);
* x.l = 경계(ff,'l');
* x.l = 데이터(ff,'x_global');
* x.l = 0;

   데이터(ff,'x_initial') = x.l;

   f(ff) = 그렇습니다;
   dnlp min obj를 사용하여 m을 해결합니다.
   f(ff) = 아니오;

   if(m.modelStat=%modelStat.optimal% 또는
      m.modelStat=%modelStat.locallyOptimal% 또는
      m.modelStat=%modelStat.feasibleSolution%, // 좋은 결과
      data(ff,'f_reldiff') = abs(data(ff,'f_global') - obj.l)/(1 + abs(data(ff,'f_global')));
      if(data(ff,'f_reldiff') < 1e-6,
         통계 = 전역;
      그렇지 않으면
         통계 = 지역;
      );
      data(ff,'x_solver') = x.l;
      data(ff,'f_solver') = obj.l;
   그렇지 않으면
      data(ff,'f_reldiff') = na;
      if(m.solveStat = %solveStat.capabilityProblems%,
         통계 = 능력;
      그렇지 않으면
         통계 = 실패;
      );
      data(ff,'x_solver') = na;
      data(ff,'f_solver') = na;
   );
   데이터(ff,'상태') = 통계;
);

옵션 소수 = 7;

데이터 표시;