OpenGoddard 사용법 2-비선형 최적 제어 및 궤도 생성을 위한 파이썬 라이브러리

htps : // 기주 b. 코 m / is s tei r ch / 오펜 고다 rd
h tps : // / s te r ch. 기주 b. 이오/오펜고다 rd/

OpenGoddard 사용법 1
OpenGoddard 사용법 2 ←지금 여기
OpenGoddard 사용법 3
OpenGoddard 사용법 4

Goddard 문제 (대기 중 로켓 최적 상승 제어 문제)



로켓 공학 중에서는 고전적인 문제인, 대기 중의 로켓 최적 상승하기 위한 최적 추력 제어의 문제인, 고다드 문제를 풀어 갑니다.
자세한 내용은 example 파일을 참조하십시오.

운동 방정식



로켓의 운동을 1차원(높이만)으로 생각합니다. 로켓 엔진에서의 추력과 공기 저항을 고려하여 고도 최대화를 생각합니다.
T: 추력
D: 항력(공기 저항)
g: 중력 가속도


\begin{align}
\dot{h} &= v \\
\dot{v} &= \frac{T - D}{m} - g \\
\dot{m} &= - \frac{T}{c}
\end{align}

구속조건



초기 조건, 종단값 조건, 상태 변수 및 제어 변수의 상한 하한을 입력합니다.

평가 함수



최소화하려는 값을 return에 넣습니다. 여기에서는, 고도의 최대화를 목표로 하고 싶기 때문에, 부호에 주의해 아래와 같습니다.
J = -h

결과





처음에는 풀 스로틀로 도중에 추력을 짜내는 것이 좋다는 결과가 되었습니다.
이것은, 현상적으로는 중력에 의한 감속을 작게 하기 위해서, 추력은 가능한 한 큰 편이 좋다, 라고 하는 성질과, 공기 저항은 작은 편이 좋기 때문에 공기 진한 곳에서는 너무 가속하지 않는 편이 좋다고 하는 성질의 합의 결과입니다.
전문 용어는 중력 손실과 공력 손실의 합계 최소화라고 할 수 있습니다.
실제 로켓에서도 비슷한 것을 실제로 생각할 수 있고, 고체 연료 로켓에서는 추력을 도중에 좋은 느낌으로 조정하고 있습니다.
고다드 문제의 해결책은 실제 사용되고 있습니다!
최적화 문제는 세상에서 유용합니다! 대단해!

knotting method



OpenGoddard의 내용인 의사 스펙트럼 방법은 대단한 알고리즘이지만, 상태 변수, 제어 변수가 부드럽지 않은 (미분 가능하지 않은) 것은 약하지 않습니다. 제어 변수가 비연속적으로 바뀌는 것도 약간 서투른다. 또 절대치 왠지 자랑이 아닙니다.
고다드 문제로 말하면 고도, 속도, 중량, 추력이 매끄러워지도록 밖에 풀어주지 않습니다.
상태 변수, 제어 변수를 특정의 점에서 비연속에서도 해를 구하는 기법으로서, knotting method라고 하는 것을 사용합니다.
이것은 비연속적인 부분에서 계산 구간을 나누어 버리는 방법입니다.
OpenGoddard에서는 knotting method를 쉽게 사용할 수 있습니다.
(세상에는 자동적으로 knotting method의 구간을 나누는 알고리즘의 최적화 소프트도 있습니다・・・)

Goddard 문제(knot 있음)



Problem 클래스에 넣을 값을 목록으로 정렬합니다.
time_init = [0.0, 0.1, 0.3]
n = [25, 25]
num_states = [3, 3]
num_controls = [1, 1]

또한 각 구간에 적용되는 운동 방정식을 지정하고 상태 변수가 연속적인지 여부를 지정합니다.
여기에서는 제어 변수만이 비연속적으로 변화한다는 예측하에 True를 선택하고 있습니다. 여기의 True/False와 구속조건은 밀접하게 관련되므로 주의해서 지정합니다.
False의 경우는 구속조건(equality)에 knot점에서 변수를 고정하지 않으면 발산합니다.
prob.dynamics = [dynamics, dynamics]
prob.knot_states_smooth = [True]

이상으로,



knot 있는 것은 최고 고도 내렸습니다. . . 별로 좋은 성과가 되지 않았습니다.
이와 같이 knotting method를 사용하면 단순히 좋다는 것은 아니지만, 변수가 비연속적인 문제도 취급할 수 있게 되었습니다.

좋은 웹페이지 즐겨찾기