설명
이 인기 있는 테스트 문제에는 여러 로컬 솔루션, 로컬 최소값이 있습니다. obj 값은 27.87190522, 44.02207169 및 52.90257967이고 obj 값이 0.02931083인 전역 최소값입니다. 추가 프로그래밍 이러한 솔루션 중 하나에 가까워졌는지 테스트하기 위해 수행되었습니다.
소형 모델 유형 :NLP
카테고리 : 슬롯 커뮤니티 모델 라이브러리
메인 파일 : mhw4dx.gms
$title 비선형 테스트 문제 (MHW4DX,SEQ=267)
$onText
이 인기 있는 테스트 문제에는 여러 로컬 솔루션, 로컬 최소값이 있습니다.
obj 값은 27.87190522, 44.02207169 및 52.90257967이고
obj 값이 0.02931083인 전역 최소값입니다. 추가 프로그래밍
우리가 이러한 솔루션 중 하나에 가깝다는 것을 테스트하기 위해 수행되었습니다.
Wright, MH, 비선형 제약 조건 최적화를 위한 수치적 방법.
1976년 스탠포드대학교 박사학위 논문.
키워드: 비선형 계획법, 수학, 전역 최적화, 제약 조건
최적화
$offText
변수 m, x1, x2, x3, x4, x5;
방정식 함수, eq1, eq2, eq3;
funct.. m =e= sqr(x1-1) + sqr(x1-x2) + 거듭제곱(x2-x3,3) + 거듭제곱(x3-x4,4) + 거듭제곱(x4-x5,4);
eq1.. x1 + sqr(x2) + 거듭제곱(x3,3) =e= 3*sqrt(2) + 2;
eq2.. x2 - sqr(x3) + x4 =e= 2*sqrt(2) - 2;
eq3.. x1*x5 =e= 2;
모델 라이트/모두/;
x1.l = -1;
x2.l = 2;
x3.1 = 1;
x4.l = -2;
x5.l = -2;
옵션 limCol = 0, limRow = 0;
m을 최소화하는 nlp를 사용하여 wright를 해결합니다.
* 적어도 네 가지 해결책이 있습니다:
* 52.90257967
* 44.02207169
* 27.87190522
* 0.02931083 글로벌
옵션 소수 = 8;
m.l, x1.l, x2.l, x3.l, x4.l, x5.l을 표시합니다.
$eolCom //
스칼라 tol / 1e-2 /;
if( abs(m.l-52.90257967) < tol, // 로컬 솔루션
abort$(abs(x1.L-.728003827) > tol) 'x1.l이 잘못되었습니다.';
abort$(abs(x2.L+2.24521084) > tol) 'x2.l이 잘못되었습니다.';
abort$(abs(x3.L-.779513778) > tol) 'x3.l이 잘못되었습니다.';
abort$(abs(x4.L-3.68127970) > tol) 'x4.l이 잘못되었습니다.';
abort$(abs(x5.L-2.74723830) > tol) 'x5.l이 잘못되었습니다.';
'좋은 로컬 솔루션'을 표시합니다.
abort$(wright.modelStat = %modelStat.optimal%) '솔버가 로컬 솔루션을 전역 솔루션으로 보고합니다.';
elseif abs(m.l-44.02207169) < tol, // 로컬 솔루션
abort$(abs(x1.L+0.70339279) > tol) 'x1.l이 잘못되었습니다.';
abort$(abs(x2.L-2.63570261) > tol) 'x2.l이 잘못되었습니다.';
abort$(abs(x3.L+0.09636181) > tol) 'x3.l이 잘못되었습니다.';
abort$(abs(x4.L+1.79798989) > tol) 'x4.l이 잘못되었습니다.';
abort$(abs(x5.L+2.84336154) > tol) 'x5.l이 잘못되었습니다.';
'좋은 로컬 솔루션'을 표시합니다.
abort$(wright.modelStat = %modelStat.optimal%) '솔버가 로컬 솔루션을 전역 솔루션으로 보고합니다.';
elseif abs(m.l-27.87190522) < tol, // 로컬 솔루션
abort$(abs(x1.L+1.27305303) > tol) 'x1.l이 잘못되었습니다.';
abort$(abs(x2.L-2.41035427) > tol) 'x2.l이 잘못되었습니다.';
abort$(abs(x3.L-1.19485902) > tol) 'x3.l이 잘못되었습니다.';
abort$(abs(x4.L+0.15423906) > tol) 'x4.l이 잘못되었습니다.';
abort$(abs(x5.L+1.57102647) > tol) 'x5.l이 잘못되었습니다.';
'좋은 로컬 솔루션'을 표시합니다.
abort$(wright.modelStat = %modelStat.optimal%) '솔버가 로컬 솔루션을 전역 솔루션으로 보고합니다.';
elseif abs(m.L -0.02931083) < tol,
abort$(abs(x1.L-1.11663475) > tol) 'x1.l이 잘못되었습니다.';
abort$(abs(x2.L-1.22044082) > tol) 'x2.l이 잘못되었습니다.';
abort$(abs(x3.L-1.53778539) > tol) 'x3.l이 잘못되었습니다.';
abort$(abs(x4.L-1.97277020) > tol) 'x4.l이 잘못되었습니다.';
abort$(abs(x5.L-1.79109597) > tol) 'x5.l이 잘못되었습니다.';
'이것이 글로벌 솔루션입니다'를 표시합니다.
그렇지 않으면
abort$yes '알 수 없는 해결 방법';
);