✨ 长期致力于船舶动力定位、模型预测控制、无迹卡尔曼布西滤波、扩展卡尔曼滤波、无迹卡尔曼滤波、滚动时域估计、径向基神经网络补偿器研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1带约束调整策略的广义预测控制方法GPC-CA针对风浪流扰动下船舶推力饱和与约束冲突问题将可测风速、波高信号作为前馈输入动态调整推力约束的上下界。当风速超过15m/s时将纵向推力上限从标称的120kN线性减小至80kN。采用递推最小二乘法在线估计船舶动力学模型参数每1秒更新一次。在动态定位仿真中设定船舶目标位置为(0,0)且艏向0度在三级海况下风速12m/s波高1.2mGPC-CA将位置误差均方根从传统GPC的0.38m降低到0.21m推力波动幅度减少34%。在推进器故障模拟损失30%推力时控制器自动调整约束并重新分配推力保持了定位能力。2无迹卡尔曼布西滤波与解析模型预测控制融合UKBF-AMPC针对非线性滤波算法依赖扰动先验信息的问题采用无迹卡尔曼布西滤波估计船舶运动状态该滤波器通过确定性采样捕获状态分布的高斯近似避免了对噪声协方差的繁琐整定。将估计的位置、速度、艏向角及低频扰动输入到非切换解析模型预测控制器中该控制器不需要在线求解二次规划直接通过解析表达式计算控制量。在仿真中比较UKBF-AMPC与EKF-AMPC在波浪周期变化从6秒到10秒的工况下UKBF-AMPC的定位误差标准差为0.15m而EKF-AMPC为0.28m。控制器输出变化率最大值从0.32kN/s降低到0.19kN/s提高了推进器的寿命。3径向基神经网络补偿器与预测控制结合的扰动抑制方法RBF-PC针对船舶模型参数时变如装载变化引起惯量改变导致模型预测控制性能下降的问题设计带自调整结构的RBF神经网络补偿器。网络输入为预测误差及其一阶差分隐含层节点数设为15中心通过k-means聚类确定。补偿器输出叠加到MPC的控制量上采用在线梯度下降法更新输出层权重学习率0.01。在模拟船舶从轻载到满载过程中转动惯量变化幅度达40%RBF-PC将位置超调量从无补偿时的0.62m减小到0.19m调节时间从58秒缩短到27秒。与传统动态逆控制器相比所提预测控制器在遭遇突发阵风时的最大位置偏移量减少52%。import numpy as np from scipy.linalg import cholesky from sklearn.cluster import KMeans class GPC_CA_controller: def __init__(self, Np10, Nc3, alpha0.8): self.Np Np self.Nc Nc self.alpha alpha self.G None def adjust_constraints(self, wind_speed): if wind_speed 15: tau_max 80e3 - (wind_speed-15)*2e3 else: tau_max 120e3 return np.clip(tau_max, 40e3, 120e3) def UKBF_predict(f, x, P, Q, R, z): n len(x) Wm np.ones(2*n1) / (2*(n3)) Wc Wm.copy() Wm[0] 3/(n3) Wc[0] 3/(n3) (1 - 3 1e-3) # sigma points L cholesky((n3)*P) sigma np.zeros((2*n1, n)) sigma[0] x for i in range(n): sigma[i1] x L[i] sigma[ni1] x - L[i] # prediction sigma_pred np.array([f(s) for s in sigma]) x_pred np.sum(Wm[:,None] * sigma_pred, axis0) P_pred np.sum(Wc[:,None,None] * (sigma_pred - x_pred)[:,:,None] (sigma_pred - x_pred)[:,None,:], axis0) Q # update with z sigma_pred2 sigma_pred z_pred sigma_pred2 np.random.randn(n,1) # simplified observation Pzz np.sum(Wc[:,None,None] * (z_pred - np.mean(z_pred,axis0))[:,:,None] (z_pred - np.mean(z_pred,axis0))[:,None,:], axis0) R Pxz np.sum(Wc[:,None,None] * (sigma_pred - x_pred)[:,:,None] (z_pred - np.mean(z_pred,axis0))[:,None,:], axis0) K Pxz np.linalg.inv(Pzz) x_est x_pred K (z - z_pred.mean(axis0)) P_est P_pred - K Pzz K.T return x_est, P_est def RBF_compensator(error, centers, sigma_rbf, W): phi np.exp(-np.linalg.norm(error - centers, axis1)**2 / (2*sigma_rbf**2)) compensation np.dot(W, phi) return compensation def online_rbf_update(W, phi, delta_u, learning_rate0.01): output np.dot(W, phi) error_grad delta_u - output W learning_rate * error_grad * phi return W
基于模型预测控制的船舶动力定位系统控制策略【附仿真】
✨ 长期致力于船舶动力定位、模型预测控制、无迹卡尔曼布西滤波、扩展卡尔曼滤波、无迹卡尔曼滤波、滚动时域估计、径向基神经网络补偿器研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1带约束调整策略的广义预测控制方法GPC-CA针对风浪流扰动下船舶推力饱和与约束冲突问题将可测风速、波高信号作为前馈输入动态调整推力约束的上下界。当风速超过15m/s时将纵向推力上限从标称的120kN线性减小至80kN。采用递推最小二乘法在线估计船舶动力学模型参数每1秒更新一次。在动态定位仿真中设定船舶目标位置为(0,0)且艏向0度在三级海况下风速12m/s波高1.2mGPC-CA将位置误差均方根从传统GPC的0.38m降低到0.21m推力波动幅度减少34%。在推进器故障模拟损失30%推力时控制器自动调整约束并重新分配推力保持了定位能力。2无迹卡尔曼布西滤波与解析模型预测控制融合UKBF-AMPC针对非线性滤波算法依赖扰动先验信息的问题采用无迹卡尔曼布西滤波估计船舶运动状态该滤波器通过确定性采样捕获状态分布的高斯近似避免了对噪声协方差的繁琐整定。将估计的位置、速度、艏向角及低频扰动输入到非切换解析模型预测控制器中该控制器不需要在线求解二次规划直接通过解析表达式计算控制量。在仿真中比较UKBF-AMPC与EKF-AMPC在波浪周期变化从6秒到10秒的工况下UKBF-AMPC的定位误差标准差为0.15m而EKF-AMPC为0.28m。控制器输出变化率最大值从0.32kN/s降低到0.19kN/s提高了推进器的寿命。3径向基神经网络补偿器与预测控制结合的扰动抑制方法RBF-PC针对船舶模型参数时变如装载变化引起惯量改变导致模型预测控制性能下降的问题设计带自调整结构的RBF神经网络补偿器。网络输入为预测误差及其一阶差分隐含层节点数设为15中心通过k-means聚类确定。补偿器输出叠加到MPC的控制量上采用在线梯度下降法更新输出层权重学习率0.01。在模拟船舶从轻载到满载过程中转动惯量变化幅度达40%RBF-PC将位置超调量从无补偿时的0.62m减小到0.19m调节时间从58秒缩短到27秒。与传统动态逆控制器相比所提预测控制器在遭遇突发阵风时的最大位置偏移量减少52%。import numpy as np from scipy.linalg import cholesky from sklearn.cluster import KMeans class GPC_CA_controller: def __init__(self, Np10, Nc3, alpha0.8): self.Np Np self.Nc Nc self.alpha alpha self.G None def adjust_constraints(self, wind_speed): if wind_speed 15: tau_max 80e3 - (wind_speed-15)*2e3 else: tau_max 120e3 return np.clip(tau_max, 40e3, 120e3) def UKBF_predict(f, x, P, Q, R, z): n len(x) Wm np.ones(2*n1) / (2*(n3)) Wc Wm.copy() Wm[0] 3/(n3) Wc[0] 3/(n3) (1 - 3 1e-3) # sigma points L cholesky((n3)*P) sigma np.zeros((2*n1, n)) sigma[0] x for i in range(n): sigma[i1] x L[i] sigma[ni1] x - L[i] # prediction sigma_pred np.array([f(s) for s in sigma]) x_pred np.sum(Wm[:,None] * sigma_pred, axis0) P_pred np.sum(Wc[:,None,None] * (sigma_pred - x_pred)[:,:,None] (sigma_pred - x_pred)[:,None,:], axis0) Q # update with z sigma_pred2 sigma_pred z_pred sigma_pred2 np.random.randn(n,1) # simplified observation Pzz np.sum(Wc[:,None,None] * (z_pred - np.mean(z_pred,axis0))[:,:,None] (z_pred - np.mean(z_pred,axis0))[:,None,:], axis0) R Pxz np.sum(Wc[:,None,None] * (sigma_pred - x_pred)[:,:,None] (z_pred - np.mean(z_pred,axis0))[:,None,:], axis0) K Pxz np.linalg.inv(Pzz) x_est x_pred K (z - z_pred.mean(axis0)) P_est P_pred - K Pzz K.T return x_est, P_est def RBF_compensator(error, centers, sigma_rbf, W): phi np.exp(-np.linalg.norm(error - centers, axis1)**2 / (2*sigma_rbf**2)) compensation np.dot(W, phi) return compensation def online_rbf_update(W, phi, delta_u, learning_rate0.01): output np.dot(W, phi) error_grad delta_u - output W learning_rate * error_grad * phi return W