运用Matlab进行线性规划求解(实例)
Matlab求解线性规划和整数规划问题
Matlab求解线性规划和整数规划问题Matlab是一种强大的数学计算工具,可以用于求解各种数学问题,包括线性规划和整数规划问题。
本文将详细介绍如何使用Matlab求解线性规划和整数规划问题,并提供相应的代码示例和结果分析。
一、线性规划问题的求解线性规划问题是一类常见的数学优化问题,其目标是在一组线性约束条件下,找到使目标函数最优化的变量值。
在Matlab中,可以使用线性规划函数“linprog”来求解线性规划问题。
下面以一个简单的线性规划问题为例进行说明。
假设有如下线性规划问题:目标函数:maximize 2x1 + 3x2约束条件:x1 + x2 ≤ 5x1 - x2 ≤ 2x1, x2 ≥ 0首先,我们需要定义目标函数的系数矩阵和约束条件的系数矩阵。
在Matlab 中,可以使用矩阵来表示这些系数。
可以按照以下方式定义:c = [-2; -3]; % 目标函数的系数矩阵A = [1 1; 1 -1]; % 约束条件的系数矩阵b = [5; 2]; % 约束条件的右侧常数然后,我们可以使用“linprog”函数来求解线性规划问题。
代码如下:x = linprog(c, A, b); % 求解线性规划问题最后,我们可以输出求解结果,并进行结果分析。
代码如下:disp('最优解为:')disp(x)disp('目标函数的最优值为:')disp(-c'*x)运行以上代码,即可得到线性规划问题的最优解和目标函数的最优值。
在这个例子中,最优解为x1=2,x2=3,目标函数的最优值为-13。
二、整数规划问题的求解整数规划问题是线性规划问题的一种扩展,其变量需要取整数值。
在Matlab 中,可以使用整数规划函数“intlinprog”来求解整数规划问题。
下面以一个简单的整数规划问题为例进行说明。
假设有如下整数规划问题:目标函数:minimize 2x1 + 3x2约束条件:x1 + x2 ≥ 5x1 - x2 ≤ 2x1, x2 ≥ 0x1, x2为整数首先,我们需要定义目标函数的系数矩阵和约束条件的系数矩阵。
运用Matlab进行线性规划求解(实例)
8.2 线性规划线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。
8.2.1 基本数学原理线性规划问题的标准形式是:或写成矩阵形式为:线性规划的标准形式要求使目标函数最小化,约束条件取等式,变量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]=linprog(…):返回exitflag值,描述函数计算的退出条件。
●[x,lambda,exitflag,output]=linprog(…):返回包含优化信息的输出参数output。
●[x,fval,exitflag,output,lambda]=linprog(…):将解x处的拉格朗日乘子返回到lambda参数中。
Matlab求解线性规划和整数规划问题
Matlab求解线性规划和整数规划问题线性规划是一种数学优化问题,通过线性函数的最大化或者最小化来实现目标函数的优化。
整数规划是线性规划的一种特殊情况,其中变量被限制为整数值。
在Matlab中,我们可以使用优化工具箱中的函数来求解线性规划和整数规划问题。
下面将详细介绍如何使用Matlab来求解这些问题。
1. 线性规划问题的求解首先,我们需要定义线性规划问题的目标函数、约束条件和变量范围。
然后,我们可以使用linprog函数来求解线性规划问题。
例如,考虑以下线性规划问题:目标函数:最大化 2x1 + 3x2约束条件:x1 + x2 <= 10x1 - x2 >= 2x1, x2 >= 0在Matlab中,可以按照以下步骤求解该线性规划问题:1. 定义目标函数的系数向量c和约束矩阵A,以及约束条件的右侧向量b。
c = [2; 3];A = [1, 1; -1, 1];b = [10; -2];2. 定义变量的上下界向量lb和ub。
lb = [0; 0];ub = [];3. 使用linprog函数求解线性规划问题。
[x, fval] = linprog(-c, A, b, [], [], lb, ub);运行以上代码后,可以得到最优解x和目标函数的最优值fval。
2. 整数规划问题的求解对于整数规划问题,我们可以使用intlinprog函数来求解。
与线性规划问题类似,我们需要定义整数规划问题的目标函数、约束条件和变量范围。
然后,使用intlinprog函数求解整数规划问题。
例如,考虑以下整数规划问题:目标函数:最小化 3x1 + 4x2约束条件:2x1 + 5x2 >= 10x1, x2为非负整数在Matlab中,可以按照以下步骤求解该整数规划问题:1. 定义目标函数的系数向量f和约束矩阵A,以及约束条件的右侧向量b。
f = [3; 4];A = [-2, -5];b = [-10];2. 定义变量的整数约束向量intcon。
MATLAB优化工具箱--线性规划-非线性规划
linprog输入参数说明: f, A, b, Aeq, beq lb,ub 边界设置 说明: 如果x(i)无边界,则 lb(i) = -inf, ub(i) = inf
6
linprog 输出参数说明: x 决策变量取值 fval 目标函数最优值
exitflag > 0 成功找到最优解 0 达到最大迭代次数也没有找到最优解 < 0 该线性规划问题不可行或者linprog计
10
fmincon函数求解形如下面的有约束非线性规 划模型
一般形式:
min f ( X ) s.t. AX b
Aeq X beq l X u c(X ) 0 ceq ( X ) 0
Matlab求解有约束非线性最小化 1.约束中可以有等式约束 2.可以含线性、非线性约束均可
数学实验
输入参数语法:
例子:某农场种植两种作物A、B,需要甲、乙两种化肥。种植 每亩作物A和作物B分别需用的化肥数,可得利润及农场现有化
肥数量如下表所示:
问在现有条件下,如何安排种植,才能使利润最大?
作物
每亩所需化肥 (百公斤)
现有化肥
AB (百公斤)
化肥
甲
23
100) 6 4
数学实验
例题建模
[x,fval,exitflag,output,lambda]=fmincon(fun,x0,...)
数学实验
输入参数的几点说明
模型中如果没有A,b,Aeq,beq,lb,ub的限制,则以空矩阵[ ]作为 参数传入; nonlcon:如果包含非线性等式或不等式约束,则将这些函数
编写为一个Matlab函数, nonlcon就是定义这些函数的程序文件名;
3
用Matlab解法求解线性规划问题
实验目的:用Matlab解法求解线性规划问题
实验一:
题目:求解线性规划问题:
方法一:Matlab解法
算法设计:
1、先求Z的最小值,再取相反数即为所求的最大值。
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.
方法二:图像法
程序代码:
b=[180;200];
aeq=[];
beq=[];
vlb=[0;0;0];
vub=[];
[x,fval]=linprog(c,a,b,aeq,beq,vlb,vub)
maxz=-fval
运行结果:
x =
34.0000
0.0000
44.0000
fval =
-584.0000
maxz =
584.0000
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,’:’)
经过对直线的适度调整后,得到图像为:
结果处理及分析:根据约束条件,星型图案所在的闭合三角形为可行域,易知,蓝色虚线代表的目标函数过A(1,4)时,Z取最大值13。
Matlab求解线性规划和整数规划问题
Matlab求解线性规划和整数规划问题线性规划和整数规划是数学规划中常见的两种优化问题。
Matlab作为一种强大的数值计算软件,提供了丰富的工具和函数来解决这些问题。
本文将介绍如何使用Matlab求解线性规划和整数规划问题,并提供详细的步骤和示例代码。
一、线性规划问题的求解线性规划问题可以表示为如下形式的数学模型:```minimize c'*xsubject to A*x <= blb <= x <= ub```其中,c是目标函数的系数向量,x是决策变量向量,A是不等式约束矩阵,b 是不等式约束向量,lb和ub分别是决策变量的下界和上界。
Matlab中求解线性规划问题可以使用`linprog`函数。
下面是一个示例:```matlabc = [1; 2; 3]; % 目标函数的系数向量A = [1, -1, 2; 3, 1, 0]; % 不等式约束矩阵b = [4; 5]; % 不等式约束向量lb = zeros(3, 1); % 决策变量的下界ub = [Inf; Inf; 10]; % 决策变量的上界[x, fval] = linprog(c, A, b, [], [], lb, ub);```在上面的示例中,我们定义了目标函数的系数向量c,不等式约束矩阵A,不等式约束向量b,以及决策变量的下界lb和上界ub。
然后使用`linprog`函数求解线性规划问题,得到最优解x和最优目标函数值fval。
二、整数规划问题的求解整数规划问题是线性规划问题的一个扩展,要求决策变量取整数值。
Matlab中求解整数规划问题可以使用`intlinprog`函数。
下面是一个示例:```matlabc = [1; 2; 3]; % 目标函数的系数向量A = [1, -1, 2; 3, 1, 0]; % 不等式约束矩阵b = [4; 5]; % 不等式约束向量lb = zeros(3, 1); % 决策变量的下界ub = [Inf; Inf; 10]; % 决策变量的上界intcon = [1; 2]; % 决策变量的整数约束[x, fval] = intlinprog(c, intcon, A, b, [], [], lb, ub);```在上面的示例中,我们除了定义了线性规划问题的参数外,还定义了决策变量的整数约束intcon。
线性规划模型及matlab程序求解
§1 线性规划模型一、线性规划课题:实例1:生产计划问题假设某厂计划生产甲、乙两种产品,现库存主要材料有A类3600公斤,B类2000公斤,C类3000公斤。
每件甲产品需用材料A类9公斤,B类4公斤,C类3公斤。
每件乙产品,需用材料A类4公斤,B类5公斤,C类10公斤。
甲单位产品的利润70元,乙单位产品的利润120元。
问如何安排生产,才能使该厂所获的利润最大。
建立数学模型:设x1、x2分别为生产甲、乙产品的件数。
f为该厂所获总润。
max f=70x1+120x2s.t 9x1+4x2≤36004x1+5x2≤20003x1+10x2≤3000x1,x2≥0归结出规划问题:目标函数和约束条件都是变量x的线性函数。
形如: (1) min f T Xs.t A X≤bAeq X =beqlb≤X≤ub其中X为n维未知向量,f T=[f1,f2,…f n]为目标函数系数向量,小于等于约束系数矩阵A为m×n矩阵,b为其右端m维列向量,Aeq为等式约束系数矩阵,beq为等式约束右端常数列向量。
lb,ub为自变量取值上界与下界约束的n维常数向量。
二.线性规划问题求最优解函数:调用格式: 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, outpu t]=linprog(…)[x, fval, exitflag, output, lambda]=linprog(…)说明:x=linprog(f,A,b)返回值x为最优解向量。
MATLAB实验之线性规划问题求解
封面作者:PanHongliang仅供个人学习桂林电子科技大学数学与计算科学学院实验报告实验室:实验日期:年月日x附录Ⅱ综合性、设计性实验报告格式桂林电子科技大学数学与计算科学学院综合性、设计性实验报告版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理。
版权为潘宏亮个人所有This article includes some parts, including text, pictures, and design. Copyright is Pan Hongliang's personal ownership.用户可将本文的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人的书面许可,并支付报酬。
Users may use the contents or services of thisarticle for personal study, research or appreciation, andother non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimate rights of this website and its relevant obligees. In addition, when any content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevant obligee.转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目的的合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任。
线性规划中Matlab的运用
§1 线性规划在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。
此类问题构成了运筹学的一个重要分支—数学规划,而线性规划(Linear Programming 简记LP)则是数学规划的一个重要分支。
自从1947年G. B. Dantzig 提出求解线性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深入。
特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之一。
1.1 线性规划的实例与定义 例1 某机床厂生产甲、乙两种机床,每台销售后的利润分别为4000元与3000元。
生产甲机床需用B A 、机器加工,加工时间分别为每台2小时和1小时;生产乙机床需用C B A 、、三种机器加工,加工时间为每台各一小时。
若每天可用于加工的机器时数分别为A 机器10小时、B 机器8小时和C 机器7小时,问该厂应生产甲、乙机床各几台,才能使总利润最大?上述问题的数学模型:设该厂生产1x 台甲机床和2x 乙机床时总利润最大,则21,x x 应满足(目标函数)2134m ax x x z += (1)s.t.(约束条件)⎪⎪⎩⎪⎪⎨⎧≥≤≤+≤+0,781022122121x x x x x x x (2)这里变量21,x x 称之为决策变量,(1)式被称为问题的目标函数,(2)中的几个不等式是问题的约束条件,记为s.t.(即subject to)。
上述即为一规划问题数学模型的三个要素。
由于上面的目标函数及约束条件均为线性函数,故被称为线性规划问题。
总之,线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。
在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往也是困难的一步,模型建立得是否恰当,直接影响到求解。
而选取适当的决策变量,是我们建立有效模型的关键之一。
7.1 用MATLAB求解线性规划
b=zeros(m,n) c=ones(m,n) d=eye(m,n)
产生一个m行、n列的零矩阵 产生一个m行、n列的元素 全为1的矩阵 产生一个m行、n列的单位矩阵
MATLAB (matrix1)
Page 35
2、矩阵中元素的操作
(1)矩阵A的第r行:A(r,:) (2)矩阵A的第r列:A(:,r) (3)取矩阵A的第i1~i2行、第j1~j2列构成新矩阵:A(i1:i2, j1:j2) (4)以逆序提取矩阵A的第i1~i2行,构成新矩阵:A(i2:-1:i1,:) (5)删除A的第i1~i2行,构成新矩阵:A(i1:i2,:)=[ ] (6)删除A的第j1~j2列,构成新矩阵:A(:, j1:j2)=[ ] (7)将矩阵A和B拼接成新矩阵:[A B];[A;B]
a.\b=[b1/a1,b2/a2,…,bn/an] a.^b=[a1^b1,a2^b2,…,an^bn]
Page 32
1、矩阵的建立 ( 1)将矩阵的元素用方括号括起来,按矩阵行的 顺序输入各元素,同一行的各元素之间用空格或逗 号分隔,不同行的元素之间用分号分隔。在输入矩 阵时,按Enter键也表示开始一新行. 例:键入命令: A=[1 2 3;4 5 6;7 8 9] A=[1,2,3;4,5,6;7,8,9] 输出结果: A = 1 2 3 4 5 6 7 8 9
主要内容
一、 变量与函数 二、 数组与矩阵 三、 举例 四、 线性规划求解
Page 14
一、变量与函数
Page 15
Matlab是以矩阵为基本运算单元的,它的大部分 运算或命令都是在矩阵运算的意义下执行的。而构
成矩阵的基本单元是数字。
258×369
一、变量与函数
1、变量 命名规则是:
MATLAB求解线性规划(含整数规划和01规划)问题
MATLAB 求解线性规划(含整数规划和0-1规划)问题线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约束的,变量范围为有理数的线性规划。
如:max 712z x y =+9430045200s.t 310300,0x y x y x y x y +≤⎧⎪+≤⎪⎨+≤⎪⎪≥⎩对于这类线性规划问题,数学理论已经较为完善,可以有多种方法求解此类问题。
但写这篇文章的目的并不是为了介绍数学理论,我们这里主要讲解如果利用工具求解这一类线性规划问题。
最著名,同时也是最强大的数学最优化软件是LINGO/LINDO 软件包,它能够求解多种的数学规划问题,同时还提供了多种的分析能力。
但LINGO 软件并不容易上手,同时,应用LINGO 的场合一般是大规模的线性规划问题,小小的线性规划完全可以不使用它。
一个更受科研人员欢迎的数学软件是MATLAB ,它以功能强大而称著,并有数学软件中的“航空母舰”之称。
我们这里就是要学习使用MATLAB 软件求解线性规划(含整数规划和0-1规划)问题。
为了使得不熟悉MATLAB 的人员也能够使用MATLAB 进行线性规划问题求解,本文将对MATALB 中使用到的函数和过程以及结果进行详细的分析,最后会对每一个问题都给出一个可以完全“套用”的MATLAB 程序。
我们首先从上面的线性规划问题开始,为了便于表达,将上面的式子写成矩阵形式:max 712z x y =+9430045200s.t 310300,0x y x y ⎧⎛⎫⎛⎫⎛⎫⎪ ⎪ ⎪∙≤⎪ ⎪ ⎪ ⎪⎨⎝⎭ ⎪ ⎪⎝⎭⎝⎭⎪⎪≥⎩于是约束就表达为了一个Ax b ≤不等式。
求解MATLAB 线性规划时,最常用的函数是linprog 函数,下面来介绍一下这个函数的使用。
打开MATLAB 帮助文档(PS:帮助文档的内容是最全的,只要你的英文过了专业8级),可以看到linprog 函数求解的是具有如下标准形式的线性规划:min .Tx f x A X b s t Aeq X beq lb x ub ≤⎧⎪=⎨⎪≤≤⎩公式中各符号的意义是自明的,在这里简单介绍下,首先MATLAB 中求解的是目标函数是最小值的问题,但如果我们的目标函数是求最大值,可以通过对目标函数中每一项中乘以-1,将求最大值问题转化为求最小值问题;A ,b 分别为不等式约束中的系数矩阵。
matlab最优化问题的经典例题
matlab最优化问题的经典例题MATLAB最优化问题的经典例题之一是线性规划问题。
线性规划是一种数学优化方法,用于寻找一组给定线性约束条件下使得目标函数达到最大或最小值的变量值。
假设有以下线性规划问题:最大化目标函数:Z = c1*x1 + c2*x2 + ... + cn*xn在满足约束条件:A*x <= bx >= 0下,求解变量x1, x2, ..., xn的最优解。
使用MATLAB求解该线性规划问题的代码如下:```% 定义目标函数系数向量cc = [c1; c2; ...; cn];% 定义不等式约束条件系数矩阵A和右侧常数向量bA = [A11, A12, ..., A1n;A21, A22, ..., A2n;...,Am1, Am2, ..., Amn];b = [b1; b2; ...; bm];% 定义变量的下界和上界lb = zeros(n, 1); % 下界为0,即 x >= 0ub = Inf(n, 1); % 上界为无穷大,即无上界% 求解线性规划问题[x, fval] = linprog(-c, A, b, [], [], lb, ub);% 输出最优解和最优值disp('最优解:')disp(x)disp('最优值:')disp(-fval)```在上述代码中,我们将目标函数系数向量c、不等式约束条件系数矩阵A和右侧常数向量b、变量的下界和上界lb、ub传递给linprog函数进行求解。
linprog函数返回最优解x和最优值-fval(由于linprog默认求解最小化问题,我们使用-c作为目标函数系数向量,将最大化问题转化为最小化问题)。
通过以上代码,我们可以求解线性规划问题的最优解和最优值,并使用MATLAB进行验证和分析。
这个例题可以帮助我们理解和掌握MATLAB中最优化问题的求解方法。
规划问题matlab求解
• B1,B2的获利经常有10%的波动,对计划有无影响?
12小时 1桶牛 奶 或 8小时
3千克 A1 1千克
2小时,3元
获利24元/千克
0.8千克 B1
获利16元/kg
获利44元/千克
4千克 A2
1千克
2小时,3元
0.75千克 B2
获利32元/千克
决策 变量 目标 函数 约束 条件
出售x1 千克 A1, x2 千克 A2, x5千克 A1加工B1, x6千克 A2加工B2 利润
如何装运, 使本次飞行 获利最大?
货机装运
模型建立
xij--第i 种货物装入第j 个货舱的重量 目标 Max Z 3100 ( x11 x12 x13 ) 3800 ( x21 x22 x23 ) 函数( 3500 ( x31 x32 x33 ) 2850 ( x41 x42 x43 ) 利润)
0-1规划模型
课号
1 2
约束条件
先修课要求
课名 微积分 线性代数 最优化方法 数据结构 应用统计 计算机模拟 计算机编程 预测理论 数学实验
3 4 5 6 7 8 9
微积分;线性代数 计算机编程 微积分;线性代数 计算机编程 应用统计 微积分;线性代数
应用统计 微积分;线性代数
要求至少选两门数学课、三门运筹学课和两门计算机课 为了选修课程门数最少,应学习哪些课程 ? 选修课程最少,且学分尽量多,应学习哪些课程 ?
0-1规划模型
课号 1 2 3 4 5 6 7 8 9 课名 微积分 线性代数 最优化方法 数据结构 应用统计 计算机模拟 计算机编程 预测理论 数学实验 所属类别 数学 数学 数学;运筹学 数学;计算机 数学;运筹学 计算机;运筹学 计算机 运筹学 运筹学;计算机
用MATLAB求解线性规划问题
用MATLAB 求解线性规划问题这里X 是问题的解向量,f 是由目标函数的系数构成的向量,A 是一个矩阵,b 是一个向量,A ,b 和变量x={x 1,x 2,…,x n }一起,表示了线性规划中不等式约束条件,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 是线性不等式约束条件,eqlin 是线性等式约束条件,upper 是变量的上界约束条件,lower 是变量的下界约束条件。
它们的返回值分别表示相应的约束条件在约束条件在优化过程中是否有效。
例1:某工厂生产A ,B 两种产品,所用原料均为甲、乙、丙三种:生产一件产品所需原料和所获利设生产A 产品1x 件,生产B 产品2x 件,z 为所获利润,我们将问题归结为如下的线性规划问题:12min {(700010000)}x x -+s.t. 121212863804830046220x x x x x x +≤⎧⎪+≤⎨⎪+≤⎩接着写出Matlab 程序如下:clearf=-[7000,10000];A=[8,6;4,8;4,6];b=[380,300,220];[X,fval]=linprog(f,A,b)运行结果为:>> Optimization terminated successfully.X =40.000010.0000fval = -3.8000e+005例2:求解下面的线性规划问题:123min {546}x x x ---s.t. 12320x x x -+≤12332442x x x ++≤123230x x +≤10x ≤,20x ≤,30x ≤解决上述问题的Matlab 程序为:clearf=-[5,4,6];A=[1,-2,1;3,2,4;3,2,0];b=[20,42,30];LB=[0;0;0];[X,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],LB)程序运行的结果为:Optimization terminated successfully.X = 0.000015.00003.0000fval = -78.0000exitflag = 1output = iterations: 6cgiterations: 0algorithm: 'lipsol' lambda = ineqlin: [3x1 double]eqlin: [0x1 double]upper: [3x1 double]lower: [3x1 double]。
用MATLAB求解线性规划
数额为 M 的相当大的资金作一个时期的投资。 这 n 种资产 在这一时期内购买 s 的平均收益率为 r ,风险损失率为 q ,
i i i
投资越分散,总的风险越小,总体风险可用投资的 s 中最
i
大的一个风险来度量。 购买 s 时要付交易费,(费率 p ),当购买额不超过给定值u
i
i
i
时,交易费按购买 u 计算。另外,假定同期银行存款利率
符号规定: Si ——第 i 种投资项目,如股票,债券 ri,pi,qi ----分别为 Si 的平均收益率,风险损失率,交易费率 ui ----Si 的交易定额 r -------同期银行利率 xi -------投资项目 Si 的资金 a -----投资风险度 Q ----总体收益 Δ Q ----总体收益的增量
m in z (6
3
x1 4) x2 x3
s.t .
1 0
解: 编写M文件xxgh2.m如下: c=[6 3 4]; A=[0 1 0]; b=[50]; Aeq=[1 1 1]; beq=[120]; vlb=[30,0,20]; vub=[]; [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
二、基本假设和符号规定
基本假设: 1. 投资数额 M 相当大,为了便于计算,假设 M=1; 2.投资越分散,总的风险越小; 3.总体风险用投资项目 s i 中最大的一个风险来度量; 4.n 种资产 S i 之间是相互独立的; 5.在投资的这一时期内, ri,pi,qi,r0 为定值,不受意外因素 影响; 6.净收益和总体风险只受 ri,pi,qi 影响,不受其他因素干扰。
解 编写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];
第五讲 规划问题的matlab计算
但是,输入matlab计算时,应该输入成x1,x2,…,x25的 格式。本题有25个0-1变量且需要约束全部化为小于等 于形式。约束矩阵是20x25的矩阵(为什么?),应 该采用稀疏矩阵的输入方式。
>> clear >> c=[32 17 34 36 25 21 31 21 22 19 24 29 40 28 39 26 35 41 33 29 33 27 31 42 22]; >> A=zeor(20,25);
后者略优于前者bfgs是至今最好的拟牛顿法下面对两种算法作一个计算对比functionfgzuisu2xdfp拟牛顿法计算initialhesstypeidentity初始hesse矩阵用单位阵optionsoptimset?largescale??off??hessupdate??dfp??gradobj??on??maxfunevals?250?initialhesstype??identity??display??iter?
参数输入: Fun: x0: 目标函数,一般用M文件给出 优化的初始点
Options: 参数设置(后面说明)
函数输出:
X:最优点(或最后迭代值) Fval:最后迭代值的目标函数值 Exitflag:函数结束的信息 Oupput:函数基本信息,包括迭代次数,目标函数最 大计算次数,使用的算法名称,计算规模
x =
Ax b, s.t .Qx p , x 0
求解命令: x=linprog(c,A,b,Q,p)
若没有不等式,则令A=[ ],b=[ ]。
例2
例2 求解线性规划
min z 13 x1 9 x2 10 x3 11x4 12 x5 8 x6 ; x1 x4 400, x x 600, 5 2 x3 x6 500, s.t. 0.4 x1 1.1x2 x3 800, 0.5 x4 1.2 x5 1.3 x6 900, x16 0
用MATLAB求解线性规划
模型 1 固定风险水平,优化收益
目标函数: 约束条件:
n 1
Q=MAX (ri pi )xi
i 1
qi xi ≤a
M
(1 p )x M , ii
xi≥ 0
i=0,1,…n
b.若投资者希望总盈利至少达到水平 k 以上,在风险最小的 情况下寻找相应的投资组合。
模型 2 固定盈利水平,极小化风险
从 a=0 开始,以步长△a=0.001对下列组合投资模型求解, 并绘图表示 a 与目 标函数最优值 Q 的对应关系:
max s.t.
Q = (-0.05, -0.27, -0.19, -0.185, -0.185) (x0,x1,x2,x3,x4) T
x0 + 1.01x1 + 1.02x2 +1.045x3 +1.065x4 =1
目标函数: R= min{max{ qixi}} 约束条件:
n
(r i
p )x
i
i
≥k,
i0
(1 pi )xi M , xi≥ 0
i=0,1,…n
c.投资者在权衡资产风险和预期收益两方面时,希望选择 一个令自己满意的投资组合。
因此对风险、收益赋予权重 s(0<s≤1),s 称为投资偏好 系数.
2.当投资越分散时,投资者承担的风险越小,这与题意一致。即: 冒险的投资者会出现集中投资的情况,保守的投资者则尽量分散投资。
3.曲线上的任一点都表示该风险水平的最大可能收益和该收益要求的最 小风险。对于不同风险的承受能力,选择该风险水平下的最优投资组合。
4.在a=0.006附近有一个转折点,在这一点左边,风险增加很少时,利润增长
符号规定:
Si
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性规划
线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。
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]=linprog(…):返回exitflag 值,描述函数计算的退出条件。
●[x,lambda,exitflag,output]=linprog(…):返回包含优化信息的输出参数output 。
●[x,fval,exitflag,output,lambda]=linprog(…):将解x 处的拉格朗日乘子返回到lambda 参数中。
调用格式中,lambda 参数为解x 处包含拉格朗日乘子的结构。
它有以下一些字段:
lower —下界lb
upper —上界ub
ineqlin —线性不等式
eqlin —线性等式
exitflag 参数表示算法终止的原因,下面列出不同值对应的退出原因:
1 函数在解x 处有解
0 迭代次数超过
-2 没有找到可行点
-3 问题无解
-4 执行算法时遇到NaN
-5 原问题和对偶问题都不可行
-7 搜索方向太小,不能继续前进。
8.2.3 应用实例
例8-2 某河流边有两个化工厂,流经第一个化工厂的河水流量是每天500万立方米,在两个工厂之间有一条流量为200万立方米的支流(如图8-1所示)。
第一个化工厂每天排放工业污水2万立方米,第二个化工厂每天排放工业污水万立方米,从第一个化工厂排出的污水流到第二个化工厂之前,有20%可自然净化。
根据环保要求,河流中工业污水的含量应不大于%,因此两个化工厂都必须各自处理净化一部分污水,第一个化工厂处理污水的成本是元∕立方米,第二个化工厂处理污水的成本是元∕立方米。
问在满足环保要求的条件下,各化工厂每天应处理多少污水,才能使两厂总的处理污水费用最少
第一化工厂 第二化工厂
图8-1
解:设1x ,2x 分别表示第一个化工厂和第二个化工厂每天处理的污水量(万立方米∕天)。
则目标函数:218001000x x f +=(元∕天)
约束条件1:
%2.0500
21≤-x ,即11≥x ; 约束条件2:%2.0700
)4.1()2(8.021≤-+-x x ,即6.18.021≥+x x ; 约束条件3:⎩⎨⎧≤≤4.1221x x 。
因此,该问题的线性规划模型归结为:
218001000m in x x f +=
⎪⎪⎪⎩
⎪⎪⎪⎨⎧≥≤≤-≤---≤-0,4.12
6.18.01..2121211x x x x x x x t s 求解程序:
%线性规划问题
f=[1000 800];
A=[-1 0; -1;1 0;0 1];
b=[-1;;2;];
lb=zeros(2,1);
[x,fval,exitflag]=linprog(f,A,b,[],[],lb)
运行结果:
x =
fval =+003
exitflag =1
由上可知,第一个化工厂每天处理的污水量为1万立方米∕天,第二个化工厂每天处理的污水量为万立方米∕天,才能使两厂总的处理污水费用最少。