circle.gms : 원 둘러싸는 점 - SNOPT 예

설명

이것은 슬롯/SNOPT 매뉴얼의 예입니다. 가장 작은 원 찾기
여기에는 여러 개의 특정 포인트가 포함되어 있습니다.

https://en.wikipedia.org/wiki/Smallest_circle_problem

소형 모델 유형 :NLP


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


메인 파일 : circle.gms

$title 원 둘러싸는 점 - SNOPT 예(CIRCLE,SEQ=201)

$onText
이는 슬롯/SNOPT 매뉴얼의 예입니다. 가장 작은 원 찾기
여기에는 여러 개의 특정 포인트가 포함되어 있습니다.

https://en.wikipedia.org/wiki/Smallest_circle_problem

Gill, P E, Murray, W 및 Saunders, MA, 슬롯/SNOPT: SQP 알고리즘
대규모 제약 최적화, 1988.

키워드: 비선형 계획법, 최소원 문제, 수학
$offText

$크기가 설정되지 않은 경우 $크기 10으로 설정

i '포인트' / p1*p%size% /를 설정합니다.

매개변수
   x(i) 'x 좌표'
   y(i) 'y 좌표';

* 무작위 데이터로 채우기
x(i) = 균일(1,10);
y(i) = 균일(1,10);

변수
   '원 중심의 x 좌표'
   b '원 중심의 y 좌표'
   r '반경';

방정식 e(i) '점은 원 안에 있어야 합니다';

e(i).. sqr(x(i) - a) + sqr(y(i) - b) =l= sqr(r);

r.lo = 0;

매개변수 xmin, ymin, xmax, ymax;
xmin = smin(i, x(i));
ymin = smin(i, y(i));
xmax = smax(i, x(i));
ymax = smax(i, y(i));

* 시작점 설정
a.l = (xmin + xmax)/2;
b.l = (ymin + ymax)/2;
r.l = sqrt(sqr(a.l - xmin) + sqr(b.l - ymin));

모델 m / 모두 /;

r을 최소화하는 nlp를 사용하여 m을 해결합니다.

if(m.modelStat <> %modelStat.optimal% 및
   m.modelStat <> %modelStat.locallyOptimal% 및
   m.modelStat <> %modelStat.feasibleSolution%, "중지" 중단);