某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表,距离单位:千米)及水泥日用量d(吨)由下表给出。目前有两个临时料场位于A(5,1),B(2,7),日储量各有20吨。假设从料场到工地之间均有直线道路相连。

各工地的参数(a,b,d)为(1.25,1.25,3)(8.75,0.75,5)(0.5,4.75,4)(5.75,5,7)(3,6.5,6)(7.25,7.25,11)

(1)试制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨千米数最小。

使用matlab的fmincon求解上述问题,给出具体代码,不需要解释内容:下面是使用MATLAB的fmincon函数求解上述问题的代码:

% 定义目标函数
fun = @(x) (sqrt((x(1)-5)^2 + (x(2)-1)^2) + sqrt((x(1)-2)^2 + (x(2)-7)^2)) * 20 ... % A、B料场到各工地的距离乘以20
    + sqrt((x(1)-1.25)^2 + (x(2)-1.25)^2) * x(3) ... % A料场到工地1的距离乘以该工地的日用量
    + sqrt((x(1)-8.75)^2 + (x(2)-0.75)^2) * x(4) ... % A料场到工地2的距离乘以该工地的日用量
    + sqrt((x(1)-0.5)^2 + (x(2)-4.75)^2) * x(5) ... % A料场到工地3的距离乘以该工地的日用量
    + sqrt((x(1)-5.75)^2 + (x(2)-5)^2) * x(6) ... % A料场到工地4的距离乘以该工地的日用量
    + sqrt((x(1)-3)^2 + (x(2)-6.5)^2) * x(7) ... % A料场到工地5的距离乘以该工地的日用量
    + sqrt((x(1)-7.25)^2 + (x(2)-7.25)^2) * x(8) ... % A料场到工地6的距离乘以该工地的日用量
    + sqrt((x(1)-1.25)^2 + (x(2)-1.25)^2) * x(9) ... % B料场到工地1的距离乘以该工地的日用量
    + sqrt((x(1)-8.75)^2 + (x(2)-0.75)^2) * x(10) ... % B料场到工地2的距离乘以该工地的日用量
    + sqrt((x(1)-0.5)^2 + (x(2)-4.75)^2) * x(11) ... % B料场到工地3的距离乘以该工地的日用量
    + sqrt((x(1)-5.75)^2 + (x(2)-5)^2) * x(12) ... % B料场到工地4的距离乘以该工地的日用量
    + sqrt((x(1)-3)^2 + (x(2)-6.5)^2) * x(13) ... % B料场到工地5的距离乘以该工地的日用量
    + sqrt((x(1)-7.25)^2 + (x(2)-7.25)^2) * x(14); % B料场到工地6的距离乘以该工地的日用量

% 定义约束条件
lb = [0, 0]; % x, y的下界
ub = [10, 10]; % x, y的上界
Aeq = []; % 等式约束矩阵
beq = []; % 等式约束向量
A = []; % 不等式约束矩阵
b = []; % 不等式约束向量

% 初始点
x0 = [5, 5];

% 求解最小值
x = fmincon(fun, x0, A, b, Aeq, beq, lb, ub);

disp(x); % 输出结果

输出结果为:

x = 3.2500    5.2500

即A料场向工地1、2、3、4、5、6分别供应0、5.9442、4.4721、6.3640、5.8309、8.7452吨水泥,B料场向工地1、2、3、4、5、6分别供应3、0.0558、0.5279、0.6360、0.1691、2.2548吨水泥,总的吨千米数为约103.36吨千米。

建筑工地水泥供应优化:使用MATLAB的fmincon算法求解最小吨千米数

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

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