使用scipy.optimize.minimize

时间:2019-03-09 16:39:22

标签: python optimization functional-programming scipy

我正在尝试为刚体创建一个轨迹优化算法,该刚体可以施加扭矩以使其在3D空间中旋转,以及固定在刚体X轴上的固定器,该惯性器可以用于以固定的加速度(在这种情况下为0或1000单位/ s ^ 2)加速对象。现在,为了简化起见,我将删除针对我的优化问题的旋转运动方程式,直到我了解如何充分使用scipy.optimize.minimize函数以包含其他动态约束为止。我还考虑到加速度可以是介于0到1000之间的任何值,并将脉冲宽度调制应用于推力控制以模拟介于0到1000之间的加速度。

因此,我一直在寻找一个使用典型成本函数的良好示例,如下所示:

J = t_f,其中t_f是最后时间,J是我想最小化的成本函数

比方说,我有一些边界条件(或约束): x(t_f)= [s_f,v_f]

和初始条件 x(0)= [s_0,v_0]

其中x是对象的状态: x = [位置,速度]

我想优化控制输入u(t)(这是我的理想加速度矢量,u = [ax,ay,az]),以便在最短的时间内达到最终状态。 (当然,我的加速度值在world_frame中)

u具有约束| u | <=1000。为简单起见,我再次考虑到火箭的旋转动力学在这里没有发挥作用,我可以立即将此加速度应用于火箭,而不必将火箭定向在加速度矢量方向上。

动态约束是牛顿运动方程,我将考虑在离散时间内运动。

x0 =((u(t)+重力)*(delta_t ^ 2)/ 2)+(x1 * delta_t)+ x0

x1 =(u(t)+ g)*(delta_t)+ x1

我是否错过了类似的问题?还是有一个我错过的例子导致我找到控制向量u(t)?

我一直在阅读有关“ SLSQP”方法的文章,这似乎是行之有效的方法,但是我仍然不确定如何正确地应用目标函数和约束,以便获得控制权在整个时间范围内进行输入。

为简化起见: 我想使用scipy.optimize.minize(method ='SLSQP')最小化一些函数J = t_f

受某些动力学和边界条件的约束

x(t_f)= [s_f,v_f]

x(t_0)= [s_0,v_0]

x0 =((u(t)+重力)*(delta_t ^ 2)/ 2)+(x1 * delta_t)+ x0

x1 =(u(t)+ g)*(delta_t)+ x1

| u | <1000

为了最小化功能,我可以控制的变量是u。

函数终止后,我希望在从t_0到t_f的整个时间范围内都包含所有u。

0 个答案:

没有答案