| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | #ifndef JTJAI_MEDIA_CONCURRENT_CALCULATOR_H#define JTJAI_MEDIA_CONCURRENT_CALCULATOR_H#include "config.h"#include <vector>#include <unordered_map>namespace jtjai_media {struct StreamScheduleInfo {    int stream_index;           // 流索引    int start_time;            // 开始时间(相对于轮询开始的秒数)    int duration;              // 持续时间(秒)    int end_time;              // 结束时间    double priority_score;     // 优先级分数(基于权重计算)        StreamScheduleInfo(int idx, int start, int dur, double score)        : stream_index(idx), start_time(start), duration(dur), end_time(start + dur), priority_score(score) {}};class ConcurrentCalculator {public:    ConcurrentCalculator() = default;        // 计算最优的并发调度方案    std::vector<StreamScheduleInfo> calculate_schedule(        const std::vector<StreamConfig>& streams,        int total_duration,        int max_concurrent    );        // 获取任意时刻的并发流数量    int get_concurrent_count_at_time(        const std::vector<StreamScheduleInfo>& schedule,        int time_point    ) const;        // 验证调度方案是否满足约束条件    bool validate_schedule(        const std::vector<StreamScheduleInfo>& schedule,        int total_duration,        int max_concurrent    ) const;        // 获取调度统计信息    struct ScheduleStats {        int total_streams;        int max_concurrent_used;        double average_concurrent;        int total_scheduled_duration;        double utilization_rate;    };        ScheduleStats get_schedule_stats(        const std::vector<StreamScheduleInfo>& schedule,        int total_duration    ) const;        // 输出调度方案的可视化信息    std::string format_schedule(        const std::vector<StreamScheduleInfo>& schedule,        const std::vector<StreamConfig>& streams,        int total_duration    ) const;private:    // 计算流的优先级分数    double calculate_priority_score(const StreamConfig& stream) const;        // 贪心算法调度    std::vector<StreamScheduleInfo> greedy_schedule(        const std::vector<StreamConfig>& streams,        int total_duration,        int max_concurrent    );        // 寻找最早可用的时间段    int find_earliest_slot(        const std::vector<StreamScheduleInfo>& current_schedule,        int duration,        int max_concurrent,        int total_duration    ) const;        // 检查指定时间段是否可以调度新流    bool can_schedule_at_time(        const std::vector<StreamScheduleInfo>& current_schedule,        int start_time,        int duration,        int max_concurrent    ) const;        // 优化调度方案(尝试减少碎片化)    std::vector<StreamScheduleInfo> optimize_schedule(        std::vector<StreamScheduleInfo> schedule,        int total_duration,        int max_concurrent    );};} // namespace jtjai_media#endif // JTJAI_MEDIA_CONCURRENT_CALCULATOR_H
 |