From 2f1cbec203dcff25df7a5c2b51b13ec558f2c3db Mon Sep 17 00:00:00 2001 From: Shuxia Ning <NingShuxia0927@outlook.com> Date: 星期四, 13 二月 2025 11:15:00 +0800 Subject: [PATCH] 泵状态更新 --- 01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs | 112 ++++++++++++++++++++++++------------------------------- 1 files changed, 49 insertions(+), 63 deletions(-) diff --git a/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs b/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs index 4f8c4a7..3f1d00e 100644 --- a/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs +++ b/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs @@ -1,7 +1,4 @@ -锘縰sing IStation.Application; -using IStation.Model; - -namespace IStation.Service +锘縩amespace IStation.Service { /// <summary> /// 璋冨害鍒嗘瀽杈呭姪绫� @@ -19,8 +16,7 @@ this.Flag = flag; } public int Flag { get; set; } - } - + } #endregion #region Private Variable @@ -37,7 +33,7 @@ private readonly double _sel_opt_flow_deviation_ratio = 0.05;//鍙�夋柟妗堢殑娴侀噺鍋忓樊姣� private readonly double _sel_opt_reasonable_flow_deviation_ratio = 0.005;//鍚堢悊鐨勬柟妗堢殑娴侀噺鍋忓樊姣� - private readonly Service.AnalysisParameter _service_analysis_conclusion = new(); + private readonly Service.AnalysisParameter _service_analysis_parameter = new(); private readonly Service.AnalysisDeviation _service_analysis_deviation = new(); private readonly Service.AnalysisFactor _service_analysis_factor = new(); @@ -45,15 +41,16 @@ private int _max_open_count;//鏈�澶у紑娉垫暟閲� private List<int> _current_open_flag_list = null;// 褰撳墠寮�娉靛垪琛� private List<int> _must_open_flag_list = null; // 蹇呭紑娉靛垪琛� - private List<int> _must_close_flag_list = null; // 蹇呭叧娉靛垪琛� + private List<int> _must_close_flag_list = null; // 蹇呭叧娉靛垪琛� private List<List<int>> _forbidden_flag_combine_list = null; // 绂佺敤娉电粍鍚� private List<List<int>> _associative_flag_combine_list = null; // 鍏宠仈娉电粍鍚� private List<List<int>> _same_section_flag_combine_list = null; // 鍚屾娉电粍鍚� private List<Model.WaterSupplyLimit> _water_supply_limit_list = null; //渚涙按闄愬埗鍒楄〃 private List<Model.FrequencyLimit> _frequency_limit_list = null; // 棰戠巼闄愬埗鍒楄〃 private Dictionary<int, double> _flag_cumulative_runtime_dict = null; // 娉电疮璁¤繍琛屾椂闀垮瓧鍏� + private List<int> _priority_open_flag_list = null; // 浼樺厛寮�娉靛垪琛� - + private List<Model.AnalysisDeviation> _analysis_deviation_list = null;//鍒嗘瀽鍋忓樊 #endregion @@ -75,6 +72,7 @@ _water_supply_limit_list = null; _frequency_limit_list = null; _flag_cumulative_runtime_dict = null; + _priority_open_flag_list = null; if (schedule_config != null) { _min_open_count = schedule_config.MinOpenCount; @@ -87,6 +85,7 @@ _water_supply_limit_list = schedule_config.WaterSupplyLimitList; _frequency_limit_list = schedule_config.FrequencyLimitList; _flag_cumulative_runtime_dict = schedule_config.FlagCumulativeRuntimeDict; + _priority_open_flag_list = schedule_config.PriorityOpenFlagList; } _analysis_deviation_list = analysis_deviation_list; @@ -95,8 +94,7 @@ #region OptAnaCombine - - + /// <summary> /// 鑾峰彇鏈�浼樼粍鍚� /// </summary> @@ -107,7 +105,7 @@ /// <returns></returns> public AnaCombine GetOptAnaCombine ( - List<Model.Pump> pump_list, + List<Model.Pump> pump_list, Dictionary<int, double> flag_inlet_water_level_dict, double target_flow, double target_pressure @@ -131,6 +129,7 @@ var water_supply_limit_list = _water_supply_limit_list; var frequency_limit_list = _frequency_limit_list; var flag_cumulative_runtime_dict = _flag_cumulative_runtime_dict; + var priority_open_flag_list = _priority_open_flag_list; var pump_bp_dict = pump_list.ToDictionary(x => x.Flag, x => x.IsBp); var pump_nr_dict = pump_list.ToDictionary(x => x.Flag, x => x.Nr); @@ -193,6 +192,10 @@ { var water_supply_min = water_supply_limit_list.Min(x => x.Min); var water_supply_max = water_supply_limit_list.Max(x => x.Max); + +#if DEBUG + water_supply_min = 0; +#endif if (target_flow < water_supply_min || target_flow > water_supply_max) { return default; @@ -220,6 +223,18 @@ { flag_cumulative_runtime_loss_ratio_dict = GetFlagCumulativeRuntimeLossRatioDict(flag_cumulative_runtime_dict); } + #endregion + + #region 瀛樺湪-浼樺厛寮�娉靛垪琛� + + var priority_open_flag_list_remark = string.Empty; + var exist_priority_open_flag_list = priority_open_flag_list != null && priority_open_flag_list.Count > 0; + if (exist_priority_open_flag_list) + { + priority_open_flag_list = priority_open_flag_list.OrderBy(x => x).ToList(); + priority_open_flag_list_remark = IntListHelper.ToString(priority_open_flag_list); + } + #endregion #region 瀛樺湪-褰撳墠寮�娉靛垪琛� (鏄惁鍒囨车) @@ -260,6 +275,7 @@ } #endregion + #endregion @@ -405,6 +421,23 @@ } } + //浼樺厛寮�娉靛垪琛� + if (exist_priority_open_flag_list) + { + //foreach (var flag in priority_open_flag_list) + //{ + // if (combine.Contains(flag)) + // { + // combine_merit_ratio *= 1.05; + // } + //} + + //鐩墠閫昏緫 浼樺厛寮�娉�==蹇呭紑鏂规 + var combine_remark = IntListHelper.ToString(combine.OrderBy(x => x)); + if (!combine_remark.Contains(priority_open_flag_list_remark)) + continue; + } + #endregion var total_loss_ratio = Math.Pow(_start_stop_loss_coefficient, start_stop_count);//鍚仠涓�娆℃崯澶变簺鑳借�� @@ -477,54 +510,7 @@ return default; //鍏堜慨姝g粍鍚堟洸绾垮拰妯″瀷鐨勫亸宸壃绋� - var combine_deviation_factor_dict = GetCombineDeviationFactorDict(target_flow, combine); - - if (GlobalHelper.IsStation1(combine)) - { - var err_combine = new List<Tuple<double, List<int>>>() - { - new (23500, new List<int>(){12,13,14,15,17 }) - }; - - var exist_err_combine = err_combine.Find(x => x.Item2.SequenceEqual(combine)); - if (exist_err_combine != null) - { - ScheduleLog.Info(-1, "娴嬭瘯", $"鐩爣:{target_pressure}"); - if (target_flow > exist_err_combine.Item1) - { - var dev_diff = 0.5; - foreach (var flag in combine) - { - var dev_pressure = combine_deviation_factor_dict[flag]; - combine_deviation_factor_dict[flag] = dev_pressure - dev_diff; - //combine_deviation_factor_dict[flag] = 0; - ScheduleLog.Info(-1, "娴嬭瘯", $"{flag}#:鍘嬪姏鍋忓樊{dev_pressure}-{dev_diff}={dev_pressure - dev_diff:N4}"); - } - } - } - } - else - { - //var err_combine = new List<Tuple<double, List<int>>>() - //{ - // new (29000, new List<int>(){22,23,26}) - //}; - //var exist_err_combine = err_combine.Find(x => x.Item2.SequenceEqual(combine)); - //if (exist_err_combine != null) - //{ - // ScheduleLog.Info(-1, "娴嬭瘯", $"鐩爣:{target_pressure}"); - // if (target_flow > exist_err_combine.Item1) - // { - // foreach (var flag in combine) - // { - - // combine_deviation_factor_dict[flag] = 0; - // ScheduleLog.Info(-1, "娴嬭瘯", $"{flag}#:鍘嬪姏鍋忓樊{0}"); - // } - // } - //} - } - + var combine_deviation_factor_dict = GetCombineDeviationFactorDict(target_flow, combine); var conclusion_ex_list_list = new List<List<AnalysisConclusionViewModel>>(); var conclusion_ex_list_dict = new Dictionary<int, List<AnalysisConclusionViewModel>>(); double max_supply_flow = 0; @@ -545,13 +531,13 @@ if (exist_frequency_limit_list && frequency_limit_flag_dict.ContainsKey(flag)) { var limit = frequency_limit_flag_dict[flag]; - conclusion_list = _service_analysis_conclusion.GetList(run_flag, limit.Min, limit.Max, current_pressure_diff); + conclusion_list = _service_analysis_parameter.GetList(run_flag, limit.Min, limit.Max, current_pressure_diff); } else { //瀹氶娉� 鍙兘鏈�灏忓帇宸秴杩囩洰鏍囧帇宸� - var min_pressure_diff_conclusion = _service_analysis_conclusion.GetMinPressureDiff(run_flag); + var min_pressure_diff_conclusion = _service_analysis_parameter.GetMinPressureDiff(run_flag); if (min_pressure_diff_conclusion != null && min_pressure_diff_conclusion.PressureDiff > current_pressure_diff) { conclusion_list = new List<Model.AnalysisParameter>() { min_pressure_diff_conclusion }; @@ -561,7 +547,7 @@ var is_bp = pump_bp_dict[flag]; if (is_bp) { - conclusion_list = _service_analysis_conclusion.GetList(run_flag, current_pressure_diff); + conclusion_list = _service_analysis_parameter.GetList(run_flag, current_pressure_diff); } else { -- Gitblit v1.9.3