【报童模型】随机优化问题二次规划

面对需求的不确定性,报童模型是做库存优化的常见模型。而标准报童模型假设价格是固定的,此时求解一个线性规划问题,可以得到最优订货量,这种模型存在局限性。因为现实世界中价格与需求存在一定的关系,本文假设需求q是价格p的线性函数,基于历史需求数据学习回归直线的参数并计算拟合残差,带入到报童模型中,此时的报童模型变成一个二次规划问题,其目标函数是关于价格p是二次的。

方法

为提高报童模型的准确性,使用SAA算法解决随机优化问题,并与其他方法做对比。

对标准报童模型做的三个扩展

扩展1:允许rush order

当售卖当天需求量过高时,允许报童紧急订报,只是价格g比一般订购价格c稍高,即g>c
如果定货太多,那么每份报纸会产生持货成本t,特别地,如果允许以一定价格回退给厂商,那么t<0 。但在这个文章中,仅考虑t>0的情况。
符号说明:
单份报纸的售价为p;
订货量是q;
目标函数是
在这里插入图片描述

扩展2:需求与价格呈线性相关

假设需求与价格的线性回归模型如下
D = β 0 + β 1 p + ϵ i D=\beta_0+\beta_1p+\epsilon_i D=β0+β1p+ϵi
根据给定的数据集(含价格和需求量,即 { ( p i , D i ) ∣ i = 1 , 2 , . . . , n } \{(p_i,D_i)|i=1,2,...,n\} {(pi,Di)i=1,2,...,n}),找出最佳拟合线性回归函数的参数。假设干扰项 ϵ i \epsilon_i ϵi具有随机性,根据历史数据 { ( p i , D i ) ∣ i = 1 , 2 , . . . , n } \{(p_i,D_i)|i=1,2,...,n\} {(pi,Di)i=1,2,...,n}学习到参数 β 0 , β 1 \beta_0,\beta_1 β0,β1,计算残差值 { ϵ i ∣ i = 1 , 2 , . . . , n } \{\epsilon_i|i=1,2,...,n\} {ϵii=1,2,...,n}

  • 对于价格固定的标准报童模型,求最优订货量
    如果新价格p出现,将计算好的残差值 { ϵ i ∣ i = 1 , 2 , . . . , n } \{\epsilon_i|i=1,2,...,n\} {ϵii=1,2,...,n}和新价格p带入模型 D = β 0 + β 1 p + ϵ i D=\beta_0+\beta_1p+\epsilon_i D=β0+β1p+ϵi,可以得到新价格p所对应的需求量估计值 { D i ^ ∣ i = 1 , 2 , . . . , n } \{\hat{D_i}|i=1,2,...,n\} {Di^i=1,2,...,n},这些估计值会带入到标准报童模型中,求解该线性规划问题,从而得到最优订货量。
    关于计算需求量估计值的进一步解释,比如:估计参数 β 0 = 1000 , β 1 = − 2 \beta_0=1000,\beta_1=-2 β0=1000,β1=2,现有两个样本的拟合残差是15和-9,对于新价格2来说,需求量估计值有
    1000 − 2 ∗ 2 + 15 = 1011 1000-2*2+15=1011 100022+15=1011,
    1000 − 2 ∗ 2 − 9 = 987 1000-2*2-9=987 1000229=987
  • 对于价格不固定的扩展报童模型,求最优订货量和最优价格
    此时,目标函数
    在这里插入图片描述
    p ∗ D i p*D_i pDi就会变成 p ∗ ( β 0 + β 1 p + ϵ i ) p*(\beta_0+\beta_1p+\epsilon_i) p(β0+β1p+ϵi),这是价格p的二次函数。
    注意:上面目标函数中的 D i D_i Di指的是新价格p所对应的第i个需求估计值,而不是原数据集中第i个样本的需求值。
    我觉得没有疑问了,这本身就是一个关于价格p的二次优化问题。

注:
为了求解这个问题,引入哑变量 h i h_i hi,表示第i天成本的负值。如此一来,目标函数——利润函数可以表示为收益+成本负值的平均,其中收益指 p ∗ D i p*D_i pDi,成本负值指 h i h_i hi
在这里插入图片描述

在这里插入图片描述

扩展3:分析数据集对最优订货量和最优价格的影响(最优订购量、最优价格的敏感性分析)

对原数据集做重采样,计算最优订货量、最优价格、对应的期望利润值。

任务

  1. 根据给定数据集,估计出需求与价格之间的线性回归方程;
  2. 给定参数c=0.5,g=0.75,t=0.15,利用残差数据 { ϵ i ∣ i = 1 , 2 , . . . , n } \{\epsilon_i|i=1,2,...,n\} {ϵii=1,2,...,n},求价格p=1时的需求量估计值 { D i ^ ∣ i = 1 , 2 , . . . , n } \{\hat{D_i}|i=1,2,...,n\} {Di^i=1,2,...,n}
  3. 求价格p=1时的最优订货量(这是一个线性规划问题);
  4. 假设价格不是固定的,将需求量与价格的线性回归方程带入到报童模型中,解QP(二次规划问题,目标函数含价格的平方项),得最优订货量、最优价格;
  5. 分析最优价格、最优订货量是否对数据集敏感。对原数据集做重采样,重新估计需求与价格之间的线性回归函数参数 ,求最优价格和最优订货量;
  6. 重复上述重采样、拟合操作,得到多组最优订货量和最优价格;为得到的最优订货量、最优价格、期望利润绘制直方图,观察统计规律。

建模

价格固定时

下面是思路,我用黄色荧光笔标了步骤,即
如果新价格p出现,将计算好的残差值 { ϵ i ∣ i = 1 , 2 , . . . , n } \{\epsilon_i|i=1,2,...,n\} {ϵii=1,2,...,n}和新价格p带入模型 D = β 0 + β 1 p + ϵ i D=\beta_0+\beta_1p+\epsilon_i D=β0+β1p+ϵi,可以得到新价格p所对应的需求量估计值 { D i ^ ∣ i = 1 , 2 , . . . , n } \{\hat{D_i}|i=1,2,...,n\} {Di^i=1,2,...,n},这些估计值会带入到标准报童模型中,求解该线性规划问题,从而得到最优订货量。
在这里插入图片描述
在这里插入图片描述
上述模型的含义:目标函数是最大化利润,引入哑变量 h i h_i hi表示第’i天的成本负值。
上面画黄线的约束表示:不管需求量大于还是小于订货量,利润都大于 h i h_i hi。换言之,限制利润(不管需求量大于还是小于订货量)大于等于一个变量,这个变量大于等于负无穷。
??为什么成本负值数组h的约束不是 0 > h > − inf ⁡ 0>h>-\inf 0>h>inf 做实验的时候,加上试试。会影响结果
将上述约束化简成Gurobi建模所需要的形式(如下图的蓝笔)
注:“Gurobi建模所需要的形式”是指“明确哪些是决策变量,哪些是决策变量的系数,哪些是右端项”,这里的决策变量有 q , h 1 , . . . h N q,h_1,...h_N q,h1,...hN
化简步骤见图中黑笔
在这里插入图片描述

价格不固定时

我用蓝笔标注了步骤:
首先,获取需求-价格数据集,估计线性回归参数并计算残差数据;
接着,把 D = β 0 + β 1 p + ϵ i D=\beta_0+\beta_1p+\epsilon_i D=β0+β1p+ϵi带入到标准报童模型中,会得到一个二次规划问题。
在这里插入图片描述

将之前的拟合结果——残差数据、拟合函数参数等,带入到上述模型中,得到需求量估计值 D i D_i Di,得到如下模型:

记录一个我没看懂的地方。我觉得作者的转换并没有把二次约束转成线性约束啊,难道是我对“二次规划”的定义理解出错了?我以为的二次规划是,目标函数是二次的,约束是一次的 数学优化问题。
在这里插入图片描述
关于上图的问题,我在纸上列了一下,作者的Gurobi模型应该是把上面两个约束的二次项 p 2 p^2 p2拿掉了(用报告里面的话说:拿到目标函数中了)。
??为什么可以直接拿掉呢
关于上面的约束如何化简成jupyter文件中Gurobi模型,我在草稿纸上简单列了一下,蓝色荧光笔标注的是Gurobi建模时所用的约束。
约束1:
在这里插入图片描述
约束2:
在这里插入图片描述

上图还有一个问题是,目标函数中决策变量 h i h_i hi的系数应该是1。这一点可以从两个地方看出来:第一,老师给的作业说明(见上面“扩展2”中, h i h_i hi的含义说明——成本负值);第二,作者的Gurobi建模obj数组中目标函数系数的指定。

最优解的稳定性分析

目标:探究使用不同的数据集是否会影响到最优解——最优价格和最优订货量
做法:对原数据集做1000次重采样,每次采样随机抽取99组样本形成新数据集。然后,针对新数据集,计算并收集最优订货量和最优价格,以及对应的最优利润expect_profit。绘制最优订货量、最优价格、最优价格的分布直方图,发现大致服从正态分布,且最优价格与之前LP中的预定价格1相差不大,expect_profit的均值也与之前LP的expect_profit相差不大。

注:新数据集与原数据集样本顺序是不同的。(我觉得这里有些不妥……应该设计新数据集是原数据集的子集,然后观察最优解的统计规律)

我给这个报告添加了一个conclusion,如下图
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LNMP环境介绍和搭建

一.LNMP简介 1.含义 2.工作原理 二.部署LNMP环境 1.Nginx环境 &#xff08;1&#xff09;上传nginx包&#xff0c;下载编译安装工具并解包到指定目录&#xff08;tar 参数 tar包 - C 目录路径&#xff09; &#xff08;2&#xff09; 开始编译安装&#xff0c;每次编译后…

nbcio-boot升级到3.1后出现online表单新增报错

nbcio-boot升级springboot、mybatis-plus和JSQLParser后出现新增online表单的时候报错&#xff0c;如下&#xff1a; 2023-08-13 21:18:01.292 [http-nio-8080-exec-12] [1;31mERROR[0;39m [36mo.jeecg.common.exception.JeecgBootExceptionHandler:69[0;39m - Handler dispat…

【JVM】JVM垃圾收集器

文章目录 什么是JVM垃圾收集器四种垃圾收集器&#xff08;按类型分&#xff09;1.串行垃圾收集器(效率低&#xff09;2.并行垃圾收集器(JDK8默认使用此垃圾回收器&#xff09;3.CMS&#xff08;并发&#xff09;垃圾收集器(只针对老年代垃圾回收的&#xff09;4.G1垃圾回收器(在…

设计模式之七:适配器模式与外观模式

面向对象适配器将一个接口转换成另一个接口&#xff0c;以符合客户的期望。 // 用火鸡来冒充一下鸭子class Duck { public:virtual void quack() 0;virtual void fly() 0; };class Turkey { public:virtual void gobble() 0;virtual void fly() 0; };class TurkeyAdapter :…

利用爬虫爬取图片并保存

1 问题 在工作中&#xff0c;有时会遇到需要相当多的图片资源&#xff0c;可是如何才能在短时间内获得大量的图片资源呢&#xff1f; 2 方法 我们知道&#xff0c;网页中每一张图片都是一个连接&#xff0c;所以我们提出利用爬虫爬取网页图片并下载保存下来。 首先通过网络搜索…

Linux 1.2.13 -- IP分片重组源码分析

Linux 1.2.13 -- IP分片重组源码分析 引言为什么需要分片传输层是否存在分段操作IP分片重组源码分析ip_createip_findip_frag_createip_doneip_glueip_freeip_expireip_defragip_rcv 总结 本文源码解析参考: 深入理解TCP/IP协议的实现之ip分片重组 – 基于linux1.2.13 计网理论…

树莓派RP2040 用Arduino IDE安装和编译

目录 1 Arduino IDE 1.1 IDE下载 1.2 安装 arduino mbed os rp2040 boards 2 编程-烧录固件 2.1 打开点灯示例程序 2.2 选择Raspberry Pi Pico开发板 2.3 编译程序 2.4 烧录程序 2.4.1 Raspberry Pi Pico开发板首次烧录提示失败 2.4.2 解决首次下载失败问题 2.4.2.1…

curl 快速入门使用教程

你好&#xff0c;我是悦创。 curl 是一个强大的命令行工具&#xff0c;用于获取或发送数据&#xff0c;包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、DICT、TELNET、LDAP 或 FILE 协议等。在本教程中&#xff0c;我们将主要介绍如何使用 curl 进行 HTTP/HTTPS 请求。 1. 安…

Java基础五之for循环小练习

加油,新时代大工人&#xff01; 一、Java基础之算术运算符 二、Java基础之类型转换 三、Java基础之【字符串操作以及自增自减操作】 四、Java基础之赋值运算符和关系运算符 package base;import java.io.InputStream; import java.util.Scanner;/*** author wh* date 2023年08…

无涯教程-Perl - recv函数

描述 This function receives a message on SOCKET attempting to read LENGTH bytes, placing the data read into variable SCALAR.The FLAGS argument takes the same values as the recvfrom( ) system function, on which the function is based. When communicating wit…

论文浅尝 | 面向多步推理任务专业化较小语言模型

笔记整理&#xff1a;张沈昱&#xff0c;东南大学硕士&#xff0c;研究方向为自然语言处理 链接&#xff1a;https://github.com/FranxYao/FlanT5-CoT-Specialization 动机 本文的动机是探索如何在多步推理任务中通过大型语言模型提升较小的语言模型的性能。作者认为&#xff0…

云开发超多功能工具箱组合微信小程序源码/附带流量主

介绍&#xff1a; 这是一款云开发超多功能工具箱组合微信小程序源码附带流量主功能&#xff0c;小程序内包含了40余个功能&#xff0c;堪称全能工具箱了&#xff0c;大致功能如下&#xff1a; 证件照制作 | 垃圾分类查询 | 个性签名制作 二维码生成丨文字九宫格 | 手持弹幕丨…

总结synchronized

一.synchronized的特性 synchronized 是 Java 语言中内置的关键字&#xff0c;用于实现线程同步&#xff0c;以确保多线程环境下共享资源的安全访问。 互斥性&#xff1a;synchronized保证了同一时刻只有一个线程可以执行被synchronized修饰的代码块或方法。当一个线程进入sync…

使用GraphQL在Postman中进行API测试

GraphQL 是一种用于API的开源数据查询和操作语言&#xff0c;用于API的查询语言和运行时。它使客户端能够精确地指定其数据需求&#xff0c;并获得预测性地结果。GraphQL旨在提高API的效率、灵活性和可靠性。 Postman 是一款用于API开发的强大工具&#xff0c;它支持REST和Gra…

LVS简介及LVS-DR搭建

目录 一. LVS简介&#xff1a; 1.简介 2. LVS工作模式&#xff1a; 3. LVS调度算法&#xff1a; 4. LVS-DR集群介绍&#xff1a; 二.LVS-DR搭建 1.RS配置 1&#xff09;两台RS&#xff0c;需要下载好httpd软件并准备好配置文件 2&#xff09;添加虚拟IP&#xff08;vip&…

Python爬虫——requests_cookie登陆古诗文网

寻找登陆需要的参数 __VIEWSTATE:aiMG0UXAfCzak10C7436ZC/RXoZbM2lDlX1iU/4wjjdUNsW8QUs6W2/3M6XIKagQZrC7ooD8Upj8uCnpQMXjDAp6fS/NM2nGhnKO0KOSXfT3jGHhJAOBouMI3QnlpJCQKPXfVDJPYwh169MGLFC6trY __VIEWSTATEGENERATOR: C93BE1AE from: http://so.gushiwen.cn/user/collect.…

linux 命令--查看网络端口命令

使用 netstat 检查端口 netstat 是一个命令行工具&#xff0c;可以提供有关网络连接的信息。 netstat - atulnp会显示所有端口和所有对应的程序&#xff0c;用grep管道可以过滤出想要的字段 -a &#xff1a;all&#xff0c;表示列出所有的连接&#xff0c;服务监听&#xff…

Android JNI开发从0到1,java调C,C调Java,保姆级教程详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 第一步首先配置Android studio的NDK开发环境&#xff0c;首先在Android studio中下载NDK…

如何防止CSRF攻击

背景 随着互联网的高速发展&#xff0c;信息安全问题已经成为企业最为关注的焦点之一&#xff0c;而前端又是引发企业安全问题的高危据点。在移动互联网时代&#xff0c;前端人员除了传统的 XSS、CSRF 等安全问题之外&#xff0c;又时常遭遇网络劫持、非法调用 Hybrid API 等新…

Java超级玛丽小游戏制作过程讲解 第六天 创建背景类

package com.sxt;import java.awt.image.BufferedImage;public class BackGround {//当前场景要显示的图像 private BufferedImage bgImagenull;//记录当前是第几个场景 private int sort;//判断是否是最后一个场景 private boolean flag;public BackGround(){}public BackGrou…