乐趣区

关于算法:R语言解决最优化问题线性规划LP问题

原文链接:http://tecdat.cn/?p=3432

原文出处:拓端数据部落公众号

线性规划简介

优化是一种为所有可能的解决方案找到给定问题的最佳解决方案的技术。优化应用严格的数学模型来找出给定问题的最无效解决方案。

要从优化问题开始,首先确定指标十分重要。指标是绩效的量化掂量。例如:最大化利润,最小化工夫,最小化老本,最大化销售。

优化问题可分为两组

  1. 线性规划(LP):它也被称为线性优化,在这个问题中,指标是在数学模型中获得最佳后果,其中指标和所有束缚是决策变量的线性函数。
  2. 二次布局(QP):在二次布局中,指标是决策变量和束缚的二次函数,它们是变量的线性函数。二次函数也是一种非线性布局。

对于这篇文章,解释了线性规划问题。

R 中的线性优化:

 个别优化问题的内置函数示例:

  • 程序的个别参数构造是:
optimizer(objective, constraints, bounds=NULL, types=NULL, maximum=FALSE)

例:

  • 定义指标函数
f <- function(x) 2 * (x\[1\]-1)^2 + 5 * (x\[2\]-3)^2 + 10
  • 优化
r < -  optim(c(1,1),f)
  • 查看优化是否收敛到最小
r $ convergence == 0 ## 如果收敛到最小值,则返回 TRUE

## \[1\]TRUE
  • 最优输出参数
R $par

## \[1\] 1.000168 3.000232
  • 指标函数的值
R $value

## \[1\] 10

线性规划(LP)

线性编程示意为:

min c T   = min(c 1 x 1 + … + c n x n)

束缚:

x> = B,x  \> = 0

线性规划示例:

  • 一家公司心愿最大化两种产品 A 和 B 的利润,别离以 25 元和 20 元的价格发售。每天有 1800 个单位资源,产品 A 须要 20 个单位,而 B 须要 12 个单位。这两种产品都须要 4 分钟的生产工夫,并且可用的总工作工夫为每天 8 小时。每种产品的生产数量应该是多少能力使利润最大化。

上述问题的指标函数是:

max(销售额)=max(25 x1 + 20 x2)

其中,
x1 是产品 A 的生产数量
x2 是产品 B 的生产数量
x 1 和 x 2 也称为决策变量

问题中的束缚(资源和工夫):

20×1 + 12 x2 <= 1800(资源束缚)
4×1 + 4×2 <= 8 * 60(工夫束缚)

解决 R 中的上述问题:

因为这是一个线性规划问题,咱们将应用_lp()_函数来找到最优解。_lp()_函数的语法  是:

lp(direction =“min”,objective.in,const.mat,const.dir,const.rhs)
  • _方向_是最小化或最大化
  • 指标函数_objective.in_
  • 束缚_A_作为矩阵_const.mat 给出_,方向为_const.dir_
  • 束缚 b 作为向量_const.rhs_插入
## 设置决策变量的系数
objective.in < - c(25,20)## 创立束缚 martix
const.mat < - martix(c(20,12,4,4))## 定义束缚
time_constraint < -(8 * 60)## 找到最佳解决方案
最佳 < -   lp(direction ="max",objective.in,const.mat,const.dir,const.rhs)
## 显示 x1 和 x2 的最佳值
 

## \[1\] 45 75

## 在最佳点查看指标函数的值
 

## \[1\] 2625

从下面的输入中,咱们能够看到该公司应该生产 45 个产品 A 和 75 个产品 B,以取得 2625 元的销售额。

在建设指标函数和束缚之后,咱们能够扩大雷同的办法来解决 R 中的其余 LP 问题。

还有问题吗?请在上面留言!

退出移动版