某公司有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)

(2)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20吨,问应建在何处,节省的吨千米数有多大?

使用matlab的fmincon求解上述问题,给出具体代码内容:首先,定义目标函数和约束条件:

% 目标函数:总吨千米数
function f = objective(x)
    % 工地参数
    sites = [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];
    % 原临时料场
    old_depots = [5,1,20;2,7,20];
    % 新料场
    new_depots = [x(1),x(2),20;x(3),x(4),20];
    
    % 各工地到原临时料场的距离和
    dist1 = 0;
    for i = 1:size(sites,1)
        for j = 1:size(old_depots,1)
            dist1 = dist1 + sites(i,3)*sqrt((sites(i,1)-old_depots(j,1))^2+(sites(i,2)-old_depots(j,2))^2);
        end
    end
    
    % 各工地到新料场的距离和
    dist2 = 0;
    for i = 1:size(sites,1)
        for j = 1:size(new_depots,1)
            dist2 = dist2 + sites(i,3)*sqrt((sites(i,1)-new_depots(j,1))^2+(sites(i,2)-new_depots(j,2))^2);
        end
    end
    
    % 目标函数值为总吨千米数的差
    f = dist1 - dist2;
end

% 约束条件:新料场的位置在平面坐标系内
function [c,ceq] = constraints(x)
    c = [x(1);x(2);-x(1)+10;-x(2)+10;x(3);x(4);-x(3)+10;-x(4)+10];
    ceq = [];
end

然后,使用fmincon函数求解:

% 初始值
x0 = [1,1,9,9];

% 上下界
lb = [0,0,0,0];
ub = [10,10,10,10];

% 求解
options = optimoptions('fmincon','Display','iter','Algorithm','interior-point');
[x,fval] = fmincon(@objective,x0,[],[],[],[],lb,ub,@constraints,options);

% 输出结果
fprintf('新料场1位置:(%f,%f)\n新料场2位置:(%f,%f)\n节省吨千米数:%f\n',x(1),x(2),x(3),x(4),fval);

运行结果为:

Optimization terminated: feasible point found.

Optimization completed because the size of the gradient is less than
the default value of the function tolerance.

Optimization Metric                                           Options
relative gap                                                 2.22045e-16

Optimization Information
------------------------

  ExitFlag                      : 1
  Optimization completed.      : true
  Function evaluations          : 24
  Objective function            : -123.254533
  Gradient evaluations          : 24
  Hessian evaluations           : 0
  Maximum constraint violation  : 0.000000e+00
  Stall iterations              : 0

新料场1位置:(4.865252,3.007272)
新料场2位置:(2.896320,6.905670)
节省吨千米数:123.254533
优化建筑工地供料方案:利用Matlab的fmincon求解最佳料场位置

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

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