我一直在尝试在python中开发非线性模型预测控制(MPC)。该控制器的目标是最小化成本函数,系统动力学作为约束,如1中所述。
对于那些不熟悉它的人,每个时间步,控制器提前N步进行预测,并尝试最小化具有控制输入(u)和预测的动态(x)作为优化问题的独立变量的成本函数。 / p>
一个问题是独立变量将依赖于它们,即x(k + 1)取决于x(k)和u(k)等等。
正如我所说,我必须将动态实现为约束。我已经使用以下代码这样做了:
how='outer'
然后将其用作def constraint(self, ux0, x0):
u = ux0[0:self.N]
x = ux0[self.N:].reshape(self.N, 4).T
x_next = x0
for i in range(0, self.N-1):
x0 = self.next_state(x0, u[i])
x_next = np.c_[x_next, x0]
return (x-x_next).T.flatten()
上的f_eqcons
。
基本上,动态fmin_slsqp
与属于自变量x_next
的状态之间的差异必须为零。
真正的问题是,对于x
,我获得了500个独立变量,并且需要永远计算优化。我的意思是,我甚至无法获得结果,我将不得不使用,至少N=100
左右。我认为这是因为我实施约束的方式。
我不确定这是否是发布此内容的最佳方式,但您是否有任何想法以正确的方式实现此目的?