2、问题二的模型:
1、模型主要是通过程序实现,所以,如果能够把程序进行可视化,可以使的模型更具体、直观。
2、同模型一样,时间段的衔接不够准确。所以在模型二的改进中,同样是寻找一个可以融进程序的衔接函数。是的优化结果各加准确合理。
3、问题三的模型:
1、同模型二的改进,寻找一个使用可以融入程序的衔接函数。
八、模型的推广
问题一的模型:
本模型,除了可以解决公交车的班次数确定、车辆数确定、班次的稳定性分析等问题外。同样可以解决,类似的运行过程中,运行时间不确定、缺乏数据,无法得到时间函数的优化问题。类似于“等电梯的时间”问题,“自行车车数确定,站点数确定,以及调度”问题。都可以通过计算机仿真以及迭代模型得出详细的结果,对一些参量进行优化。
问题二的模型:
本模型,通过对模型中的对象设置动态属性的方法,对公交车司机工作时间进行详细、直观的确定。模型同样可以用来对其他以疲劳度、工作时间等多个约束条件下的工人排班问题,如护士的NPA排班问题、空乘人员的排班问题等。
问题三的模型:
本模型,是在模型二的基础上,增加了休假这一约束条件的排班问题,在完成一周的排班的同时,给出了一周所需要的最低人数。模型可以解决公司排班的同时,确定所需的最低人数,降低公司的工资成本。便于解决类似,工厂招募临时工的人数确定,工作时间安排、学校按周安排学生上课教室的动态优化模型。
九、参考文献
[1] 姜启源.数学模型(第三版)[M].出版地:北京 出版社:高教 出版年:2003 [2] 刘安业. 一种城市公交车发车频率的优化模型[J].黑龙江交通科技,卷期号:
总第197期 起止页码:189-192
[3] 覃运梅. 城市公交调度优化方法研究[J].合肥工业大学硕士论文, 起止页码:6—24
[4] 付阿利. 粒子群优化算法在公交车智能调度中的应用[J].计算机工程与应用,卷期号:2008 4(15) 起止页码:239-241
[5] 孙文霞. 公交调度中发车间隔控制研究[J].合肥工业大学学报,卷期号:36卷第2期起止页码:89-93
[6] 唐焕文.实用最优算法(第三版)[M].出版地:大连 出版社:大连理工大学出版社,出版年:2004
十、附录
附录一: 问题1: function [q,K,kk]=shijian(t1,t2,x,a1,tt,N1,N2)%运行时间中间,半个时间差,总时间,车辆数
%K=zeros(1000,1000); for u=1:1000
t=normrnd(x,a1/4,200,1);%产生符合真态分布的运行时间
at=normrnd(0,2*a1/4,200,200);%产生两辆车的相差时间正态分布 for i=t1:0.1:t2 %下限时间阀值
k=fix(10*i-t1*10+1); %使得时间变量整数话,用于矩阵的读取与写入 n=N1;%车的数量初始化
T(k,1:n+200)=i; %前车数减一时间短为下限时间i T(k,n)=t(k)-(n-1)*i; %第车数个时间间隔
if T(k,n)<=i %时间挑选,如果小于时间i就用时间i替代,如果大于10则循环终止
T(k,n)=T(k,1);
elseif T(k,n)>t2 continue; end
suma=t(k); %前车辆数个时间段的时间总和 j=n;
while suma<=tt s=1;
while t(k)>0
t(k-n+j)=t(k-n+j)-T(k,s+j-n);%对在运行车的数量进行确定
s=s+1; end
if s T(k,j+1)=T(k,1); else T(k,j+1)=T(k,j)+at(k,j);%迭代 if T(k,j+1)<=i %判断时间,时间挑选,如果小于时间i就用时间i替代,如果大于10,则循环终止 T(k,j+1)=T(k,1); elseif T(k,j+1)>t2 break; end end suma=suma+T(k,j+1);%时间累加 j=j+1; end K(u,k)=j+1; Sum(k)=suma; end end p=var(K); for t=1:100 [m,k]=min(p); s=K(:,k)'; q=median(s); if q==0 p(k)=inf; else break; end end kk=t1+(k-1)/10; 问题二: %每一次的排班选择函数 %第三行疲劳度初始化 chushihua2 %定义决策矩阵,决策变量 d(1,1)=0;d1(1,1)=0;d2(1,1)=0;d3(1,1)=0;d4(1,1)=0; j=1;k=1;m=1;o=1; %排除可选条件与疲劳度 for i=1:NSJ if P(2,i)==1&P(3,i)==0 d(1,j)=P(1,i); d(2,j)=P(3,i); d(3,j)=P(4,i); d(4,j)=P(5,i); j=j+1; end end for i=1:NSJ if P(2,i)==1&P(3,i)~=0&P(3,i)+LCT<=240 d(1,j)=P(1,i); d(2,j)=P(3,i); d(3,j)=P(4,i); d(4,j)=P(5,i); j=j+1; end end if d(1,1)==0 error('error in <=4h !') end %排除工作量 for i=1:j-1 if d(3,i)+LCT<=480 d1(1,k)=d(1,i); d1(2,k)=d(3,i); d1(3,k)=d(4,i); k=k+1; end end if d1(1,1)==0 error('error in <=8h !') end %对班次进行冒泡排序 for i=1:k-2 for l=i+1:k-1 if d1(3,i)>d1(3,l) d2(1,1)=d1(1,i); d2(2,1)=d1(2,i); d2(3,1)=d1(3,i); d1(1,i)=d1(1,l); d1(2,i)=d1(2,l); d1(3,i)=d1(3,l); d1(1,l)=d2(1,1); d1(2,l)=d2(2,1); d1(3,l)=d2(3,1); end end end %选取已经完成相同的班次的司机 d3(1,1)=d1(1,1); d3(2,1)=d1(2,1); d3(3,1)=d1(3,1); for i=1:k-1 if d3(3,1)==d1(3,i) m=m+1; end end for i=1:m-1 d3(1,i)=d1(1,i); d3(2,i)=d1(2,i); d3(3,i)=d1(3,i); end %对工作量进行冒泡排序 for i=1:m-2 for l=i+1:m-1 if d3(2,i)>d3(2,l) d2(1,1)=d3(1,i); d2(2,1)=d3(2,i); d2(3,1)=d3(3,i); d3(1,i)=d3(1,l); d3(2,i)=d3(2,l); d3(3,i)=d3(3,l); d3(1,l)=d2(1,1); d3(2,l)=d2(2,1); d3(3,l)=d2(3,1);