对偶问题影子价格求解—R实现
求解线性规划问题时,除了原问题(Primal Problem)外,还存在一个与之相伴的对偶问题(Dual Problem)。线性规划的对偶问题基于对偶性原理,即每一个线性规划问题都可以对应一个对偶问题,二者之间存在特定的数学关系。这种关系不仅体现在最优解的等价性上,还涉及对偶约束条件与原问题变量的相互影响。分析对偶问题的意义在于:首先,它可以提供求解线性规划问题的新方法,如单纯形法的对偶单纯形法;其次,对偶问题的最优解往往揭示了原问题变量的经济解释,如影子价格和约束的松弛度;最后,在大规模优化问题中,对偶理论能够提高计算效率,并为敏感性分析提供有力工具。因此,对偶理论不仅丰富了线性规划的理论体系,还在求解过程中提供了更深刻的经济意义和计算优势。
一、线性规划的对偶问题
例1:某厂生产A,B, C三种产品,每种产品的单位利润分别为12,18和15,资源消耗如下表,求总利润最大的生产方案。
A | B | C | 资源 | |
---|---|---|---|---|
原料1/单位产品 | 6 | 9 | 5 | 200 |
原料2/单位产品 | 12 | 16 | 17 | 360 |
人工/单位产品 | 25 | 20 | 12 | 780 |
利润 | 12 | 18 | 15 |
1.1 自主生产
设生产A,B,C分别为\(x_1\),\(x_2\),\(x_3\)个单位,数学模型为(LP):
\begin{array}{l} \max z = 12{x_1} + 18{x_2} + 5{x_3}\\ s.t.\left\{ {\begin{array}{*{20}{c}} {6{x_1} + 9{x_2} + 5{x_3} \le 200}\\ {12{x_1} + 16{x_2} + 17{x_3} \le 360}\\ {25{x_1} + 20{x_2} + 12{x_3} \le 780}\\ {{x_1} \ge 0,{x_2} \ge 0,{x_3} \ge 0} \end{array}} \right. \end{array}
1.2 外包资源
如果接受外来订单加工可看成将企业拥有的三种资源(原料1、原料2和人工)出售给对方,每单位资源售价(利润)为\(y_i\)(\(i=1,2,3\)),则6个单位资源1加12个单位资源2再加上25个小时人工相当于生产一个单位产品A1,故这些资源的总售价应至少为产品A1的售价,不然给别人加工不如自己生产产品A1,同理我们就得到如下对偶线性规划(DLP):
\begin{array}{l} \min w = 200{y_1} + 360{y_2} + 780{y_3}\\ s.t.\left\{ {\begin{array}{*{20}{c}} {6{y_1} + 12{y_2} + 25{y_3} \ge 12}\\ {9{y_1} + 16{y_2} + 20{y_3} \ge 18}\\ {5{y_1} + 17{y_2} + 12{y_3} \ge 5}\\ {{y_1} \ge 0,{y_2} \ge 0,{y_3} \ge 0} \end{array}} \right. \end{array}
1.3 影子价格
所谓资源的影子价格,就是对偶问题的最优解,是指在其他条件不变的情况下,单位资源变化所引起目标函数最优值的改变,即该资源的边际价格。影子价格又可以看作一种机会成本,在完全市场经济条件下,当一种资源的市场价格低于资源成本加上影子价格时,可以买入资源;市场价格高于资源成本加上影子价格时,可以卖出资源。随着资源的买进卖出,影子价格会发生变化。
影子价格的特点
(1)系统资源的最优估价:影子价格是综合考虑系统内所有因素和相互影响之后对资源在系统内的真实价值的估价。只有系统达到最优状态时才可能赋予该资源这种价值。因此,也有人称之为最优计划价格。
(2)影子价格是一种边际值:它与经济学中边际成本的概念相同,在管理中有十分重要的应有价值,管理者可以根据资源在本企业内影子价格的大小决定企业的经营策略。
(3)影子价格是一种机会成本:它与经济学中机会成本的概念相同,在决策中有十分重要的应有价值,管理者可以根据机会成本的大小决定企业的资源是否应该使用。但这里的机会成本只是企业生产范围内机会成本。
(4)影子价格与系统价值取向和状态有关:影子价格(\(y=C_B\)B-1\()的取值与系统的价值取向有关(反映在\)\(C_B\)上);影子价格受系统状态影响(反映在B-1上);系统内部资源数量和价格的任何变化都会引起影子价格的变化,从这种意义上讲,它是一种动态的价格体系。
(5)反映资源在系统内的稀缺程度:如果资源在系统内供大于求,其影子价格为零。增加该资源的供应不会给系统目标带来任何变化。如果是稀缺资源,其影子价格大于零。价格越高,资源的稀缺程度越高。按以下原则考虑经营策略:影子价格高于市场价格(或≥0)表明资源有获利能力,购入该资源。影子价格低于市场价格(或≤0)表明该资源无获利能力,出让该资源。影子价格等于市场价格(或=0)表明该资源处于平衡状态,既不用买入,也不必卖出。
二、影子价格的R计算1
例2:家具公司A生产书桌、餐桌和椅子。 每种家具的生产都需要木材和两种熟练劳动:抛光和木工。 制作每种家具所需的各种资源的数量、可用资源量以及每种家具的售价如下表所示。
资源 | 书桌 | 餐桌 | 椅子 | 可用资源量 |
---|---|---|---|---|
木材(立方米) | 8 | 6 | 1 | 48 |
抛光时间(小时) | 4 | 2 | 1.5 | 20 |
木工时间(小时) | 2 | 1.5 | 0.5 | 8 |
售价(元) | 600 | 300 | 200 |
求该公司应如何安排生产,才能使得收入最大化。
2.1 线性规划模型与其对偶问题
解:设书桌的产量为 \(x_1\),餐桌的产量为\(x_2\),椅子的产量为\(x_3\),此时模型可以描述为
这个线性规划的对偶问题为
2.2 求解的R程序
# 加载 lpSolve 包
library(lpSolve)
# 目标函数系数
c <- c(48, 20, 8)
# 约束系数矩阵
A <- matrix(c(8, 4, 2,
6, 2, 1.5,
1, 1.5, 0.5),
nrow = 3, byrow = TRUE)
# 约束右侧常数
b <- c(600, 300, 200)
# 约束方向
constraints_dir <- c(">=", ">=", ">=")
# 求解线性规划的最小化问题
solution <- lp("min", c, A, constraints_dir, b, compute.sens = TRUE)
# 输出最优解
cat("最优目标值 z =", solution$objval, "\n")
cat("最优解 (w1, w2, w3) =", solution$solution, "\n")
# 输出最优解
cat("最优目标值 z =", solution$objval, "\n")
最优目标值 z = 2800
cat("最优解 (w1, w2, w3) =", solution$solution, "\n")
最优解 (w1, w2, w3) = 0 100 100
三、影子价格的R计算2
例3:一奶制品加工厂用牛奶生产A1和A2两种产品,一桶牛奶可以在甲车间用12h加工成3kg的A1产品,或者在乙车间用8h加工成4kg的A2产品。两种产品的利润分别为24元/kg和16元/kg。1kgA1产品在甲车间用2小时和3元成本加工成0.8kg B1产品,每千克B1产品可获利44元。1千克A2产品在乙车间用2小时和3元成本加工成0.75千克B2产品,每千克B2产品可获利32元。加工厂每天得到50桶牛奶的供应,每天正式工人总的劳动时间为480个小时,甲车间的设备上限为每天100千克,乙车间无限制。
A1 | A2 | B1 | B2 | 资源 | |
---|---|---|---|---|---|
牛奶 | 1 | 1 | 50 | ||
甲车间 | 3 | 100 | |||
A1 | 1 | ||||
A2 | 1 | ||||
总工时 | 12 | 8 | 2 | 2 | 480 |
单位利润 | 24 | 16 | 44 | 32 |
(1)制定一个生产计划,是每天的获利最大。
(2)30元可增加1桶牛奶,3元可增加1小时时间,是否应该投资?现投资150元,可赚回多少?
(3)B1、B2的获利经常有10%的波动,对计划有无影响?
!!!注意A1和A2既是产品又是制造B1和B2的原料
3.1 建立数学模型
依题意,一桶牛奶在甲车间经过12小时可生产3KG A1产品,1KG A1产品经过2小时和3元成本可生产0.8KGB1产品,每千克B1获利44元;一桶牛奶在乙车间经过8小时可生产4KG A2产品,1KG A2产品经过2小时和3元成本可生产0.75KG B2产品,每千克B2获利32元。设有\(x_1\)桶牛奶用于生产A1,\(x_2\)桶牛奶用于生产A2,\(x_3\)桶牛奶用于生产B1,\(x_4\)桶牛奶用于生产B2,最后A1产品为3\(x_3\),A2产品为4\(x_4\),生产的B1产品为2.4\(x_3\),生产的B2产品为3\(x_4\),得利润为
\begin{array}{l} \ {3\times32}{x_1} + {4\times16}{x_2}+ {2.4\times44}{x_3} + {3\times32}{x_4}- {3\times3}{x_3}-{3\times4}{x_4}\end{array}
建立模型为
\begin{array}{l} \ max z = 72{x_1} + 64{x_2} + 96.6{x_3} + 84{x_4}\\ s.t.\left\{ {\begin{array}{*{20}{c}} {{x_1} + {x_2} + {x_3} + {x_4} \le 50}\\ {12{x_1} + 8{x_2} + 18{x_3} + 16{x_4}\le 480}\\ {3{x_1} + 5.4{x_3} \le 100}\\ {{x_1} \ge 0,{x_2} \ge 0,{x_3}\ge 0,{x_4} \ge 0} \end{array}} \right. \end{array}
第2个约束是因为所用人工总量为\(12x_1\)+\(8x_2\)+\(12x_3\)+\({2\times3}\)\(x_3\)+\(8x_4\)+\({2\times4}\)\(x_4\);第3个约束是因为甲车间的生产总数量为\(3x_1\)+\(3x_3\)+\({0.8\times3}\)\(x_3\)。
3.2 模型R求解
(1)制定一个生产计划,是每天的获利最大。
library(lpSolve)
c<-c(72,64, 96.6,84)
A<-matrix(c(1,1,1,1,12,8,18,16,3,0,5.4,0),nrow=3,byrow=T)
d<-rep("<=",3)
b<-c(50,480,100)
lp.sol<-lp(direction="max",objective.in=c,const.mat=A,const.dir=d,const.rhs=b,compute.sens=1)
lp.sol$solution #变量的值
lp.sol$objval #目标函数的值
lp.sol$solution #变量的值
[1] 0 42 8 0
lp.sol$objval #目标函数的值
[1] 3460.8
每天用42桶牛奶生产A2产品,8桶牛奶生产B1产品,获利最多为3460.8元。
(2)30元可增加1桶牛奶,3元可增加1小时时间,是否应该投资?现投资150元,可赚回多少?
rbind(lp.sol$duals,lp.sol$duals.from,lp.sol$duals.to)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 37.92000 3.2600 0e+00 -5.04e+00 0e+00 0e+00 -6.08000
[2,] 36.85185 400.0000 -1e+30 -1.00e+30 -1e+30 -1e+30 -13.14815
[3,] 60.00000 585.1852 1e+30 2.00e+01 1e+30 1e+30 10.00000
关于原料供应约束的影子价格为37.92元,上限为60桶,关于劳动时间的影子价格为3.26元。每增加一桶牛奶的成本为30元,可获利7.92元,每增加一小时时间的成本为3元,可获利0.26元,因为都获利,所以应该投资。
因为每单位价格牛奶的获利大于每单位价格劳动时间的获利,所以在区间内应该全选牛奶,150元可以买5桶牛奶,在区间内,所以应该全投资买牛奶,获利为39.6元。
(3)B1、B2的获利经常有10%的波动,对计划有无影响?
rbind(lp.sol$sens.coef.from,lp.sol$sens.coef.to)
[,1] [,2] [,3] [,4]
[1,] -1.000e+30 55.6 89 -1.000e+30
[2,] 7.704e+01 96.6 144 9.008e+01
最优解不变时,B1系数b1的变化区间为 [89,144] ,B2系数b2的变化区间为 [-\(∞\),90.08] ,所以当B1降价10%或B2涨价10%都对计划有影响;当B1张价10%或B2降价10%对计划没有影响。
总结
线性规划的对偶理论是优化理论的重要组成部分,不仅为求解原问题提供了新的方法,还揭示了优化问题中的深层次经济含义。通过构造对偶问题,我们可以从不同角度分析原问题的约束条件和最优解之间的关系,实现更高效的计算和更精确的决策。
对偶问题与原问题之间存在强对偶定理和弱对偶定理等基本性质,这些性质确保了在最优解处,原问题的目标值与对偶问题的目标值相等,并且任何可行解都能提供关于最优解的界限。此外,对偶变量的经济解释,如影子价格,使得对偶理论在经济学、生产规划、资源分配等领域具有重要应用价值。