管理运筹学实验1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
管理运筹学实验1
一、实验目的
1. 了解、使用MATLAB 中的优化命令求解线性规划、非线性规划、二次规划等问题;
2. 编制程序“一维搜索中的Fibonacci 算法”.
二、实验原理
1. 实际问题的最优化问题, 在数学上表现为求极值问题;
2. 极值问题总体上可分为两大类: 一类为线性规划(目标函数和约束都为线性的) 另一类为非线性规划(目标与约束之一为非线性的);
3. 解决极值问题的数学方法有: 一维搜索中的Fibonacci 法、黄金分割法; 多元极值中的最速下降法、牛顿法、广义牛顿法、外点法和内点法等.
4. 根据不同的实际优化问题,采用适当的方法求解.
三、阅读以下Matlab 优化命令, 仿真例1—例4的函数、命令
Matlab 中提供了许多优化命令, 这些命令都是根据数学上的基本算法, 或经过改进而编制的, 使用方便, 是人们解决问题的好帮手.
1. 线性优化(含单元,多元函数)
完整格式:[x,fval]=linprog(f,a,b,aeq,beq,lb,ub,x0)
基本格式:[x,fval]=linprog(f,a,b)
用于解以下线性规划问题
0min ,,,T X z f X
AX b AeqX beq st lb X ub =≤⎧⎪=⎪⎨≤≤⎪⎪⎩初值
不等式约束等式约束下上界,以下各命令格式中的意义相同. 例1 求解线性规划223min 546z x x x =---, 1231231212320324423230
,,0
x x x x x x st x x x x x -+≤⎧⎪++≤⎪⎨+≤⎪⎪≥⎩。
解 命令程序如下
f=[-5;-4;-6];
a=[1,-1,1;3,2,4;3,2,0];
b=[20;42;30];
lb=zeros(3,1);
[x,fval]=linprog(f,a,b,[],[],lb) %未取初值
注:上述命令也可用于目标规划的求解.例如
1122233min ()z Pd P d d Pd +-+-=+++
12121112221
23312
2110210
81056,0,,0,1,2,3i i x x x x d d st x x d d x x d d x x d d i -+-+-+-++≤⎧⎪-+-=⎪⎪++-=⎨⎪++-=⎪⎪≥≥=⎩ f=[0 0 0 300 200 200 100 0]';%价值系数
a=[2 1 0 0 0 0 0 0];%不等式约束
b=[11]';%不等式资源限制
ae=[1 -1 1 -1 0 0 0 0;1 2 0 0 1 -1 0 0;8 10 0 0 0 0 1 -1];% 等式约束 be=[0 10 56]';%等式资源限制
lb=zeros(8,1);%变量下限
x=linprog(f,a,b,ae,be,lb) %未取初值
2.非线性优化
(1) 一元非线性极小值(有界区间上的函数最小值) 只有区间约束,无所谓初值
格式:[x,fval] =fminbnd(fun,x1,x2)
例2 求函数3cos log ()x x x x x f x e
++=在[0,1]上的最小值. 解法一 *用在线定义函数的方法求解,即
fun=inline ('(x^3+cos(x)+x*log(x))/exp(x)');
[x,fval]=fminbnd(fun,0,1);
解法二 用函数定义目标函数(可带参数)
function y=myfun(x,a)
y=(x^3+cos(x)+a*x*log(x))/exp(x);
然后用
a=1.2; [x,fval]=fminbnd(@(x)myfun(x,a),0,1)
(2) 多元函数极小值
(i)无约束
格式1:[x,fval]=fminsearch(fun,x0)(较适合非线性次数<=2)
格式2:[x,fval]=fminunc(fun,x0)(较适合非线性次数>2)
例3 求332112122
2410y x x x x x x =+-+的最小值. x0=[0,0] 解法一 用在线定义函数的方法,命令如下
fun=inline ('2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2');
[x,fval]=fminsearch(fun,[0;0])%无约束的初值自由度较大
解法二 函数文件(可带参数)
function y=myfun(x)
y=2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2;
然后发命令
[x,fval]=fminsearch(@(x)myfun(x),[0;0])
(ii) 有约束(线性不等式、等式约束,下上界;非线性不等式、等式约束)
问题标准形式为
min (),{|()0}x G
f x G x G x ∈=≤ 格式:[X,fval]=fmincon(fun,x0,a,b,aeq,beq,lb,ub,nonlcon)
例4 求下面问题在初始点(0,1)处附近的最优解.
22121212min 25z x x x x x x =+--- 非线性目标函数
21212(1)0.2360
x x sub to x x ⎧--+≥⎨-+≥⎩
一个非线性不等式约束,另一个线性不等式约束
解法一:先建立如下非线性的不等式和等式约束函数文件
function [c,ceq]=mycon(x)
c=(x(1)-1)^2-x(2);%不等式非线性约束
ceq=[];%等式非线性约束为空
然后在命令窗口中键入
f=inline('x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2);');
x0=[0;1]; %可行域里的点
a=[-2,3]; b=6; aeq=[]; beq=[]; lb=[]; ub=[];%线性约束
[x,fval]=fmincon(f,x0,a,b,aeq,beq,lb,ub,@mycon)
解法二:
function [c,ceq]=mycon(x)
c(1)=(x(1)-1)^2-x(2);%非线性不等式约束
c(2)=-2*x(1)+3*x(2)-6;%也视作非线性不等式约束