글라이더 : 열 상승 기류가 있는 동안 행글라이더의 최종 수평 위치를 최대화

참조

  • Neculai Andrei, 슬롯 사이트 추천 기술을 사용한 비선형 최적화 애플리케이션, 스프링거 최적화 및 그 애플리케이션, 모델글라이더(5.40) 장기계공학의 응용, 2013

카테고리 : 슬롯 사이트 추천 NOA 라이브러리


메인파일 : glider.gms

$onText
행글라이더의 최종 수평 위치를 최대화하십시오.
열 상승 기류의 존재.

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

이산화 지점 수는 슬롯 사이트 추천 user1을 사용하여 지정할 수 있습니다.
매개변수.
nh = 50, 100, 200, 400에 대한 COPS 성능 테스트가 보고되었습니다.

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

Bulirsch, R, Nerz, E, Pesch, H J 및 von Stryk, O, 직접 및 결합
비선형 최적 제어의 간접 방법: 범위 최대화
행글라이더. Bulirsch, R, Miele, A, Stoer, J 및 Well, K H, Eds,
최적의 제어. Birkhauser Verlag, 1993, pp. 273-288.
$offText

$if 세트 n $set nh %n%
$설정되지 않은 경우 nh $set nh 800
c 좌표 / x 거리를 설정합니다.
                     y 고도 /
h 간격 / h0 * h%nh%/ ;

별칭(h,i);

스칼라 nh 메시의 간격 수 / %nh% /
제어변수에 결합된 cL_min / 0.0 /
제어 변수에 대한 cL_max 경계 / 1.4 /
u_c / 2.5 /
r_0 / 100 /
m / 100 /
지 / 9.81 /
c0 / 0.034 /
c1 / 0.069662 /
S / 14 /
로 / 1.13 / ;

매개변수 c_0(c) 초기 위치 / x 0, y 1000/
           v_0(c) 초기 속도 / x 13.23, y -1.288/
           c_f(c) 최종 위치 / y 900/
           v_f(c) 최종 속도 / x 13.23, y -1.288/ ;

변수 t_f
          위치(c,h) 위치 x 거리 y 고도
          vel(c,h) 속도 x 거리 y 고도
          cl(h) 제어 변수
          r(h) r 함수
          u(h) u 함수
          w(h) w 함수
          v(h) v 함수
          D(h) D 함수
          L(h) L 함수
          v_dot(c,h)
          final_x
          단계 단계 크기

양수변수 단계;

방정식 tf_eqn
          rdef(h)
          udef(h)
          wdef(h)
          vdef(h)
          Ddef(h)
          Ldef(h)
          vx_dot_def(h)
          vy_dot_def(h)
          객체
          pos_eqn(c,h)
          vel_eqn(c,h);

tf_eqn.. t_f =e= 단계*nh;

rdef(i).. r[i] =e= sqr(pos['x',i]/r_0 - 2.5);

udef(i).. u[i] =e= u_c*(1-r[i])*exp(-r[i]);

wdef(i).. w[i] =e= vel['y',i] - u[i];

vdef(i).. v[i] =e= sqrt(sqr(vel['x',i]) + sqr(w[i]));

Ddef(i).. D[i] =e= .5*(c0+c1*sqr(cL[i]))*rho*S*sqr(v[i]);

Ldef(i).. L[i] =e= .5* cL[i] *rho*S*sqr(v[i]);

vx_dot_def(i).. v_dot['x',i] =e= (-L[i]*w[i]/v[i] - D[i]*vel['x',i]/v[i])/m;

vy_dot_def(i).. v_dot['y',i] =e= ( L[i]*vel['x',i]/v[i] - D[i]*w[i]/v[i])/m - g;

obj..final_x =e= pos('x','h%nh%');

pos_eqn(c,i-1).. pos[c,i] =e= pos[c,i-1] + .5*step*(vel[c,i] + vel[c,i-1]);

vel_eqn(c,i-1).. vel[c,i] =e= vel[c,i-1] + .5*step*(v_dot[c,i] + v_dot[c,i-1]);

* 경계 조건
cl.lo(h) = cL_min;
cl.up(h) = cL_max;
pos.lo('x',h) = 0;
vel.lo('x',h) = 0;
v.lo(h) = 0.01;

* 고정값
pos.fx(c,'h0') = c_0(c);
pos.fx('y','h%nh%') = c_f('y');
vel.fx(c,'h0') = v_0(c);
vel.fx(c,'h%nh%') = v_f(c);

* 초기점
pos.l('x',h) = c_0('x') + v_0('x')*((ord(h)-1)/nh);
pos.l('y',h) = c_0('y') + ((ord(h)-1)/nh)*(c_f('y') - c_0('y'));
vel.l(c,h) = v_0(c);
cL.l(h) = cL_max/2;
단계 1 = 1.0/nh;

* 중간변수의 초기값
t_f.l = 단계.l*nh;
r.l[i] = sqr(pos.l['x',i]/r_0 - 2.5);
u.l[i] = u_c*(1-r.l[i])*exp(-r.l[i]);
w.l[i] = vel.l['y',i] - u.l[i];
v.l[i] = sqrt(sqr(vel.l['x',i]) + sqr(w.l[i]));
D.l[i] = .5*(c0+c1*sqr(cL.l[i]))*rho*S*sqr(v.l[i]);
L.l[i] = .5* cL.l[i] *rho*S*sqr(v.l[i]);
v_dot.l['x',i] = (-L.l[i]*w.l[i]/v.l[i] - D.l[i]*vel.l['x',i]/v.l[i])/m;
v_dot.l['y',i] = ( L.l[i]*vel.l['x',i]/v.l[i] - D.l[i]*w.l[i]/v.l[i])/m - g;

모델 글라이더 /all/;

$ifThenI x%mode%==xbook
글라이더.작업 공간 = 40;
$endIf

nlp를 사용하여 글라이더를 최대화하는 final_x를 해결합니다.

$ifThenI x%mode%==xbook
파일 res /g8.dat/;
입술을 넣어
루프(h, put vel.l('y',h):10:7, put/)
$endIf

* -------------- 수치실험 ------
* 2011년 1월 25일
*
* nh=1200의 경우 다음을 얻었습니다.
* CONOPT: 1547회 반복, 217.242초, vfo=1247.9859370
* KNITRO: 604회 반복, 631.468초, vfo=1247.9858984
*------
* 엔드 글라이더