2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 
Сообщение15.04.2009, 10:45 
Нужная Вам версия Quick NP еще находится в разработке (я делал ремарку по этому поводу).

Если хватит терпения, то можно воспользоваться ipopt:
http://www.coin-or.org/projects/Ipopt.xml

 
 
 
 
Сообщение16.04.2009, 01:11 
Попробую на матлабе запрогать. Там есть метод внутренней точки.

Как я понял метод решения исходной задачи выглядит таким образом:
Сделав замену переменной $\tau = t/T,\; T \in \mathbb R_+, d\tau = (1/T)dt, t \in [0,T], \tau \in [0,1]$, задача примет вид:
\begin{equation}
\label{MathModel3}
    \left\{
    \begin{array}{rcl}
        \frac{dx(\tau)}{d\tau}&=&T\frac{V_L(\tau) + V_R(\tau)}2\cos(\varphi(\tau)),\\
        \frac{dy(\tau)}{d\tau}&=&T\frac{V_L(\tau) + V_R(\tau)}2\sin(\varphi(\tau)),\\
        \frac{d\varphi(\tau)}{d\tau}&=&T\frac{V_R(\tau) - V_L(\tau)}{L},\\
        x(0) &=& x_0,\\
        y(0) &=& y_0,\\
        \varphi(0) &=& \varphi_0,\\
        x(1) &=& x_1,\\
        y(1) &=& y_1,\\
        (x(\tau)&-&x_c)^2 +(y(\tau)-y_c)^2 \ge r^2, r > 0,\\
        \tau &\in& [0,1],\\
        T &\to& \min_{|V_L(\cdot)| \le 1, |V_R(\cdot)| \le 1}.\\
    \end{array}
   \right.
\end{equation}Задача ~\eqref{MathModel3} сводится к задаче нелинейного программирования:
\begin{eqnarray*}
F(z) &\to& min_{z \in \mathbb X}, \quad \mathbb X = \{ z = (x^i, u^j, T) \in\mathbb R^{3(k+1)+2k+1} |\; g(z) = 0,\; h(z) \le 0 \},\\
x^i &\in& \mathbb R^3,\; u^j \in \mathbb R^2,\; i=0..k,\; j=0..k-1,\; T \in \mathbb R,\\
F(z) &=& T,\\
g(z) &=& (x^{i+1} - x^i - \frac{1}{k}f(i/k, x^i, u^i)), i=0..k-1,\\
x^0 &=& (x_0, y_0, \varphi_0),\; x^{k+1}_1 = x_1,\; x^{k+1}_2 = y_1.\\
h(z) &=& (-T,\; x^i_1 - x_{max},\; x^i_2 - y_{max},\; x_{min} - x^i_1,\; y_{min} - x^i_2,
r^2 - (x^i_1 - x_c)^2 - (x^i_2 - y_c)^2), i = 0..k.
\end{eqnarray*}
$f(t,x,u) -$ правая часть системы дифференциальных уравнений~\eqref{MathModel3}.

Полученная задача нелинейного программирования решается методом внутренней точки.
$$\frac{dz(t)}{dt} = -W_z(t,z),\; z(0) = z_0 \in X,$$
где $W(t,z) = F(z) + \tau(t)\sum_{i=1}^{k}\varphi(g^i(z)) + \tau(t)^{-1}\sum_{i=1}^{5(k+1)+1}\xi(h^i(z)),\;$
$\tau(t), \varphi(s), \xi(s) - $ скалярные, непрерывно дифференцируемые функции, определенные для всех $t\ge0,\;s > 0.$

$\tau(t)>0,\; d\tau(t)/dt > 0,\; \xi(s) > 0,\; \lim_{s\to-0}\xi(s) = \infty,\; \varphi(0) = \varphi'(0) = 0,\;
\varphi(s) > 0,\; \varphi''(s) > 0\; \forall s \neq 0.$

Ищем решение $z(t)$ при $t \to \infty,$ точнее $z(t')$, такое что $||W_z(t',z)|| \le \varepsilon(t).$
Правильно ли я понял суть метода?
Не совсем ясна идея о переменном шаге во времени(из каких соображений его выбирать?), поэтому в вышеуказанном алгоритме использовал постоянный шаг $1/n.$

Добавлено спустя 47 минут 28 секунд:

Каким образом лучше выбирать начальную точку(допустимое управление, соответствующую траекторию и время)? Есть ли какие-то универсальные методы или нужно использовать специфику системы(в данном случае физические соображения)?

 
 
 
 
Сообщение16.04.2009, 16:33 
Задача (1), похоже, записана правильно. Ограничения мощности двигателей можно записать наравне с другими ограничениями.

Сам подход получения задачи нелинейного программирования правильный, но, видимо в описании есть ошибки. Например, я не вижу ограничения мощности двигателей, а $g(z)$ вообще выглядит подозрительно. Еще, обычно можно указать допустимый диапазон переменных, неужели матлаб не дает такой возможности?

Признаюсь, я уже забыл описание метода внутренней точки, т.к. Quick NP делает все сам по описанию. Поэтому здесь помощи от меня ждать не стоит. Никто не мешает использовать любой другой метод, просто решение в ipopt уже проверено и оно работает: ipopt решает задачи с 100 точками (это ~500 переменных) примерно секунд за 40 (процессор ~2ГГ)

********************
Шаг времени я имел в виду одинаковый, но не фиксированный, как это обычно бывает при решении дифференциальных уравнений. Вы в своей модели вынесли T – суть получилось одно и то же.

Общее время в задаче можно ограничить длительностью пробега робота по периметру «стола», взяв с коэффициентом запаса, скажем 2. За это время робот точно должен добраться до цели.

Начальных траекторий, по большому счету, я вижу две: объехать препятствие слева или справа. Если не учитывать специфику задачи – то получите проблему глобальной оптимизации с большим числом переменных. Возможно, что данная задача все-таки решаема современными средствами, но вряд ли Вы сможете найти такой инструмент.

 
 
 
 
Сообщение19.04.2009, 13:30 
Да в $g(z)$ определённо есть ошибки(уже исправил). Управления, конечно, нужно ограничивать. В матлабе действительно есть полезная возможность указывать диапазоны изменения переменных. Не совсем понял зачем ограничивать T сверху(снизу есть смысл, чтобы не было отрицательных значений).

В теоремах о методе внутренней точки говорится, что найденное решение удовлетворяет необходимым условиям экстремума.
Возможно ли как-то доказать оптимальность?

 
 
 
 
Сообщение19.04.2009, 14:52 
При большом T робот за один шаг может пройти "100 размеров стола". Поэтому, на всякий случай, лучше T ограничить.

Экстремум то Вы найдете, только он будет локальным минимумом. Глобальность никто не обещает.

Видимо, начальных траекторий будет не две, а четыре. Если робот стоит задом к препятствию, то он может развернуться либо через "левое плечо", либо через "правое", и объехать препятствие либо слева, либо справа.

 
 
 [ Сообщений: 20 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group