非线性规划模型案例及其编程实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值