课程推荐:6 线性规划模型基本原理与编程实现_哔哩哔哩_bilibili
在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支:数学规划。而线性规划(Linear Programming 简记LP)则是数学规划的一个重要分支。
一、线性规划的实例与定义
1.1 线性规划的实例
例:某机床厂生产甲、乙两种机床,每台销售后的利润分别为4千元与3千元。生产甲机床需用A、B机器加工,加工时间分别为每台 2小时和1小时;生产乙机床需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各几台,才能使总利润最大?
上述问题的数学模型:设该厂生产x1台甲机床和x2乙机床时总利润z最大,则x1,x2应满足:
以上便是一个线性规划问题的数学模型,其中变量x1,x2称之为决策变量,(1.1)式被称为问题的目标函数,(1.2)中的几个不等式是问题的约束条件,记为s.t.(即subject to)。
1.2 线性规划的定义
目标函数及约束条件均为线性函数,故被称为线性规划问题。线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。
1.3 最优解
满足约束条件的解x=[x,,L ,xI',称为线性规划问题的可行解,而使目标函数达到最大值的可行解叫最优解。
1.4 线性规划的Mathlab标准形式以及求解器求解
线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号。为了避免这种形式多样性带来的不便,Matlab中规定线性规划的标准形式:
其中c和x为n维列向量,A、Aeq为适当维数的矩阵,b、beq为适当维数的列向量。
Matlab中求解线性规划的命令为:
Matlab中的linprog函数是一个线性规划求解器,可以用于求解线性规划问题。
[x,fval] = linprog(c,A,b)
[x,fval] = linprog(c,A,b,Aeq,beq)
[x,fval] = linprog(c,A,b,Aeq,beq,lb,ub)
其中,x返回的是决策向量的取值,fval返回的是目标函数的最优值,c为价值向量,A,b对应的是线性不等式约束,Aeq,beq对应的是线性等式约束,lb和ub分别对应的是决策向量的下界向量和上界向量。
1.5 使用linprog函数
1. 目标函数中求max时,将目标函数的系数全部取反,即可看作求min,代入linprog函数,求得目标函数的最优值再取反回来,便得到了求max时目标函数的最优值(y)。这时,决策向量(x)的取值正对应着求max时目标函数的最优值,所以不变。
2. 约束条件中的不等号为大于号时,系数全部取反,代入linprog函数即可。