实验一:用matlab的linprog求解简单线性规划问题
- 格式:docx
- 大小:227.10 KB
- 文档页数:7
应用Matlab 优化工具箱中的linprog 函数求解线性规划时模型要求为如下形式: ⎪⎩⎪⎨⎧≤≤=≤⋅M x x m x dx C b Ax .t .s xc min 其中:M x ,x ,m x 均为列向量,C ,A 为常数矩阵,d ,b ,c '为常数列向量。
函数调用格式如下:);xM ,xm ,d ,C ,b ,A ,c (linprog ]z ,x [= %决策变量有上下界,默认变量非负。
例1-38 用Matlab 求解下面线性规划问题1212121212max 1502102310034120..55150,0z x x x x x x s t x x x x =++≤⎧⎪+≤⎪⎨+≤⎪⎪≥⎩令z1= -zMATLAB 求解程序存为liti2.mc=[-150,-210];A=[2,3;3,4;5,5];b=[100;120;150];C=[];d=[];xm=[0;0];xM=10^10*[1;1];[x,z1]=linprog(c,A,b,C,d,xm,xM)Optimization terminated.在命令窗口键入liti2.m,按回车得最优解和最优值x =0.000030.0000z1 =-6.3000e+003故最优解为 x 1=0,x 2=30; 最优值为z=-z1=6300.通常在LINGO 中建立优化模型由MODEL 语句开始,由END 语句结束。
模型中包含四部分(即四段):集合(SETS )、数据段(DATA )、初始段(INIT )、目标和约束段。
(1) 集合段: 它是以 SETS 开始,ENDSETS 结束,其作用是定义所用集合变量及元素(数组的下标),以及相应的属性(数组)。
(2) 数据段:它是以 DA TA 开始,ENDDATA 结束,其作用是对集合段中定义的属性(数组)赋值(常数)。
数据之间用逗号分开或用空格分开。
(3) 初始段:它是以INIT 开始,ENDINTI 结束,其作用是对集合段中定义的属性(变量数组)赋迭代初值。
Matlab求解线性规划和整数规划问题Matlab是一种强大的数值计算和科学计算软件,可以用于求解各种数学问题,包括线性规划和整数规划问题。
本文将详细介绍如何使用Matlab来求解线性规划和整数规划问题。
一、线性规划问题的求解线性规划是一种优化问题,旨在找到一组变量的最佳值,以使线性目标函数在一组线性约束条件下最大或者最小化。
下面以一个简单的线性规划问题为例来说明如何使用Matlab求解。
假设有以下线性规划问题:最大化目标函数:Z = 3x + 5y约束条件:2x + y ≤ 10x + 3y ≤ 15x, y ≥ 01. 创建线性规划模型在Matlab中,可以使用linprog函数来创建线性规划模型。
首先,定义目标函数的系数向量c和不等式约束条件的系数矩阵A以及不等式约束条件的右侧常数向量b。
c = [-3; -5];A = [2, 1; 1, 3];b = [10; 15];2. 求解线性规划问题然后,使用linprog函数求解线性规划问题。
该函数的输入参数为目标函数的系数向量c、不等式约束条件的系数矩阵A、不等式约束条件的右侧常数向量b以及变量的下界和上界。
lb = [0; 0];ub = [];[x, fval, exitflag] = linprog(c, A, b, [], [], lb, ub);其中,x是最优解向量,fval是最优解对应的目标函数值,exitflag是求解器的退出标志。
3. 结果分析最后,打印出最优解向量x和最优解对应的目标函数值fval。
disp('最优解向量x:');disp(x);disp('最优解对应的目标函数值fval:');disp(fval);二、整数规划问题的求解整数规划是一种优化问题,与线性规划类似,但是变量的取值限制为整数。
Matlab提供了intlinprog函数来求解整数规划问题。
下面以一个简单的整数规划问题为例来说明如何使用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 、lingo 软件求解线性规划问题。
二、实验要求:1.熟悉线性规划问题的数学建模;2.会用matlab 、 lingo 软件求解线性规划问题;3.掌握线性规划的灵敏度分析。
三、实验内容:1、求解下列线性规划问题:⎪⎪⎩⎪⎪⎨⎧≥≤+≤+≤++=0,13119241171289..68max 2121212121x x x x x x x x t s x x z (1) 给出lingo 原始代码;lingo 程序代码:model:max =8*x1+6*x2; 9*x1+8*x2<=12; 7*x1+11*x2<=24; 9*x1+11*x2<=13;end(2) 计算结果(包括灵敏度分析,求解结果粘贴);(3) 回答下列问题:a) 最优解及最优目标函数值是多少;(x1,x2)=(1.333333,0)Z=10.66667b) 资源的对偶价格各为多少,并说明对偶价格的含义;第一、二、三种资源的对偶价格分别0.8888889,0,0;表示当对应约束有微小变动时, 目标函数的变化率。
当“9x1+8x2<=12”改为“9x1+8x2<=13”时,目标函数的值为10.66667+0.8888889=11.55556。
对于非紧约束,DUAL PRICE 的值为0,,表示对应约束中不等式右端项的微小扰动不影响目标函数。
c) 为了使目标函数值增加最多,让你选择一个约束条件,将它的常数项增加一个单位,你将选择哪一个约束条件?这时目标函数值将是多少?第一个约束条件:因为它是紧约束,即原料没有剩余。
这时的目标函数值为11.55556 (即现在的目标函数值加上后面的对偶价格)d) 对x2的目标函数系数进行灵敏度分析;Ranges in which the basis is unchanged:Objective Coefficient RangesCurrent Allowable Allowable Variable Coefficient Increase Decrease X1 8.000000 INFINITY 1.250000 X2 6.000000 1.111111 INFINITYRighthand Side RangesRow Current Allowable Allowable RHS Increase Decrease2 12.00000 1.000000 12.000003 24.00000 INFINITY 14.666674 13.00000 INFINITY 1.000000 在最优基不变的情况下,目标函数中x2系数的变化范围是(-∞,7.111111)e) 对第2个约束的约束右端项进行灵敏度分析;在最优基不变的情况下,给出了影子价格有意义条件下第二个约束右端的限制范围(9.33333,24)f ) 结合本题的结果解释“Reduced Cost”的含义表示最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。
北京联合大学实验报告项目名称:运筹学专题实验报告学院:自动化专业:物流工程班级: 1201B 学号:2012100358081 姓名:管水城成绩:2015 年 5 月 6 日实验一:用matlab的linprog求解简单线性规划问题一、实验目的:(1)使学生在程序设计方面得到初步的训练;,学习Matlab (C或VB)语言进行程序设计中一些常用方法。
二、实验用仪器设备、器材或软件环境计算机, Matlab R2006a三、算法步骤、计算框图、计算程序等1. 线性规划模型的一般形式,目标函数和所有的约束条件都是设计变量的线性函数:.2. 用MATLAB优化工具箱解线性规划:命令:x=linprog(c, A, b)命令:x=linprog(c,A,b,Aeq,beq)注意:若没有不等式:存在,则令A=[ ],b=[ ].命令:[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表示初始点3.求解简单线性规划问题1. 求解:打开matlab2006a软件,如图所示,点击file,新建script文件hh1并输入程序代码。
图1程序代码: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)运行该程序,结果如下图:图2由实验结果可知,该问题的最优解是x1=135,x2=20,x3=300,x3=0,x5=0,x6=0,最大值为250。
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为整数首先,我们需要定义目标函数的系数矩阵和约束条件的系数矩阵。
§15. 利用Matlab求解线性规划问题线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP问题求解:% min f'x% .(约束条件):Ax<=b% (等式约束条件):Aeqx=beq% lb<=x<=ublinprog函数的调用格式如下: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) 作有等式约束的问题。
若没有不等式约束,则令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 处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。
实验三 线性规划程序: linprogc=[-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)Exam5:function f=fun3(x);f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^2实验目的2、掌握用数学软件包求解线性规划问题。
1、了解线性规划的基本内容。
例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 jx0=[1;1];A=[2 3 ;1 4]; b=[6;5]; Aeq=[];beq=[]; VLB=[0;0]; VUB=[];[x,fval]=fmincon('fun3',x0,A,b,Aeq,beq,VLB,VUB)书 求下列非线性规划2221232212322123212223123min 8020..2023,,0x x x x x x x x x s t x x x x x x x +++⎧-+≥⎪++≤⎪⎪--+=⎨⎪+=⎪⎪≥⎩在Matlab 2013软件中输入如下程序: (i )编写M 文件fun1.m 定义目标函数function f=fun1(x); f=sum(x.^2)+8;(ii )编写M 文件fun2.m 定义非线性约束条件 function [g,h]=fun2(x); g=[-x(1)^2+x(2)-x(3)^2x(1)+x(2)^2+x(3)^3-20]; %非线性不等式约束 h=[-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %非线性等式约束 (iii )编写主程序文件example2.m 如下:options=optimset('largescale','off');[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[], ... 'fun2', options)就可以求得当1230.5522 1.2033,,0.9478x x x ===时,最小值y =10.6511。
北京联合大学
实验报告
项目名称:运筹学专题实验报告
学院:自动化专业:物流工程
班级: 1201B 学号:2012100358081 姓名:管水城成绩:
2015 年 5 月 6 日
实验一:用matlab的linprog求解简单线性规划问题
一、实验目的:
(1)使学生在程序设计方面得到初步的训练;,学习Matlab (C或VB)语言进行程序设计中一些常用方法。
二、实验用仪器设备、器材或软件环境
计算机, Matlab R2006a
三、算法步骤、计算框图、计算程序等
1. 线性规划模型的一般形式,目标函数和所有的约束条件都是设计变量的线性函数:.
2. 用MATLAB优化工具箱解线性规划:
命令:x=linprog(c, A, b)
命令:x=linprog(c,A,b,Aeq,beq)
注意:若没有不等式:存在,则令A=[ ],b=[ ].
命令:[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表示初始点
3.求解简单线性规划问题
1. 求解:
打开matlab2006a软件,如图所示,点击file,新建script文件hh1并输入程序代码。
图1
程序代码: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)
运行该程序,结果如下图:
图2
由实验结果可知,该问题的最优解是x1=135,x2=20,x3=300,x3=0,x5=0,x6=0,最大值为250。
2.求解:
若x,y满足:
43,
3525.
1.
x y
x y
x
-≤-
⎧
⎪
+≤
⎨
⎪≥
⎩
求z=2x+y的最大值。
打开matlab2006a软件,点击file,新建script文件hh2并输入程序代码:c=[-2 -1];
A=[1 -4;3 5 ];
b=[-3 25];
Aeq=[];
beq=[];
vlb=[1];
vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
运行该程序,结果如下图:
图3
由实验结果可知,该问题的最优解是x=5,y=2,最大值为12。
3.求解:
某校食堂以面食和米食为主,面食每百克含蛋白质6个单位,含淀粉4个单位,售价0.5元;米食每百克含蛋白质3个单位,含淀粉7个单位,售价0.4元.学校要给学生配制成盒饭,每盒至少有8个单位的蛋白质和10个单位的淀粉,应如何配制盒饭,才既科学又使费用最少?
解:由题意将该问题转化为线性规划问题如下:设配置x百克面食和y百克米饭Minz=0.5x+0.4y
St. 6x+3y>=8
4x+7y>=10
X,y>=0
打开matlab2006a软件,点击file,新建script文件hh3并输入程序代码:
c=[0.5 0.4];
A=[-6 -3;-4 -7];
b=[8 10];
Aeq=[];
beq=[];
vlb=[];
vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
运行该程序,结果如下图:
图4
由实验结果可知,应当配置0.8667百克的面食和0.9333百克的米饭能使满足营养需求,又能使得总费用最小,最小费用为0.8067元。
四、实验总结
本次做的只是最简单的线性规划问题,面对以后更大的、更复杂的问题奠定基础,所以我非常认真对待这次实验,做完本次实验,使我对单纯形方法,更加熟练,对matlab程序设计也更加熟悉。