电梯调度问题《三》

我们小组《杨世超  李夏蕾》已经基本实现了当初设计的电梯调度算法,电梯运行如下图:

我们设计的电梯没弄限重和限制人数,我们实现了四部电梯的调度,核心代码如下:

   private void diaodu(int[] a)
        {
            int i, j, x, y, q = 1, L, sub, small=30;
            int[] d=new int[5]; 
                           
                
                    
                          y = this.label1.Location.Y;
                          for (j = 0; j < 21; j++)
                          {
                              if (((y - b[j]) < 5&&(y - b[j])>=0) || ((y - b[j]) > -5&&(y - b[j])<0) )
                              {  d[1] = j; break; }
                         
                          }
                          y = this.label3.Location.Y;
                       //   Console.WriteLine(y);
                          for (j = 0; j < 21; j++)
                          {
                              if (((y - b[j]) < 5 && (y - b[j]) >=0) || ((y - b[j]) > -5 && (y - b[j]) < 0))
                              {  d[2] = j; break; }
                              
                          }
                      
                          y = this.label4.Location.Y;
                          for (j = 0; j < 21; j++)
                          {
                              if (((y - b[j]) < 5 && (y - b[j]) >= 0) || ((y - b[j]) > -5 && (y - b[j]) < 0))
                              { d[3] = j; break; }
                          }
                          y = this.label5.Location.Y;
                          //  Console.WriteLine(y);
                          for (j = 0; j < 21; j++)
                          {
                              if (((y - b[j]) < 5 && (y - b[j]) >= 0) || ((y - b[j]) > -5 && (y - b[j]) < 0))
                              { d[4]= j; break; }
                          }


                          L = 1;
               //选择最佳电梯. 
                        /*  flag =d[1]; L = 1;
                          if (d[1] - a[0] >=0)
                          { small = d[1] - a[0]; }
                          else
                          { small = a[0] - d[1]; }
                         */
                          for (i = 1; i < 5; i++)
                          {
                              if (d[i] - a[0] >=0)
                              { sub = d[i] - a[0]; }
                              else
                              {sub= a[0] - d[i]; }

                               if (small >sub)
                               { small = sub; flag = d[i]; L = i; }
                          }

              

                          if (L==1)
                          {
                              c1[k1++]=a[0];

                              for (i = 0; i < k1 - 1; i++) //排序
                              {
                                  for (j = 0; j < k1 - 1 - i; j++)
                                  {
                                      if (c1[j] > c1[j + 1])
                                      { x = c1[j]; c1[j] = c1[j + 1]; c1[j + 1] = x; }
                                  }
                              }         

                              
                              this.timer1.Interval = 1000;
                              this.timer1.Enabled = true; 
                          }
                          if (L == 2)
                          {
                              c2[k2++] = a[0];

                              for (i = 0; i < k1 - 1; i++) //排序
                              {
                                  for (j = 0; j < k1 - 1 - i; j++)
                                  {
                                      if (c2[j] > c2[j + 1])
                                      { x = c2[j]; c2[j] = c2[j + 1]; c2[j + 1] = x; }
                                  }
                              }         
                              this.timer2.Interval = 1000;
                              this.timer2.Enabled = true;
                          }
                          if (L == 3)
                          {
                              dianti3 = flag;
                              th3 = a[0];
                              if (th3>= dianti3)
                              { k3 = th3 - dianti3; }
                              else
                              { k3 = dianti3 - th3; }
                              this.timer3.Interval = 1000;
                              this.timer3.Enabled = true;
                          }
                          if (L == 4)
                          {
                              dianti4 = flag;
                              th4 = a[0];
                              if (th4 >= dianti4)
                              { k4 = th4 - dianti4; }
                              else
                              { k4 = dianti4 - th4; }
                              this.timer4.Interval = 1000;
                              this.timer4.Enabled = true;
                          }
              
          }
  public void start1()
          {
              this.timer1.Interval = 1000;
              int i=0,j,y,dceng=0, step = 21;
              y = this.label1.Location.Y;
              for (j = 0; j < 21; j++)
              {
                  if (((y - b[j]) < 5 && (y - b[j]) >= 0) || ((y - b[j]) > -5 && (y - b[j]) < 0))
                  { dceng= j; break; }
              }
             
              if (dceng!= c1[k11])
              {
                  
                  this.label1.Location = new Point(this.label1.Location.X, this.label1.Location.Y - step);
              }
              else
              {
                  k11++; this.timer1.Interval = 3000;
                  if (k11 == k1)
                  { k11 = 0; k1 = 0; this.timer1.Enabled = false; }
              
              }
                   

          }
                  

  通过这几周的努力,最终实现了电梯的基本功能。在这几周中感觉收获很多,专业知识又提升了一些。其中遇到的难点是,怎样实现四部电梯的调度,经过搜索资料,我们组用timer空件来实现四部电梯能同时运行,并且互不影响。然后在设计算法,实现电梯的综合调度,离乘客最近的电梯先响应。

posted @ 2014-03-21 15:34  超369  阅读(258)  评论(2编辑  收藏  举报