多AGV调度两阶段算法模拟源码

  • A+
所属分类:AGV图纸程序
摘要

多AGV调度两阶段算法模拟

多AGV调度两阶段算法模拟源码

多AGV调度系统实现,代码包含5个AGV基于A*算法搜路,基于两阶段算法进行调度
多AGV调度两阶段算法模拟源码
主界面.cs:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Threading.Tasks;  
  9. using System.Windows.Forms;  
  10. using System.Threading;  
  11. using System.Timers;     
  12.   
  13. namespace AGVS  
  14. {  
  15.      
  16.   
  17.     public partial class 主界面 : Form  
  18.     {  
  19.         /// 定义单元格类  
  20.    
  21.         public class mybutton : Button  
  22.         {  
  23.             int x;  
  24.             int y;  
  25.             public int X  
  26.             {  
  27.                 set { x = value; }  
  28.                 get { return x; }  
  29.             }  
  30.   
  31.             public int Y  
  32.             {  
  33.                 set { y = value; }  
  34.                 get { return y; }  
  35.             }  
  36.   
  37.             private void InitializeComponent()  
  38.             {  
  39.                 this.SuspendLayout();  
  40.                 this.ResumeLayout(false);  
  41.   
  42.             }  
  43.   
  44.   
  45.         }  
  46.         /// <summary>  
  47.         /// 定义枚举变量  
  48.         /// </summary>  
  49.         enum mycc     
  50.         {  
  51.             wall,  
  52.             start,  
  53.             des  
  54.         }  
  55.   
  56.         byte[,] R = new byte[10, 10]   
  57.         {     
  58.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  59.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  60.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  61.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  62.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  63.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  64.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  65.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  66.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },    
  67.           { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }    
  68.               
  69.           };  
  70.   
  71.         mybutton[,] mybut = new mybutton[21, 11];  
  72.   
  73.         byte[,] myR = new byte[21, 11];/////////////建立我的地图  
  74.   
  75.   
  76.         MyPoint pa1 = new MyPoint();  
  77.         MyPoint pb1 = new MyPoint();  
  78.         MyPoint pa2 = new MyPoint();  
  79.         MyPoint pb2 = new MyPoint();  
  80.         MyPoint pa3 = new MyPoint();  
  81.         MyPoint pb3 = new MyPoint();  
  82.         MyPoint pa4 = new MyPoint();  
  83.         MyPoint pb4 = new MyPoint();  
  84.         MyPoint pa5 = new MyPoint();  
  85.         MyPoint pb5 = new MyPoint();  
  86.         MyPoint pa1_1 = new MyPoint();  
  87.         MyPoint pa2_2 = new MyPoint();  
  88.         MyPoint pa3_3 = new MyPoint();  
  89.         MyPoint pa4_4 = new MyPoint();  
  90.         MyPoint pa5_5 = new MyPoint();  
  91.         List<MyPoint> myp1 = new List<MyPoint>();  
  92.         List<MyPoint> myp2 = new List<MyPoint>();  
  93.         List<MyPoint> myp3 = new List<MyPoint>();  
  94.         List<MyPoint> myp4 = new List<MyPoint>();  
  95.         List<MyPoint> myp5 = new List<MyPoint>();  
  96.         int error1 = 0;   
  97.         int error2 = 0;   
  98.         int error3 = 0;  
  99.         int error4 = 0;  
  100.         int error5 = 0;  
  101.   
  102.    
  103.         public 主界面()  
  104.         {  
  105.             InitializeComponent();  
  106.         }  
  107.   
  108.         System.Timers.Timer aTimer = new System.Timers.Timer();//////实例化Timer类用于运行  
  109.   
  110.         /// <summary>  
  111.         /// 定时时间到需要执行的函数  
  112.         /// </summary>  
  113.         /// <param name="source"></param>  
  114.         /// <param name="e"></param>  
  115.         private void test1(object source, System.Timers.ElapsedEventArgs e)  
  116.         {  
  117.             foreach (MyPoint p in myp1)  
  118.             {  
  119.                 if (p.father == pa1_1)  
  120.                 {  
  121.                     if (myR[p.x, p.y] == 1)  
  122.                     {  
  123.                     mybut[p.x, p.y].BackColor = Color.Yellow;  
  124.                     myR[p.x, p.y] = 0;  
  125.                     myR[pa1_1.x, pa1_1.y] = 1;  
  126.                     if ((pa1_1.x == pb2.x && pa1_1.y == pb2.y) ||( pa1_1.x == pb3.x && pa1_1.y == pb3.y)  
  127.                         || (pa1_1.x == pb4.x && pa1_1.y == pb4.y)||(pa1_1.x == pb5.x && pa1_1.y == pb5.y))  
  128.                     {  
  129.                         mybut[pa1_1.x, pa1_1.y].BackColor = Color.Red;  
  130.                     }  
  131.                     else  
  132.                     {  
  133.                         mybut[pa1_1.x, pa1_1.y].BackColor = SystemColors.Control;  
  134.                         mybut[pa1_1.x, pa1_1.y].UseVisualStyleBackColor = true;  
  135.                     }  
  136.                     pa1_1 = p;  
  137.                     }  
  138.                     else  
  139.                         error1++;  
  140.                 }  
  141.   
  142.             }  
  143.             foreach (MyPoint p in myp2)  
  144.             {  
  145.                 if (p.father == pa2_2)  
  146.                 {  
  147.                     if (myR[p.x, p.y] == 1)  
  148.                     {  
  149.                     mybut[p.x, p.y].BackColor = Color.Yellow;  
  150.                     myR[p.x, p.y] = 0;  
  151.                     myR[pa2_2.x, pa2_2.y] = 1;  
  152.                     if ((pa2_2.x == pb1.x && pa2_2.y == pb1.y) || (pa2_2.x == pb3.x && pa2_2.y == pb3.y)  
  153.                           || (pa2_2.x == pb4.x && pa2_2.y == pb4.y) || (pa2_2.x == pb5.x && pa2_2.y == pb5.y))  
  154.                     {  
  155.                         mybut[pa2_2.x, pa2_2.y].BackColor = Color.Red;  
  156.                     }  
  157.                     else  
  158.                     {  
  159.                         mybut[pa2_2.x, pa2_2.y].BackColor = SystemColors.Control;  
  160.                         mybut[pa2_2.x, pa2_2.y].UseVisualStyleBackColor = true;  
  161.                     }  
  162.                         pa2_2 = p;  
  163.                     }  
  164.                     else  
  165.                         error2++;  
  166.                 }  
  167.             }  
  168.             foreach (MyPoint p in myp3)  
  169.             {  
  170.                 if (p.father == pa3_3)  
  171.                 {  
  172.                     if (myR[p.x, p.y] == 1)  
  173.                     {  
  174.                         mybut[p.x, p.y].BackColor = Color.Yellow;  
  175.                         myR[p.x, p.y] = 0;  
  176.                         myR[pa3_3.x, pa3_3.y] = 1;  
  177.                         if ((pa3_3.x == pb1.x && pa3_3.y == pb1.y) || (pa3_3.x == pb2.x && pa3_3.y == pb2.y)  
  178.                               || (pa3_3.x == pb4.x && pa3_3.y == pb4.y) || (pa3_3.x == pb5.x && pa3_3.y == pb5.y))  
  179.                         {  
  180.                             mybut[pa3_3.x, pa3_3.y].BackColor = Color.Red;  
  181.                         }  
  182.                         else  
  183.                         {  
  184.                             mybut[pa3_3.x, pa3_3.y].BackColor = SystemColors.Control;  
  185.                             mybut[pa3_3.x, pa3_3.y].UseVisualStyleBackColor = true;  
  186.                         }  
  187.                         pa3_3 = p;  
  188.                     }  
  189.                     else  
  190.                         error3++;  
  191.                 }  
  192.             }  
  193.             foreach (MyPoint p in myp4)  
  194.             {  
  195.                 if (p.father == pa4_4)  
  196.                 {  
  197.                     if (myR[p.x, p.y] == 1)  
  198.                     {  
  199.                     mybut[p.x, p.y].BackColor = Color.Yellow;  
  200.                     myR[p.x, p.y] = 0;  
  201.                     myR[pa4_4.x, pa4_4.y] = 1;  
  202.                         if ((pa4_4.x == pb1.x && pa4_4.y == pb1.y) || (pa4_4.x == pb2.x && pa4_4.y == pb2.y)  
  203.                          || (pa4_4.x == pb3.x && pa4_4.y == pb3.y) || (pa4_4.x == pb5.x && pa4_4.y == pb5.y))  
  204.                         {  
  205.                             mybut[pa4_4.x, pa4_4.y].BackColor = Color.Red;  
  206.                         }  
  207.                         else  
  208.                         {  
  209.                           mybut[pa4_4.x, pa4_4.y].BackColor = SystemColors.Control;  
  210.                           mybut[pa4_4.x, pa4_4.y].UseVisualStyleBackColor = true;  
  211.                         }  
  212.                     pa4_4 = p;  
  213.                     }  
  214.                     else  
  215.                         error4++;  
  216.                 }  
  217.             }  
  218.             foreach (MyPoint p in myp5)  
  219.             {  
  220.                 if (p.father == pa5_5)  
  221.                 {  
  222.                     if (myR[p.x, p.y] == 1)  
  223.                     {  
  224.                     mybut[p.x, p.y].BackColor = Color.Yellow;  
  225.                     myR[p.x, p.y] = 0;  
  226.                     myR[pa5_5.x, pa5_5.y] = 1;  
  227.                         if ((pa5_5.x == pb1.x && pa5_5.y == pb1.y) || (pa5_5.x == pb2.x && pa5_5.y == pb2.y)  
  228.                         || (pa5_5.x == pb3.x && pa5_5.y == pb3.y) || (pa5_5.x == pb4.x && pa5_5.y == pb4.y))  
  229.                         {  
  230.                             mybut[pa5_5.x, pa5_5.y].BackColor = Color.Red;  
  231.                         }      
  232.                         else  
  233.                         {  
  234.                         mybut[pa5_5.x, pa5_5.y].BackColor = SystemColors.Control;  
  235.                         mybut[pa5_5.x, pa5_5.y].UseVisualStyleBackColor = true;  
  236.                         }  
  237.                     pa5_5 = p;  
  238.                     }  
  239.                     else  
  240.                         error5++;   
  241.                 }  
  242.             }  
  243.             if (error1 > 2)  
  244.             {  
  245.                 error1 = 0;  
  246.                 AxingTest axx = new AxingTest(myR);  
  247.                 myR[pa1_1.x, pa1_1.y] = 0;  
  248.                 myp1.Clear();  
  249.                 myp1 = axx.FindeWay(pa1_1, pb1);  
  250.             }  
  251.              
  252.   
  253.         }  
  254.         //判断开始列表是否包含某个坐标的点  
  255.   
  256.    
  257.         public void SetaTimerParam()  
  258.         {  
  259.             //到时间的时候执行事件    
  260.             aTimer.Elapsed += new ElapsedEventHandler(test1);  
  261.             aTimer.Interval = 1000;  
  262.             aTimer.AutoReset = true;//执行一次 false,一直执行true    
  263.             //是否执行System.Timers.Timer.Elapsed事件    
  264.             aTimer.Enabled = true;  
  265.         }  
  266.         private void 退出ToolStripMenuItem1_Click(object sender, EventArgs e)  
  267.         {  
  268.             this.Close();  
  269.         }  
  270.   
  271.   
  272.   
  273.         private void 主界面_Load(object sender, EventArgs e)  
  274.         {  
  275.              
  276. ////////////////////////////   
  277. //////////////////////////////场景地图建模  
  278.             for (int i = 0; i < 21; i++)  
  279.             {  
  280.                 for (int j = 0; j < 11; j++)  
  281.                 {  
  282.                     mybut[i, j] = new mybutton();  
  283.                     mybut[i, j].X= i;  
  284.                     mybut[i, j].Y = j;  
  285.                     mybut[i, j].Size = new Size(40, 40);  
  286.                     mybut[i, j].Location = new Point(450+i * 40, 100+j * 40); ////////定位起点450 100  
  287.                     this.Controls.Add(mybut[i, j]);  
  288.                     myR[i, j] = 1;                                          //////表示当前单元格空闲  
  289.                     mybut[i, j].MouseDown += 主界面_MouseDown;  
  290.   
  291.                 }  
  292.             }   
  293.         }  
  294.         void init()  
  295.         {  
  296.             for (int i = 0; i < 21; i++)  
  297.             {  
  298.                 for (int j = 0; j < 11; j++)  
  299.                 {  
  300.                     myR[i, j] = 1;  
  301.                     mybut[i, j].BackColor = Color.Transparent;  
  302.                 }  
  303.             }  
  304.             aTimer.Enabled = false;  
  305.         }  
  306.         void 主界面_MouseDown(object sender, MouseEventArgs e)  
  307.         {  
  308.             mybutton myb = (mybutton)sender;  
  309.             int x = myb.X;  
  310.             int y = myb.Y;  
  311.         }  
  312.             
  313.         private void 生成地图ToolStripMenuItem_Click(object sender, EventArgs e)  
  314.         {  
  315.             AxingTest ax = new AxingTest(myR);  
  316.    
  317.             pa1.x = 5; pa1.y = 0;  
  318.             pb1.x = 5; pb1.y = 8;  
  319.             pa2.x = 5; pa2.y = 9;  
  320.             pb2.x = 5; pb2.y = 1;  
  321.             pa3.x = 2; pa3.y = 0;  
  322.             pb3.x = 14; pb3.y = 7;  
  323.             pa4.x = 0; pa4.y = 0;  
  324.             pb4.x = 15; pb4.y = 5;  
  325.             pa5.x = 4; pa5.y = 1;  
  326.             pb5.x = 8; pb5.y = 4;  
  327.             pa1_1 = pa1;  
  328.             pa2_2 = pa2;  
  329.             pa3_3 = pa3;  
  330.             pa4_4 = pa4;  
  331.             pa5_5 = pa5;  
  332.   
  333.   
  334.             mybut[pa1.x, pa1.y].BackColor = Color.Green;  
  335.             mybut[pb1.x, pb1.y].BackColor = Color.Red;            
  336.             mybut[pa2.x, pa2.y].BackColor = Color.Green;  
  337.             mybut[pb2.x, pb2.y].BackColor = Color.Red;  
  338.             mybut[pa3.x, pa3.y].BackColor = Color.Green;  
  339.             mybut[pb3.x, pb3.y].BackColor = Color.Red;  
  340.             mybut[pa4.x, pa4.y].BackColor = Color.Green;  
  341.             mybut[pb4.x, pb4.y].BackColor = Color.Red;  
  342.             mybut[pa5.x, pa5.y].BackColor = Color.Green;  
  343.             mybut[pb5.x, pb5.y].BackColor = Color.Red;  
  344.   
  345.             myp1 = ax.FindeWay(pa1, pb1);  
  346.             myp2 = ax.FindeWay(pa2, pb2);  
  347.             myp3 = ax.FindeWay(pa3, pb3);  
  348.             myp4 = ax.FindeWay(pa4, pb4);  
  349.             myp5 = ax.FindeWay(pa5, pb5);  
  350.   
  351.              
  352.          }  
  353.   
  354.         //private void 障碍点ToolStripMenuItem_Click(object sender, EventArgs e)  
  355.         //{  
  356.         //    mychoose = mycc.wall;  
  357.         //}  
  358.   
  359.   
  360.         private void 开始ToolStripMenuItem_Click(object sender, EventArgs e)  
  361.         {  
  362.             this.SetaTimerParam();  
  363.         }  
  364.   
  365.         private void 初始化ToolStripMenuItem_Click(object sender, EventArgs e)  
  366.         {  
  367.            init();  
  368.         }  
  369.   
  370.         private void 暂停ToolStripMenuItem_Click(object sender, EventArgs e)  
  371.         {  
  372.             aTimer.Enabled = false;  
  373.         }  
  374.     }  
  375. }  
抱歉,此资源仅限赞助会员下载,请先
注意:本站资源多为网络收集,如涉及版权问题请及时与站长联系QQ:2766242327,我们会在第一时间内与您协商解决。如非特殊说明,本站所有资源解压密码均为:agvba.com。
weinxin
微信公众号
agvba是一个分享AGV知识和agv案例视频的网站。

发表评论

您必须才能发表评论!