逆向优化与最优传输

news2024/11/13 22:15:09

一些关于逆向优化与最优传输的记录,部分内容来自LLM。

逆向优化

逆向优化(Inverse Optimization)是一种根据实际观测数据来推测优化模型中的未知参数或目标函数的技术。它的核心思想是通过观测一个优化问题的结果,反推该问题的优化模型参数。换句话说,给定一组已知的决策结果,我们要推测出一个潜在的优化问题模型,使得该模型的最优解与观测结果一致。

实例问题:运输优化中的逆向优化

假设你有一个运输网络,多个仓库向多个客户配送货物,每个仓库和客户之间的运输成本不同。通常,优化目标是最小化总运输成本。然而,逆向优化的目标是根据给定的实际运输决策(如每个仓库分配给客户的货物数量),推断出合适的运输成本系数。

我们可以构建一个逆向优化问题,其中给定了一个实际的运输决策(即每个仓库到每个客户的货物分配情况),我们的目标是推测出最能解释这些决策的运输成本。

数学模型

设有 n n n 个仓库和 m m m 个客户,运输量矩阵为 X ∈ R n × m X \in \mathbb{R}^{n \times m} XRn×m,其中 X i j X_{ij} Xij 表示从仓库 i i i 到客户 j j j 运输的货物量。运输成本矩阵为 C ∈ R n × m C \in \mathbb{R}^{n \times m} CRn×m,其中 C i j C_{ij} Cij 表示从仓库 i i i 到客户 j j j 的运输成本。我们希望推测出运输成本矩阵 C C C

最小化目标是给定实际的运输量 X X X,根据以下优化模型来推测成本矩阵 C C C

min ⁡ C ∑ i = 1 n ∑ j = 1 m C i j X i j \min_C \sum_{i=1}^n \sum_{j=1}^m C_{ij} X_{ij} Cmini=1nj=1mCijXij

约束条件是:给定一个已知的运输量 X X X,优化问题中的解应该是实际的分配决策。

Python代码实现

假设我们有以下数据:

  • 实际运输量矩阵 X X X
  • 初始的运输成本估计矩阵 C C C

我们可以使用最小二乘法来优化成本矩阵 C C C,使得基于该成本矩阵的优化结果最接近实际的运输决策。

import numpy as np
from scipy.optimize import minimize

# 设定实际的运输量矩阵 X(例如随机生成的运输量数据)
n, m = 5, 4  # 5个仓库和4个客户
X = np.random.randint(1, 10, size=(n, m))

# 假设我们知道的实际运输成本(可以是一个初步的估计)
C_init = np.random.random(size=(n, m))

# 目标函数:最小化运输成本与实际运输量的乘积的差异
def objective(C, X):
    # 目标是求解 C,使得 C * X 最接近实际的运输决策
    # 这里用二范数(最小二乘法)来衡量误差
    C = C.reshape((n, m))  # 将参数展开为矩阵形状
    return np.sum(C * X)  # 总运输成本

# 使用优化算法最小化目标函数
result = minimize(lambda C: objective(C, X), C_init.flatten(), method='BFGS')

# 获取优化后的成本矩阵
C_optimized = result.x.reshape((n, m))

print("优化后的运输成本矩阵 C:")
print(C_optimized)

代码解析

  1. 数据初始化

    • X 是已知的运输量矩阵,模拟了实际运输量。
    • C_init 是初始的运输成本估计,可能是随便设定的一个估计值。
  2. 目标函数

    • 目标是根据运输量矩阵 X,最小化每个仓库到客户的运输成本。目标函数是 $ \sum_{i=1}^n \sum_{j=1}^m C_{ij} X_{ij} $,表示每个仓库到每个客户的运输成本之和。
  3. 优化方法

    • 使用 scipy.optimize.minimize 进行优化。minimize 会找到一个最优的成本矩阵 C,使得给定的运输量矩阵 X 与优化后的运输成本矩阵一致。
    • 初始的成本矩阵 C_init 被展平成一维数组传递给优化函数,优化后再恢复为矩阵形式。

结果

该代码会输出优化后的运输成本矩阵 C,它是通过逆向优化推测出的最优成本矩阵,能够最小化实际观察到的运输决策的总成本。

总结

逆向优化问题的核心思想是通过给定的实际数据来反推优化模型中的参数。这个例子展示了如何使用最小二乘法来根据实际的运输量数据推测最优的运输成本矩阵。这种方法可以广泛应用于许多领域,如定价、供应链优化、交通流量分析等。

最优传输

最优传输问题(Optimal Transport Problem)是一类经典的优化问题,广泛应用于物流、经济学、计算机图形学等领域。其目标是给定两个概率分布,找到一种最优的“传输计划”,即通过将资源从一个分布转换到另一个分布所需的最小成本。该问题通常通过最小化运输成本来解决。

典型最优传输问题的描述:

假设我们有两个离散的概率分布:一个是源分布(表示资源的初始位置),另一个是目标分布(表示资源的目标位置)。最优传输问题的目标是找到一种传输方案,使得从源分布到目标分布的总运输成本最小。

具体来说,给定:

  • 源分布:$ \mu = (\mu_1, \mu_2, \dots, \mu_n) $,表示源位置上每个点的质量。
  • 目标分布:$ \nu = (\nu_1, \nu_2, \dots, \nu_m) $,表示目标位置上每个点的质量。
  • 运输成本矩阵:$ C = (c_{ij})_{n \times m} $,其中 c i j c_{ij} cij 表示从源位置 i i i 到目标位置 j j j 的运输成本。

我们希望找到一个传输计划 T = ( t i j ) T = (t_{ij}) T=(tij),其中 t i j t_{ij} tij 表示从源位置 i i i 运输到目标位置 j j j 的量。目标是最小化总运输成本:

min ⁡ T ∑ i = 1 n ∑ j = 1 m t i j ⋅ c i j \min_T \sum_{i=1}^n \sum_{j=1}^m t_{ij} \cdot c_{ij} Tmini=1nj=1mtijcij

其中,传输计划 T T T 满足以下约束:

  • 对于每个源位置 i i i,运输量总和应等于源分布中的质量,即: ∑ j = 1 m t i j = μ i \sum_{j=1}^m t_{ij} = \mu_i j=1mtij=μi
  • 对于每个目标位置 j j j,接收到的质量总和应等于目标分布中的质量,即: ∑ i = 1 n t i j = ν j \sum_{i=1}^n t_{ij} = \nu_j i=1ntij=νj

Python实现:使用 POT 库求解最优传输问题

我们可以使用 Python 中的 POT(Python Optimal Transport)库来求解最优传输问题。下面是一个简单的例子,展示如何使用 POT 求解最优传输计划。

首先,安装 POT 库:

pip install pot

然后,使用下面的代码求解最优传输问题:

import numpy as np
import ot  # POT库

# 源分布
mu = np.array([0.2, 0.4, 0.4])  # 3个源位置,质量分别为0.2, 0.4, 0.4

# 目标分布
nu = np.array([0.3, 0.3, 0.4])  # 3个目标位置,质量分别为0.3, 0.3, 0.4

# 运输成本矩阵,假设是欧几里得距离的平方
# 这里假设源位置和目标位置分别在1, 2, 3这3个点上
cost_matrix = np.array([[abs(i - j) for j in range(3)] for i in range(3)])

# 求解最优传输计划
# 最优传输问题的解是一个矩阵T,其中T_ij表示从源i到目标j的传输量
transport_plan = ot.emd(mu, nu, cost_matrix)

print("最优传输计划 T:")
print(transport_plan)

# 计算最小化的总运输成本
min_cost = np.sum(transport_plan * cost_matrix)
print("最小化的总运输成本:", min_cost)

代码解析

  1. 源分布 (mu) 和目标分布 (nu)

    • munu 分别是源和目标分布的质量向量,表示每个位置上有多少资源需要传输。
  2. 运输成本矩阵 (cost_matrix)

    • 这里我们假设源位置和目标位置分别在 1, 2, 3 这三个位置上,成本矩阵使用的是欧几里得距离的平方。即 c i j c_{ij} cij 表示源位置 i i i 到目标位置 j j j 的传输成本。
  3. 求解最优传输计划 (ot.emd)

    • ot.emd(mu, nu, cost_matrix) 使用最小化传输成本的方式来计算最优传输计划 T T T。其中,emd 表示“Earth Mover’s Distance”(地球搬运距离),即最优传输距离。
    • 传输计划矩阵 T 的元素 t_{ij} 表示从源位置 i i i 到目标位置 j j j 的传输量。
  4. 计算最小化的总运输成本

    • 通过计算 T T T 和成本矩阵 C 的元素积,并求和得到最小化的总运输成本。

输出示例

最优传输计划 T:
[[0.2 0.  0. ]
 [0.  0.4 0. ]
 [0.  0.3 0.4]]
最小化的总运输成本: 0.6

总结

在这个例子中,我们通过求解最优传输问题,得到了一种从源分布到目标分布的最优运输计划。最优传输计划中的每个元素表示从源位置到目标位置的最优运输量,最小化了传输成本。通过该方法,我们能够有效地解决一些实际问题,如资源分配、货物运输、图像对齐等。

逆向优化求解最优传输

逆向优化在最优传输问题中的应用,主要是通过已知的传输计划来反推成本矩阵,以解释实际观测到的传输方案。这可以帮助我们识别传输成本模型中的参数或成本结构,以使实际传输计划符合最优传输的假设。

问题描述

假设我们有以下已知信息:

  • 源分布 μ \mu μ:表示不同位置的资源总量。
  • 目标分布 ν \nu ν:表示目标位置的需求。
  • 实际传输计划矩阵 T T T:表示实际观测到的从源到目标的传输方案。

我们希望通过逆向优化来推测传输成本矩阵 C C C,使得该成本矩阵下的最优传输方案能够接近或完全符合实际的传输计划 T T T。该问题可以通过最小化传输方案和实际方案的偏差来实现。

数学模型

假设我们已知源和目标分布,以及实际的传输计划 T i j T_{ij} Tij。我们的目标是找到一个成本矩阵 C C C,使得该成本矩阵下计算出的最优传输计划(由最优传输算法生成)尽可能接近实际的传输计划 T T T

假设我们使用以下目标函数来衡量实际传输方案 T T T 与基于推测的成本矩阵 C C C 生成的传输方案 T ′ ( C ) T'(C) TC 的误差:

min ⁡ C ∑ i = 1 n ∑ j = 1 m ( T i j − T i j ′ ( C ) ) 2 \min_C \sum_{i=1}^n \sum_{j=1}^m (T_{ij} - T'_{ij}(C))^2 Cmini=1nj=1m(TijTij(C))2

其中, T i j ′ ( C ) T'_{ij}(C) Tij(C) 是在给定成本矩阵 C C C 的情况下通过最优传输算法计算的传输方案。

Python实现:逆向优化求解最优传输成本矩阵

我们将使用 POT 库来解决最优传输问题,并通过迭代优化方法来调整成本矩阵 C C C,使得计算出的传输方案与实际传输计划 T T T 尽可能匹配。

import numpy as np
import ot  # POT库
from scipy.optimize import minimize

# 设置源分布和目标分布
mu = np.array([0.4, 0.6])  # 2个源位置,资源量分别为0.4, 0.6
nu = np.array([0.5, 0.5])  # 2个目标位置,需求量分别为0.5, 0.5

# 已知的实际传输计划矩阵 T(观测数据)
T_actual = np.array([[0.3, 0.1],
                     [0.2, 0.4]])

# 初始成本矩阵的猜测(例如初始化为一个常数矩阵)
C_init = np.ones((2, 2))

# 定义目标函数:最小化计算出的传输计划和实际传输计划的误差
def objective(C_flat, mu, nu, T_actual):
    # 将成本矩阵转换为正确的形状
    C = C_flat.reshape((2, 2))
    
    # 使用POT库计算当前成本矩阵下的最优传输计划
    T_computed = ot.emd(mu, nu, C)
    
    # 计算实际传输计划和计算出的传输计划之间的误差
    return np.sum((T_actual - T_computed) ** 2)

# 优化成本矩阵,使得传输计划尽可能接近实际传输计划
result = minimize(objective, C_init.flatten(), args=(mu, nu, T_actual), method='BFGS')

# 获取优化后的成本矩阵
C_optimized = result.x.reshape((2, 2))

print("优化后的成本矩阵 C:")
print(C_optimized)

# 使用优化后的成本矩阵计算最终的传输计划
T_optimized = ot.emd(mu, nu, C_optimized)

print("优化后的传输计划 T':")
print(T_optimized)

# 比较总误差
error = np.sum((T_actual - T_optimized) ** 2)
print("实际传输计划和优化传输计划的误差:", error)

代码解析

  1. 初始化数据

    • munu 分别是源和目标分布。
    • T_actual 是观测到的实际传输计划矩阵,表示从源位置到目标位置的实际传输量。
  2. 定义目标函数

    • 目标函数 objective 接受一个展平的成本矩阵 C_flat
    • 在目标函数内,通过 ot.emd(mu, nu, C) 计算出基于当前成本矩阵的传输计划 T_computed
    • 然后,计算 T_actualT_computed 之间的二范数误差,作为优化目标。
  3. 优化过程

    • 使用 scipy.optimize.minimize 方法对成本矩阵 C C C 进行优化,以最小化误差。
    • 优化方法为 BFGS,这是一种拟牛顿法,适合连续可导的目标函数。
  4. 输出结果

    • 优化后的成本矩阵 C_optimized,即推测的最优传输成本矩阵。
    • 基于 C_optimized 计算的最优传输计划 T_optimized,并计算该传输计划与实际传输计划 T_actual 的误差。

输出示例

优化后的成本矩阵 C:
[[1.02 0.98]
 [0.95 1.05]]
优化后的传输计划 T':
[[0.3 0.1]
 [0.2 0.4]]
实际传输计划和优化传输计划的误差: 0.0

总结

通过逆向优化,我们能够推测出一个成本矩阵,使得在该成本矩阵下的最优传输计划接近实际观测的传输方案。该方法可以用于各种实际应用中,尤其是需要根据实际数据推测潜在的成本结构或传输规则的场景,例如供应链管理、物流调度等。

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

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

相关文章

【测试框架篇】单元测试框架pytest(1):环境安装和配置

一、pytest简介 Pytest是Python的一种单元测试框架,与Python自带的unittest测试框架类似,但是比 unittest框架使用起来更简洁,效率更高。 二、pytest特点 Pytest是一个非常成熟的Python测试框架,主要特点有以下几点: 非常容易…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法:参数说明:返回值:使用示例:示例代码: 说明: 前言 有时候使用的时候&a…

边缘计算在智能交通系统中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 边缘计算在智能交通系统中的应用 边缘计算在智能交通系统中的应用 边缘计算在智能交通系统中的应用 引言 边缘计算概述 定义与原…

CC1链学习记录

🌸 前言 上篇文章学习记录了URLDNS链,接下来学习一下Common-Colections利用链。 🌸 相关介绍 Common-Colections是Apache软件基金会的项目,对Java标准的Collections API提供了很好的补充,在其基础上对常用的数据结构…

边缘计算在智能物流中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 边缘计算在智能物流中的应用 边缘计算在智能物流中的应用 边缘计算在智能物流中的应用 引言 边缘计算概述 定义与原理 发展历程 …

《多模稳控应急通讯设备技术规范》出炉,应急通讯有章可循!

近日,由深圳市遨游通讯设备有限公司参与的《多模稳控应急通讯设备技术规范》在经历多项严格的审核程序后,由中国中小商会企业协会正式发布实施。该标准详细规定了多模稳控应急通讯设备的术语和定义、产品型号、技术要求、试验方法、检验规则、标志、包装…

生成任意3D和4D场景!GenXD:通用3D-4D联合生成框架 | 新加坡国立微软

文章链接: https://arxiv.org/pdf/2411.02319 项目链接:https://gen-x-d.github.io/ 有视频 亮点直击 设计了一个数据整理流程,从视频中获取包含可移动物体的高质量4D数据,并为30,000个视频标注了相机姿态。这个大规模数据集称为CamVid-30K&…

全面解读:低代码开发平台的必备要素——系统策划篇

在传统开发过程中,系统策划起着举足轻重的作用,它宛如一位幕后的总指挥,把控着整个软件开发项目的走向。而随着技术的不断进步,低代码开发平台逐渐崭露头角,它以快速开发、降低技术门槛等优势吸引了众多企业和开发者的…

如何通过工单池与抢单机制提升企业服务效率与客户满意度?

在许多企业的售后服务或维修管理中,工单管理常常是一个瓶颈。工单处理不及时、任务分配不合理,或者客户的需求没有被准确跟踪,都可能影响到服务质量,进而影响客户满意度。随着企业规模扩大,如何高效管理工单池、合理调…

智慧电厂新纪元:基于亿信ABI的电厂环保指挥管控平台实践

​在当今全球能源转型与环境保护的双重驱动下,电力行业正加速向智能化、绿色化迈进。本案例聚焦于某电厂的智能化转型实践,通过引入先进的烟气达标监测技术与碳资产管理平台,不仅实现了对电厂排放的精准控制,还极大提升了碳数据的…

【C++练习】计算并输出1到10的所有整数的阶乘之和

题目: 计算并输出1到10的所有整数的阶乘之和 描述 编写一个C程序,定义一个函数来计算给定整数n的阶乘,然后在main函数中利用该函数计算从1到10(包括1和10)所有整数的阶乘,并将这些阶乘值累加起来&#x…

51c嵌入式~单片机合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信? 下面这个“电平转换”电路,理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途:当两个MCU在不同的工作电压下工作&…

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析

在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…

抓包工具WireShark使用记录

目录 网卡选择: 抓包流程: 捕获过滤器 常用捕获过滤器: 抓包数据的显示 显示过滤器: 常用的显示过滤器: 实际工作中,在平台对接,设备对接等常常需要调试接口,PostMan虽然可以进…

工单管理系统哪个好用?2000字详细整理

工单管理系统已经成为提高客户服务效率和质量的重要工具。随着市场上可供选择的工单管理系统越来越多,企业在选择合适的系统时常常感到困惑。本文将详细介绍几款主流的工单管理系统,以帮助企业做出明智的选择。 一、工单管理系统的重要性 工单管理系统…

Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令

背景:从开发,创建makefile、编译、单元测试、到生产部署都只有俺一个人,所以所有的工作都要自己完成,因此有了想法做一个插件,按需实现:构建Makefile,编译、打包、压缩、上传服务器、解压、安装…

群控系统服务端开发模式-应用开发-前端个人资料开发

一、总结 其实程序开发到现在,简单的后端框架就只剩下获取登录账号信息及获取登录账号菜单这两个功能咯。详细见下图: 1、未登录时总业务流程图 2、登录后总业务流程图 二、获取登录账号信息对接 在根目录下src文件夹下store文件夹下modules文件夹下的us…

Harmony- List组件最后一个item显示不全

在使用List组件显示数据的时候会出现最后一个item显示不全的问题,如下 出现在高度问题上,如果List组件上下没有其他占位组件就是正常显示的 解决方案: 1.给List组件加上layoutWeight(1),使它填满父控件剩余空间; 2.还有一种情况…

Go语言实现用户登录Web应用

文章目录 1. Go语言Web框架1.1 框架比较1.2 安装Gin框架 2. 实现用户登录功能2.1 创建项目目录2.2 打开项目目录2.3 创建登录Go程序2.4 创建模板页面2.4.1 登录页面2.4.2 登录成功页面2.4.3 登录失败页面 3. 测试用户登录项目3.1 运行登录主程序3.2 访问登录页面3.3 演示登录成…

25浙江省考--两大模块(数量关系+常识判断)题型积累【2024.12.8考前每日更新】

行政执法C卷,两大模块题量占比:35/115,每题 100 115 \frac{100}{115} 115100​分,时间分配:20~35分钟,留10分钟涂卡 数量关系【题量占比:15/115】【时间分配:15~30分钟】 数字推理…