[学习笔记]非线性规划matlab实例——选址问题

一、问题阐述
A、B临时料场坐标位置未知,每个料场日储20吨。各工地的位置与日需求量如图所示,求A、B建在何处是的总的吨千米数最小?
在这里插入图片描述
二、问题分析
参与决策的决策变量有,A、B的位置,某个工厂运送到某个工地水泥的吨数。所以:
记工地i的坐标为:(ai,bi)i=1,2,3,4,5,6
记原料厂的坐标是:(xi,yj)j=1,2
记料场j往工地运送水泥为xij吨。
构建规划问题:
min z = ∑(6,i=1)∑(2,j=1)sqrt((ai-xi)2 + (bi-yi)2)
s.t. ∑(2,j=1) xij= di ,i=1,2,3,4,5,6 送往工地的水泥满足工地的需求。
∑(6,i=1)xij<=20,j=1,2 送出的水泥不超出日储量20吨。
xij>=0
三、设计matlab程序
确定决策变量:在这个问题中决策变量有各个工地的坐标,和原料厂的坐标,一共16个变量。
X1,X7分别表示工地Ⅰ的坐标,X2,X8分别表示工地Ⅱ的坐标,依次类推。最后四个决策变量分别表示A地与B地的坐标。
构建目标函数:

%目标函数
function f = fun1(xx)
a=[1.25  8.75  0.5  5.75  3  7.25];
b=[1.25  0.75  4.75 5  6.5  7.25];
x = [xx(13) xx(15)];
y = [xx(14)  xx(16)];
c=[];
for j = 1:2
    for i = 1:6
        c=[c;sqrt( (a(i)-x(j))^2 + (b(i)-y(j))^2) ];
    end
end
f = xx(1:12)*c; %通过构造矩阵加法的形式将每一个部分加起来。
end

构建主函数:

%工地选址问题
clear;clc
format long g
A = zeros(2,16);
A(1,1:6)=1;%表示从A原料厂运出的总和
A(2,7:12)=1;%表示从B原料厂运出的总和
b = [20,20]';
Aeq=zeros(6,16);
for i=1:6
    Aeq(i,i)=1;Aeq(i,i+6)=1;
end
beq = [3 5 4 7 6 11]';
lb = zeros(16,1);
x0 = [3 5 0 7 0 1 0 0 4 0 6 10 5 1 2 7];%最后4位为自定义初始值
[x,fval] = fmincon(@fun1,x0,A,b,Aeq,beq,lb)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值