rocket.gms : 고다드 로켓 COPS 2.0 #10

설명

수직 발사 로켓의 최종 고도를 최대화하려면 다음을 사용하십시오.
추력을 제어로 사용하고 초기 질량, 연료 질량 및
로켓의 항력 특성.

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

대형 모델 유형 :NLP


카테고리 : 무료 슬롯 게임 모델 라이브러리


메인 파일 : rocket.gms

$title 고다드 로켓 경찰 2.0 #10 (ROCKET,SEQ=238)

$onText
다음을 사용하여 수직 발사 로켓의 최종 고도를 최대화합니다.
추력을 제어로 사용하고 초기 질량, 연료 질량 및
로켓의 항력 특성.

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

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

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

Bryson, AE, 동적 최적화. 애디슨 웨슬리, 1999.

키워드: 비선형 프로그래밍, 항공우주공학, 고다드 로켓
$offText

$설정되지 않은 경우 nh $set nh 50

h '간격' 설정 / h0*h%nh% /;

스칼라
   h_0 '초기 높이' / 1 /
   v_0 '초기 속도' / 0 /
   m_0 '초기 질량' / 1 /
   g_0 '표면의 중력' / 1 /
   nh '메쉬의 간격 수' / %nh% /
   t_c '추력 상수' / 3.5 /
   v_c / 620 /
   h_c / 500 /
   m_c / 0.6 /
   D_c
   m_f '최종 질량'
   다;

가변 final_velocity;

양수변수
   단계 '단계 크기'
   v(h) '속도'
   ht(h) '높이'
   g(h) '중력'
   m(h) '질량'
   t(h) '추력'
   d(h) '드래그';

방정식
   df(h) '드래그 기능'
   gf(h) '중력 함수'
   객체
   h_eqn(h)
   v_eqn(h)
   m_eqn(h);

obj..final_velocity =e= ht('h%nh%');

df(h).. d(h) =e= D_c*sqr(v(h))*exp(-h_c*(ht(h) - h_0)/h_0);

gf(h).. g(h) =e= g_0*sqr(h_0/ht(h));

h_eqn(h-1)..ht(h) =e= ht(h-1) + .5*단계*(v(h) + v(h-1));

m_eqn(h-1).. m(h) =e= m(h-1) - .5*단계*(T(h) + T(h-1))/c;

v_eqn(h-1).. v(h) =e= v(h-1) + .5*단계*((T(h) - D(h) - m(h)*g(h))/m(h)
                              + (T(h-1) - D(h-1) - m(h-1)*g(h-1))/m(h-1));

c = 0.5*sqrt(g_0*h_0);
m_f = m_c*m_0;
D_c = 0.5*v_c*(m_0/g_0);

ht.lo(h) = h_0;
t.lo(h) = 0.0;
t.up(h) = T_c*(m_0*g_0);
m.lo(h) = m_f;
m.up(h) = m_0;

ht.fx('h0') = h_0;
v.fx('h0') = v_0;
m.fx('h0') = m_0;
m.fx('h%nh%') = m_f;

ht.l(h) = 1;
v.l(h) = ((ord(h) - 1)/nh)*(1 - ((ord(h) - 1)/nh));
m.l(h) = (m_f - m_0)*((ord(h) - 1)/nh) + m_0;
t.l(h) = t.up(h)/2;
단계 1 = 1/nh;

* 중간변수의 초기값
d.l(h) = D_c*sqr(v.l(h))*exp(-h_c*(ht.l(h) - h_0)/h_0);
g.l(h) = g_0*sqr(h_0/ht.l(h));

모형 로켓 / 모두 /;

$if set workSpace 로켓.workSpace = %workSpace%

final_velocity를 최대화하는 nlp를 사용하여 로켓을 해결합니다.