不确定优化入门:用简单实例讲明白随机规划、鲁棒优化和分布鲁棒优化

文章目录

  • 1 引言
  • 2 学习动机
  • 3 经典问题
  • 4 解决方案
    • 4.1 忽略不确定性
    • 4.2 随机规划
    • 4.3 鲁棒优化
    • 4.4 分布鲁棒优化
  • 5 总结
  • 相关阅读

1 引言

按2024的原定计划,今年开始要学习不确定优化了。

粗略翻阅了一些相关的书籍和教程,大都包含许多数学公式,瑟瑟发抖。出于只希望学会使用相关技术的初心,我并不想陷入过多的推导和证明过程中,所以至今断断续续持续了两周多,依然不知道该从哪里入门。

思考了一下,系列第一篇还是先阐述自己学习不确定优化的动机,然后梳理针对不确定优化问题的已有解决方案,从而有利于后续设计体系化的学习路径。

正文见下。

2 学习动机

根本上,我要学习不确定优化,是因为在工作中碰到了相关需求。

先描述我遇到的实际业务问题:问题本身可以建模为如下的0-1整数规划

max ⁡ f ( x ) = c T x s.t A x = b x ∈ { 0 , 1 } \max \quad f(\pmb x)=\pmb c^T\pmb x \\ \text{s.t} \quad \pmb A\pmb x=\pmb b \\ \pmb x \in \{0,1\} maxf(x)=cTxs.tAx=bx{0,1}
优化变量是千量级,未来至多是几十万量级;目标函数中的 c \pmb c c是模型预测出来的值,所以其值可能是不准确的;约束中的 A \pmb A A虽然有波动,但从业务判断,该值可以简化是常量, b \pmb b b是常量。

如果将 c \pmb c c当做常量,那这个问题是很容易求解的。但是直接优化得到的最优解,无法保证其落地使用后的核心指标也是最优的。

此前就已经踩过一个坑:在另一个项目中,直接当做常量求解后的落地核心指标甚至不如已有人工策略的落地核心指标好。

为了防止重蹈覆辙,领导希望我在给出最优决策方案时,能充分考虑预测不准带来的影响。

事实上,不仅这个项目遇到了这个问题,其他很多项目也有类似的需求。为了能解决好此类问题,我才决定今年深入学习一下不确定优化相关内容。

针对不确定优化,我比较关注的点有两个:

(1)考虑参数的不确定性后,核心指标能提升多少? 这个问题可以从已公开的行业案例中寻找答案。但遗憾的是,虽然很多学术文章中涉及了不确定优化的正向效果,但是行业应用的实际案例却少之又少。从一些非公开渠道得知,在库存优化场景中,不确定优化方法确实是有落地应用的,核心指标大概能提升几个点。

(2)如何考虑参数的不确定性,对应的解决方案是什么? 这方面的公开内容已经有很多了,主流的解决方案包括:随机规划、鲁棒优化和分布鲁棒优化。作为系列第一篇,本文并不打算精确地描述清楚这些解决方案,而是想通过一个实例的求解,直观地展示不同解决方案的具体思路。

3 经典问题

既然要用实例,自然要使用不确定优化领域中的最经典问题——报童问题

报童每天需要采购一定数量的报纸用于当天的销售。已知每份报纸的成本价 c = 5 c=5 c=5,销售价 p = 10 p=10 p=10,需求量 d d d是个不确定的变量,通过历史的经验得到其平均值是15,如果当天卖不完,会按回收价 r r r将未卖完的报纸返卖给回收站,为了后续计算方便,本文假设 r = 0 r=0 r=0

现在需要确定报童的最佳订购量 q q q,使得报童的净收入 θ \theta θ最大化。

4 解决方案

4.1 忽略不确定性

最简单的解决方案是忽略其不确定性,即 d = 15 d=15 d=15

此时,最佳订购量显然是
q = d = 15 q=d=15 q=d=15
对应的净收入为
θ = 15 ∗ ( 10 − 5 ) = 75 \theta= 15 * (10 - 5) = 75 θ=15(105)=75

4.2 随机规划

本节开始,我们考虑 d d d的不确定性。随机规划模型中,认为 d d d的分布函数已知,举个例子: d d d可以取10,12,18,20,对应的概率分别为 1 6 , 1 3 , 1 3 , 1 6 \frac{1}{6},\frac{1}{3},\frac{1}{3},\frac{1}{6} 61,31,31,61

随机规划模型的核心思路是:优化 q q q使得 θ \theta θ的期望值最大化。 此时,目标函数变为
E ( θ ) = 1 6 p min ⁡ ( q , 10 ) + 1 3 p min ⁡ ( q , 12 ) + 1 3 p min ⁡ ( q , 18 ) + 1 6 p min ⁡ ( q , 20 ) − c q \text{E}(\theta) = \frac{1}{6}p\min(q, 10) + \frac{1}{3}p\min(q, 12) + \frac{1}{3}p\min(q, 18) + \frac{1}{6}p\min(q, 20) -cq E(θ)=61pmin(q,10)+31pmin(q,12)+31pmin(q,18)+61pmin(q,20)cq
E ( θ ) \text{E}(\theta) E(θ) q q q的变化曲线如下图所示。显然,当 q ∈ [ 12 , 18 ] q\in[12,18] q[12,18]时,期望收益 E ( θ ) \text{E}(\theta) E(θ)取到最大,为56.67。

这里需要注意的是,此时的最优解为期望值,而不是实际收益。

4.3 鲁棒优化

在鲁棒优化模型中,一般认为 d d d的分布函数未知,但是其分布的基本信息是已知的,举个例子: d ∈ [ 10 , 20 ] d\in[10, 20] d[10,20]。显然,随机规划中的实例可以理解为本节实例的一种特殊情况。但由于分布函数未知,所以无法使用随机规划的方式来求解。

鲁棒优化的核心思路是:寻找 d d d为最差情况下的最优解。 数学化的表达方式为:
max ⁡ q min ⁡ d { p ⋅ min ⁡ ( q , p ) − c q } \mathop{\max}_q \mathop{\min}_d \{ p·\min(q, p)-cq\} maxqmind{pmin(q,p)cq}
首先分析内层 min ⁡ d \mathop{\min}_d mind。从下图可以看出,针对同一个 q q q d d d越大, θ = p ⋅ min ⁡ ( q , p ) − c q \theta=p·\min(q, p)-cq θ=pmin(q,p)cq越大,所以最差情况下, d = 10 d=10 d=10


然后分析外层 max ⁡ q \mathop{\max}_q maxq。从图上也很容易看出,最佳订购量 q = 10 q=10 q=10,此时 θ = 50 \theta=50 θ=50

4.4 分布鲁棒优化

对比随机规划和鲁棒优化,我们可以发现,从针对 d d d的不确定性刻画来看,随机规划是非常精确的,就是某个确定的分布函数;而鲁棒优化则非常模糊,得到的解也是非常保守的。

为了能在两者之间做折中,分布鲁棒优化应运而生:一方面增加不确定参数的分布特征,另一方面追求不那么保守的解。

举个例子,我们不仅知道 d ∈ [ 10 , 20 ] d\in[10, 20] d[10,20],我们还知道, d d d的概率值会随其值的增大先增大后减小。那么此时,至少能想到的一些可能的分布情况有:

分布鲁棒优化的解决方案是:寻找满足不确定参数特征的最差分布函数,然后以此分布函数为基准,使用随机规划的思路得到最优解。

为了让实例构造简单一些,我们假设分布就以上三种情况,并且对应的分布函数分别只有一种:

(1)无偏: d d d取10,12,18,20的概率分别为 1 6 , 1 3 , 1 3 , 1 6 \frac{1}{6},\frac{1}{3},\frac{1}{3},\frac{1}{6} 61,31,31,61。该情况下,随机规划一节中已经计算过,最优期望收益为56.67。

(2)左偏: d d d取10,12,18,20的概率分别为 37 216 , 72 216 , 67 216 , 40 216 \frac{37}{216},\frac{72}{216},\frac{67}{216},\frac{40}{216} 21637,21672,21667,21640。该情况下的最优订购量是12,最优期望收益是56.57。

(3)右偏: d d d取10,12,18,20的概率分别为 22 108 , 31 108 , 36 108 , 19 108 \frac{22}{108},\frac{31}{108},\frac{36}{108},\frac{19}{108} 10822,10831,10836,10819。该情况下的最优订购量是18,对应的期望收益为56.48。

所以,最差分布函数为右偏,此时最佳的期望收益为56.48。

5 总结

至此,针对每一种解决方案的思路描述和实例讲解算是结束了,看起来并没有那么复杂。

本节我们再横向对比一下这些解决方案,以探查他们之间的联系和区别,加深对它们的认知:

(1)鲁棒优化中认为,不确定参数的分布函数是未知的,仅知道其分布的简单信息;分布鲁棒优化中认为,虽然分布函数未知,但是分布的一些特征是已知的;随机规划则认为分布函数是完全已知的。所以从针对不确定参数的刻画来看,其确定性是逐渐增加的。

(2)鲁棒优化最终求解得到的是一个具体的解,而分布鲁棒优化和随机规划最终得到的是一个期望值。

(3)分布鲁棒优化一方面借鉴了鲁棒优化中的考虑最差情况的思路,另一方面又借鉴了随机规划中求期望的思路,所以看起来最有前景。

(4)从解的质量来看,忽略不确定性的最优解≥随机规划解≥分布鲁棒优化解≥鲁棒优化解。
忽略不确定性的解和考虑不确定性的解之间的差异,可以理解为不确定性约束带来的指标损失。

相关阅读

分布鲁棒优化入门视频:https://www.bilibili.com/video/BV19a411s7cy/?spm_id_from=333.880.my_history.page.click&vd_source=f416a5e7c4817e8efccf51f2c8a2c704

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

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

相关文章

SpringBoot引入主盘探活定时任务

主盘探活通常是指检查存储设备(例如硬盘)是否可读写,但在Java中并没有直接针对硬件级别的磁盘探活API。然而,我们可以模拟一个场景,即检查某个目录或文件是否可以被Java程序正常读写,以此作为主盘活跃的一个…

HCIP复习课(bgp实验)

1、ip配置: R1: R2: R9: R10: R11: R3: R4: R5: R6: R7: R8: 2、隧道配置: R2: 静态: R10&am…

第15次修改了可删除可持久保存的前端html备忘录:换了一个容器时钟,匹配背景主题:现代深色

第15次修改了可删除可持久保存的前端html备忘录&#xff1a;换了一个容器时钟&#xff0c;匹配背景主题&#xff1a;现代深色 备忘录代码 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv&qu…

WSL2 Debian系统添加支持SocketCAN

本人最近在使用WSL2&#xff0c;Linux系统选择的是Debian&#xff0c;用起来很不错&#xff0c;感觉可以代替VMware Player虚拟机。 但是WSL2 Debian默认不支持SocketCAN&#xff0c;这就有点坑了&#xff0c;由于本人经常要使用SocketCAN功能&#xff0c;所以决定让Debian支持…

Axolotl:一款极简的大模型微调(Finetune)开源框架

今天给大家分享一款工具&#xff0c;Axolotl[1] 是一个旨在简化各种AI模型的微调过程的工具&#xff0c;支持多种配置和架构。 特点&#xff1a; 可训练各种 Huggingface 模型&#xff0c;如 llama、pythia、falcon、mpt支持 fullfinetune、lora、qlora、relora 和 gptq使用简…

Maven入门及其使用

目录 一、Maven入门 1.1 初识Maven 1.2 Maven的作用 1.2.1 依赖管理 1.2.2 统一项目结构 1.2.3 项目构建 1.3 Maven坐标 1.4 Maven仓库 1.4.1 Maven仓库概述 二、Maven的下载与安装 2.1 安装步骤 2.1.1 解压安装&#xff08;建议解压到没有中文、特殊字符的路径下。&#xff09…

数据湖技术之应用场景篇

数据湖技术有较多的应用场景&#xff0c;本篇文章是针对一些典型的痛点场景做了一些介绍和说明。比如说在线数据抽取场景原有模式对线上库表产生较大压力&#xff0c;flink多流join维护的大状态导致的稳定性问题等等&#xff0c;具体场景如下图所示&#xff1a; 场景1:在线数据…

车载电子电器架构 —— 多核处理器刷写策略

车载电子电器架构 —— 多核处理器刷写策略 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消…

嵌入式Linux系统引导过程详解

大家好&#xff0c;今天给大家介绍嵌入式Linux系统引导过程详解&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 嵌入式Linux系统引导过程是系统启动的关键环节&#xff0c;它涉及…

代码随想录刷题笔记-Day10

1. 用栈实现队列 232.用栈实现队列https://leetcode.cn/problems/implement-queue-using-stacks/description/ 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xf…

Java基础数据结构之反射

一.定义 Java的反射机制是在运行状态中的&#xff0c;对于任意一个类都能知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法及属性。既然能拿到&#xff0c;我们就可以修改部分类型信息。这种动态获取信息以及动态调用对象方法的功能…

Django笔记(七):JWT认证

首 前后端分离的项目更多使用JWT认证——Json Web Token。本文记录djangorestframework-simplejwt的使用方式。文档 安装 pip install djangorestframework-simplejwt 配置settings.py: INSTALLED_APPS [rest_framework_simplejwt, ]REST_FRAMEWORK {DEFAULT_AUTHENTICA…

系统架构设计师教程(十九)大数据架构设计理论与实践

大数据架构设计理论与实践 19.1 传统数据处理系统存在的问题19.2 大数据处理系统架构分析19.2.1 大数据处理系统面临挑战19.2.2 大数据处理系统架构特征19.3 Lambda架构19.3.1 Lambda架构对大数据处理系统的理解19.3.2 Lambda架构应用场景19.3.3 Lambda架构介绍19.3.4 Lambda架…

CSS--Emmet 语法

Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速度, Vscode内部已经集成该语法. 目录 1. 快速生成HTML结构语法 1.1 快速生成HTML结构语法 2. 快速生成CSS样式语法 2.1 快速生成CSS样式语法 1. 快速生成HTML结构语法 1.1 快速生成HTML结构语法 1. 生成标…

【大厂AI课学习笔记】1.1.4 学科和学习路径

一、8大学科 特点是特点 &#xff1a;厚基础、重交叉、宽口径。 八大学科分别是&#xff1a;数学与统计、科学与工程、计算机科学与技术、人工智能核心、认知与神经科学、先进机器人技术、人工智能工具与平台。 每个学科&#xff0c;又向下延伸。 MORE: AI&#xff0c;即人…

springIoc以及注解的使用

注解 注解的定义 注解&#xff08;Annotation&#xff09;是一种在 Java 程序中以元数据的形式对代码进行标记和说明的机制。它可以被添加到类、方法、字段、参数等程序元素上&#xff0c;用于提供额外的信息和指示。 也就是说注解是一种标记 注解怎么生效呢&#xff1f; 通…

网络相关知识

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、相关工具3.1 network profiler/ In…

gRPC 基本原理

基础知识 RPC的语义是远程过程调用&#xff08;Remote Procedure Call&#xff0c;RPC&#xff09;就是将一个服务调用封装在一个本地方法中&#xff0c;让调用者像使用本地方法一样调用服务&#xff0c;对其屏蔽实现细节。 RPC 会给对应的服务接口名生成一个代理类&#xff0c…

[docker] 关于docker的面试题

docker命名空间&#xff1f; docker与虚拟机的区别&#xff1f; 容器虚拟机所有容器共享宿主机的内核每个虚拟机都有独立的操作系统和内核通过namespace实现资源隔离&#xff0c;通过cgroup实现限制资源的最大使用量完全隔离。每个虚拟机都有独立的硬件资源秒级启动速度分钟级…

超越 Node.js:Bun 的创新与突破

1. Bun Bun 是一个全新的 JavaScript 运行时&#xff0c;类似于 Node.js 和 Deno&#xff0c;它专注于提供出色的性能和开发者体验。Bun 的一些特点包括&#xff1a; 快速的性能&#xff1a;Bun 旨在提供高性能&#xff0c;无论是启动时间、执行速度还是安装依赖包的速度。 兼…