Ejemplo n.º 1
0
 /// <summary>
 /// 将当前设计方案集合与另一设计方案集合组合成新的设计方案集合,并更新当前设计方案集合
 /// </summary>
 /// <param name="designList">另一个设计方案集合</param>
 public void Combine(ComponentDesignList designList)
 {
     if (head == null)
     {
         head = designList.head;
         size = designList.size;
     }
     else
     {
         ComponentDesignList newList = new ComponentDesignList()
         {
             IsAll = IsAll
         };
         ComponentDesignData p = head;
         while (p != null)
         {
             ComponentDesignData 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.PowerLoss + q.PowerLoss, p.Volume + q.Volume, p.Cost + q.Cost, configs);
                 q = q.Next;
             }
             p = p.Next;
         }
         head = newList.head;
         size = newList.size;
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 自动设计,整合设计结果(不会覆盖之前的设计结果)
        /// </summary>
        public void Design(MainForm form)
        {
            Topology.Prepare();
            foreach (Component component in Topology.Components)
            {
                component.Design();
                //若没有设计结果,则设计失败
                if (component.DesignList.Size == 0)
                {
                    if (component.Name != null)
                    {
                        form.PrintDetails(1, component.Name + "设计失败!");
                    }
                    else
                    {
                        form.PrintDetails(1, component.GetType().Name + "设计失败!");
                    }
                }
            }

            for (int i = 0; i < Topology.ComponentGroups.Length; i++) //用于记录当前元器件组合的序号
            {
                Component[] components = Topology.ComponentGroups[i];
                //设计结果检查
                bool check = true;
                foreach (Component component in components)
                {
                    if (component.DesignList.Size == 0)
                    {
                        check = false;
                        break;
                    }
                }
                if (!check)
                {
                    continue;
                }

                //组合并记录
                ComponentDesignList designCombinationList = new ComponentDesignList()
                {
                    IsAll = !Configuration.IS_COMPONENT_PARETO
                };
                foreach (Component component in components) //组合各个器件的设计方案
                {
                    if (component.GetType().BaseType.Name.Equals("Semiconductor"))
                    {
                        designCombinationList.Combine(component.DesignList);
                        //Console.WriteLine(component.Name);
                        //IComponentDesignData[] data = component.DesignList.GetData();
                        //foreach(IComponentDesignData design in data)
                        //{
                        //    Console.Write(design.PowerLoss + " ");
                        //    Console.Write(design.Cost + " ");
                        //    Console.Write(design.Volume + ", ");
                        //    foreach (string config in design.Configs)
                        //    {
                        //        Console.Write(config + " ");
                        //    }
                        //    Console.WriteLine();
                        //}
                    }
                }
                designCombinationList.DesignAuxComponent();
                foreach (Component component in components) //组合各个器件的设计方案
                {
                    if (!component.GetType().BaseType.Name.Equals("Semiconductor"))
                    {
                        designCombinationList.Combine(component.DesignList);
                        //Console.WriteLine(component.Name);
                        //IComponentDesignData[] data = component.DesignList.GetData();
                        //foreach (IComponentDesignData design in data)
                        //{
                        //    Console.Write(design.PowerLoss + " ");
                        //    Console.Write(design.Cost + " ");
                        //    Console.Write(design.Volume + ", ");
                        //    foreach (string config in design.Configs)
                        //    {
                        //        Console.Write(config + " ");
                        //    }
                        //    Console.WriteLine();
                        //}
                    }
                }
                //TODO 控制芯片、散热器设计
                ConverterDesignList newDesignList = new ConverterDesignList()
                {
                    IsAll = !Configuration.IS_COMPONENT_PARETO
                };
                newDesignList.Transfer(designCombinationList, Math_Psys, Number, PhaseNum, i, GetConfigs()); //转化为变换器设计
                ParetoDesignList.Merge(newDesignList);                                                       //记录Pareto最优设计
                AllDesignList.Merge(newDesignList);                                                          //记录所有设计
            }
        }