非线性规划:实例与matlab应用

发布时间:2024-12-25 12:14

使用旅行应用或在线地图规划路线,实时更新交通状况。 #生活技巧# #旅行技巧# #旅行时间规划#

一般非线性规划
标准型为:
在这里插入图片描述
其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.
matlab中非线性规划求解的函数是fmincon,命令的基本格式如下:
 x=fmincon(‘fun’,X0,A,b)
 x=fmincon(‘fun’,X0,A,b,Aeq,beq)
 x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)
 x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)
 x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)
 [x,fval]= fmincon(…)
 [x,fval,exitflag]= fmincon(…)
 [x,fval,exitflag,output]= fmincon(…)
1.fun为目标函数
2.x0为初始值
3.A是不等式约束AX<=b的系数矩阵
4.b是不等式约束AX<=b的常数项
4.Aeq是等式约束AeqX=beq的系数矩阵,
5.beq是等式约束AeqX=beq的常数项,
6.lb是X的下限,
7.ub是X的上限,
8.nonlcon为非线性不等式约束
9.option为设置fmincon的参数
注意:
fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。
fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。
fmincon函数可能会给出局部最优解,这与初值X0的选取有关。

实例: 供应与选址
某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表示,距离单位:千米 )及水泥日用量d(吨)由下表给出。目前有两个临时料场位于A(5,1),B(2,7),日储量各有20吨。假设从料场到工地之间均有直线道路相连。
(1)试制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨千米数最小。
(2)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20吨,问应建在何处,节省的吨千米数有多大?
在这里插入图片描述
在这里插入图片描述
当用临时料场时决策变量为:xij,当不用临时料场时决策变量为:xij,xj,yj。

情形2:使用临时料场的情形
使用两个临时料场A(5,1),B(2,7).求从料场j向工地i的运送量为Xij,在各工地用量必须满足和各料场运送量不超过日储量的条件下,使总的吨千米数最小,这是线性规划问题. 线性规划模型为:
在这里插入图片描述
Matlab程序

clear 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) 计算结果为: x =[ 3.0000 5.0000 0.0000 7.0000 0.0000 1.0000 0.0000 0.0000 4.0000 0.0000 6.0000 10.0000]’ fval = 136.2275

12345678910111213141516171819202122232425262728293031

情形3:改建两个新料场的情形
改建两个新料场,要同时确定料场的位置(xj,yj)和运送量Xij,在同样条件下使总吨千米数最小。这是非线性规划问题。非线性规划模型为:
在这里插入图片描述

function f=ex5(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;

12345678910111213141516

取初值为线性规划的计算结果及临时料场的坐标:
x0=[3 5 0 7 0 1 0 0 4 0 6 10 5 1 2 7]’;

clear; %x0=[3 5 0 7 0 1 0 0 4 0 6 10 5 1 2 7]'; %x0=[ 3.0000 5.0000 0.0707 7.0000 0 0.9293 0 0 3.9293 0 6.0000 10.0707 6.3875 4.3943 5.7511 7.1867]'; %x0=[ 3.0000 5.0000 0.3094 7.0000 0.0108 0.6798 0 0 3.6906 0 5.9892 10.3202 5.5369 4.9194 5.8291 7.2852]'; 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 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0]; beq=[3 5 4 7 6 11]'; vlb=[zeros(12,1);-inf;-inf;-inf;-inf]; vub=[]; [x,fval,exitflag]=fmincon('ex5',x0,A,B,Aeq,beq,vlb,vub)

123456789101112131415161718

计算结果为:
x=[ 3.0000 5.0000 0.0707 7.0000 0 0.9293
0 0 3.9293 0 6.0000 10.0707
6.3875 4.3943 5.7511 7.1867]’
fval = 105.4626
exitflag = 1

即两个新料场的坐标分别为(6.3875, 4.3943),(5.7511, 7.1867).

网址:非线性规划:实例与matlab应用 https://www.yuejiaxmz.com/news/view/562225

相关内容

计算机仿真——线性规划的MATLAB实现(附例程)
非线性规划:实用方法与案例分析
【数学建模】线性规划模型基本原理与案例分享
基于麻雀搜索算法的线性规划问题求解matlab程序
动态规划在实际生活中的应用
旅游路线规划:用数学建模优化旅行体验
线性规划入门:概念与基本应用
非线性规划
线性规划及其在实际生活中的应用
遗传算法matlab仿真实例

随便看看