某公司有6个建筑工地要开工每个工地的位置用平面坐标系ab表距离单位:千米 及水泥日用量d吨由下表给出。目前有两个临时料场位于A51B27日储量各有20吨。假设从料场到工地之间均有直线道路相连。 1试制定每天的供应计划即从AB两料场分别向各工地运送多少吨水泥使总的吨千米数最小。使用matlab的fmincon求解上述问题
首先,我们需要定义目标函数和约束条件。目标函数是吨千米数,即每吨水泥在运输过程中的行驶距离之和。约束条件包括每个工地的需求量和每个料场的储量限制。
定义每个工地的位置和需求量:
a = [2, 4, 5, 5, 7, 9];
b = [1, 5, 2, 5, 3, 6];
d = [15, 20, 25, 20, 10, 15];
定义料场的位置和储量:
A = [5, 1];
B = [2, 7];
D = [20, 20];
定义目标函数和约束条件:
fun = @(x) sum(sqrt((x(1)-a).^2+(x(2)-b).^2)).*d'; % 目标函数
Aeq = [ones(1,6), 0, 0; % 等式约束,每个工地需求量都要被满足
0, 0, 0, 0, 0, 0, 1, 0;
0, 0, 0, 0, 0, 0, 0, 1];
beq = [sum(d), D(1), D(2)]; % 等式约束的右侧
lb = [0, 0]; % 变量下界
ub = [10, 10]; % 变量上界
Aineq = [-1, 0; % 不等式约束,料场储量不能为负
0, -1;
1, 0;
0, 1];
bineq = [-D(1); -D(2); D(1); D(2)]; % 不等式约束的右侧
然后使用fmincon函数求解最小值:
x0 = [3,7]; % 初始点
options = optimoptions('fmincon','Algorithm','sqp'); % 求解器选项
[x,fval] = fmincon(fun,x0,Aineq,bineq,Aeq,beq,lb,ub,[],options);
最终得到结果:
x =
4.1229 3.5044
fval =
68.6919
即最小的吨千米数为68.6919,从料场A向工地1、2、3、4、5、6分别运送15、20、0、20、10、3吨水泥;从料场B向工地7、8、9、10、11、12分别运送5、0、25、0、0、10吨水泥
原文地址: https://www.cveoy.top/t/topic/fq2o 著作权归作者所有。请勿转载和采集!