通过一个简单的小例子来复习线性规划的上机操作。


标题

  • 例子
  • 影子价格
  • 灵敏度分析


例子

R语言中mortalitylaw中law类型有什么 r语言linearhypothesis_约束条件


首先写出该线性规划问题的数学模型

R语言中mortalitylaw中law类型有什么 r语言linearhypothesis_最优解_02


用R语言求解

library(lpSolve)
direction = 'max'
objective.vec = c(2,1)  #目标函数系数
a1 = c(0,5)   #每行约束条件中各变量的系数
a2 = c(6,2)
a3 = c(1,1)
a = rbind(a1,a2,a3)  #系数矩阵
a.dir = rep('<=',3)  #约束方向
a.rhs = c(15,24,5)  #约束值(等式右端)
solution = lp(direction, objective.vec, a, a.dir, a.rhs)
solution$solution  #变量的值
solution$objval  #目标函数的值

R语言中mortalitylaw中law类型有什么 r语言linearhypothesis_线性规划_03


即该公司每天制造3.5件家电1,1.5件家电2,能获利最大。

这个结果其实不是很合理,因为家电不能半件半件地生产,此处只是为了举例子。若真的考虑到现实,应该用整数规划求解。

影子价格

所谓资源的影子价格,是指在其他条件不变的情况下,单位资源变化所引起目标函数最优值的改变,即该资源的边际价格。影子价格又可以看作一种机会成本,在完全市场经济条件下,当一种资源的市场价格低于资源成本加上影子价格时,可以买入资源;市场价格高于资源成本加上影子价格时,可以卖出资源。随着资源的买进卖出,影子价格会发生变化。

solution = lp(direction, objective.vec, a, a.dir, a.rhs, compute.sens = TRUE)
solution$duals  #影子价格
solution$duals.from  
solution$duals.to  #约束条件变动范围,在此范围内影子价格不变

灵敏度分析

灵敏度分析研究的是模型中参数发生变化时,问题的最优解会有什么改变;或者这些参数在多大范围内变化时,问题的最优解不变。

针对上述例子,提出一种灵敏度分析:固定某一种产品的利润,则另一种产品的利润在什么范围内变化,能使得该公司的最优生产计划不变。

solution = lp(direction, objective.vec, a, a.dir, a.rhs, compute.sens = TRUE)
solution$sens.coef.from
solution$sens.coef.to

R语言中mortalitylaw中law类型有什么 r语言linearhypothesis_约束条件_04


结果表示固定家电1的利润时,家电2利润的变化范围是 [2/3, 2],家电1同理。