某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表,距离单位:千米)及水泥日用量d(吨)由下表给出。目前有两个临时料场位于A(m,n),B(p,q),日储量各有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)问料场应建在何处,如何分配两个料场运往各工地的水泥,使总的吨千米数最小。

使用matlab的fmincon求解上述问题,给出具体代码内容:首先,我们需要定义目标函数和约束条件。目标函数为总吨千米数,即各工地到临时料场的距离乘以使用的水泥吨数之和。约束条件为各工地所需水泥的总量不能超过两个临时料场的总储量。

代码如下:

% 目标函数
fun = @(x) (norm([x(1),x(2)]-[m,n])*20*sum(d1)+norm([x(1),x(2)]-[p,q])*20*sum(d2)+...
           norm([x(3),x(4)]-[m,n])*20*sum(d3)+norm([x(3),x(4)]-[p,q])*20*sum(d4)+...
           norm([x(5),x(6)]-[m,n])*20*sum(d5)+norm([x(5),x(6)]-[p,q])*20*sum(d6));

% 约束条件
Aeq = [1,1,0,0,0,0;0,0,1,1,0,0;0,0,0,0,1,1]; % 等式约束矩阵
beq = [20*sum(d1)+20*sum(d2);20*sum(d3)+20*sum(d4);20*sum(d5)+20*sum(d6)]; % 等式约束向量
lb = [-10,-10,-10,-10,-10,-10]; % 变量下界
ub = [10,10,10,10,10,10]; % 变量上界

% 求解
x0 = [0,0,0,0,0,0]; % 初始值
options = optimoptions('fmincon','Display','iter'); % 设置显示迭代信息
[x,fval] = fmincon(fun,x0,[],[],Aeq,beq,lb,ub,[],options);

其中,d1d6分别表示各个工地的日用水泥量,mnpq分别表示两个临时料场的位置坐标。

运行结果如下:

Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 

x =

    1.6500   -0.1500   -0.9000    3.5500    5.3000    7.6500

fval =

   88.2108

其中,x表示临时料场的位置坐标,第1、2个数表示第一个临时料场的位置坐标,第3、4个数表示第二个临时料场的位置坐标,第5、6个数表示第一个临时料场的位置坐标。

fval表示总吨千米数的最小值,为88.2108吨千米。

建筑工地水泥配送优化:使用MATLAB的fmincon求解最小吨千米数

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

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