24小时热门版块排行榜    

查看: 931  |  回复: 2
本帖产生 1 个 数学EPI ,点击这里进行查看

oliverxzj

木虫 (著名写手)

[交流] 【求助】航空枢纽选择选址【已解决】 已有2人参与

如题:希望各位高手能把这个最优化问题写成matlab程序。本人定当奉送20金币!

问题二 航空枢纽选择选址
FAL(法国航空公司)专门从事货运。此公司在法国的主要城市与美国的主要城市之间进行运输,这些城市为:亚特兰大,波士顿,芝加哥,马赛,尼斯,巴黎。此公司在这些城市之间平均每天运输的货物吨数列于下表1中


们假定城市 和 之间的运输费用与它们之间的距离成正比。下表2出了这些城市之间的距离,单位为英尺。
表2.2  城市之间的距离

此航空公司计划使用两个城市作为连接平台(航空枢纽),以降低运输费用。然后每个城市将连接到一个枢纽。连接到枢纽 的城市与连接到枢纽 之间的城市之间的运输即都需要通过 到 这段路径,这样能够降低运输费用。我们知道两个枢纽之间的运输费用比一般运输费用底20%。使用哪两个城市作为枢纽才能够最小化运输成本?

[ Last edited by Doctorcbw on 2010-6-20 at 11:04 ]
回复此楼
关关难过关关过,事事难为事事为!
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

zxczxc0417

木虫 (正式写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
javeey(金币+2):谢谢参与交流 2010-06-20 08:08:15
Doctorcbw(金币+20):楼主要求为了感谢您 对他问题的帮助,请我代奖励金币20 2010-06-20 11:03:51
Doctorcbw(数学EPI+1):谢谢您热心的回答! 2010-06-20 11:04:54
这种题目比较烦人,
题目中可能还少一个条件,费用和货物量的关系?
方法很简单,先求全排列,再切割每个排列


我算的答案是:
费用:25866720
路线是:3 6 --------  4 2 1 5 ,其中4,6是枢纽

源程序:
clear;clc;

NC = 6;
huo_f = 'E:\兴趣学习\interesting_pro\航空枢纽选择选址\huoliang.txt';
dis_f = 'E:\兴趣学习\interesting_pro\航空枢纽选择选址\distance.txt';


quan_pai = perms( 1:NC );
[huo(:,1) huo(:,2) huo(:,3) huo(:,4) huo(:,5) huo(:,6) ] = textread(huo_f,'%f %f %f %f %f %f ');
[dis(:,1) dis(:,2) dis(:,3) dis(:,4) dis(:,5) dis(:,6) ] = textread(dis_f,'%f %f %f %f %f %f ');

[len1 hg] = size(quan_pai);

min_val = 1e100;
sequ(1:NC) = 0;
cut_p = 1;

for i = 1:len1
    a = quan_pai( i, : );
    for j = 1:NC-1
        [ min_val sequ cut_p ] = get_min_seq( a, j, min_val, sequ, huo, dis, NC, cut_p );         
    end
end


子程序:

function [ min_val, sequ, cut_p ] = get_min_seq( a, j, min_val, sequ, huo, dis, NC, cut_p );  

% get 1st part
tot_huo = 0;
for i = 1:j-1
    tot_huo = tot_huo + sum( huo( a(i), : ) ) + sum( huo( :, a(i) ) );   
end
tot_fee1 = tot_huo * dis( a(i), a(j) );   

% get 2nd part
tot_huo = 0;
for i = j+2:NC
    tot_huo = tot_huo + sum( huo( a(i), : ) ) + sum( huo( :, a(i) ) );
end
tot_fee2 = tot_huo * dis( a(i), a(j+1) );   

% get mid part
tot_huo = 0;
for i = 1:j
    for k = j+1:NC
        tot_huo = tot_huo + huo( a(i), a(k) ) + huo( a(k), a(i) );         
    end
end

tot_fee3 = 0.8*tot_huo * dis( a(j), a(j+1) );

tot_fee = tot_fee1 + tot_fee2 + tot_fee3;

if tot_fee < min_val
    min_val = tot_fee;
    sequ = a;
    cut_p = j;
elseif tot_fee == min_val
    [len2 kj] = size(sequ);
    sequ( len2+1, = a;
    cut_p(len2+1) = j;
else
    min_val = min_val;
    sequ = sequ;
    cut_p =  cut_p;
end

数据:
distance.txt
0        945        605        4667        4749        4394
945        0        866        3726        3806        3448
605        866        0        4471        4541        4152
4667        3726        4471        0        109        415
4749        3806        4541        109        0        431
4394        3448        4152        415        431        0


huoliang.txt
0        500        1000        300        400        1500
1500        0        250        630        360        1140
400        510        0        460        320        490
300        600        810        0        820        310
400        100        420        730        0        970
350        1020        260        580        380        0

[ Last edited by zxczxc0417 on 2010-6-20 at 00:29 ]
2楼2010-06-20 00:16:47
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

oliverxzj

木虫 (著名写手)

感谢贵人啊
关关难过关关过,事事难为事事为!
3楼2010-06-20 08:53:26
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 oliverxzj 的主题更新
信息提示
请填处理意见