R语言实现线性规划求解
在日常生活中,我们经常会遇到如何最合理化的安排我们的资源,以取得最大经济效益的问题。比如在物流行业里,每个卡车分别装多少货才能使得成本最低?此类问题构成了运筹学的一个重要分支—数学规划,而线性规划(Linear Programming 简记 LP)则是数学规划的一个重要分支。自从 1947 年 G. B. Dantzig 提出求解线性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深入。特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之一。
我们举个例子,假设某机床厂生产甲、 乙两种机床, 每台销售后的利润分别为 4000 元与 3000 元。生产甲机床需用 A、 B 机器加工,加工时间分别为每台 2 小时和 1 小时;生产乙机床需用 A、 B、 C 三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别为 A 机器 10 小时、 B 机器 8 小时和C 机器 7 小时,问该厂应生产甲、乙机床各几台,才能使总利润最大?
这总问题怎么解呢?我们可以做出这样的假设:设该厂生产 x1 台甲机床和 x2 乙机床时总利润最大, 则 x1, x2应满足如下条件:
我们的目的是为了使得利润最大,那么其实我们就是使得4000*x1+3000*x2最大就可以了,因此,这个函数就是我们的目标函数
同时,根据题目的已知条件我们可以得出,有一些约束条件我们必须要遵守。这些约束条件为:2*x1+x2<=10, x1+x2<=8,x2<=7,x1>=0,x2>=0
在这里,我们称变量 x1, x2 称之为决策变量, 4000*x1+3000*x2被称为问题的目标函数, 几个不等式是问题的约束条件,记为 s.t.(即 subject to)。由于上面的目标函数及约束条件均为线性函数,故被称为线性规划问题。
下面就介绍一下用R语言如何实现线性规划求解。
我们要用到一个包,名字为Rsymphony
首先要安装这个包:
install.packages("Rsymphony")
然后在程序中调用这个包
library(Rsymphony)
定义目标函数
obj <- c(4, 3)
定义约束条件矩阵
mat <- matrix(c(2,1,0,1,1,1), nrow = 3)
> mat
[,1] [,2]
[1,] 2 1
[2,] 1 1
[3,] 0 1
定义条件
dir <- c("<=", "<=", "<=")
定义条件右边得值
rhs <- c(10, 8, 7)
设置是否求最大值
max <- TRUE
求解
Rsymphony_solve_LP(obj, mat, dir, rhs, max = max)
结果:
$solution
[1] 2 6#结果为x1=2,x2=6
$objval
[1] 26
$status
TM_OPTIMAL_SOLUTION_FOUND
0 #0表示有结果,1表示没找到结果
好了,这就是今天给大家分享的,如何用R语言进行线性规划求解,每天学习一点点,每天进步一下下。