对偶问题影子价格求解—R实现
阅读原文时间:2023年07月13日阅读:1

table { margin: auto }

线性规划对偶问题概述

例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. 自主生产

设生产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}

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. 对偶的经济解释

如果把线性规划约束看成广义资源约束,右边项代表资源的可用量,其经济含义是资源对经济目标的边际贡献。目标函数值通常用价值量衡量,对偶解也具有价值内涵,被称为影子价格。影子价格是对偶解十分形象的名称,它既表明对偶解是对资源的一种客观估价,又表明它是虚拟而不是真实的价格。

2. 影子价格的特点

(1)系统资源的最优估价:影子价格是综合考虑系统内所有因素和相互影响之后对资源在系统内的真实价值的估价。只有系统达到最优状态时才可能赋予该资源这种价值。因此,也有人称之为最优计划价格。

(2)影子价格是一种边际值:它与经济学中边际成本的概念相同,在管理中有十分重要的应有价值,管理者可以根据资源在本企业内影子价格的大小决定企业的经营策略。

(3)影子价格是一种机会成本:它与经济学中机会成本的概念相同,在决策中有十分重要的应有价值,管理者可以根据机会成本的大小决定企业的资源是否应该使用。但这里的机会成本只是企业生产范围内机会成本。

(4)影子价格与系统价值取向和状态有关:影子价格(\(y=C_B\)B-1\()的取值与系统的价值取向有关(反映在\)\(C_B\)上);影子价格受系统状态影响(反映在B-1上);系统内部资源数量和价格的任何变化都会引起影子价格的变化,从这种意义上讲,它是一种动态的价格体系。

(5)反映资源在系统内的稀缺程度:如果资源在系统内供大于求,其影子价格为零。增加该资源的供应不会给系统目标带来任何变化。如果是稀缺资源,其影子价格大于零。价格越高,资源的稀缺程度越高。按以下原则考虑经营策略:影子价格高于市场价格(或≥0)表明资源有获利能力,购入该资源。影子价格低于市场价格(或≤0)表明该资源无获利能力,出让该资源。影子价格等于市场价格(或=0)表明该资源处于平衡状态,既不用买入,也不必卖出。

影子价格R计算

例2:奶制品加工问题

一奶制品加工厂用牛奶生产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的原料

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\)。

2. 模型R求解

(1)制定一个生产计划,是每天的获利最大。

1.1 R计算程序
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)
1.2 R计算结果
lp.sol$solution  #变量的值
lp.sol$objval  #目标函数的值
lp.sol$solution  #变量的值
[1]  0 42  8  0
lp.sol$objval  #目标函数的值
[1] 3460.8
1.3 结果解释

每天用42桶牛奶生产A2产品,8桶牛奶生产B1产品,获利最多为3460.8元。

(2)30元可增加1桶牛奶,3元可增加1小时时间,是否应该投资?现投资150元,可赚回多少?

1.1 R计算程序
rbind(lp.sol$duals,lp.sol$duals.from,lp.sol$duals.to)
1.2 R计算结果
         [,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
1.3 结果解释

关于原料供应约束的影子价格为37.92元,上限为60桶,关于劳动时间的影子价格为3.26元。每增加一桶牛奶的成本为30元,可获利7.92元,每增加一小时时间的成本为3元,可获利0.26元,因为都获利,所以应该投资。

因为每单位价格牛奶的获利大于每单位价格劳动时间的获利,所以在区间内应该全选牛奶,150元可以买5桶牛奶,在区间内,所以应该全投资买牛奶,获利为39.6元。

(3)B1、B2的获利经常有10%的波动,对计划有无影响?

1.1 R计算程序
rbind(lp.sol$sens.coef.from,lp.sol$sens.coef.to)
1.2 R计算结果
           [,1] [,2] [,3]       [,4]
[1,] -1.000e+30 55.6   89 -1.000e+30
[2,]  7.704e+01 96.6  144  9.008e+01
1.3 结果解释

最优解不变时,B1系数b1的变化区间为 [89,144] ,B2系数b2的变化区间为 [-\(∞\),90.08] ,所以当B1降价10%或B2涨价10%都对计划有影响;当B1张价10%或B2降价10%对计划没有影响。

参考文献

  1. R语言-运筹学线性规划
  2. 线性规划模型与R
  3. 运筹学专业课考点