⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 一个使用免疫算法实现物流调度的源代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
                {                                                                          
                    calculateNodeValue(messionNum);
                    this.currentCity = messionNum;                 
                    messionNum = GetNextMissionNum();               
                }             
                for (int i = 0; i < array.Length; i++)//检查是不是所有的任务点都送完货了
                {
                    FinishFlag=true;
                    if (((Classcity)array.GetValue(i)).needWeight != 0.0)
                    {                  
                        FinishFlag = false;                      
                        break;
                    }                     
                }

                if (FinishFlag == true)
                {
                    calculateNodeValue(messionNum);
                }               
            }
        }
     
        private void button1_Click_1(object sender, EventArgs e)//显示最佳路径
        {
           generateResult result= selectAntigen();
           ArrayList resultList = result.list;
           Array arrayResult = resultList.ToArray();          
           float  x1=0.0f, y1=0.0f, x2=0.0f, y2=0.0f;
           for (int i = 0; i < arrayResult.Length-1; i++)
           {
               x1 = ((Node)arrayResult.GetValue(i)).x;
               y1 = ((Node)arrayResult.GetValue(i)).y;
               x2 = ((Node)arrayResult.GetValue(i+1)).x;
               y2 = ((Node)arrayResult.GetValue(i+1)).y;
               g.DrawLine(Pens.White, x1 * 5 + 10, y1 * 5 + 10, x2 * 5 + 10, y2 * 5 + 10);
           }        
        }

        private void button2_Click(object sender, EventArgs e)//下一代迭代之后的最佳路径显示
        {
            this.button2.Enabled=false;
            this.btnShowMap.Enabled = false;
            int C_S = Convert.ToInt32(this.projectCmb.Text.ToString().Trim());
            ltbShowPath.Items.Clear();
            ltbShowPath.Update();
            ltbOptimize.Items.Clear();
            ltbOptimize.Update();
            for (int generateNum = 0; generateNum < C_S; generateNum++)//进行多次迭代
            {
                this.label5.Text = "【正在进行迭代计算,请稍候...    迭代次数:" + Convert.ToString(generateNum) + "】";
                this.label5.Update();
                this.nextGenerateList = new ArrayList();//存储变异后的下一代抗体*(100)
                generateResult resultNoUse = selectAntigen();//对generateList按照length进行一次排序
                Array arrayGenerate = generateList.ToArray();//存储一代抗体*(100)                         
                ArrayList nextGenerate = new ArrayList();//用来存取克隆后的值,选取前20个来克隆,克隆方法为第一个克隆数不变,

                ltbShowPath.Update();
                for (int i = 0; i < 20; i++)
                {
                    generateResult result = (generateResult)arrayGenerate.GetValue(i);
                    if (i < 3)
                    {
                        for (int j = 0; j < 2; j++)
                        {
                            generateResult GenerateResult1to6 = new generateResult();
                            GenerateResult1to6.list = (ArrayList)result.list.Clone();
                            GenerateResult1to6.length = result.length;
                            nextGenerate.Add(GenerateResult1to6);
                        }
                    }
                    else if (i < 6)
                    {
                        for (int j = 0; j < 3; j++)
                        {
                            generateResult GenerateResult1to6 = new generateResult();
                            GenerateResult1to6.list = (ArrayList)result.list.Clone();
                            GenerateResult1to6.length = result.length;
                            nextGenerate.Add(GenerateResult1to6);
                        }
                    }
                    else if (i < 9)
                    {
                        for (int j = 0; j < 4; j++)
                        {
                            generateResult GenerateResult1to6 = new generateResult();
                            GenerateResult1to6.list = (ArrayList)result.list.Clone();
                            GenerateResult1to6.length = result.length;
                            nextGenerate.Add(GenerateResult1to6);
                        }
                    }
                    else if (i < 12)
                    {
                        for (int j = 0; j < 5; j++)
                        {
                            generateResult GenerateResult1to6 = new generateResult();
                            GenerateResult1to6.list = (ArrayList)result.list.Clone();
                            GenerateResult1to6.length = result.length;
                            nextGenerate.Add(GenerateResult1to6);
                        }
                    }
                    else if (i < 15)
                    {
                        for (int j = 0; j < 6; j++)
                        {
                            generateResult GenerateResult1to6 = new generateResult();
                            GenerateResult1to6.list = (ArrayList)result.list.Clone();
                            GenerateResult1to6.length = result.length;
                            nextGenerate.Add(GenerateResult1to6);
                        }
                    }
                    else
                    {
                        for (int j = 0; j < 7; j++)
                        {
                            generateResult GenerateResult1to6 = new generateResult();
                            GenerateResult1to6.list = (ArrayList)result.list.Clone();
                            GenerateResult1to6.length = result.length;
                            nextGenerate.Add(GenerateResult1to6);
                        }
                    }
                }      
                //克隆完成//////////////////////////////////////////////////////////////
                   
            Array nextGenerateArray = nextGenerate.ToArray();//取得克隆后的值
            generateResult resultNode0 = (generateResult)nextGenerateArray.GetValue(0);           
            nextGenerateList.Add(resultNode0);//为了保持克隆后的最优解,第一个克隆后的值直接存入下一代抗体
                                             //nextGenerateList用来存储变异后的抗体;
            for (int i = 1; i < nextGenerateArray.Length; i++)   //由克隆后的抗体生成下一代抗体集合
                {                  
                    generateResult result1 = (generateResult)nextGenerateArray.GetValue(i);
                    this.pathList = result1.list;
                    int vNum = 0;
                    if (i < 10)
                    {
                        vNum = (i + 1);//vnum的值是变异的概率大小,越靠后越变化大
                    }
                    else if (i < 20)
                    {
                        vNum = (i / 2 + 10);
                    }
                    else if (i < 50)
                    {
                        vNum = (i / 3 + 20);
                    }
                    else
                    {
                        vNum = i;
                    }
                    GetVariationCycle(this.pathList, vNum);//进行一次变异,产生新的抗体放在pathlist中
                    result1.length = this.pathlength;
                    result1.list = this.pathList;
                    nextGenerateList.Add(result1);
                   
            }
                arrayGenerate = this.generateList.ToArray();
                this.generateList = nextGenerateList;
                this.shortestResult = selectAntigen();//对generateList按照length进行一次排序            
                string pathLengthlink="";
                ArrayList resultListjj = shortestResult.list;
                if (generateNum < 100)
                {
                    if (generateNum % 10 == 0)//每隔十次显示一次路径结果
                    {

                        pathLengthlink = pathLengthlink + "第" + (generateNum + 1) + "次迭代:  总代价为:" + shortestResult.length + "\n";
                        for (int i = 0; i < resultListjj.Count - 1; i++)
                        {
                            pathLengthlink += ((ClassPathNode)resultListjj[i]).city.cityName.Trim() + "--->";                          
                        }

                        pathLengthlink += ((ClassPathNode)resultListjj[resultListjj.Count - 1]).city.cityName;
                        this.ltbShowPath.Items.Add(pathLengthlink);
                    }
                }

                else if (generateNum < 1000)
                {
                    if (generateNum % 100 == 0)//显示最后一次路径结果
                    {
                        pathLengthlink = pathLengthlink + "第" + (generateNum + 1) + "次迭代:  总代价为:" + shortestResult.length + "\n";
                        for (int i = 0; i < resultListjj.Count - 1; i++)
                        {
                            pathLengthlink += ((ClassPathNode)resultListjj[i]).city.cityName + "--->";
                            if (i % 3 == 0)
                            {
                                pathLengthlink += "\n";
                            }                           
                        }

                        pathLengthlink += ((ClassPathNode)resultListjj[resultListjj.Count - 1]).city.cityName;
                        this.ltbShowPath.Items.Add(pathLengthlink);
                    }
                }
                else
                {
                    if ((generateNum+1) % 1000 == 0)//显示最后一次路径结果
                    {
                        pathLengthlink = pathLengthlink + "第" + (generateNum + 1) + "次迭代:  总代价为:" + shortestResult.length + "\n";
                        for (int i = 0; i < resultListjj.Count - 1; i++)
                        {
                            pathLengthlink += ((ClassPathNode)resultListjj[i]).city.cityName + "--->";
                            if (i % 3 == 0)
                            {
                                pathLengthlink += "\n";
                            }
                        }

                        pathLengthlink += ((ClassPathNode)resultListjj[resultListjj.Count - 1]).city.cityName;
                        this.ltbShowPath.Items.Add(pathLengthlink);
                    }
                
                }
            }
            int cycleNum = 0;//查看车辆使用的情况数;
            this.ltbOptimize.Items.Add("车辆行驶路径在下面显示:");
            string pathLink = "";
            int isCycleEnd= -1;
            for (int i = 0; i < this.shortestResult.list.Count - 1; i++)
            {
                ClassPathNode pathNode = (ClassPathNode)(shortestResult.list[i]);
                if (pathNode.city.flag == 0)
                {
                    cycleNum += 1;
                }
            }
            for (int i = 0; i < this.shortestResult.list.Count; i++)
            {
                ClassPathNode pathNode =(ClassPathNode)(shortestResult.list[i]);               
                if (pathNode.city.flag == 0)
                {
                    pathLink += ((ClassPathNode)(shortestResult.list[i])).city.cityName;
                    if (isCycleEnd==1)
                    {
                        i--;
                        this.ltbOptimize.Items.Add(pathLink);
                        pathLink = "";
                    } 
                    isCycleEnd = -isCycleEnd;
                }
                else
                {
                    pathLink += ((ClassPathNode)(shortestResult.list[i])).city.cityName.Trim()+" \n";
                    pathLink += "卸载量:"+((ClassPathNode)(shortestResult.list[i])).loadValue+"   ";
                }
            }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -