camshape.gms : 캠 형상 최적화 COPS 2.0 #4

설명

A의 1회전에 대한 밸브 개방 면적을 최대화합니다.
곡률과 반경에 제약이 있는 볼록 캠
캠의.

이 모델은 COPS 벤치마킹 제품군에서 나온 것입니다.
보다http://www-unix.mcs.anl.gov/~more/cops/.이산화 지점 수는 다음 명령을 사용하여 지정할 수 있습니다
라인 매개변수 --n. COPS 성능 테스트는 n =에 대해 보고되었습니다.
100, 200, 400, 800

대형 모델 유형 :NLP


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


메인 파일 : camshape.gms

$title 캠 COPS 2.0 #4의 형상 최적화(CAMSHAPE,SEQ=232)

$onText
1회전에 밸브가 열리는 면적을 최대화
곡률과 반경에 제약이 있는 볼록 캠
캠의.

이 모델은 COPS 벤치마킹 제품군에서 나온 것입니다.
http://www-unix.mcs.anl.gov/~more/cops/를 참조하세요.

이산화 지점 수는 다음 명령을 사용하여 지정할 수 있습니다.
라인 매개변수 --n. COPS 성능 테스트는 n =에 대해 보고되었습니다.
100, 200, 400, 800

Dolan, E D 등, JJ, 벤치마킹 최적화
COPS가 포함된 소프트웨어. 기술. 대표, 수학과 컴퓨터
과학부, 2000.

Anitescu, M 및 Serban, R, A Sparse Superlinearly
2차원 형상에 적용되는 수렴 SQP
최적화. 기술. 대표, 아르곤 국립 연구소, 1998.

키워드: 비선형 프로그래밍, 공학, 형상 최적화, 캠 설계 문제
$offText

$설정되지 않은 경우 n $set n 100

i '이산화 포인트' 설정 / i1*i%n% /;

별칭(i,j);

스칼라
   R_v '밸브 형상과 관련된 설계변수' / 1 /
   R_max '캠의 최대 허용 반경' / 2 /
   R_min '캠의 최소 허용 반경' / 1 /
   alpha '곡률 제한 매개변수' / 1.5 /
   d_theta '이산화 지점 사이의 각도';

d_theta = 2*pi/(5*(%n% + 1));

첫 번째(i), 마지막(i), 중간(i)을 설정합니다.

첫 번째('i1') = 예;
last('i%n%') = 예;
중간(i) = 예;
중간(첫 번째) = 아니요;
중간(마지막) = 아니오;

변수
   r(i) '이산화 지점에서 캠의 반경'
   rdiff(i) '중급'
   영역 '밸브 영역';

방정식
   obj '목표'
   볼록함(i)
   볼록한 가장자리1(i)
   볼록한_가장자리3(i)
   볼록한 가장자리4(i)
   eqrdiff(i);

obj..area =e= ((pi*R_v)/%n%) * sum(i, r(i));

볼록성(중간(i)).. -r(i-1)*r(i) - r(i)*r(i+1) + 2*r(i-1)*r(i+1)*cos(d_theta) =l= 0;

볼록한 가장자리1(첫 번째(i)).. -R_min*r(i) - r(i)*r(i+1) + 2*R_min*r(i+1)*cos(d_theta) =l= 0;

볼록한 가장자리3(마지막(i)).. -r(i-1)*r(i) - r(i)*R_max + 2*r(i-1)*R_max*cos(d_theta) =l= 0;

볼록한 가장자리4(마지막(i)).. -2*R_max*r(i) + 2*sqr(r(i))*cos(d_theta) =l= 0;

eqrdiff(j(i+1))..rdiff(i) =e= r(i+1) - r(i);

r.lo(i) = R_min;
r.up(i) = R_max;

rdiff.lo(i(j+1)) = -alpha*d_theta;
rdiff.up(i(j+1)) = alpha*d_theta;

r.lo('i1') = max(-alpha*d_theta + R_min, r.lo('i1'));
r.up('i1') = min( alpha*d_theta + R_min, r.up('i1'));

r.lo('i%n%') = max(R_max - alpha*d_theta, r.lo('i%n%'));
r.up('i%n%') = min(R_max + alpha*d_theta, r.up('i%n%'));

r.up('i1') = min(R_min/(2*cos(d_theta) - 1), r.up('i1'));
r.l(i) = (R_min+R_max)/2;

모델 camshape/모두/;

$if set workSpace camshape.workSpace = %workSpace%

nlp 최대화 영역을 사용하여 캠 모양을 해결합니다.