clear;clc
a=[1.25 8.75 0.5 5.75 3 7.25];
b=[1.25 0.75 4.75 5 6.5 7.75];
d=[3 5 4 7 6 11];
x=[5 2];
y=[1 7];
e=[20 20];
for i=1:6
for j=1:2
aa(i,j)=sqrt((x(j)-a(i))^2+(y(j)-b(i))^2);
end
end %计算各个工地到每个料场的距离
CC=[aa(:,1);aa(:,2)]'; %要转化成行矩阵
A=[1 1 1 1 1 1 0 0 0 0 0 0;0 0 0 0 0 0 1 1 1 1 1 1]; %每个料场运送的料满足不等式
B=[20;20];%小于等于料场的储量
Aeq=[1 0 0 0 0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0 0 1]; %各个料场收到的料满足的等式约束
beq=[d(1);d(2);d(3);d(4);d(5);d(6)];%要等于各个料场的需求量
VLB=[0 0 0 0 0 0 0 0 0 0 0 0];
VUB=[];
x0=[1 2 3 0 1 0 0 1 0 1 0 1];%设置初值,可不写
[xx,fval]=linprog(CC,A,B,Aeq,beq,VLB,VUB,x0)
liaoch.m
function f = liaoch(x)
a=[1.25 8.75 0.5 5.75 3 7.25];
b=[1.25 0.75 4.75 5 6.5 7.75];
d=[3 5 4 7 6 11];
e=[20 20];
f1=0;
for i=1:6
s(i)=sqrt((x(13)-a(i))^2+(x(14)-b(i))^2);
f1=s(i)*x(i)+f1;
end %计算距离
f2=0;
for i=7:12
s(i)=sqrt((x(15)-a(i-6))^2+(x(16)-b(i-6))^2);
f2=s(i)*x(i)+f2;
end %两个料场分开写更加直观
f=f1+f2;
主程序:
clear
x0=[3 5 4 7 1 0 0 0 0 0 5 11 5.6348 4.8687 7.2479 7.7499]';
A=[1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0]; %增加两个自变量表示料场坐标
B=[20;20];
Aeq=[1 0 0 0 0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0 0 1 0 0]; %各个料场收到的料满足的等式约束
beq=[3 5 4 7 6 11]';
vlb=[zeros(12,1);-inf;-inf;-inf;-inf];
vub=[];
[x,fval,exitflag]=fmincon('liaoch',x0,A,B,Aeq,beq,vlb,vub)