某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表示,距离单位:千米)及水泥日用量d(吨)由下表给出。目前有两个临时料场位于A(5,1),B(2,7),日储量各有20吨。假设从料场到工地之间均有直线道路相连。\n(1)试制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨千米数最小。\n(2)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20吨,问应建在何处,节省的吨千米数有多大?\n\n工地位置(a,b)及水泥日用量 d\n\n| 工地 | a | b | d |\n|---|---|---|---|\n| 1 | 1.25 | 1.25 | 3 |\n| 2 | 8.75 | 0.75 | 5 |\n| 3 | 0.5 | 4.75 | 4 |\n| 4 | 5.75 | 5 | 7 |\n| 5 | 3 | 6.5 | 6 |\n| 6 | 7.25 | 7.25 | 1 |\n\nx=[5 2];\ny=[1 7];\ne=[20 20];\n\nfor i=1:6\n for j=1:2\n aa(i,j)=sqrt((x(j)-a(i))^2+(y(j)-b(i))^2);\n end\nend\n\nCC=[aa(:,1); aa(:,2)]';\nA=[1 1 1 1 1 1 0 0 0 0 0 0\n 0 0 0 0 0 0 1 1 1 1 1 1];\nB=[20;20];\nAeq=[1 0 0 0 0 0 1 0 0 0 0 0\n 0 1 0 0 0 0 0 1 0 0 0 0\n 0 0 1 0 0 0 0 0 1 0 0 0\n 0 0 0 1 0 0 0 0 0 1 0 0\n 0 0 0 0 1 0 0 0 0 0 1 0\n 0 0 0 0 0 1 0 0 0 0 0 1 ];\nbeq=[d(1);d(2);d(3);d(4);d(5);d(6)];\nVLB=[0 0 0 0 0 0 0 0 0 0 0 0];VUB=[];\nx0=[1 2 3 0 1 0 0 1 0 1 0 1];\n[xx,fval]=linprog(CC,A,B,Aeq,beq,VLB,VUB,x0)\n\n用matlab写程序内容:以下是使用MATLAB编写的代码:\n\nmatlab\na = [1.25 8.75 0.5 5.75 3 7.25;\n 1.25 0.75 4.75 5 6.5 7.25];\nd = [3 5 4 7 6 1];\nx = [5 2];\ny = [1 7];\ne = [20 20];\n\n% 计算每个工地到临时料场的距离\naa = zeros(6, 2);\nfor i = 1:6\n for j = 1:2\n aa(i,j) = sqrt((x(j)-a(1,i))^2 + (y(j)-a(2,i))^2);\n end\nend\n\n% 构建线性规划问题\nCC = [aa(:,1); aa(:,2)]';\nA = [ones(1,6) zeros(1,6);\n zeros(1,6) ones(1,6)];\nB = [20; 20];\nAeq = [eye(6) eye(6)];\nbeq = d';\nVLB = zeros(1,12);\nVUB = [];\nx0 = [ones(1,6) zeros(1,6)];\n\n% 求解线性规划问题\n[xx, fval] = linprog(CC, A, B, Aeq, beq, VLB, VUB, x0);\nfprintf('每天的供应计划:\n');\nfprintf('从A料场向各工地运送水泥吨数:\n');\ndisp(xx(1:6)');\nfprintf('从B料场向各工地运送水泥吨数:\n');\ndisp(xx(7:12)');\nfprintf('总的吨千米数:%.2f\n', fval);\n\n% 构建新的料场位置\nnew_x = [xx(1:6)'; xx(7:12)'];\nnew_y = [xx(1:6)'; xx(7:12)'];\n\n% 计算新的吨千米数\nnew_aa = zeros(6, 2);\nfor i = 1:6\n for j = 1:2\n new_aa(i,j) = sqrt((new_x(j)-a(1,i))^2 + (new_y(j)-a(2,i))^2);\n end\nend\nnew_CC = [new_aa(:,1); new_aa(:,2)]';\nnew_fval = sum(new_CC);\n\nfprintf('新料场位置:\n');\ndisp([new_x new_y]);\nfprintf('节省的吨千米数:%.2f\n', fval - new_fval);\n\n\n在MATLAB中运行上述代码,即可得到每天的供应计划以及节省的吨千米数。


原文地址: http://www.cveoy.top/t/topic/pBSW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录