管理运筹学实验1

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;%也视作非线性不等式约束

相关文档
最新文档