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. 运筹学专业课考点

对偶问题影子价格求解—R实现的更多相关文章

  1. SVM 为什么要从原始问题变为对偶问题来求解

    这个问题困扰了我许久,下面是我搜集整理到的答案 对偶问题将原始问题中的约束转为了对偶问题中的等式约束 方便核函数的引入 改变了问题的复杂度.由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度 ...

  2. R语言:规划求解优化ROI

    今天看到一篇文章介绍如何用excel建模对ROI 进行规划求解. 蓝鲸的网站分析笔记 成本 Cost 每次点击费用 CPC 点击量 \[clickRate = \frac{cost}{CPC}\] 转 ...

  3. 感知器、逻辑回归和SVM的求解

    这篇文章将介绍感知器.逻辑回归的求解和SVM的部分求解,包含部分的证明.本文章涉及的一些基础知识,已经在<梯度下降.牛顿法和拉格朗日对偶性>中指出,而这里要解决的问题,来自<从感知器 ...

  4. 4. SVM分类器求解(2)

    最优间隔分类器(optimal margin classifier) 重新回到SVM的优化问题: 我们将约束条件改写为: 从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数,也 ...

  5. 序列最小最优化算法(SMO)-SVM的求解(续)

    在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解.也就是我们接下来要介绍的序列最小最优化算法. 序列最小最优化算法(SM ...

  6. 带约束优化问题 拉格朗日 对偶问题 KKT条件

    转自:七月算法社区http://ask.julyedu.com/question/276 咨询:带约束优化问题 拉格朗日 对偶问题 KKT条件 关注 | 22 ... 咨询下各位,在机器学习相关内容中 ...

  7. R读取MySQL数据出现乱码,解决该问题的方法总结

    最终的解决办法直接看 4 我的思路: 我用的都是utf-8编码,电脑系统win7, MySQL-Front进行数据库的可视化. 1.我用的是RStudio,先去设置R的默认编码: Tools→Glob ...

  8. 拉格朗日乘子法与KKT条件 && SVM中为什么要用对偶问题

    参考链接: 拉格朗日乘子法和KKT条件 SVM为什么要从原始问题变为对偶问题来求解 为什么要用对偶问题 写在SVM之前——凸优化与对偶问题 1. 拉格朗日乘子法与KKT条件 2. SVM 为什么要从原 ...

  9. 三种SVM的对偶问题

    一.SVM原问题及要变成对偶问题的解决办法 对于SVM的,我们知道其终于目的是求取一分类超平面,然后将新的数据带入这一分类超平面的方程中,推断输出结果的符号,从而推断新的数据的正负. 而求解svm分类 ...

  10. 拉格朗日乘子法 - KKT条件 - 对偶问题

    接下来准备写支持向量机,然而支持向量机和其他算法相比牵涉较多的数学知识,其中首当其冲的就是标题中的拉格朗日乘子法.KKT条件和对偶问题,所以本篇先作个铺垫. 大部分机器学习算法最后都可归结为最优化问题 ...

随机推荐

  1. 创建一个HashMap实例,该实例具有足够高的“初始容量”

    创建一个HashMap实例,该实例具有足够高的"初始容量" /** * 创建一个{@link HashMap}实例,该实例具有足够高的"初始容量" * * @p ...

  2. vue组件传参,父子组件以及兄弟组件(非常详细)

    一,父子组件传参. 1.首先在项目目录中新建template文件夹,里边包含父组件:List.vue以及子组件:firstComponent.vue,secondComponent.vue. 2.父组 ...

  3. 在gitlab仓库中cli 编译通不过 怎样解决

    1.先切换到master  分支 git  pull   (把代码拉下来) 2.再切换到当前分支 git  rebase   master 查看git  log 看是否跟新到最新的log 3.再在当前 ...

  4. Python生态工具

    Python内置小工具 1秒钟启动一个下载服务器 在实际工作中,时常会有这样的一个需求:将文件传给其他同事.将文件传给同事本身并不是一个很繁琐的工作,现在的聊天工具一般都支持文件传输.但是,如果需要传 ...

  5. python excel使用

    python excel使用 https://blog.csdn.net/m0_59235508/article/details/122808875 pandas不覆盖写入 https://blog. ...

  6. STL练习-排列2

    Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡片上的数字(0<=数字<=9 ...

  7. 字符串替换Replace仅替换第一个匹配项

    C#里面的String.Replace(string,string)方法替换的时候是替换所有的匹配项,但是有时候我们会遇到这样的需求,就是只替换第一个匹配项. 我这里自己写另一个方法来实现这个功能,求 ...

  8. 【转载】MSVC中C++ UTF8中文编码处理探究

    字符集 先说一个名词:字符集,没听过的先百度一下,其实就是一种将字符编码的格式,像我们常说的ASCII,UTF8,GBK都是常用的字符集. 首先要清楚,从你在编辑器里输入一个UTF8汉字开始,到最终在 ...

  9. 【内存管理】ION内存管理器浅析(system heap)(基于linux 4.14)

    什么是ION ION具体不知道是什么的缩写,只知道是android系统上google引入的内存管理方式,为了实现用户与内核间数据共享时零拷贝.多用于多媒体,比如camera和display,graph ...

  10. Otto Group Product Classification

    遇到的坑: 做多分类,用CrossEntropyLoss时,训练时候的正确标签的范围应该是[0,n-1],而不是[1,n],不然会报 IndexError: Target is out of boun ...