一文了解经典报童模型的扩展问题

文章目录

  • 1 引言
  • 2 经典报童模型
  • 3 综述文章
  • 4 模型扩展
    • 4.1 扩展目标函数
    • 4.2 增加约束条件
    • 4.3 增加优化变量
    • 4.4 扩展模型参数
    • 4.5 扩展问题场景
  • 5 总结
  • 6 相关阅读

1 引言

时间过的真快呀,已经6月份了。距离上一篇文章发表,已经过去了将近一个月,要不是偶尔还有新关注的提醒,我可能都忘记提醒自己该继续学习和总结了。

看了一眼今年已经发表的文章数量,才5篇,很忧心自己原定的2024学习计划该如何完成。所以,为了对得起朋友们的陪伴和支持,为了保证后续学习计划的顺利推进,后续努力每2周更新一篇,底线是不超过3周更新一篇。

本篇回到不确定优化专题,继续研究报童模型。

此前在随机规划:求解报童问题期望值模型的算法方案中,已经详细研究了经典报童模型的求解方案,推导出了解析最优解。该模型虽然简单,但在实际场景问题中却大有用处,比如最近就在某个业务的技术分享会上,了解到其补货算法用的就是经典报童模型的求解算法。

显然,我们不能满足于经典报童问题的学习,毕竟还有很多更复杂的报童问题需要解决。幸运的是,学界已经针对经典报童问题的很多扩展类型进行了研究,并设计了对应的解决方案;不幸的是,我并没有那么多精力去逐一调研。所以我的研究思路是:先了解清楚有哪些已经被广泛研究的扩展模型,然后基于自己目前遇到的问题、匹配到对应的扩展模型,再详细研究这类扩展模型的求解算法。

本文先把第一项内容搞清楚:当前有哪些已经被广泛研究的基于经典报童模型的扩展问题

2 经典报童模型

在调研扩展问题前,再回顾一下经典报童模型。

经典报童模型可以描述为:报童每天从供应商处采购一定数量的报纸用于当天的销售。已知每份报纸的成本价 c c c,销售价 p p p,需求量 d d d是个不确定参数,通过历史的数据可知其概率分布函数,如果当天卖不完,会按回收价 s s s将未卖完的报纸卖给回收站。

该模型的核心诉求是:确定报童的最佳订购量 x x x,使得报童的净收入 θ ( x ) \theta(x) θ(x)最大化。
其中 θ ( x ) \theta(x) θ(x)的表达式为
θ ( x ) = p ⋅ E [ min ⁡ ( x , d ) ] + s ⋅ E [ max ⁡ ( x − d , 0 ) ] − c x \theta(x)=p·E[\min(x,d)]+s·E[\max(x-d,0)]-cx θ(x)=pE[min(x,d)]+sE[max(xd,0)]cx
第一项是售卖报纸的收益,第二项是回收报纸的收益,第三项是购买报纸的成本。

3 综述文章

在上述经典报童模型的基础上,目前已经衍生出了非常多的新问题。我简单调研了一下相关的综述文章,如下图所示。

早在1999年的时候,国外就有综述文章了,在2010年前后,国内又相继刊发了几篇。需要说明的是:这里国内和国外指的是中国人和外国人,不是指中文和英文。这里面被引用次数最多的是1999年和2011年的两篇文章,文章标题已经标注在图片中,感兴趣的朋友可以自行下载和学习。

4 模型扩展

如果仔细看已有的综述文章,会发现作者的分类扩展标准都不同,比如1999年文章把扩展问题划分成了11种,而2011综述文章则将其划分成了3种。

很多人看论文都会遇到一个问题:文章看了很多,但知识点却难以记忆。所以接下来我将换个角度去梳理这些扩展的报童问题。

首先,从优化模型本身出发,经典报童模型可以理解为:目标函数为最大化 θ ( x ) \theta(x) θ(x);无约束;优化变量数为 x x x;输入参数包括需求量 d d d、成本价 c c c、和回收价 s s s和销售价 p p p。所以第一大类扩展就是分别针对目标函数、约束、优化变量和输入参数进行扩展。

其次,跳出优化模型,在问题的描述上进行扩展,本文将其定义为第二大类扩展:扩展问题场景。

4.1 扩展目标函数

首先看目标函数的扩展。

从最朴素的认知来看,在问题有了不确定性后,收益和风险就是并存的,而且一般来说,收益越高,风险越大。相比只关注收益最大化,更恰当的方案应该是,通过一定的策略,达到收益和风险的平衡。

要实现该目标,可以通过目标函数的扩展来实现。最常用的扩展目标函数是:设定某个预期收益,最大化达到该收益的概率。

更完备的收益和风险平衡的方案,可以去金融投资领域取取经,包括:均值-方差模型、风险估值(Value at Risk ,VaR)、条件风险估值(Conditional Value at Risk, CVaR)。这些模型在报童模型的扩展文献中也已经有很多研究,有兴趣的可以自行调研。

4.2 增加约束条件

然后看报童模型中可以增加哪些约束。

第一种是增加预算约束 B B B,即
c ∗ x ≤ B c*x ≤ B cxB

第二种是增加库存约束或产能约束 W W W,即
x ≤ W x ≤ W xW

除此之外,约束条件这里几乎就没啥可扩展的空间了。

4.3 增加优化变量

从前两节看,如果只是修改了目标函数或者增加了约束条件,好像问题的求解难度也没啥显著变化。

本小节来看一个真正可以增加问题求解难度的扩展方式:增加优化变量。

最常见的增加优化变量的方式是增加报纸类型的数量,即多产品。举个例子,报童可以采购的报纸类型有多种,每一种类型的报纸成本、销售价、需求量和回收价均不同。

当然,如果问题只有这个变化,那么求解复杂度并没有显著增加,因为每一种报纸的最优解计算都是相互独立的,可以分别按照经典报童模型来计算;但是在叠加了约束条件后,例如总预算上限有约束,再想求解就真的变难了。

另一种增加优化变量的方式是引入其他类型的优化变量。此处举个额外引入广告预算变量的例子:报童可以给予报纸一定的广告投入,投入广告后,会改变(大概率是增加)原有的需求,为了最大化收益,就需要在决策订购量的同时,再决策投入的广告预算。

4.4 扩展模型参数

(1)需求量 d d d

上文中广告预算决策的实例,可以说是增加了优化变量,但也可以认为是扩展了需求分布。经典报童模型中,需求分布是个独立于优化变量的函数,但在这个实例中,需求分布函数中还包含了广告预算这个优化变量。

除了需求分布函数变复杂的情况,另一种扩展需求分布的方式是减少对需求分布的认知,例如只知道需求分布的部分信息,如均值、方差等,这类的实例可以参考此前的文章:不确定优化入门:用简单实例讲明白随机规划、鲁棒优化和分布鲁棒优化。

(2)成本价 c c c

以往的成本价 c c c都是固定值,但在很多场景中,如果报童订购量比较大,供应商是愿意给予一定的折扣的,如超过100份报纸打8折等。

(3)回收价 s s s

回收价 s s s的扩展一般也与供应商有关。为了鼓励报童多订购报纸,供应商可能会愿意承诺以原价买回报童未卖掉的报纸,此种情况下,相当于供应商分担了需求不确定性带来的风险。

(4)销售价 p p p

单独针对销售价 p p p的扩展比较少见,通常会结合问题场景的扩展,一并扩展。

4.5 扩展问题场景

问题场景扩展的类型特别多,这里选择几个(不全面)比较常见的类型来描述。

(1)增加频次

先举个增加销售频次的例子,接上此前所说的销售价扩展:假设商品(如服装产品)为一次订货,并用于两个周期(如春、秋)的售卖。第一个周期可以正常售卖,但第二个周期需要决策销售价格(往往是折扣价),目标还是使得总收益达到最大化。

另一个增加频次的方式是:增加订购频次。在允许两次订购的场景中,第二次的成本价往往会高于第一次。

(2)两层报童问题

经典报童问题是仅站在报童视角去分析问题的,但实际上报童和供应商都有提升收益的诉求,他们之间既有合作也有竞争,将他们内部的层次递进关系和决策的相互影响都引入到模型中去,也是一个扩展方向。

(3)供应商不确定性

经典报童问题中,不确定性只存在于需求 d d d中,但供应商处往往也存在不确定性,如供应商的产量具有不确定性、有一部分货品是次品等。

5 总结

综上,基于经典报童模型的扩展问题介绍就到这里了。

本篇文章的文字比较多,此处简单总结一下:

(1)经典报童模型的扩展问题比较多,本文按以下顺序进行了分类:扩展目标函数、增加约束变量、增加决策变量、扩展模型参数和扩展问题场景。

(2)针对自己遇到的问题,可以先找到对应的报童问题类型,然后再借鉴其具体的求解方案。

6 相关阅读

【1】The single-period (news-vendor) problem: literature review and suggestions for future research:https://www.sciencedirect.com/science/article/abs/pii/S0305048399000171

【2】报童模型的研究进展综述:https://www.cnki.com.cn/Article/CJFDTotal-TJJC200817006.htm

【3】报童问题的扩展模型:https://www.cnki.com.cn/Article/CJFDTotal-WHDY200803001.htm

【4】The newsvendor problem: Review and directions for future research:https://www.sciencedirect.com/science/article/abs/pii/S0377221710008040

【5】多产品报童模型的研究综述:https://www.cnki.com.cn/Article/CJFDTotal-LTKJ201503009.htm

【6】A Review of Behavioral Decision Making in the Newsvendor Problem:https://www.journal.oscm-forum.org/journal/journal/download/20180819023347_Paper_3_Vol.11_No._4,2018_Final.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/672840.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JS(DOM、事件)

DOM 概念:Document Object Model,文档对象模型。将标记语言的各个组成部分封装为对应的对象: Document:整个文档对象Element:元素对象Attribute:属性对象Text:文本对象Comment:注释对象 JavaScript通过DOM,就能够对HTML进行操作: 改变 HTML 元素的内…

系统操作规约(System Operation Contract)

领域建模补充 问题: 联系有方向性 属性有类型 领域模型尽量避免出现界面相关的东西 习题 问题 考察点 系统操作规约 示例 A) Operation: MakeSale() Cross References: UC:Purchase Preconditions: User has logged in Postconditions: An ProductLis…

集成算法实验与分析(软投票与硬投票)

概述 目的:让机器学习效果更好,单个不行,集成多个 集成算法 Bagging:训练多个分类器取平均 f ( x ) 1 / M ∑ m 1 M f m ( x ) f(x)1/M\sum^M_{m1}{f_m(x)} f(x)1/M∑m1M​fm​(x) Boosting:从弱学习器开始加强&am…

Fiddler抓包工具的使用

目录 1、抓包原理:👇 2、抓包结果👇 1)如何查看一个http请求的原始摸样: 2)分析数据格式: 3、请求格式分析👇 4、响应格式分析👇 官网下载:安装过程比较…

win11+vmware16.0+Ubuntu22.04+开机蓝屏

总结 本机系统 vm虚拟机下载 参考链接 1. 小白必看的Ubuntu20.04安装教程(图文讲解) 2. 软件目录【火星】——VM下载 3. Win11使用VMware15/16启动虚拟机直接蓝屏的爬坑记录 VMware16.0

C++一个StringBad类

设计一个字符串类,下面的代码是一个不好的设计,起名StringBad。 //stringbad.h #pragma once //一个设计有问题的string类 #include <iostream> using namespace std;class StringBad { public:StringBad();//默认构造函数StringBad(const char* s);//构造函数~StringBa…

执法装备管理系统DW-S304的概念与特点

执法装备管理系统&#xff08;DW-S304&#xff09;适用于多种警务和安保场景&#xff0c;如警察局、特警队、边防检查站、监狱管理系统、生态环境局、执法大队等。它可以帮助这些机构提高对装备的控制能力&#xff0c;确保装备在需要时能够迅速到位&#xff0c;同时也减少了因装…

C++ 习题精选(2)

目录 1. 验证回文串2. 字符串相乘 1. 验证回文串 题目描述&#xff1a;如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s&#xff…

测试基础09:缺陷(bug)生命周期、定位方式和管理规范

课程大纲 1、缺陷&#xff08;bug&#xff09;生命周期 2、缺陷&#xff08;bug&#xff09;提交规范 2.1 宗旨 简洁、清晰、可视化&#xff0c;减少沟通成本。 2.2 bug格式和内容 ① 标题&#xff1a;一级功能-二级功能-三级功能_&#xff08;一句话描述bug&#xff1a;&…

linux命令:调试必备工具dmesg

在服务器上进行芯片调试时&#xff0c;我们会遇到各种各样的问题&#xff0c;很多问题与操作系统相关。此时就需要了解操作系统发生了哪些事件。 dmesg 是linux系统中用来打印或控制内核缓冲区内容的命令。这个环形缓冲区记录了系统启动以来发生的各种事件消息&#xff0c;包括…

远程自动锁定平面

目录 Ubuntu 系统上 方法一&#xff1a;使用 SSH 重新连接 方法二&#xff1a;解锁当前会话 方法三&#xff1a;通过 SSH 解锁会话 方法四&#xff1a;禁用自动锁屏&#xff08;如果合适&#xff09; windows系统 方法三&#xff1a;修改组策略设置 Ubuntu 系统上 远程…

派生类中调用基类的__init__()方法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在派生类中定义__init__()方法时&#xff0c;不会自动调用基类的__init__()方法。例如&#xff0c;定义一个Fruit类&#xff0c;在__init__()方法中创…

java并发常见问题

1.死锁&#xff1a;当两个或多个线程无限期地等待对方释放锁时发生死锁。为了避免这种情况&#xff0c;你应该尽量减少锁定资源的时间&#xff0c;按顺序获取锁&#xff0c;并使用定时锁尝试。 2.竞态条件&#xff1a;当程序的行为依赖于线程的执行顺序或输入数据到达的顺序时…

OpenEuler22.03 LTS自动安装单机版OpenGauss 5.0.2脚本

1,将脚本和opengauss软件包放到同一个目录下(不要放到/root下面,建议放到/opt/soft下面目录权限要有755),不需要进行解压缩,安装包下载地址如下: 软件包 | openGauss 2.规划好gs的数据目录,提前创建好目录,例如放到/data/guassdb/data下面,你只需要提前创建好/data就行了 3.…

Windows10系统中安装与配置PyTorch(无GPU版本)

文章目录 1. 什么是PyTorch2. PyTorch的安装与配置&#xff08;无GPU&#xff09;2.1 创建环境2.2 安装pytorch库&#xff08;无GPU&#xff09;2.3 验证安装结果 1. 什么是PyTorch PyTorch 是一种用于构建深度学习模型且功能完备的开源框架&#xff0c;通常用于处理图像识别和…

力扣83. 删除排序链表中的重复元素

Problem: 83. 删除排序链表中的重复元素 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义快慢指针fast、slow均指向head&#xff1b; 2.每次fast后移一位&#xff0c;当fast和slow指向的节点值不一样时&#xff0c;将slow.next指向fast同时使slow指向fast&#xff1b; 3…

FPGA代码移植案例分析:Tcl Scripts后提示找不到 vo 文件,Supra软件报错

FPGA代码移植案例分析&#xff1a;Tcl Scripts后提示找不到 vo 文件&#xff0c;Supra软件报错 客户工程师已经运行Tcl Scripts&#xff0c;正常没出错就会产生这个vo文件。工程师试了两次 运行之后点的next的&#xff0c;还是出现同样的错误。 建议客户在原quartus工程里重新…

【C#】自定义List排序规则的两种方式

目录 1.系统排序原理 2.方式一&#xff1a;调用接口并重写 3.方式二&#xff1a;传排序规则函数做参数 1.系统排序原理 当我们对一个List<int>类型的数组如list1排序时&#xff0c;一个轻松的list1.sort();帮我们解决了问题 但是在实际应用过程中&#xff0c;往往我们…

(五十)第 7 章 图(有向图的十字链表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

hexo init命令报错:Error: EPERM: operation not permitted, mkdir ‘D:\‘

我用的是git bash通过hexo init安装hexo的&#xff0c;但是报错如下&#xff1a; $ hexo init INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git fatal: unable to access https://github.com/hexojs/hexo-starter.git/: HTTP/2 stream 1 was not clos…