我将给你一段qt的头文件代码,请告诉我这个代码是起到什么功能,以及所关联到的其他文件所可能起到的作用
#ifndef IMM_STRATEGY_H
#define IMM_STRATEGY_H
#include <QVector>
#include <QPointF>
#include <QMap>
#include <QString>
#include <QtMath>
#include <QDebug>
#include <limits>
#include <random>
#include <algorithm>
#include <cmath>
// 前向声明
struct DroneInfo;
struct ObstacleInfo;
/**
* @brief 交互式多模型(IMM)预测和控制策略
*
* 该策略使用多个运动模型并行预测敌机轨迹,然后基于模型概率
* 进行加权融合,实现智能的预测和拦截
*/
class IMMStrategy {
public:
/**
* @brief 运动模型枚举
*/
enum MotionModel {
CONSTANT_VELOCITY, // 匀速直线运动
CONSTANT_ACCELERATION, // 匀加速运动
COORDINATED_TURN, // 协调转弯
RANDOM_MANEUVER, // 随机机动
EVASIVE_ACTION // 规避动作
};
/**
* @brief 敌机状态结构
*/
struct EnemyState {
QPointF position; // 位置
QPointF velocity; // 速度
QPointF acceleration; // 加速度
double heading; // 航向角
double angularVelocity; // 角速度
double lastUpdateTime; // 最后更新时间
EnemyState() : position(0, 0), velocity(0, 0), acceleration(0, 0),
heading(0), angularVelocity(0), lastUpdateTime(0) {}
};
/**
* @brief 模型预测结果
*/
struct ModelPrediction {
QPointF predictedPosition;
QPointF predictedVelocity;
double confidence;
double likelihood;
ModelPrediction() : predictedPosition(0, 0), predictedVelocity(0, 0),
confidence(0), likelihood(0) {}
};
/**
* @brief 拦截计算结果
*/
struct InterceptResult {
QPointF interceptPoint; // 拦截点
double timeToIntercept; // 拦截时间
double confidence; // 预测置信度
bool isValid; // 是否有效
InterceptResult() : interceptPoint(0, 0), timeToIntercept(0),
confidence(0), isValid(false) {}
};
public:
/**
* @brief 构造函数
*/
IMMStrategy();
/**
* @brief 析构函数
*/
~IMMStrategy();
/**
* @brief 主要的策略执行函数
* @param allDrones 所有无人机信息
* @param currentObstacles 当前障碍物信息
*/
void executeStrategy(QList<DroneInfo>& allDrones,
const QList<ObstacleInfo>& currentObstacles);
private:
// ============ 核心预测算法 ============
/**
* @brief 更新敌机状态
* @param enemies 当前检测到的敌机
*/
void updateEnemyStates(const QList<DroneInfo>& enemies);
/**
* @brief IMM预测敌机未来位置
* @param enemyId 敌机ID
* @param timeHorizon 预测时间范围
* @return 预测结果
*/
QPointF predictEnemyPosition(const QString& enemyId, double timeHorizon);
/**
* @brief 应用特定运动模型进行预测
* @param model 运动模型类型
* @param state 当前状态
* @param dt 时间步长
* @return 预测结果
*/
ModelPrediction applyMotionModel(MotionModel model,
const EnemyState& state,
double dt);
/**
* @brief 计算模型概率
* @param model 运动模型类型
* @param enemyId 敌机ID
* @return 模型概率
*/
double calculateModelProbability(MotionModel model, const QString& enemyId);
/**
* @brief 更新模型概率(贝叶斯更新)
* @param enemyId 敌机ID
* @param observations 观测数据
*/
void updateModelProbabilities(const QString& enemyId,
const QVector<QPointF>& observations);
// ============ 具体运动模型 ============
/**
* @brief 匀速直线运动模型
*/
ModelPrediction constantVelocityModel(const EnemyState& state, double dt);
/**
* @brief 匀加速运动模型
*/
ModelPrediction constantAccelerationModel(const EnemyState& state, double dt);
/**
* @brief 协调转弯模型
*/
ModelPrediction coordinatedTurnModel(const EnemyState& state, double dt);
/**
* @brief 随机机动模型
*/
ModelPrediction randomManeuverModel(const EnemyState& state, double dt);
/**
* @brief 规避动作模型
*/
ModelPrediction evasiveActionModel(const EnemyState& state, double dt);
// ============ 战术决策 ============
/**
* @brief 计算最优拦截点
* @param ourDrone 我方无人机
* @param enemyId 敌机ID
* @return 拦截结果
*/
InterceptResult calculateOptimalIntercept(const DroneInfo& ourDrone,
const QString& enemyId);
/**
* @brief 选择最优目标
* @param ourDrone 我方无人机
* @param enemies 敌机列表
* @return 选中的敌机ID
*/
QString selectOptimalTarget(const DroneInfo& ourDrone,
const QList<DroneInfo>& enemies);
/**
* @brief 执行攻击模式
* @param allDrones 所有无人机
* @param currentObstacles 障碍物
*/
void executeAttackMode(QList<DroneInfo>& allDrones,
const QList<ObstacleInfo>& currentObstacles);
/**
* @brief 执行巡逻模式
* @param allDrones 所有无人机
* @param currentObstacles 障碍物
*/
void executePatrolMode(QList<DroneInfo>& allDrones,
const QList<ObstacleInfo>& currentObstacles);
// ============ 辅助函数 ============
/**
* @brief 智能避障
* @param drone 当前无人机
* @param obstacles 障碍物列表
* @param targetPoint 目标点
* @return 避障后的方向角
*/
double intelligentAvoidance(const DroneInfo& drone,
const QList<ObstacleInfo>& obstacles,
const QPointF& targetPoint);
/**
* @brief 设置无人机速度
* @param uid 无人机ID
* @param speed 速度大小
* @param angle 方向角
* @param allDrones 无人机列表
*/
void setDroneVelocity(const QString& uid, double speed, double angle,
QList<DroneInfo>& allDrones);
// ============ 智能目标分配与协作系统 ============
/**
* @brief 智能目标选择
* @param droneId 无人机ID
* @param dronePos 无人机位置
* @param allDrones 所有无人机信息
* @return 最佳目标敌机ID
*/
QString selectBestTarget(const QString& droneId, const QPointF& dronePos,
const QList<DroneInfo>& allDrones);
/**
* @brief 计算目标优先级
* @param droneId 无人机ID
* @param dronePos 无人机位置
* @param enemyId 敌机ID
* @param enemyPos 敌机位置
* @param enemyHP 敌机血量
* @return 优先级分数
*/
double calculateTargetPriority(const QString& droneId, const QPointF& dronePos,
const QString& enemyId, const QPointF& enemyPos,
int enemyHP);
/**
* @brief 判断是否应该切换目标
* @param droneId 无人机ID
* @param currentTarget 当前目标
* @param newTarget 新目标
* @param dronePos 无人机位置
* @param allDrones 所有无人机信息
* @return 是否切换
*/
bool shouldSwitchTarget(const QString& droneId, const QString& currentTarget,
const QString& newTarget, const QPointF& dronePos,
const QList<DroneInfo>& allDrones);
/**
* @brief 检查敌机是否存活
* @param enemyId 敌机ID
* @param allDrones 所有无人机信息
* @return 是否存活
*/
bool isEnemyAlive(const QString& enemyId, const QList<DroneInfo>& allDrones);
// ============ 高级拦截算法 ============
/**
* @brief 改进的拦截算法
* @param dronePos 无人机位置
* @param targetPos 目标位置
* @param targetVel 目标速度
* @param distance 距离
* @param enemyHP 敌人血量
* @return 拦截速度向量
*/
QPointF calculateAdvancedInterception(const QPointF& dronePos,
const QPointF& targetPos,
const QPointF& targetVel,
double distance,
int enemyHP = 100);
/**
* @brief 计算拦截速度
* @param dronePos 无人机位置
* @param targetPos 目标位置
* @param targetVel 目标速度
* @return 拦截速度向量
*/
QPointF calculateInterceptionVelocity(const QPointF& dronePos,
const QPointF& targetPos,
const QPointF& targetVel);
// ============ 智能巡逻系统 ============
/**
* @brief 计算巡逻速度(改进的圆周巡逻策略)
* @param droneId 无人机ID
* @param dronePos 无人机位置
* @return 巡逻速度向量
*/
QPointF calculatePatrolVelocity(const QString& droneId, const QPointF& dronePos);
/**
* @brief 应用障碍物避让
* @param dronePos 无人机位置
* @param velocity 原始速度
* @param allDrones 所有无人机信息
* @param obstacles 障碍物信息
* @return 修正后的速度
*/
QPointF applyObstacleAvoidance(const QPointF& dronePos, const QPointF& velocity,
const QList<DroneInfo>& allDrones,
const QList<ObstacleInfo>& obstacles);
/**
* @brief 边界处理
* @param drone 无人机
* @return 是否在边界附近
*/
bool handleBoundaries(const DroneInfo& drone, QPointF& redirectTarget);
/**
* @brief 生成安全的巡逻目标点
* @param obstacles 障碍物列表
* @return 安全的目标点
*/
QPointF generateSafePatrolTarget(const QList<ObstacleInfo>& obstacles);
/**
* @brief 角度标准化到[-π, π]
*/
double normalizeAngle(double angle);
/**
* @brief 计算两点间距离
*/
double calculateDistance(const QPointF& p1, const QPointF& p2);
/**
* @brief 向量归一化
* @param vec 输入向量
* @return 归一化后的向量
*/
QPointF normalizeVector(const QPointF& vec);
private:
// ============ 成员变量 ============
// 敌机状态跟踪
QMap<QString, EnemyState> m_enemyStates;
QMap<QString, QVector<QPointF>> m_enemyTrajectories; // 历史轨迹
// 模型概率(每个敌机对应5个模型的概率)
QMap<QString, QVector<double>> m_modelProbabilities;
// 巡逻目标点
QMap<QString, QPointF> m_patrolTargets;
// ============ 智能目标分配系统 ============
// 目标分配跟踪
QMap<QString, QString> m_droneTargets; // 无人机->目标敌机映射
QMap<QString, int> m_targetAssignCount; // 每个敌机被分配的无人机数量
QMap<QString, QPointF> m_lastTargetPositions; // 目标最后位置记录
// ============ 巡逻系统 ============
// 巡逻参数
QPointF m_patrolCenter; // 巡逻中心点
double m_patrolRadius; // 巡逻半径
QMap<QString, double> m_droneAngles; // 每个无人机的巡逻角度
// ============ 性能优化 ============
// 调试计数器(减少日志输出频率)
int m_debugCounter;
int m_patrolDebugCounter;
int m_deadTargetCounter;
// 算法参数
static const int MAX_HISTORY_SIZE = 10; // 最大历史记录数
static constexpr double PREDICTION_HORIZON = 2.0; // 预测时间范围(秒)
static constexpr double MODEL_SWITCH_THRESHOLD = 0.3; // 模型切换阈值
static constexpr double INTERCEPT_SPEED = 60.0; // 拦截速度
static constexpr double PATROL_SPEED = 45.0; // 巡逻速度
static constexpr double MAX_DRONE_SPEED = 50.0; // 最大无人机速度
static constexpr double OBSTACLE_AVOIDANCE_RANGE = 120.0; // 避障检测范围
static constexpr double FORBIDDEN_RADIUS = 100.0; // 障碍物禁入半径
static constexpr double DRONE_COLLISION_DISTANCE = 60.0; // 无人机间最小距离
// 地图边界
static constexpr double MAP_WIDTH = 1280.0;
static constexpr double MAP_HEIGHT = 800.0;
static constexpr double BOUNDARY_MARGIN = 50.0;
// 随机数生成器
std::mt19937 m_rng;
// 时间追踪
double m_lastUpdateTime;
// 性能统计
int m_predictionCount;
double m_averageAccuracy;
};
#endif // IMM_STRATEGY_H
最新发布