Camshape : 밸브 면적 최대화

참조

  • Neculai Andrei, 피망 슬롯 기술을 사용한 비선형 최적화 애플리케이션, 스프링거 최적화 및 그 애플리케이션, 모델캠셰이프(5.33) 장기계공학의 응용, 2013

카테고리 : 피망 슬롯 NOA 라이브러리


메인파일 : camshape.gms

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

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

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

  참고자료:
  Dolan, E D 등, J J, COPS를 사용한 벤치마킹 최적화 소프트웨어.
  기술. 대표, 수학 및 컴퓨터 과학부, 2000.

  Anitescu, M 및 Serban, R, 희소 초선형 수렴 SQP
  2차원 형상 최적화에 대한 응용
  기술. 대표, 아르곤 국립 연구소, 1998.

  Neculai Andrei, "모델, 테스트 문제 및 응용 프로그램
  수학적 프로그래밍". 기술 언론, 부쿠레슈티, 2003.
  신청서 A8, 352페이지.
$offText

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

i개의 이산화점을 설정합니다. /i1 * i%n%/;

별칭(i,j);

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

파이 = 2*arctan(inf);
d_theta = 2*pi/(5*(%n%+1));

첫 번째(i), 마지막(i), 중간(i)을 설정합니다.
첫 번째('i1') = 예;
last('i%n%') = 예;
중간(i) = 예; 중간(첫 번째) = 아니요; 중간(마지막) = 아니오;

이산화 지점에서 캠의 변수 r(i) 반경
           rdiff(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;

방정식 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);

모델 camshape /all/;

$ifThenI x%mode%==xbook
camshape.iterlim=50000;
camshape.workspace=200;
$endIf

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

$ifThenI x%mode%==xbook
파일 rez /camshape.dat/;
레즈 넣어
루프(i, r.l(i):10:5 넣기, 넣기/)
$endIf

*------------------------- 수치실험 --------
* 2011년 1월 15일
* 변형 1:
* 제약조건 12001개, 변수 12000개
* CONOPT3: 85회 반복, 23.714초
* vfo=4.2725254070
* KNITRO: 51회 반복, 56회 기능 평가, 14초
* vfo=4.270589910
*
* 변형 2:
* 제약조건 16001개, 변수 16000개
* CONOPT3: 75회 반복, 32.607초
* vfo=4.2726091788
* KNITRO: 52회 반복, 57회 함수 평가, 25.21초
* vfo=4.2697038802
*
* 변종 3:
* 제약조건 20001개, 변수 20000개
* CONOPT3: 46회 반복, 23.204초
* vfo=4.2726594376
* KNITRO: 54회 반복, 59회 함수 평가, 33.19초
* vfo=4.2688342488
*--------------------------------------------
* 캠셰이프 종료