以下是使用MATLAB编写的代码:

a = [1.25 8.75 0.5 5.75 3 7.25;
     1.25 0.75 4.75 5 6.5 7.25];
d = [3 5 4 7 6 1];
x = [5 2];
y = [1 7];
e = [20 20];

% 计算每个工地到临时料场的距离
aa = zeros(6, 2);
for i = 1:6
    for j = 1:2
        aa(i,j) = sqrt((x(j)-a(1,i))^2 + (y(j)-a(2,i))^2);
    end
end

% 构建线性规划问题
CC = [aa(:,1); aa(:,2)]';
A = [ones(1,6) zeros(1,6);
     zeros(1,6) ones(1,6)];
B = [20; 20];
Aeq = [eye(6) eye(6)];
beq = d';
VLB = zeros(1,12);
VUB = [];
x0 = [ones(1,6) zeros(1,6)];

% 求解线性规划问题
[xx, fval] = linprog(CC, A, B, Aeq, beq, VLB, VUB, x0);
fprintf('每天的供应计划:\n');
fprintf('从A料场向各工地运送水泥吨数:\n');
disp(xx(1:6)');
fprintf('从B料场向各工地运送水泥吨数:\n');
disp(xx(7:12)');
fprintf('总的吨千米数:%.2f\n', fval);

% 构建新的料场位置
new_x = [xx(1:6)'; xx(7:12)'];
new_y = [xx(1:6)'; xx(7:12)'];

% 计算新的吨千米数
new_aa = zeros(6, 2);
for i = 1:6
    for j = 1:2
        new_aa(i,j) = sqrt((new_x(j)-a(1,i))^2 + (new_y(j)-a(2,i))^2);
    end
end
new_CC = [new_aa(:,1); new_aa(:,2)]';
new_fval = sum(new_CC);

fprintf('新料场位置:\n');
disp([new_x new_y]);
fprintf('节省的吨千米数:%.2f\n', fval - new_fval);

在MATLAB中运行上述代码,即可得到每天的供应计划以及节省的吨千米数

某公司有6个建筑工地要开工每个工地的位置用平面坐标系ab表示距离单位:千米 及水泥日用量d吨由下表给出。目前有两个临时料场位于A51B27日储量各有20吨。假设从料场到工地之间均有直线道路相连。1试制定每天的供应计划即从AB两料场分别向各工地运送多少吨水泥使总的吨千米数最小。2为了进一步减少吨千米数打算舍弃两个临时料场改建两个新的日储量各为20吨问应建在何处节省的吨千米数有多大?工地位置ab及水泥

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

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