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

📄 form1.cs

📁 一个使用免疫算法实现物流调度的源代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
            this.ltbOptimize.Items.Add("可调配的车辆数为:" + this.truckNum + "辆");
            this.ltbOptimize.Items.Add("需要的车辆数为:" + cycleNum + "辆");

            this.label5.Text = "【正在进行迭代计算,请稍后...    迭代次数:" + this.projectCmb.Text.ToString() + "】";
            this.label5.Update();

            MessageBox.Show("计算最佳路径成功!", "计算最佳路径成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.label5.Text = "【就绪】";
            this.label5.Update();
            this.btnSave.Enabled = true;
        }


        public void GetVariationCycle(ArrayList pathList, int vNum) //随机获取节点环,并且进行变异
        {        
            Array pathArray = pathList.ToArray();
            int cycleNum = 0;
            for (int i = 0; i < pathArray.Length; i++)//求出patharray中的环数,用cycleNum来表示;
            { 
               int cityFlag = ((ClassPathNode)pathArray.GetValue(i)).city.flag;
               if (cityFlag == 0 && i != pathArray.Length - 1)
               {
                   cycleNum += 1;
               }
            }       
                if (vNum >= cycleNum)
                {
                    vNum = cycleNum;
                }
                if (vNum == 0)
                {                 
                    return;
                }

            int k = this.GetRand(0,vNum);
            k = cycleNum - k;
            int k1= 0;
            for (int i = 0; i < pathArray.Length; i++)//记下从哪个环节点(节点下标)开始
            {
                if (((ClassPathNode)pathArray.GetValue(i)).city.flag == 0)
                {
                    k1 += 1;
                    if (k1 == k)
                    {
                        k1 = i;                               
                        break;
                    }
                }
            }

            for (int i = k1; i < pathArray.Length; i++)
            {
                pathList.RemoveAt(k1);//把所有k1后面的所有节点删掉

            }             
            pathArray = pathList.ToArray();//patharray中存放了消去一些节点后的值
            list = (ArrayList)listBack.Clone();
            array = list.ToArray();
            for (int i = 0; i < pathArray.Length; i++)//设置截取完后的节点的值为零。(设置array中的节点)
             {
                    Guid cityId = ((ClassPathNode)pathArray.GetValue(i)).city.cityId;
                    for (int j1 = 0; j1 < array.Length; j1++)
                    {
                        if (((Classcity)array.GetValue(j1)).cityId == cityId)
                        {
                            ((Classcity)array.GetValue(j1)).needWeight = ((Classcity)array.GetValue(j1)).needWeight - ((ClassPathNode)pathArray.GetValue(i)).loadValue;
                        }
                    }

              }

            setPathLength();//重新设定截取后的总路径长度
            Generate();//从新生成pathlist;
        }

        public void getCitysOrientValue()//获取初始化的城市配货值
        {
            listBack = Classcity.generateCitys(this.projectId);                 
        }

        public void  getCityLink()//根据当前的节点顺序取出所有节点的路径链接关系
        {
            ClassCityLink cityLink = new ClassCityLink();
             listAllLinks = cityLink.listCityLink(list,this.projectId);       
        }

        public bool isCityHasPath(int missionNum)
        {         
            bool hasPath = false;
            Guid nextMissionId = ((Classcity)array.GetValue(missionNum)).cityId;         
            ArrayList links = (ArrayList)listAllLinks[currentCity];
            for (int i = 1; i < links.Count; i++)
            {              
                if (((ClassNextCity)links[i]).nextCityid == nextMissionId)
                {
                    hasPath = true;
                    break;
                }
            }         
            return hasPath;

        }

        public int getPathLength(int missionNum)//获取城市间的路程
        {
           
            int linkLength=0;
            Guid nextMissionId = ((Classcity)array.GetValue(missionNum)).cityId;
            ArrayList links = (ArrayList)listAllLinks[currentCity];
            for (int i = 1; i < links.Count; i++)
            {
                if (((ClassNextCity)links[i]).nextCityid.ToString().Equals(nextMissionId.ToString()))
                {
                    linkLength=((ClassNextCity)links[i]).linkLength;
                }
            }
            return linkLength;
            
        }

        public int GetCurrentLinkCout()
        {
            ArrayList links = (ArrayList)listAllLinks[currentCity];
            return links.Count;
        }

        public int GetNextMissionNum()
        {
            int nextMissionNum = -1;
            ArrayList links = (ArrayList)listAllLinks[currentCity];
            int Next = GetMessionNum();
            Guid nextCityId = ((ClassNextCity)links[Next]).nextCityid;
            for (int i = 0; i < array.Length; i++)
            {
                if (((Classcity)array.GetValue(i)).cityId == nextCityId)
                {
                    nextMissionNum = i;
                    break; 
                }
            }
            return nextMissionNum;
        }

        public void setPathLength()//算出截取节点后的路径值
        {   
            this.pathlength=0;
            for (int i = 0; i < this.pathList.Count-1; i++)//在截取后的路径依次计算路径总长度
            {   
                Guid id =((ClassPathNode)this.pathList[i]).city.cityId;
                for(int j=0;j<listAllLinks.Count;j++)//在已经设定的路径中查找节点之间的路径
                {
                   ArrayList link = (ArrayList)listAllLinks[j];
                   Guid linkId=((ClassCityLink)link[0]).firstCityId;
                   if(id.Equals(linkId))
                   {
                     for(int k =1;k<link.Count;k++)
                     {
                         Guid nextId = ((ClassPathNode)this.pathList[i + 1]).city.cityId;
                         if (nextId.Equals(((ClassNextCity)link[k]).nextCityid))
                         {
                             this.pathlength = this.pathlength + ((ClassNextCity)link[k]).linkLength;
                         }                       
                     }
                   }
                }              
            }
        }

        private void button3_Click(object sender, EventArgs e)//把最佳路径存入数据库,shortestResult是最佳迭代结果
        {
            generatePath1TableAdapter pathTableAdapter = new generatePath1TableAdapter();
            wlddDataSet.generatePath1DataTable generatePath1Table = new wlddDataSet.generatePath1DataTable();
            //pathTableAdapter.DeleteQueryByProjectId(this.projectId);
            pathTableAdapter.DeleteQuery();
            pathTableAdapter.Fill(generatePath1Table);
            pathTableAdapter.Update(generatePath1Table);

            ArrayList shortList = shortestResult.list;
            for (int i = 0; i < shortList.Count; i++)//
            {
                wlddDataSet.generatePath1Row row = generatePath1Table.NewgeneratePath1Row();
                Classcity city = ((ClassPathNode)shortList[i]).city;
                row.projectId = this.projectId;
                row.missionOrder = i;
                row.missionsId = city.cityId;
                row.cityName = city.cityName;
                row.generateId = Guid.NewGuid();
                row.shortestpathLength = (int)(shortestResult.length);
                generatePath1Table.Rows.Add(row);
            }
            pathTableAdapter.Update(generatePath1Table);
            this.btnSave.Enabled = false;
            this.button2.Enabled = true;
            this.btnShowMap.Enabled = true;

            MessageBox.Show("最佳路径已成功保存至数据库!", "最佳路径保存成功!", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void button4_Click(object sender, EventArgs e)//在地图中显示最佳路径
        {
            generatePath1TableAdapter adapter = new generatePath1TableAdapter();
            wlddDataSet.generatePath1DataTable table = adapter.GetDataBy1(this.projectId);
            ArrayList listShortestPath = new ArrayList();  
            
            for (int i = 0; i < table.Rows.Count; i++)//从已经迭代的最佳路径表中取出路径来在map中显示
            { 
                for(int j=0;j<table.Rows.Count;j++)
                {
                    if (i == (int)(table.Rows[j]["missionOrder"]))
                    {
                        Classcity city = new Classcity();
                        city.cityId = (Guid)table.Rows[j]["missionsId"];
                        city.cityName = (string)(table.Rows[j]["cityName"]).ToString().Trim();
                        ClassPathNode cityNode = new ClassPathNode(city,0);
                        listShortestPath.Add(cityNode);
                        break;
                    }
                }             
            }
            for (int i = 0; i < listShortestPath.Count; i++)
            {
                System.Console.Out.WriteLine(((ClassPathNode)listShortestPath[i]).city.cityName+"cityName");
            }
            

            generateResult result = new generateResult();
            result.list = listShortestPath;
            result.length = double.Parse(table.Rows[0]["shortestPathLength"].ToString());

            FormShowMap showmap = new FormShowMap(result,this.projectId,this.projectName.Trim());
            showmap.Show();
        }

        private void projectCmb_SelectedIndexChanged(object sender, EventArgs e)
        {
            label4.Text = "【迭代次数:" + this.projectCmb.Text.ToString() + " 次】";
        }

        private void projectCmb_TextChanged(object sender, EventArgs e)
        {
            label4.Text = "【迭代次数:" + this.projectCmb.Text.ToString() + " 次】";
        }
    }
}

⌨️ 快捷键说明

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