You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

产品销售总额最大化场景的高效动态规划实现思路咨询

动态规划实现思路指导

第一步:明确DP状态定义

你原来的框架缺少一个核心状态变量:上一阶段结束后的价格参数P,因为P的计算和前序所有投放量直接相关,是转移逻辑的必要输入。完整的状态定义如下:

  • dp[t][rem][p]:表示第t个时段开始时,剩余库存为rem,上一阶段结束后的价格参数为p时,后续所有时段能拿到的最大实际总销量。
  • 边界条件:当t == T(所有时段全部结束),不管剩余多少库存,总销量都为0,即dp[T][*][*] = 0。

第二步:状态转移逻辑

对于每个状态(t, rem, p),枚举当前时段的投放量sell(取值范围0 ≤ sell ≤ rem):

  1. 计算当前时段更新后的价格参数:new_p = ceil(0.5 * (p + sell))
  2. 计算当前时段的实际销量:s_now = ceil((1 - alpha * (new_p ** pi)) * sell)
  3. 后续时段的最大销量直接取已经计算好的dp[t+1][rem - sell][new_p]
  4. 当前状态的最大值为所有sell对应的s_now + 后续最大销量的最大值。

第三步:空间优化说明

因为计算第t层状态时只需要用到t+1层的结果,你可以只用两个二维数组(当前层、下一层)存储状态,不需要存储完整的三维数组,能大幅节省内存。
另外P的最大可能值不会超过总库存N,所以P的状态范围限定为0 ≤ p ≤ N即可,不需要额外开辟更大的空间。


完整可运行DP实现代码

import math
import numpy as np

def max_sales_dp(N, T, alpha, pi):
    # next_dp[剩余库存][前序P值] = 后续时段最大实际总销量
    # 初始为t=T的边界状态:所有值为0
    next_dp = np.zeros((N+1, N+1), dtype=np.int32)
    
    # 倒序遍历所有时段,从最后一个时段往前推
    for t in range(T-1, -1, -1):
        cur_dp = np.zeros((N+1, N+1), dtype=np.int32)
        # 遍历所有可能的剩余库存
        for rem in range(N+1):
            # 遍历所有可能的前序P值
            for prev_p in range(N+1):
                best = 0
                # 枚举当前时段的所有可能投放量
                for sell in range(0, rem+1):
                    new_p = math.ceil(0.5 * (prev_p + sell))
                    s_now = math.ceil((1 - alpha * (new_p ** pi)) * sell)
                    total = s_now + next_dp[rem - sell][new_p]
                    if total > best:
                        best = total
                cur_dp[rem][prev_p] = best
        next_dp = cur_dp
    
    # 初始状态为第0时段开始,剩余库存N,初始P=0
    return next_dp[N][0]

# 测试示例参数
if __name__ == "__main__":
    N = 1000
    T = 10
    pi = 0.5
    alpha = 1e-2
    print(f"最大实际总销量:{max_sales_dp(N, T, alpha, pi)}")

额外性能优化点

  • 提前预处理所有p对应的alpha * p**pi的值,避免重复计算,提升运行速度
  • N较大时可以加剪枝逻辑:当剩余库存rem较小时,sell的遍历范围可以同步缩小,不需要遍历到N

内容的提问来源于stack exchange,提问作者Cindy Philip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:24:00