乘用车物流运输计划问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
乘用车物流运输计划问题
介于此题与运筹学知识相关,我们初步运用了线性规划和遗传算法对此做出了分析,遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。计算程序运用了MATLAB。
考虑到成本问题,影响成本高低的首先是轿运车使用数量;其次,在轿运车使用数量相同情况下,1-1型轿运车的使用成本较低,2-2型较高,1-2型略低于前两者的平均值,但物流公司1-2型轿运车拥有量小,为方便后续任务安排,每次1-2型轿运车使用量不超过1-1型轿运车使用量的20%;再次,在轿运车使用数量及型号均相同情况下,行驶里程短的成本低,注意因为该物流公司是全国性公司,在各地均会有整车物流业务,所以轿运车到达目的地后原地待命,无须放空返回。最后每次卸车成本几乎可以忽略。尽量先把1-2型的装满然后根据题目说的尽量不留位置所以都是选留下空位较少的那个方案,装完1-2然后再来考虑1-1,剩下的装在1-1,考虑放完的,都是先同样车型放一起。最后在混放如果有剩余的话。
考虑到第四问中涉及到路径最优问题,我们选用最短路径算法解决这类问题。
>> flag = Passenger_num~=0;
temp Car_carriers(2,1) - (flag(1)*A_2_2(:,1)*Passenger(1,1)+flag(2)*A_2_2(:,2)*Passenger(2,1)...
+flag(3)*A_2_2(:,3)*Passenger(3,1)+0.1*sum(A_2_2,2));
[~,ib] = min(temp);
temp_res = A_2_2(ib,:);
result = [];
for i = 1:50
loop_end = round(i/0.2);
temp = [];
num = 0;
for j = 0:100
for k = 0:100
if j+k>=loop_end
con_1 = 3*temp_res(1)*i+2*restrict(1,1)*j;
con_2 = 3*temp_res(2)*i+2*restrict(2,1)*k;
if con_1>=Passenger_num(1) && con_2>=Passenger_num(2)
num = num+1;
temp(num,:) = [i j k];
break;
end
end
end
end
if size(temp,1)>0
result = [result;temp(1,:)];
clear temp;
end
end
res(:,1) = result(:,1);
res(:,2) = result(:,2)+result(:,3);
final = [];
final(1,:) = res(1,:);
for i = 2:size(res,1)
temp = sum(res(i,:))-sum(res(i-1,:));
if (res(i,1)>res(i-1,1) && res(i,2)>res(i-1,2)) || temp>=0
continue;
end
final = [final;res(i,:)];
end
??? Undefined function or variable 'Passenger_num'.
>> temp_res = [5 4;12 5];
result = [];
for i = 1:50
loop_end = round(i/0.2);
temp = [];
num = 0;
for j = loop_end:100
con_1 = temp_res(2,1)*i+temp_res(1,1)*j;
con_2 = temp_res(2,2)*i+temp_res(1,2)*k;
if con_1>=Passenger_num(2) && con_2>=Passenger_num(3) num = num+1;
temp(num,:) = [i j];
break;
end
end
if size(temp,1)>0
result = [result;temp(1,:)];
clear temp;
end
end
res = [];
res(:,1) = result(:,1);
res(:,2) = result(:,2);
final = [];
final(1,:) = res(1,:);
for i = 2:size(res,1)
temp = sum(res(i,:))-sum(res(i-1,:));
if (res(i,1)>res(i-1,1) && res(i,2)>res(i-1,2)) || temp>=0 continue;
end
final = [final;res(i,:)];
end
??? Undefined function or variable 'k'.
>> temp_res = [5 1 2;5 12 1];
result = [];
for i = 1:50
% 剩余多少车
remain_1 = Passenger_num(1)-temp_res(2,1)*i;
remain_2 = Passenger_num(2)-temp_res(2,2)*i;
remain_3 = Passenger_num(3)-temp_res(2,3)*i;
% 先满足3型车
res_1 = floor(remain_3/restrict(3,1));
% 尽可能多放1-1上层只放一种
%%
% 只放第一种
remain_3_1 = remain_3-restrict(3,1)*res_1;
remain_2_1 = remain_2-restrict(2,1)*res_1;
res_2 = floor(remain_1/restrict(1,1)/2);
remain_1_1 = remain_1-2*restrict(1,1)*res_2;
res_3 = 1;
temp = find(A_1_2(:,3)==remain_3_1);
for j = 1:size(temp,1)
temp_res_1 = A_1_2(temp(j),:);
remain_2_1 = remain_2_1-temp_res_1(2);
remain_1_1 = remain_1_1-temp_res_1(1);