Exemplo n.º 1
0
        /// <summary>
        /// 将当前的变换器设计方案集合转化为系统设计方案集合
        /// </summary>
        /// <param name="configs">额外配置信息</param>
        public void Transfer(string[] configs)
        {
            ConverterDesignData now = head;

            while (now != null)
            {
                List <string> newConfigs = new List <string>
                {
                    now.Efficiency.ToString(),
                              now.Volume.ToString(),
                              now.Cost.ToString()
                };
                foreach (string config in configs)
                {
                    newConfigs.Add(config);
                }
                foreach (string config in now.Configs)
                {
                    newConfigs.Add(config);
                }
                now.Configs = newConfigs.ToArray();
                now         = now.Next;
            }
            Filter();
        }
Exemplo n.º 2
0
 /// <summary>
 /// 将当前设计方案集合与另一设计方案集合组合成新的设计方案集合,并更新当前设计方案集合
 /// </summary>
 /// <param name="designList">另一个设计方案集合</param>
 public void Combine(ConverterDesignList designList)
 {
     if (head == null)
     {
         head = designList.head;
         size = designList.size;
     }
     else
     {
         ConverterDesignList newList = new ConverterDesignList();
         ConverterDesignData p       = head;
         while (p != null)
         {
             ConverterDesignData q = designList.head;
             while (q != null)
             {
                 string[] configs = new string[p.Configs.Length + q.Configs.Length];
                 p.Configs.CopyTo(configs, 0);
                 q.Configs.CopyTo(configs, p.Configs.Length);
                 newList.Add(p.Efficiency + q.Efficiency - 1, p.Volume + q.Volume, p.Cost + q.Cost, configs);
                 q = q.Next;
             }
             p = p.Next;
         }
         head = newList.head;
         size = newList.size;
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// 添加一个设计,并进行Pareto改进
        /// </summary>
        /// <param name="efficiency">效率</param>
        /// <param name="volume">体积</param>
        /// <param name="cost">成本</param>
        /// <param name="configs">配置信息</param>
        public void Add(double efficiency, double volume, double cost, string[] configs)
        {
            if (!IsAll) //若不记录全部设计,则进行Pareto改进
            {
                //Pareto改进
                ConverterDesignData now = head;
                while (now != null)
                {
                    //若当前Pareto集合中存在一个点,可以支配新添加的点,则新添加的点不为Pareto最优解,不需要添加进集合
                    if (now.Efficiency >= efficiency && now.Volume <= volume && now.Cost <= cost)
                    {
                        return;
                    }

                    //若新添加的点支配集合中存在的点,则将被支配的点剔除
                    if (now.Efficiency <= efficiency && now.Volume >= volume && now.Cost >= cost)
                    {
                        Delete(now);
                    }

                    now = now.Next;
                }
            }

            //将该点添加进集合中
            Insert(new ConverterDesignData()
            {
                Efficiency = efficiency,
                Volume     = volume,
                Cost       = cost,
                Configs    = configs
            });
        }
Exemplo n.º 4
0
 /// <summary>
 /// 在链表头部插入一个节点
 /// </summary>
 /// <param name="data"></param>
 private void Insert(ConverterDesignData node)
 {
     if (head != null)
     {
         head.Prev = node;
         node.Next = head;
     }
     head = node;
     size++;
 }
Exemplo n.º 5
0
        /// <summary>
        /// 合并另一个设计方案集合
        /// </summary>
        /// <param name="designList">另一个设计方案集合</param>
        public void Merge(ConverterDesignList designList)
        {
            ConverterDesignData now = designList.head;

            while (now != null)
            {
                Add(now.Efficiency, now.Volume, now.Cost, now.Configs);
                now = now.Next;
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 获取变换器设计方案数据(数组形式)
        /// </summary>
        /// <returns>变换器设计方案数据</returns>
        public IConverterDesignData[] GetData()
        {
            IConverterDesignData[] data = new IConverterDesignData[size];
            ConverterDesignData    now  = head;

            for (int i = 0; i < size; i++)
            {
                data[i] = now;
                now     = now.Next;
            }
            return(data);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 得到对应编号的配置信息
        /// </summary>
        /// <param name="id">编号</param>
        /// <returns>配置信息</returns>
        public string[] GetConfigs(int id)
        {
            if (id >= size)
            {
                return(null);
            }
            ConverterDesignData now = head;

            while (id > 0)
            {
                id--;
                now = now.Next;
            }
            return(now.Configs);
        }
Exemplo n.º 8
0
 /// <summary>
 /// 删除一个节点
 /// </summary>
 /// <param name="data"></param>
 private void Delete(ConverterDesignData node)
 {
     if (node.Prev != null)
     {
         node.Prev.Next = node.Next;
     }
     else
     {
         head = node.Next;
     }
     if (node.Next != null)
     {
         node.Next.Prev = node.Prev;
     }
     node.Prev = null;
     node.Next = null;
     size--;
 }
Exemplo n.º 9
0
        /// <summary>
        /// 去除效率低于90%的设计方案
        /// </summary>
        public void Filter()
        {
            ConverterDesignData        now  = head;
            List <ConverterDesignData> list = new List <ConverterDesignData>();

            while (now != null)
            {
                if (now.Efficiency < 0.9)
                {
                    list.Add(now);
                }
                now = now.Next;
            }
            foreach (ConverterDesignData design in list)
            {
                Delete(design);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// 得到效率最高设计的配置信息
        /// </summary>
        /// <returns>配置信息</returns>
        public string[] GetMaxEfficiencyConfigs()
        {
            if (size <= 0)
            {
                return(null);
            }
            ConverterDesignData max = head;
            ConverterDesignData now = max.Next;

            while (now != null)
            {
                if (now.Efficiency > max.Efficiency)
                {
                    max = now;
                }
                now = now.Next;
            }
            return(max.Configs);
        }