您的位置:首页 > 其它

电梯调度问题《三》

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



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

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空件来实现四部电梯能同时运行,并且互不影响。然后在设计算法,实现电梯的综合调度,离乘客最近的电梯先响应。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: