cloudflight
2024-06-10 4db7d08bb295be33e80f1353f58fcea4a8da6127
Hydraulic/Hydro.CommonBase/ParamModel.cs
@@ -18,6 +18,7 @@
namespace Hydro.CommonBase
{
    [Serializable]
    public class GeneticParams
    {
        static int Count = 0;
@@ -97,6 +98,47 @@
        public bool isNeedOutput = true;
        public double CurrentTotalDemand = -1;
        public GeneticParams DeepCopy()
        {
            var copy = new GeneticParams(this.Level);
            copy.list_BestEnerge = this.list_BestEnerge?.ToList();
            copy.list_AvgHz = this.list_AvgHz?.ToList();
            copy.ranges = this.ranges?.Select(range => new DRange(range.Min, range.Max))?.ToList();
            copy.DLengths = this.DLengths?.ToList();
            copy.accuracys = this.accuracys?.ToList();
            copy.Dependencies = this.Dependencies?.ToList();
            copy.list_AtemtpArr = this.list_AtemtpArr?.ToArray();
            copy.SolutionSaveName = this.SolutionSaveName;
            copy.populationSize = this.populationSize;
            copy.iterations = this.iterations;
            copy.populationSize_full = this.populationSize_full;
            copy.iterations_full = this.iterations_full;
            copy.Upopulations = this.Upopulations?.ToList();
            copy.selectionMethod = this.selectionMethod;
            copy.optimizationMode = this.optimizationMode;
            copy.强制重计算 = this.强制重计算;
            copy.iterations_min = this.iterations_min;
            copy.accuracyNum = this.accuracyNum;
            copy.MaxRobot = this.MaxRobot;
            copy.RuningRobot = this.RuningRobot;
            copy.num = this.num;
            copy.BestOptValue = this.BestOptValue;
            copy.tolerance = tolerance==null?null: new DRange(this.tolerance.Min, this.tolerance.Max);
            copy.onFinished = this.onFinished;
            copy.onError = this.onError;
            copy.onReportProgress = this.onReportProgress;
            copy.setVars = this.setVars;
            copy.Db = this.Db; // Assuming Db is a reference type
            copy.SolutionDBHelper = this.SolutionDBHelper; // Assuming SolutionDBHelper is a reference type
            copy.GlobalConfig = this.GlobalConfig.DeepCopyByBin<GlobalConfig>(); // Assuming GlobalConfig has a copy constructor
            copy.isInited = this.isInited;
            copy.Quene = this.Quene; // Assuming Quene has a copy constructor
            copy.ID = this.ID;
            copy.isNeedOutput = this.isNeedOutput;
            copy.CurrentTotalDemand = this.CurrentTotalDemand;
            return copy;
        }
    }
    public class Result
    {
@@ -447,7 +489,7 @@
            this.SearchRange = point.SearchRange;
            this.isNeedtoSave = point.isNeedtoSave; 
            this.SaveKey = point.SaveKey;
            if (point.Pattern!=null) this.Pattern= point.Pattern.ToList().ToArray();
            if (point.Pattern!=null) this.Pattern= point.Pattern.ToArray();
        }
        public string Name;
@@ -689,10 +731,24 @@
    [Serializable]
    public class variable: Ivariable
    {
        public static List<string> list_indicatorTypeName;
        public static List<string> list_indicatorTypeName
        {
            get
            {
                if (_list_indicatorTypeName == null)
                {
                    _list_indicatorTypeName = new List<string>() { "已知压力", "节点用水量", "节点用水模式", "水池水位", "水泵转速比", "管线阻力系数", "阀门开度", "水泵开关", "阀门开关", "管线开关", "管线直径", "管线长度", "总水量", "节点压力", "节点自由压力", "节点需水量", "节点标高", "节点水龄", "节点水质", "管线流量", "管线流速", "水头损失", "当前状态", "水泵能耗", "水泵开关", "水泵转速比", "初始及运行传参", "初始传参", "运行传参", "种群生成器", "方案筛选器", "计算前处理", "结果处理", "当量分配", "随机分配" };
                }
                return _list_indicatorTypeName;
            }
        }
        private static List<string> _list_indicatorTypeName = null;
        public static List<string> listUsedInitValue = new List<string>() { "初始计算值", "变化值", "绝对变化值" };
        public static List<string> list_输入值 = new List<string>() { "基准值(界面)", "定义值", "基准值(接口)",  "模式系数(界面)", "模式系数(接口)" };
        //public static List<string> list_输入值 = new List<string>() { "基准值(界面)", "定义值", "基准值(接口)",  "模式系数(界面)", "模式系数(接口)" };
        public static HashSet<string> list_输入值 = new HashSet<string>() { "基准值(界面)", "定义值", "基准值(接口)", "模式系数(界面)", "模式系数(接口)" };
        public static List<string> listUsedScadaValue = new List<string> { "定义值", "基准值(接口)" };
        public static List<string> list_接口输出值 = new List<string>() { "表达式计算", "计算值", "变化值", "初始计算值", "子方案值" };
@@ -770,10 +826,12 @@
        public int arrgFuncType;
        public string defaultExpress;
        private int _indicatorType;
        public string IndicatorType 
        { 
            get
            {
                if (_indicatorType<0)
                {
                    return list_indicatorTypeName[0];
@@ -807,11 +865,11 @@
        {
            get
            {
                return _Values.ToArray();
                return _Values;
            }
            private set
            {
                _Values = value.ToArray();
                _Values = value;
            }
        }
@@ -855,9 +913,11 @@
        /// </summary>
        public string Value_Set(int period,double value)
        {
            _Values[period] = value;
            return null;
            string result = null;
            double formatValue = value;
            if (value!=double.NaN) formatValue = Math.Round(value, 小数位数);
            //if (value!=double.NaN) formatValue = Math.Round(value, 小数位数);
            /*[Cloudflight修改]2024-6-3 
                    解锁
                    */
@@ -875,10 +935,11 @@
        {
            set
            {
                lock (this)
                {
                    _Values = value;
                }
                //lock (this)
                //{
                //    _Values = value;
                //}
                _Values = value;
            }
        }
@@ -1061,18 +1122,18 @@
        //    Value0 = result;
        //    return result;
        //}
        public double? GetLogicValue(int? period=0)
        public double GetLogicValue(int period=0)
        {
            if (period != null && period >= 0 && period<LogicValues.Length)
                return LogicValues[period.Value];
            if ( period >= 0 && period<LogicValues.Length)
                return LogicValues[period];
            else
                return LogicValue;
                return double.NaN;
        }
        public double[] GetShowValue_Arr()
        {
            if (list_输入值.IndexOf(expressType) >= 0)
            if (variable.list_输入值.Contains(expressType))
                //return LogicPattern;
                return Values;
            else