数模竟然没有用MATLAB。。。因为小组里三个人都不会用。还好我们选的题目是线性最优化问题,用相对简单的LINGO就可以解决了。
题目:
请为物流公司安排以下五次运输,制定详细计划,含所需要各种类型轿运车的数量、每辆轿运车的乘用车装载方案、行车路线。(前三问目的地只有一个,可提供一个通用程序;后两问也要给出启发式算法的程序,优化模型则更佳):
1. 物流公司要运输Ⅰ车型的乘用车100辆及Ⅱ车型的乘用车68辆。
2. 物流公司要运输Ⅱ车型的乘用车72辆及Ⅲ车型的乘用车52辆。
3. 物流公司要运输Ⅰ车型的乘用车156辆、Ⅱ车型的乘用车102辆及Ⅲ车型的乘用车39辆。
4. 物流公司要运输166辆Ⅰ车型的乘用车(其中目的地是A、B、C、D的
分别为42、50、33、41辆)和78辆Ⅱ车型的乘用车(其中目的地是A、C的,分别为31、47辆),具体路线见图4,各段长度:OD=160,DC=76,DA=200,DB=120,BE=104,AE=60。
5. 附件的表1给出了物流公司需要运输的乘用车类型(含序号)、尺寸大小、数量和目的地,附件的表2给出可以调用的轿运车类型(含序号)、数量和装载区域大小(表里数据是下层装载区域的长和宽, 1-1型及2-2型轿运车上、下层装载区域相同;1-2型轿运车上、下层装载区域长度相同,但上层比下层宽0.8米。此外2-2型轿运车因为层高较低,上、下层均不能装载高度超过1.7米的乘用车。
因为第五问的装载、运输方案太多,提醒研究生,再找最优解是不切实际的,可以改用启发式算法,就是类似有经验的调度人员的思想去安排任务,简化目标函数为容易求解,并且得到原来问题可能比较好的解。为此目标的简化一定要做到具体问题具体分析,洞察问题的主要矛盾或关键。一定要开阔思路,大胆创新。其实一般情况可行解容易获得,不断设法改进可行解也是常用方法。最后自行设计运输方案的表达。
采取的方法是枚举法。
主要使用java算出所以可能的方案,lingo软件来计算,用lingo的语法简化了输入的语句,要知道我们的变量有47个。。。
model:
sets:
s1/1..47/:x;
s2/1..3/:b;
s12(s1,s2):a;
endsets
data:
!数据自己写;
!b=100,68,0;
b=0,72,52;
!b=42,31,0;
!b=156,102,39;
a=@file('number.txt');
enddata
min=@sum(s1(i)|i#ge#16#and#i#le#20:x(i))+1.1*@sum(s1(i)|i#ge#42#and#i#le#47:x(i));
@for(s2(j):@sum(s1(i):x(i)*a(i,j))>=b(j));
@sum(s1(i)|i#le#15:x(i))=@sum(s1(i)|i#ge#16#and#i#le#20:x(i));
@sum(s1(i)|i#ge#21#and#i#le#41:x(i))=@sum(s1(i)|i#ge#42:x(i));
@sum(s1(i)|i#ge#16#and#i#le#20:x(i))>=5*@sum(s1(i)|i#ge#42:x(i));
@for(s1:@gin(x));
end