using System;
using System.Collections.Generic;
using System.Linq;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Input;
namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Output
{
///
/// 优化权重配置执行结果
/// 智能分配系统优化权重应用的完整结果数据模型
/// 包含权重应用效果、性能分析、业务洞察等全面信息
/// 深度业务思考:评估权重配置对分配结果的实际影响和优化效果
///
public class OptimizationWeightsResult
{
#region 核心执行结果
///
/// 权重配置应用是否成功
///
public bool IsSuccessful { get; set; }
///
/// 应用的权重配置
/// 记录实际使用的权重配置详情
///
public OptimizationWeights AppliedWeights { get; set; } = new();
///
/// 权重应用前的分配结果摘要
///
public AllocationResultSummary BeforeWeightApplication { get; set; } = new();
///
/// 权重应用后的分配结果摘要
///
public AllocationResultSummary AfterWeightApplication { get; set; } = new();
///
/// 权重应用改进效果
/// 量化权重配置带来的实际改进
///
public WeightApplicationImprovement Improvement { get; set; } = new();
#endregion
#region 权重效果分析
///
/// 各权重维度的实际影响分析
/// Key: 权重维度名称, Value: 影响分析结果
///
public Dictionary DimensionImpactAnalysis { get; set; } = new();
///
/// 权重配置有效性评分 (0-100)
/// 综合评估权重配置的有效性和合理性
///
public double WeightEffectivenessScore { get; set; }
///
/// 权重分布均衡性分析
/// 评估权重配置的分布是否合理均衡
///
public WeightDistributionAnalysis DistributionAnalysis { get; set; } = new();
///
/// 权重敏感性分析
/// 分析各权重变化对结果的敏感程度
///
public Dictionary WeightSensitivityAnalysis { get; set; } = new();
#endregion
#region 业务效果评估
///
/// 业务目标达成情况
/// 评估权重配置对各业务目标的达成效果
///
public BusinessObjectiveAchievement ObjectiveAchievement { get; set; } = new();
///
/// 分配质量提升分析
///
public AllocationQualityImprovement QualityImprovement { get; set; } = new();
///
/// 人员满意度影响评估
///
public PersonnelSatisfactionImpact SatisfactionImpact { get; set; } = new();
///
/// 运营效率影响分析
///
public OperationalEfficiencyImpact EfficiencyImpact { get; set; } = new();
#endregion
#region 性能和统计数据
///
/// 权重应用执行时间(毫秒)
///
public long ExecutionTimeMs { get; set; }
///
/// 权重计算统计信息
///
public WeightCalculationStatistics CalculationStatistics { get; set; } = new();
///
/// 权重应用过程日志
/// 记录权重应用的详细过程
///
public List ApplicationLogs { get; set; } = new();
///
/// 性能监控指标
///
public Dictionary PerformanceMetrics { get; set; } = new();
#endregion
#region 优化建议和报告
///
/// 权重优化建议
/// 基于执行结果提出的权重调整建议
///
public List OptimizationSuggestions { get; set; } = new();
///
/// 权重配置评估报告
/// 人性化的权重应用效果总结
///
public string EvaluationReport { get; set; } = string.Empty;
///
/// 下一步行动建议
///
public List NextStepRecommendations { get; set; } = new();
///
/// 权重配置风险评估
///
public WeightConfigurationRisk RiskAssessment { get; set; } = new();
#endregion
#region 比较和基准分析
///
/// 与历史权重配置的比较
///
public List HistoricalComparisons { get; set; } = new();
///
/// 与基准权重配置的比较
///
public Dictionary BenchmarkComparisons { get; set; } = new();
///
/// 权重配置排名
/// 在所有测试配置中的表现排名
///
public WeightConfigurationRanking ConfigurationRanking { get; set; } = new();
#endregion
#region 辅助分析方法
///
/// 计算总体改进率
/// 综合各维度的改进情况
///
public double CalculateOverallImprovementRate()
{
if (BeforeWeightApplication.TotalScore <= 0) return 0;
var qualityImprovement = (AfterWeightApplication.AverageQualityScore - BeforeWeightApplication.AverageQualityScore) / BeforeWeightApplication.AverageQualityScore;
var successRateImprovement = (AfterWeightApplication.SuccessRate - BeforeWeightApplication.SuccessRate) / Math.Max(BeforeWeightApplication.SuccessRate, 1);
var efficiencyImprovement = Improvement.EfficiencyImprovement / 100;
return Math.Round((qualityImprovement + successRateImprovement + efficiencyImprovement) / 3 * 100, 2);
}
///
/// 获取最显著的权重影响因子
///
public List GetTopImpactFactors(int topCount = 5)
{
return DimensionImpactAnalysis.Values
.OrderByDescending(impact => Math.Abs(impact.ImpactScore))
.Take(topCount)
.Select(impact => new WeightImpactFactor
{
DimensionName = impact.DimensionName,
ImpactScore = impact.ImpactScore,
ImpactDescription = impact.ImpactDescription
})
.ToList();
}
///
/// 评估权重配置的稳定性
///
public WeightStabilityAssessment AssessConfigurationStability()
{
var assessment = new WeightStabilityAssessment();
// 计算权重标准差
var weights = AppliedWeights.ToDictionary().Values.ToList();
var mean = weights.Average();
var variance = weights.Sum(w => Math.Pow(w - mean, 2)) / weights.Count;
assessment.WeightVariance = variance;
assessment.WeightStandardDeviation = Math.Sqrt(variance);
// 评估敏感性稳定性
var sensitivities = WeightSensitivityAnalysis.Values.ToList();
if (sensitivities.Any())
{
assessment.SensitivityRange = sensitivities.Max() - sensitivities.Min();
assessment.AverageSensitivity = sensitivities.Average();
}
// 确定稳定性等级
assessment.StabilityLevel = DetermineStabilityLevel(assessment);
return assessment;
}
///
/// 确定权重配置稳定性等级
///
private WeightStabilityLevel DetermineStabilityLevel(WeightStabilityAssessment assessment)
{
if (assessment.WeightStandardDeviation < 0.1 && assessment.SensitivityRange < 0.2)
return WeightStabilityLevel.VeryStable;
if (assessment.WeightStandardDeviation < 0.2 && assessment.SensitivityRange < 0.4)
return WeightStabilityLevel.Stable;
if (assessment.WeightStandardDeviation < 0.3 && assessment.SensitivityRange < 0.6)
return WeightStabilityLevel.ModeratelyStable;
if (assessment.WeightStandardDeviation < 0.4 && assessment.SensitivityRange < 0.8)
return WeightStabilityLevel.Unstable;
return WeightStabilityLevel.VeryUnstable;
}
///
/// 生成权重配置摘要
///
public WeightResultSummary GenerateSummary()
{
return new WeightResultSummary
{
IsSuccessful = IsSuccessful,
ConfigurationName = AppliedWeights.ConfigurationName,
OverallImprovementRate = CalculateOverallImprovementRate(),
WeightEffectivenessScore = WeightEffectivenessScore,
TopImpactFactors = GetTopImpactFactors(3),
StabilityAssessment = AssessConfigurationStability(),
ExecutionTimeMs = ExecutionTimeMs,
RecommendationCount = OptimizationSuggestions.Count,
RiskLevel = RiskAssessment.OverallRiskLevel
};
}
#endregion
}
#region 支持类定义
///
/// 分配结果摘要
///
public class AllocationResultSummary
{
///
/// 总任务数
///
public int TotalTasks { get; set; }
///
/// 成功分配数
///
public int SuccessfulAllocations { get; set; }
///
/// 成功率 (0-100)
///
public double SuccessRate => TotalTasks > 0 ? (double)SuccessfulAllocations / TotalTasks * 100 : 0;
///
/// 平均质量评分
///
public double AverageQualityScore { get; set; }
///
/// 总评分
///
public double TotalScore { get; set; }
///
/// 公平性评分
///
public double FairnessScore { get; set; }
///
/// 生成时间
///
public DateTime GeneratedTime { get; set; } = DateTime.Now;
}
///
/// 权重应用改进效果
///
public class WeightApplicationImprovement
{
///
/// 质量改进百分比
///
public double QualityImprovement { get; set; }
///
/// 成功率改进百分比
///
public double SuccessRateImprovement { get; set; }
///
/// 效率改进百分比
///
public double EfficiencyImprovement { get; set; }
///
/// 公平性改进百分比
///
public double FairnessImprovement { get; set; }
///
/// 综合改进评分 (0-100)
///
public double OverallImprovementScore => (QualityImprovement + SuccessRateImprovement + EfficiencyImprovement + FairnessImprovement) / 4;
///
/// 改进详细描述
///
public string ImprovementDescription { get; set; } = string.Empty;
}
///
/// 权重维度影响分析
///
public class WeightDimensionImpact
{
///
/// 权重维度名称
///
public string DimensionName { get; set; } = string.Empty;
///
/// 权重值
///
public double WeightValue { get; set; }
///
/// 影响评分 (-100 到 100)
/// 正值表示正面影响,负值表示负面影响
///
public double ImpactScore { get; set; }
///
/// 影响描述
///
public string ImpactDescription { get; set; } = string.Empty;
///
/// 实际应用次数
/// 该权重维度在分配过程中被实际使用的次数
///
public int ApplicationCount { get; set; }
///
/// 平均贡献度
/// 该权重维度对最终分配结果的平均贡献度
///
public double AverageContribution { get; set; }
///
/// 标准差
/// 该权重维度贡献度的稳定性指标
///
public double StandardDeviation { get; set; }
}
///
/// 权重分布均衡性分析
///
public class WeightDistributionAnalysis
{
///
/// 权重分布方差
///
public double DistributionVariance { get; set; }
///
/// 权重分布标准差
///
public double DistributionStandardDeviation { get; set; }
///
/// 最大权重值
///
public double MaxWeight { get; set; }
///
/// 最小权重值
///
public double MinWeight { get; set; }
///
/// 权重范围
///
public double WeightRange => MaxWeight - MinWeight;
///
/// 权重集中度
/// 衡量权重是否过于集中在某几个维度
///
public double ConcentrationIndex { get; set; }
///
/// 分布均衡性评级
///
public DistributionBalance BalanceRating { get; set; } = DistributionBalance.Moderate;
}
///
/// 业务目标达成情况
///
public class BusinessObjectiveAchievement
{
///
/// 效率目标达成率 (0-100)
///
public double EfficiencyAchievementRate { get; set; }
///
/// 公平性目标达成率 (0-100)
///
public double FairnessAchievementRate { get; set; }
///
/// 质量目标达成率 (0-100)
///
public double QualityAchievementRate { get; set; }
///
/// 连续性目标达成率 (0-100)
///
public double ContinuityAchievementRate { get; set; }
///
/// 成本控制目标达成率 (0-100)
///
public double CostControlAchievementRate { get; set; }
///
/// 整体目标达成率 (0-100)
///
public double OverallAchievementRate => (EfficiencyAchievementRate + FairnessAchievementRate +
QualityAchievementRate + ContinuityAchievementRate + CostControlAchievementRate) / 5;
///
/// 目标达成详情
///
public List AchievementDetails { get; set; } = new();
}
///
/// 目标达成详情
///
public class ObjectiveAchievementDetail
{
///
/// 目标名称
///
public string ObjectiveName { get; set; } = string.Empty;
///
/// 目标值
///
public double TargetValue { get; set; }
///
/// 实际值
///
public double ActualValue { get; set; }
///
/// 达成率 (0-100)
///
public double AchievementRate => TargetValue > 0 ? Math.Min(100, ActualValue / TargetValue * 100) : 0;
///
/// 达成状态
///
public AchievementStatus Status { get; set; } = AchievementStatus.InProgress;
}
///
/// 分配质量提升分析
///
public class AllocationQualityImprovement
{
///
/// 匹配度提升
///
public double MatchingImprovement { get; set; }
///
/// 约束符合度提升
///
public double ConstraintComplianceImprovement { get; set; }
///
/// 风险降低程度
///
public double RiskReduction { get; set; }
///
/// 稳定性提升
///
public double StabilityImprovement { get; set; }
///
/// 质量提升详细报告
///
public string QualityImprovementReport { get; set; } = string.Empty;
}
///
/// 人员满意度影响评估
///
public class PersonnelSatisfactionImpact
{
///
/// 工作负载满意度变化
///
public double WorkloadSatisfactionChange { get; set; }
///
/// 班次安排满意度变化
///
public double ShiftSatisfactionChange { get; set; }
///
/// 技能匹配满意度变化
///
public double SkillMatchSatisfactionChange { get; set; }
///
/// 整体满意度变化
///
public double OverallSatisfactionChange => (WorkloadSatisfactionChange + ShiftSatisfactionChange + SkillMatchSatisfactionChange) / 3;
///
/// 满意度影响详情
///
public List ImpactDetails { get; set; } = new();
}
///
/// 满意度影响详情
///
public class SatisfactionImpactDetail
{
///
/// 人员ID
///
public long PersonnelId { get; set; }
///
/// 人员姓名
///
public string PersonnelName { get; set; } = string.Empty;
///
/// 满意度变化分数
///
public double SatisfactionChange { get; set; }
///
/// 变化原因
///
public string ChangeReason { get; set; } = string.Empty;
}
///
/// 运营效率影响分析
///
public class OperationalEfficiencyImpact
{
///
/// 分配效率提升 (%)
///
public double AllocationEfficiencyImprovement { get; set; }
///
/// 执行时间减少 (%)
///
public double ExecutionTimeReduction { get; set; }
///
/// 资源利用率提升 (%)
///
public double ResourceUtilizationImprovement { get; set; }
///
/// 整体运营效率改进 (%)
///
public double OverallEfficiencyImprovement => (AllocationEfficiencyImprovement + ExecutionTimeReduction + ResourceUtilizationImprovement) / 3;
///
/// 效率影响报告
///
public string EfficiencyImpactReport { get; set; } = string.Empty;
}
///
/// 权重计算统计信息
///
public class WeightCalculationStatistics
{
///
/// 总计算次数
///
public int TotalCalculations { get; set; }
///
/// 平均计算时间(毫秒)
///
public double AverageCalculationTimeMs { get; set; }
///
/// 权重应用成功次数
///
public int SuccessfulApplications { get; set; }
///
/// 权重应用失败次数
///
public int FailedApplications { get; set; }
///
/// 应用成功率 (0-100)
///
public double ApplicationSuccessRate => TotalCalculations > 0 ? (double)SuccessfulApplications / TotalCalculations * 100 : 0;
///
/// 缓存命中次数
///
public int CacheHits { get; set; }
///
/// 缓存未命中次数
///
public int CacheMisses { get; set; }
///
/// 缓存命中率 (0-100)
///
public double CacheHitRate => (CacheHits + CacheMisses) > 0 ? (double)CacheHits / (CacheHits + CacheMisses) * 100 : 0;
}
///
/// 权重应用日志
///
public class WeightApplicationLog
{
///
/// 日志时间
///
public DateTime LogTime { get; set; } = DateTime.Now;
///
/// 日志级别
///
public LogLevel Level { get; set; } = LogLevel.Info;
///
/// 日志消息
///
public string Message { get; set; } = string.Empty;
///
/// 相关的权重维度
///
public string WeightDimension { get; set; } = string.Empty;
///
/// 详细数据
///
public Dictionary Details { get; set; } = new();
}
///
/// 权重优化建议
///
public class WeightOptimizationSuggestion
{
///
/// 建议ID
///
public string SuggestionId { get; set; } = Guid.NewGuid().ToString();
///
/// 建议类型
///
public OptimizationSuggestionType Type { get; set; } = OptimizationSuggestionType.WeightAdjustment;
///
/// 建议标题
///
public string Title { get; set; } = string.Empty;
///
/// 建议描述
///
public string Description { get; set; } = string.Empty;
///
/// 目标权重维度
///
public string TargetDimension { get; set; } = string.Empty;
///
/// 当前值
///
public double CurrentValue { get; set; }
///
/// 建议值
///
public double SuggestedValue { get; set; }
///
/// 预期改进效果
///
public double ExpectedImprovement { get; set; }
///
/// 优先级 (1-10)
///
public int Priority { get; set; } = 5;
///
/// 置信度 (0-100)
///
public double Confidence { get; set; } = 80;
///
/// 建议理由
///
public string Rationale { get; set; } = string.Empty;
}
///
/// 权重行动建议
///
public class WeightActionRecommendation
{
///
/// 行动类型
///
public WeightActionType ActionType { get; set; } = WeightActionType.Monitor;
///
/// 行动描述
///
public string ActionDescription { get; set; } = string.Empty;
///
/// 建议执行时间
///
public DateTime RecommendedExecutionTime { get; set; }
///
/// 紧急程度 (1-10)
///
public int UrgencyLevel { get; set; } = 5;
///
/// 负责角色
///
public string ResponsibleRole { get; set; } = string.Empty;
///
/// 预期结果
///
public string ExpectedOutcome { get; set; } = string.Empty;
}
///
/// 权重配置风险评估
///
public class WeightConfigurationRisk
{
///
/// 整体风险等级
///
public RiskLevel OverallRiskLevel { get; set; } = RiskLevel.Low;
///
/// 风险因子列表
///
public List RiskFactors { get; set; } = new();
///
/// 风险评分 (0-100)
///
public double RiskScore { get; set; }
///
/// 风险描述
///
public string RiskDescription { get; set; } = string.Empty;
///
/// 缓解建议
///
public List MitigationSuggestions { get; set; } = new();
}
///
/// 权重风险因子
///
public class WeightRiskFactor
{
///
/// 风险类型
///
public string RiskType { get; set; } = string.Empty;
///
/// 风险描述
///
public string Description { get; set; } = string.Empty;
///
/// 风险等级
///
public RiskLevel Level { get; set; } = RiskLevel.Low;
///
/// 风险概率 (0-100)
///
public double Probability { get; set; }
///
/// 风险影响 (0-100)
///
public double Impact { get; set; }
}
///
/// 历史权重配置比较
///
public class HistoricalWeightComparison
{
///
/// 比较日期
///
public DateTime ComparisonDate { get; set; }
///
/// 历史配置名称
///
public string HistoricalConfigurationName { get; set; } = string.Empty;
///
/// 性能改进 (%)
///
public double PerformanceImprovement { get; set; }
///
/// 质量改进 (%)
///
public double QualityImprovement { get; set; }
///
/// 比较摘要
///
public string ComparisonSummary { get; set; } = string.Empty;
}
///
/// 基准比较
///
public class BenchmarkComparison
{
///
/// 基准名称
///
public string BenchmarkName { get; set; } = string.Empty;
///
/// 相对表现 (%)
///
public double RelativePerformance { get; set; }
///
/// 比较维度
///
public Dictionary ComparisonDimensions { get; set; } = new();
///
/// 比较结果
///
public ComparisonResult Result { get; set; } = ComparisonResult.Equal;
}
///
/// 权重配置排名
///
public class WeightConfigurationRanking
{
///
/// 整体排名
///
public int OverallRank { get; set; }
///
/// 总配置数量
///
public int TotalConfigurations { get; set; }
///
/// 百分位排名
///
public double PercentileRank => TotalConfigurations > 0 ? (double)(TotalConfigurations - OverallRank + 1) / TotalConfigurations * 100 : 0;
///
/// 各维度排名
///
public Dictionary DimensionRankings { get; set; } = new();
///
/// 排名变化趋势
///
public RankingTrend Trend { get; set; } = RankingTrend.Stable;
}
///
/// 权重影响因子
///
public class WeightImpactFactor
{
///
/// 维度名称
///
public string DimensionName { get; set; } = string.Empty;
///
/// 影响评分
///
public double ImpactScore { get; set; }
///
/// 影响描述
///
public string ImpactDescription { get; set; } = string.Empty;
}
///
/// 权重稳定性评估
///
public class WeightStabilityAssessment
{
///
/// 权重方差
///
public double WeightVariance { get; set; }
///
/// 权重标准差
///
public double WeightStandardDeviation { get; set; }
///
/// 敏感性范围
///
public double SensitivityRange { get; set; }
///
/// 平均敏感性
///
public double AverageSensitivity { get; set; }
///
/// 稳定性等级
///
public WeightStabilityLevel StabilityLevel { get; set; } = WeightStabilityLevel.Stable;
}
///
/// 权重结果摘要
///
public class WeightResultSummary
{
///
/// 执行是否成功
///
public bool IsSuccessful { get; set; }
///
/// 配置名称
///
public string ConfigurationName { get; set; } = string.Empty;
///
/// 整体改进率 (%)
///
public double OverallImprovementRate { get; set; }
///
/// 权重有效性评分
///
public double WeightEffectivenessScore { get; set; }
///
/// 主要影响因子
///
public List TopImpactFactors { get; set; } = new();
///
/// 稳定性评估
///
public WeightStabilityAssessment StabilityAssessment { get; set; } = new();
///
/// 执行时间(毫秒)
///
public long ExecutionTimeMs { get; set; }
///
/// 建议数量
///
public int RecommendationCount { get; set; }
///
/// 风险等级
///
public RiskLevel RiskLevel { get; set; } = RiskLevel.Low;
}
#endregion
#region 枚举定义
///
/// 分布均衡性枚举
///
public enum DistributionBalance
{
///
/// 非常不均衡
///
VeryUnbalanced = 1,
///
/// 不均衡
///
Unbalanced = 2,
///
/// 适中
///
Moderate = 3,
///
/// 均衡
///
Balanced = 4,
///
/// 非常均衡
///
VeryBalanced = 5
}
///
/// 达成状态枚举
///
public enum AchievementStatus
{
///
/// 未开始
///
NotStarted = 0,
///
/// 进行中
///
InProgress = 1,
///
/// 已达成
///
Achieved = 2,
///
/// 超额达成
///
Exceeded = 3,
///
/// 未达成
///
Failed = 4
}
///
/// 日志级别枚举
///
public enum LogLevel
{
///
/// 调试
///
Debug = 0,
///
/// 信息
///
Info = 1,
///
/// 警告
///
Warning = 2,
///
/// 错误
///
Error = 3,
///
/// 严重错误
///
Critical = 4
}
///
/// 优化建议类型枚举
///
public enum OptimizationSuggestionType
{
///
/// 权重调整
///
WeightAdjustment = 1,
///
/// 策略变更
///
StrategyChange = 2,
///
/// 配置优化
///
ConfigurationOptimization = 3,
///
/// 规则调整
///
RuleAdjustment = 4,
///
/// 性能优化
///
PerformanceOptimization = 5
}
///
/// 权重行动类型枚举
///
public enum WeightActionType
{
///
/// 立即调整
///
ImmediateAdjustment = 1,
///
/// 监控观察
///
Monitor = 2,
///
/// 详细分析
///
DetailedAnalysis = 3,
///
/// 配置备份
///
ConfigurationBackup = 4,
///
/// 回滚配置
///
ConfigurationRollback = 5
}
///
/// 比较结果枚举
///
public enum ComparisonResult
{
///
/// 明显更差
///
MuchWorse = -2,
///
/// 更差
///
Worse = -1,
///
/// 相等
///
Equal = 0,
///
/// 更好
///
Better = 1,
///
/// 明显更好
///
MuchBetter = 2
}
///
/// 排名趋势枚举
///
public enum RankingTrend
{
///
/// 下降
///
Declining = -1,
///
/// 稳定
///
Stable = 0,
///
/// 上升
///
Rising = 1
}
///
/// 权重稳定性等级枚举
///
public enum WeightStabilityLevel
{
///
/// 非常不稳定
///
VeryUnstable = 1,
///
/// 不稳定
///
Unstable = 2,
///
/// 中等稳定
///
ModeratelyStable = 3,
///
/// 稳定
///
Stable = 4,
///
/// 非常稳定
///
VeryStable = 5
}
#endregion
}