当前位置:文档之家› 用MATLAB求解规划问题

用MATLAB求解规划问题

用MATLAB求解规划问题
用MATLAB求解规划问题

§15. 利用Matlab求解线性规划问题

线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP问题求解:

% min f'x

% s.t .(约束条件):Ax<=b

% (等式约束条件):Aeqx=beq

% lb<=x<=ub

linprog函数的调用格式如下:

x=linprog(f,A,b)

x=linprog(f,A,b,Aeq,beq)

x=linprog(f,A,b,Aeq,beq,lb,ub)

x=linprog(f,A,b,Aeq,beq,lb,ub,x0)

x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)

[x,fval]=linprog(…)

[x, fval, exitflag]=linprog(…)

[x, fval, exitflag, output]=linprog(…)

[x, fval, exitflag, output, lambda]=linprog(…)

其中:

x=linprog(f,A,b)返回值x为最优解向量。

x=linprog(f,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令

111

A=[ ]、b=[ ] 。

x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options为指定优化参数进行最小化。

Options的参数描述:

Display显示水平。选择’off’ 不显示输出;选择’I ter’显示每一步迭代过程的输出;选择’final’ 显示最终结果。

MaxFunEvals 函数评价的最大允许次数

Maxiter 最大允许迭代次数

TolX x处的终止容限

[x,fval]=linprog(…) 左端fval 返回解x处的目标函数值。

[x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的输出部分:

exitflag描述函数计算的退出条件:若为正值,表示目标函数收敛于解x 处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。

output 返回优化信息:output.iterations表示迭代次数;output.algorithm表示所采用的算法;outprt.funcCount表示函数评价次数。

lambda返回x处的拉格朗日乘子。它有以下属性:

lambda.lower-lambda的下界;

lambda.upper-lambda的上界;

lambda.ineqlin-lambda的线性不等式;

lambda.eqlin-lambda的线性等式。

112

下面通过具体的例子来说明:

例如:某农场I、II、III等耕地的面积分别为100 hm2、300hm2和200 hm2,计划种植水稻、大豆和玉米,要求三种作物的最低收获量分别为190000kg、130000kg和350000kg。I、II、III等耕地种植三种作物的单产如表5.1.4所示。若三种作物的售价分别为水稻1.20元/kg,大豆1.50元/kg,玉米0.80元/kg。那么,(1)如何制订种植计划,才能使总产量最大?(2)如何制订种植计划,才能使总产值最大?

表1不同等级耕地种植不同作物的单产(单位:kg / hm2)

I等耕地II等耕地III等耕地水稻11 000 9 500 9 000

大豆8 000 6 800 6 000

玉米14 000 12 000 10 000

首先根据题意建立线性规划模型(决策变量设置如表2所示,表中

ij

x表示第i种作物在第j等级的耕地上的种植面积。):

表2 作物计划种植面积(单位:hm2)

约束方程如下:

耕地面积约束:?

?

?

?

?

+

+

+

+

+

+

200

x

x

x

300

x

x

x

100

x

x

x

33

23

13

32

22

12

31

21

11

最低收获量约束:?

?

?

?

?

-

-

-

-

-

-

-350000

10000x

12000x

14000x

-

0000

3

-1

0x

00

6

6800x

8000x

-

-190000

9000x

9500x

11000x

-

33

32

31

23

22

21

13

12

11

113

114

非负约束:

1,2,3)

j 1,2,3;(i 0

x ij ==≥

(1)追求总产量最大,目标函数为:

33

32

31

23

22

2113121110000x

12000x

14000x

-0x

0066800x

8000x

- 9000x 9500x -11000x

=minZ ------

(2)追求总产值最大,目标函数为:

33

32

31

23222113121133

32

31

23

22

211312

11

0x

0089600x

11200x

9000x

10200x 12000x 10800x 11400x 13200x -)

10000x

12000x

14000x (×0.80-)

0x

0066800x

(8000x

×1.50-)

9000x

9500x

(11000x

×-1.20=maxZ --------=++++++

根据求解函数linprog 中的参数含义,列出系数矩阵,目标函数系数矩阵,以及约束条件等。

这些参数中没有的设为空。譬如, (1)当追求总产量最大时,只要将参数

f=[-11000 –9500 –9000 –8000 –6800 –6000 –14000 –12000 -10000];

A=[1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000;

0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000; 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000;

-11000.0000 0.0000 0.0000 -9500.0000 0.0000 0.0000 -9000.0000 0.0000 0.0000; 0.0000 -8000.0000 0.0000 0.0000 -6800.0000 0.0000 0.0000 -6000.0000 0.0000; 0.0000 0.0000 -14000.0000 0.0000 0.0000 -12000.0000 0.0000 0.0000 -10000.0000]; b=[100 300 200 -190000 -130000 -350000];

lb=[0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 ];

代入求解函数[][]),[],[],,,,(lb b A f linprog fxopt xopt =,即可求得结果。

(2)当追求总产值最大时,将参数

f=[-13200 –11400 –10800 –12000 –10200 –9000 –11200 –9600 -8000];

A=[1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000;

0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000;

0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000;

-11000.0000 0.0000 0.0000 -9500.0000 0.0000 0.0000 -9000.0000 0.0000 0.0000;

0.0000 -8000.0000 0.0000 0.0000 -6800.0000 0.0000 0.0000 -6000.0000 0.0000;

0.0000 0.0000 -14000.0000 0.0000 0.0000 -12000.0000 0.0000 0.0000 -10000.0000];

b=[100 300 200 -190000 -130000 -350000];

lb=[0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 ];

代入求解函数[][])

f

A

b

linprog

xopt=,即可得到求解结果。

fxopt

,

(lb

,

[],

[],

,

,

线性规划,还有其他的几种调用函数形式,可在Matlab帮助中查找LP或者LINPROG的帮助说明。

115

用MATLAB解线性规划

用MATLAB 优化工具箱解线性规划 命令:x=linprog (c ,A ,b ) 2、模型: beq AeqX b AX ..min =≤=t s cX z 命令:x=linprog (c ,A ,b ,Aeq,beq ) 注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ]. 3、模型: VUB X VLB beq AeqX b AX ..min ≤≤=≤=t s cX z 命令:[1] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB ) [2] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB, X0) 注意:[1] 若没有等式约束, 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…) 返回最优解x及x处的目标函数值fval. 例1 max 6543216.064.072.032.028.04.0x x x x x x z +++++= 85003.003.003.001.001.001.0..654321≤+++++x x x x x x t s 70005.002.041≤+x x 10005.002.052≤+x x 90008.003.063≤+x x 6,2,10 =≥j x j 解 编写M 文件小xxgh1.m 如下: c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6]; A=[0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08]; b=[850;700;100;900]; Aeq=[]; beq=[]; vlb=[0;0;0;0;0;0]; vub=[]; [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub) min z=cX b AX t s ≤..1、模型:

动态规划-图论

§1动态规划模型 如图所示,给定一个线路网络,两点之间连线上的数字表示 两点间距离,试求一条从A到E的路线,使总距离为最短。Mattlab求解: 首先利用Excel建立两个工作表edge和n分别存储图的上三 角阵和顶点数量。其中edge= 99999 5 2 99999 99999 99999 99999 99999 99999 99999 99999 99999 3 7 99999 99999 99999 99999 99999 99999 99999 99999 6 3 99999 99999 99999 99999 99999 99999 99999 99999 99999 6 99999 99999 99999 99999 99999 99999 99999 99999 3 8 99999 99999 99999 99999 99999 99999 99999 99999 1 99999 99999 99999 99999 99999 99999 99999 99999 99999 3 99999 99999 99999 99999 99999 99999 99999 99999 7 99999 99999 99999 99999 99999 99999 99999 99999 99999 n=9,然后在Matlab调入以上数据。同时将自编的动态规划 软件“dynamic.m”调入当前目录之中,在Matlab命令窗口

输入dynamic,回车后则在窗口显示出路径Path 和距离distance §2 最小生成树 例1 某工厂要架设局域网联通工厂各个部门。已知工厂有7个部门,各个部门间铺设网线的距离如上图所示,计算出铺设网线的最短距离。 Matlab 的算法: 首先,将上图的邻接矩阵存储为G ,顶点数存储为N ;即:G= 99999 50 60 99999 99999 99999 99999 50 99999 99999 65 40 99999 99999 60 99999 99999 52 99999 99999 45 99999 65 52 99999 50 30 42 99999 40 99999 50 99999 70 99999 99999 99999 99999 30 70 99999 99999 99999 99999 45 42 99999 99999 99999 2 5 3 1 4 7 6 50 60 45 65 52 40 50 70 30 42

动态计划求解方法的Matlab实现及应用[]

动态规划求解方法的Matlab实现及应用[1].txt我自横刀向天笑,笑完我就去睡觉。你的手机比话费还便宜。路漫漫其修远兮,不如我们打的吧。第 %卷第 ,期信息工程大学学报 S>:+% <>+, !""’年 >月 T>8D3F: >C 53C>DEFB2>3 G3?23@@D23? 032H@DA2BI 6@N+!""’ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! 动态规划求解方法的 !"#$"%实现及应用 于斌,刘姝丽,韩中庚 <信息工程大学信息工程学院,河南郑州 #’"""!) 摘要:文章对动态规划问题的求解方法进行了分析研究,根据问题的特点、难点和关键点做了 针对性的处理,然后用 !"#$"%做了实现尝试,从而实现了“最佳组队”和“最短路线”等问题的 求解。实践证明所采用方法和程序都是有效的。 关键词:动态规划;基本方程;!"#$"%实现;最佳组队 中图分类号:* !!&+,文献标识码:-文章编号:&%.& $ "%.,

$ "# !"#$"% &’"$(>"#(*+ *, #-’ ./+"0(1 23*43"00(+4 5663*"1-"+7 8#9 566$(1"#(*+ /0 123,450 6789:2,。-< =7>3?9?@3? <53AB2B8B@ >C 53C>DEFB2>3 G3?23@@D23?,53C>DEFB2>3 G3?23@@D23? 032H@DA2BI,=7@3?J7>8 #’"""!,K723F) 5%9#3"1#:1I F3F:IJ23? F3L 23H@AB2?FB23? B7@ LI3FE2M ND>?DFEE23? FNND>FM7,F3 @CC@MB2H@ L2AN>AF: 7FA O@@3 L>3@

用matlab求解线性规划问题

一、实验目的: 了解Matlab 的优化工具箱,能利用Matlab 求解线性规划问题。 二、实验内容: 线性规划的数学模型有各种不同的形式,其一般形式可以写为: 目标函数: n n x f x f x f z +++= 2211m in 约束条件: s n sn s s n n b x a x a x a b x a x a x a ≤+++≤+++ 221 11 1212111 s n tn t t n n d x c x c x c d x c x c x c =+++=+++ 221 11 1212111 0,,,21≥n x x x 这里 n n x f x f x f z +++= 2211称为目标函数,j f 称为价值系数,T n f f f f ),,,(21 =称为价值向量,j x 为求解的变量,由系数ij a 组成的矩阵 ??????????=mn m n a a a a A 1111 称为不等式约束矩阵,由系数ij c 组成的矩阵 ??????????=sn s n c c c c C 1111 称为等式约束矩阵,列向量 T n b b b b ),,,(21 =和T n d d d d ),,,(21 =为右端向量,条件0≥j x 称为非负约束。一个向量T n x x x x ),,,(21 =,满足约束条件,称为可行解或可行点,所有可行点的集合称为 可行区域,达到目标函数值最大的可行解称为该线性规划的最优解,相应的目标函数值称为最优目标函数值,简称最优值。 我们这里介绍利用Matlab 来求解线性规划问题的求解。 在Matlab 中有一个专门的函数linprog()来解决这类问题,我们知道,极值有最大和最小两种,但求z 的极大就是求z -的极小,因此在Matlab 中以求极小为标准形式,函数linprog()的具体格式如下: X=linprog(f,A,b) [X,fval,exitflag,ouyput,lamnda]=linprog(f,A,b,Aeq,Beq,LB,UB,X0,options) 这里X 是问题的解向量,f 是由目标函数的系数构成的向量,A 是一个矩阵,b 是一个向量,A ,b 和变量x={x1,x2,…,xn}一起,表示了线性规划中不等式约束条件,A ,b 是系数矩阵和右端向量。Aeq 和Beq 表示了线性规划中等式约束条件中的系数矩阵和右端向量。LB 和UB 是约束变量的下界和上界向量,X0是给定的变量的初始值,options 为控制规划过程的参数系列。返回值中fval 是优化结束后得到的目标函数值。exitflag=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;exitflag>0表示优化过程中变量收敛于解X ,exitflag<0表示不收敛。output 有3个分量,iterations 表示优化过程的迭代次数,cgiterations 表示PCG 迭代次数,algorithm 表示优化所采用的运算规则。lambda 有4个分量,

动态规划 销售人员分配问题(matlab编程)

数学规划课程设计 题目:销售人员费配问题 姓名: 学号: 成绩: 2011年6月

销售人员费配问题 摘要:动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法,本论文通过对动态规划的基本概念和基本思路,并利用Matlab对动态规划中的销售人员分配问题进行了分析,然后利用Matlab语言进行了程序设计和计算,是复杂问题简单化,避免了繁琐的计算,从而使问题能跟方便地得到解决。 关键词:动态规划销售人员分配问题Matlab语言

一、问题重述 某企业甲、乙、丙三个销售市场,其市场的利润与销售人员的分配有关,现有6个销售人员, 二、问题分析 首先我们对设备的分配规定一个顺序,即先考虑分配给甲市场,其次乙市场,最后丙市场,但分配时必须保证企业的总收益最大。 将问题按分配过程分为三个阶段,根据动态规划逆序算法,可设: 1、阶段数k=1,2,3(即甲、乙、丙三个市场的编号分别为1,2,3); 2、状态变量x k 表示分配给第k 个市场至第3个市场的人员数(即第k 阶段初尚未分配的人员数); 3、决策变量u k 表示分配给第k 市场的人员数; 4、状态转移方程:x k+1=x k -u k ; 5、g k (u k )表示u k 个销售人员分配到第k 个市场所得的收益值,它由下表可查得; 6、f k (x k )表示将x k 个销售人员分配到第k 个市场所得到的最大收益值,因而可得出递推方程: f k (x k )= 6 ,...,1,0max =k u [ g k (u k )+ f k+1(x k -u k )],k=1,2,3 f 4(x 4)=0 三、问题求解 1)k=3时,市场丙的分配方案和总收益. 最大收益:f 3(x 3)=6 ,...,1,0max 3=u [g 3(x 3)]

最优化方法的Matlab实现(公式(完整版))

第九章最优化方法的MatIab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容: 1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。 具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1 ?最小化函数

2.方程求解函数 3.最小—乘(曲线拟合)函数

4?实用函数 5 ?大型方法的演示函数 6.中型方法的演示函数 9.1.3参数设置 利用OPtimSet函数,可以创建和编辑参数结构;利用OPtimget函数,可以获得o PtiOns优化参数。 ? OPtimget 函数 功能:获得OPtiOns优化参数。 语法:

运用Matlab进行线性规划求解实例

8.2 线性规划 线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。 8.2.1 基本数学原理 线性规划问题的标准形式是: ????? ??????≥=+++=+++=++++++=0,,,min 21221122222121112 121112211n m n mn m m n n n n n n x x x b x a x a x a b x a x a x a b x a x a x a x c x c x c z ΛΛΛΛΛΛΛΛΛΛΛΛΛΛΛΛΛ 或 ???? ?????=≥===∑∑==n j x m i b x a x c z j n j i j ij n j j j ,,2,1,0,,2,1,min 1 1ΛΛ 写成矩阵形式为: ?? ???≥==O X b AX CX z min 线性规划的标准形式要求使目标函数最小化,约束条件取等式,变量b 非负。不符合这几个条件的线性模型可以转化成标准形式。 MATLAB 采用投影法求解线性规划问题,该方法是单纯形法的变种。 8.2.2 有关函数介绍 在MATLAB 工具箱中,可用linprog 函数求解线性规划问题。 linprog 函数的调用格式如下: ●x=linprog(f,A,b):求解问题minf'*x ,约束条件为A*x<=b 。 ●x=linprog(f,A,b,Aeq,beq):求解上面的问题,但增加等式约束,即Aeq*x=beq 。若没有不等式约束,则令A=[ ],b=[ ]。 ●x=linprog(f,A,b,Aeq,beq,lb,ub):定义设计x 的下界lb 和上界ub ,使得x 始终在该范围内。若没有等式约束,令Aeq=[ ],beq=[ ]。 ●x=linprog(f,A,b,Aeq,beq,lb,ub,x0):设置初值为x0。该选项只适用于中型问题,默认时大型算法将忽略初值。 ●x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options):用options 指定的优化参数进行最小化。 ●[x,fval]=linprog(…):返回解x 处的目标函数值fval 。 ●[x,lambda,exitflag]=linpro g(…):返回exitflag 值,描述函数计算的退出条件。 ●[x,lambda,exitflag,output]=linprog(…):返回包含优化信息的输出参数output 。 ●[x,fval,exitflag,output,lambda]=linprog(…):将解x 处的拉格朗日乘子返回到

基于Matlab的动态规划程序实现

动态规划方法的Matlab 实现与应用 动态规划(Dynamic Programming)是求解决策过程最优化的有效数学方法,它是根据“最优决策的任何截断仍是最优的”这最优性原理,通过将多阶段决策过程转化为一系列单段决策问题,然后从最后一段状态开始逆向递推到初始状态为止的一套最优化求解方法。 1.动态规划基本组成 (1) 阶段 整个问题的解决可分为若干个阶段依次进行,描述阶段的变量称为阶段变量,记为k (2) 状态 状态表示每个阶段开始所处的自然状况或客观条件,它描述了研究问题过程的状况。各阶段状态通常用状态变量描述,用k x 表示第k 阶段状态变量,n 个阶段决策过程有n+ 1个状态。 (3) 决策 从一确定的状态作出各种选择从而演变到下一阶段某一状态,这种选择手段称为决策。描述决策的变量称为决策变量,决策变量限制的取值范围称为允许决策集合。用()k k u x 表示第k 阶段处于状态k x 时的决策变量,它是k x 的函数。用()k k D x Dk(xk)表示k x 的允许决策的集合。 (4) 策略 每个阶段的决策按顺序组成的集合称为策略。由第k 阶段的状态k x 开始到终止状态的后部子过程的策略记为{}11(),(),,()k k k k n n u x u x u x ++ 。可供选择的策略的范围称为允许策略集合,允许策略集合中达到最优效果的策略称为最优策略。从初始状态* 11()x x =出发,过程按照最优策略和状态转移方程演变所经历的状态序列{ } **** 121,,,,n n x x x x + 称为最优轨线。 (5) 状态转移方程 如果第k 个阶段状态变量为k x ,作出的决策为k u ,那么第k+ 1阶段的状态变量1k x +也被完全确定。用状态转移方程表示这种演变规律,记为1(,)k k k x T x u +=。 (6) 指标函数 指标函数是系统执行某一策略所产生结果的数量表示,是衡量策略优劣的数量指标,它定义在全过程和所有后部子过程上,用()k k f x 表示。过程在某阶段j 的阶段指标函数是衡量该阶段决策优劣数量指标,取决于状态j x 和决策j u ,用(,)j j j v x u 表示。 2.动态规划基本方程 (){} 11()min ,,(),()k k k k k k k k k k f x g v x u f x u D x ++=∈???? Matlab 实现 (dynprog.m 文件) function [p_opt,fval]=dynprog (x,DecisFun,SubObjFun,TransFun,ObjFun) % x 是状态变量,一列代表一个阶段的所有状态; % M-函数DecisFun(k,x) 由阶段k 的状态变量x 求出相应的允许决策变量; % M-函数SubObjFun(k,x,u) 是阶段指标函数, % M-函数ObjFun(v,f) 是第k 阶段至最后阶段的总指标函数 % M-函数TransFun(k,x,u) 是状态转移函数, 其中x 是阶段k 的某状态变量, u 是相应的决策变量; %输出 p_opt 由4列构成,p_opt=[序号组;最优策略组;最优轨线组;指标函数值组]; %输出 fval 是一个列向量,各元素分别表示p_opt 各最优策略组对应始端状态x 的最优函数值。

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点 v 到源点v 1的最短距离, ,i j v v V ?∈,若 (,)i j v v E ?,记i v 到j v 的权ij w =∞。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在 1 i v +,使 1()min{()} i l v l v +=,v S ∈; ⑤ 1{} i S S v +=, 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果12 1n n v v v v -是从1v 到 n v 的最短路径,则 12 1 n v v v -也必然是从1v 到 1 n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元 素表示顶点i v 到j v 的权ij w ,若i v 到j v 无边,则realmax ij w =,其中realmax 是 MATLAB 常量,表示最大的实数+308)。 function re=Dijkstra(ma)

动态规划_销售人员分配问题(matlab编程)

一、问题重述 某企业甲、乙、丙三个销售市场,其市场的利润与销售人员的分配有关,现有6个销售人员,分配到各市场所获利润如下表示,试问应如何分配销售人员才能使总利润最大? 二、问题分析 首先我们对设备的分配规定一个顺序,即先考虑分配给甲市场,其次乙市场,最后丙市场,但分配时必须保证企业的总收益最大。 将问题按分配过程分为三个阶段,根据动态规划逆序算法,可设: 1、阶段数k=1,2,3(即甲、乙、丙三个市场的编号分别为1,2,3); 2、状态变量x k 表示分配给第k 个市场至第3个市场的人员数(即第k 阶段初尚未分配的人员数); 3、决策变量u k 表示分配给第k 市场的人员数; 4、状态转移方程:x k+1=x k -u k ; 5、g k (u k )表示u k 个销售人员分配到第k 个市场所得的收益值,它由下表可查得; 6、f k (x k )表示将x k 个销售人员分配到第k 个市场所得到的最大收益值,因而可得出递推方程: f k (x k )= 6 ,...,1,0max =k u [ g k (u k )+ f k+1(x k -u k )],k=1,2,3 f 4(x 4)=0 三、问题求解 1)k=3时,市场丙的分配方案和总收益. 最大收益:f 3(x 3)=6 ,...,1,0max 3=u [g 3(x 3)]

最大收益:f 2(x 2)=2 max u [g 2(u 2)+ f 3(x 3)]= 2 max u [g 2(u 2)+ f 3(x 2- u 2 )] 最大收益:f 1(x 1)=1 max u [g 1(u 1)+ f 2(x 1- u 1)]= max[g 1(u 1)+ f 2(4- u 1)] 为此,我们可以用Matlab 语言编程使问题能跟方便地得到解决,其算法设计如下图:

用matlab求解线性规划问题

实验四 用MATLAB 求解线性规划问题 一、实验目的: 了解Matlab 的优化工具箱,能利用Matlab 求解线性规划问题。 二、实验内容: 线性规划的数学模型有各种不同的形式,其一般形式可以写为: 目标函数: n n x f x f x f z +++= 2211mi n 约束条件: s n sn s s n n b x a x a x a b x a x a x a ≤+++≤+++ 221 11 1212111 s n tn t t n n d x c x c x c d x c x c x c =+++=+++ 221 11 1212111 0,,,21≥n x x x 这里 n n x f x f x f z +++= 2211称为目标函数,j f 称为价值系数,T n f f f f ),,,(21 =称为价值向量,j x 为求解的变量,由系数ij a 组成的矩阵 ??????????=mn m n a a a a A 1111 称为不等式约束矩阵,由系数ij c 组成的矩阵 ??????????=sn s n c c c c C 1111 称为等式约束矩阵,列向量 T n b b b b ),,,(21 =和T n d d d d ),,,(21 =为右端向量,条件0≥j x 称为非负约束。一个向量T n x x x x ),,,(21 =,满足约束条件,称为可行解或可行点,所有可行点的集合称为 可行区域,达到目标函数值最大的可行解称为该线性规划的最优解,相应的目标函数值称为最优目标函数值,简称最优值。 我们这里介绍利用Matlab 来求解线性规划问题的求解。 在Matlab 中有一个专门的函数linprog()来解决这类问题,我们知道,极值有最大和最小两种,但求z 的极大就是求z -的极小,因此在Matlab 中以求极小为标准形式,函数linprog()的具体格式如下: X=linprog(f,A,b) [X,fval,exitflag,ouyput,lamnda]=linprog(f,A,b,Aeq,Beq,LB,UB,X0,options) 这里X 是问题的解向量,f 是由目标函数的系数构成的向量,A 是一个矩阵,b 是一个向量,A ,b 和变量x={x1,x2,…,xn}一起,表示了线性规划中不等式约束条件,A ,b 是系数矩阵和右端向量。Aeq 和Beq 表示了线性规划中等式约束条件中的系数矩阵和右端向量。LB 和UB 是约束变量的下界和上界向量,X0是给定的变量的初始值,options 为控制规划过程的参数系列。返回值中fval 是优化结束后得到的目标函数值。exitflag=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;exitflag>0表示优化过程中变量收敛于解X ,exitflag<0表示不收敛。output 有3个分量,iterations 表示优化过程的迭代次数,cgiterations 表示PCG 迭代次数,algorithm 表示优化所采用的运算规则。lambda 有4个分量,ineqlin 是线

用matlab求解线性规划问题

1 实验四 用MATLAB 求解线性规划问题 一、实验目的: 了解Matlab 的优化工具箱,能利用Matlab 求解线性规划问题。 二、实验内容: 线性规划的数学模型有各种不同的形式,其一般形式可以写为: 目标函数: n n x f x f x f z +++= 2211m i n 约束条件: s n sn s s n n b x a x a x a b x a x a x a ≤+++≤+++ 22111 1212111 s n tn t t n n d x c x c x c d x c x c x c =+++=+++ 22111 1212111 ,,,21≥n x x x 这里n n x f x f x f z +++= 2211称为目标函数, j f 称为价值系数, T n f f f f ) ,,,(21 =称为价值向 量, j x 为求解的变量,由系数 ij a 组成的矩阵 ???? ? ?????=mn m n a a a a A 1 111 称为不等式约束矩阵,由系数ij c 组成的矩阵 ???? ? ?????=sn s n c c c c C 1 111 称为等式约束矩阵,列向量T n b b b b ) ,,,(21 =和 T n d d d d ) ,,,(21 =为右端向量,条件 ≥j x 称为 非负约束。一个向量 T n x x x x ) ,,,(21 =,满足约束条件,称为可行解或可行点,所有可行点的集合称为 可行区域,达到目标函数值最大的可行解称为该线性规划的最优解,相应的目标函数值称为最优目标函数 值,简称最优值。 我们这里介绍利用Matlab 来求解线性规划问题的求解。 在Matlab 中有一个专门的函数linprog()来解决这类问题,我们知道,极值有最大和最小两种,但求z 的极大就是求z -的极小,因此在Matlab 中以求极小为标准形式,函数linprog()的具体格式如下: X=linprog(f,A,b) [X,fval,exitflag,ouyput,lamnda]=linprog(f,A,b,Aeq,Beq,LB,UB,X0,options) 这里X 是问题的解向量,f 是由目标函数的系数构成的向量,A 是一个矩阵,b 是一个向量,A ,b 和变量x={x1,x2,…,xn}一起,表示了线性规划中不等式约束条件,A ,b 是系数矩阵和右端向量。Aeq 和Beq 表示了线性规划中等式约束条件中的系数矩阵和右端向量。LB 和UB 是约束变量的下界和上界向量,X0是给定的变量的初始值,options 为控制规划过程的参数系列。返回值中fval 是优化结束后得到的目标函数值。exitflag=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;exitflag>0表示优化过

(完整word版)用matlab解决线性规划问题的几道题

一、用MATLAB 求解线性规划问题 (1) 编写的M 文件为: f=[-1;-1] A=[1 -2;1 2] b=[4,8] [x,feval]=linprog(f,A,b,[],[],zeros(2,1)) 所求解为:x 1=6,x 2=1;min f=-7 (2) 编写的M 文件为: f=[-4;-3] A=[3 4;3 3;4 2] b=[12;10;8] [x,feval]=linprog(f,A,b,[],[],zeros(1,2)) 所求得的解为:x 1=0.8,x 2=2.4;max f=10.4 (3) (4) 编写的M 文件为: f=[-1;-3;3] Aeq=[1 1 2;-1 2 1] beq=[4;4] [x,feval]=linprog(f,[],[],Aeq,beq,zeros(3,1)) 所求得的结果为:x 1=4/3,x 2=8/3,x 3=0;max f=28/3。 12 121212min 24s.t.28 ,0f x x x x x x x x ì=--????-?镲í?+???? 3??12 1212121243max 3412 ..3310 428 ,0 f x x x x s t x x x x x x ì =+????+????+?í???+????3??123 12312313min 3s.t.211 423 21 0(1,2,3) j f x x x x x x x x x x x x j =--ì????-+?????-++?í??-+=?? ??? ???123 123123max 3s.t.24 24 0(1,2,3) j f x x x x x x x x x x j =+-ì????++=??í-++=???? ????

(整理)matlab 动态规划讲义.

第四章动态规划 §1 引言 1.1 动态规划的发展及研究内容 动态规划(dynamic programming)是运筹学的一个分支,是求解多阶段决策问题的最优化方法。20世纪50年代初R. E. Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优性原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法—动态规划。1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作。 动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。 虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。 应指出,动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种特殊算法(如线性规划是一种算法)。因而,它不象线性规划那样有一个标准的数学表达式和明确定义的

一组规则,而必须对具体问题进行具体分析处理。因此,在学习时,除了要对基本概念和方法正确理解外,应以丰富的想象力去建立模型,用创造性的技巧去求解。 例1 最短路线问题 下面是一个线路网,连线上的数字表示两点之间的距离(或费用)。试寻求一条由A到G距离最短(或费用最省)的路线。 例2 生产计划问题 工厂生产某种产品,每单位(千件)的成本为1(千元),每次开工的固定成本为3(千元),工厂每季度的最大生产能力为6(千件)。经调查,市场对该产品的需求量第一、二、三、四季度分别为2,3,2,4(千件)。如果工厂在第一、二季度将全年的需求都生产出来,自然可以降低成本(少付固定成本费),但是对于第三、四季度才能上市的产品需付存储费,每季每千件的存储费为0.5(千元)。还规定年初和年末这种产品均无库存。试制定一个生产计划,即安排每个季度的产量,使一年的总费用(生产成本和存储费)最少。 1.2 决策过程的分类

动态规划matlab仿真实例整理

动态规划在火力分配中地应用. 1.问题描述 设有m个目标,目标价值(重要性和危害性)各不相同,用数值A(K=1,K =,其n枚导弹突袭,导弹击毁目标地概率P2,..m)表 示,计划用K为向目标发射地导弹数,问是常数,取决于导弹地特性与目标地性质;中题:做出方案使预期地突击效果最大. 2.问题建模 上述问题可以表述为 约束条件为 (为非负整数) 3.算法描述 ),和(n=5am=4下面通过一个实例说明:设目标数目为4(),导弹为5K取值情况如下表所示:表1:A取值情况k 4 2 3 1 K 目标 3 6 7 8 0.9 0.3 0.2

将火力分配可分为4个阶段,每个阶段指标函数为: 可能取值为0,1,2,3,4,5,将函数值带人如下表:表2函数值 u 0 0 0 0 0 1.79 1 1.81 1.45 2.36 2.51 2 3.16 2.64 3.79 2.81 4.66 3 4.15 3.61 2.93 4 4.89 5.19 4.41

5 5.44 5.06 5.51 动态规划问题基本方程为: c =0 逐次向前推一级 K=4 K=3 K=2 K=1

() 地最大值然后反推回去就可以获得最优地分配方案只需要求解4.Matlab仿 真求解 地最大值,对应取值为整数,可以采用动态规划地方法,获得与因为 地最优方案 function[p_opt,fval]=dynprog(x,DecisFun,SubObjFun,TransFun,ObjFun) %求解动态规划问题最小值函数 k=length(x(1,:)) %判断决策级数 x_isnan=~isnan(x)。 % 非空状态矩阵 t_vubm=inf*ones(size(x))。 % 性能指标中间矩阵 f_opt=nan*ones(size(x))。 % 总性能指标矩阵 d_opt=f_opt。 %每步决策矩阵 tmp1=find(x_isnan(:,k))。 % 最后一步状态向量 tmp2=length(tmp1)。 % 最后一步状态个数 for i=1:tmp2 u=feval(DecisFun,k,x(tmp1(i),k))。 tmp3=length(u)。%决策变量 for j=1:tmp3 % 求出当前状态下所有决策地最小性能指标 tmp=feval(SubObjFun,k,x(tmp1(i),k),u(j))。 if tmp <= t_vubm(i,k) %t_vub f_opt(i,k)=tmp。 d_opt(i,k)=u(j)。 t_vubm(i,k)=tmp。 end。 end。 end for ii=k-1:-1:1 tmp10=find(x_isnan(:,ii))。 tmp20=length(tmp10)。 for i=1:tmp20 %求出当前状态下所有可能地决策 u=feval(DecisFun,ii,x(tmp10(i),ii))。 tmp30=length(u) 。 for j=1:tmp30 % 求出当前状态下所有决策地最小性能指标 tmp00=feval(SubObjFun,ii,x(tmp10(i),ii),u(j))。 % 单步性能指标 tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j))。 % 下一状态 tmp50=x(:,ii+1)-tmp40。 % 找出下一状态在 x 矩阵地位置 tmp60=find(tmp50==0) 。 if~isempty(tmp60) if nargin<6 %矩阵不同需要修改nargin地值,很重要

用Matlab解法求解线性规划问题

Matlab 实验报告 实验目的:用Matlab 解法求解线性规划问题 实验一: 题目:求解线性规划问题: 12 max 3z x x =+ 12121 2x -x -2.x -2x 23x +2x 14 .s t ≥?? ≤??≤? 方法一:Matlab 解法 算法设计: 1、先求Z 的最小值,再取相反数即为所求的最大值。 2、将第一个约束条件改为 12-x +x 2 ≤。以便与另外两个约束条件保持 不等号方向的一致。 3、根据所给的约束条件,利用x=linprog(c,a,b)求解 求值程序: c=[-3,-1]; a=[-1,1;1,-2;3,2]; b=[2;2;14]; [x,fval]=linprog(c,a,b) 运行结果: x =

4.0000 1.0000 fval = -13.0000 结果处理及分析:当x1=4 , x2=1 时,(-Z )取最小值-13,Z 取最大值13. 方法二:图像法 程序代码: x=-4:1:4; y1=x-2; y2=2*x+2; y3=1/3*(14-2*x); y4=1/3*(13-x); plot(x,y1,x,y2,x,y3,x,y4,’:’) 经过对直线的适度调整后,得到图像为: -4 -3-2-1 01234 -6 -4-20246 810x y

结果处理及分析: 根据约束条件,星型图案所在的闭合三角形为可行域,易知,蓝色虚线代表的目标函数过A (1,4)时,Z 取最大值13。 实验二: 题目:某工厂利用甲,乙两种原料生产A1,A2,A3三种产品,每月可供应的 原料数量(单位:t ),每万件产品所需各种原料的数量及每万件产品的价格如表所示。试制定每月的最优生产计划,使得总收益最大。 算法设计: 1、设生产A1,A2,A3三种产品的量为x1 x2 x3 ,收益为Z ,写出Z 的表达式及约束条件为: 123 z =12x +5x +4x 12312343180 ..2632000(1,2,3)i x x x s t x x x x i ++≤??++≤??≥=? 2、求(-Z )的最小值,再取相反数即为Z 的最大值。 3、利用x=linprog(c,a,b,aeq,beq,vlb,vub)求解 程序: c=[-12,-5,-4]; a=[4,3,1;2,6,3];

最优化方法的Matlab实现(公式(完整版))

第九章最优化方法的Matlab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1 优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1.最小化函数

表9-1 最小化函数表 2.方程求解函数 表9-2 方程求解函数表 3.最小二乘(曲线拟合)函数 表9-3 最小二乘函数表

4.实用函数 表9-4 实用函数表 5.大型方法的演示函数 表9-5 大型方法的演示函数表 6.中型方法的演示函数 表9-6 中型方法的演示函数表 9.1.3 参数设置 利用optimset函数,可以创建和编辑参数结构;利用optimget函数,可以获得o ptions优化参数。 ● optimget函数 功能:获得options优化参数。

matlab解非线性规划例题

关于非线性规划问题 背景: 线性规划问题,即目标函数和约束条件都是线性函数的规划问题,但在实际工作中,还常常会遇到另一类更一般的规划问题,即目标函数和约束条件中至少有一个是非线性函数问题,即非线性规划问题。 求解方法:Matlab 软件 问题: 某厂向用户提供发动机,合同规定,第一、二、三季度末分别交货50台、70台、90台。每季度的生产费用为()^2f x ax bx =+(元), 其中x 是该季度生产的台数,若交货有剩余可用于下季度交货,但需支付存储费,每季度每台c 元。已知工厂每季度最大生产能力为100台,第一季度开始时无存货,设a =50,b =0.2,c =4,问工厂如何安排每月生产计划,才能既满足合同又使总费用最低(包括生产费用和库存费用)。 问题分析与假设: 目标函数是总费用,记为()F x 。 约束条件是生产合同和生产能力的限制。 设第一季度生产1x 台,第二季度生产2x 台,则第三季度生产(21012)x x --台。则: 1201221 x x ≤+≤ 501100x ≤≤ 02100x ≤≤ 由a =50,b =0.2,c =4,

第一季度生产费用15010.21^2T x x =+, 剩余品存储到下一季度的费用14(150)k x =-, 同理可得:25020.22^2T x x =+ 24(12120)k x x =+- 350(2101 2)0.2(2101T x x x x =--+-- 建模 总费用 ()12312103000.2(1^22^2)0.2(21012)^24(212120)F x T T T k k x x x x x x =++++=+++--++-先建立M-文件: a=50;b=0.2;c=4; H=diag(2*b*ones(1,3));C=[a+2*c,a+c,a]; A1=[-1,0,0;-1,-1,0];b1=[-50,-120]'; A2=[1 1 1];b2=210; v1=[0 0 0]';v2=[100 100 100]'; [x,faval,exitflag,output,lambada]=quadprog(H,C,A1,b1,A2,b2,v1,v2, []) X2=x'*H*x/2+C*x-140*c 再建立主程序: a=50;b=0.2;c=4; H=diag(2*b*ones(1,3));C=[a+2*c,a+c,a]; A1=[-1,0,0;-1,-1,0];b1=[-50,-100]'; A2=[1 1 1];b2=210; v1=[0 0 0]';v2=[100 100 100]'; [x,faval,exitflag,output,lambada]=quadprog(H,C,A1,b1,A2,b2,v1,v2,[]) X2=x'*H*x/2+C*x-140*c 运算结果:

相关主题
文本预览
相关文档 最新文档