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

基于PuLP求解满足库存约束的最小周生产人员配置水平

问题:基于每周库存交付量求解最小周生产人员配置水平

需求说明

需要求解满足以下约束的最小总人员配置水平:

  • 总产出需等于5周库存交付量总和
  • 每周累计产出不得超过累计库存(即累计库存 - 累计产出 ≥ 0,每周均需满足)
  • 人员配置变量逐周只能维持不变或增加,不能减少

现有代码

import numpy as np
import pulp as p

inventory_delivery = np.array([200, 500, 0, 900, 0]) # 5周的库存交付量
productivity = 1  # 为简化当前设为1,实际每周会变化
prob = p.LpProblem('Decision', p.LpMinimize)

a = list()
for x in inventory_delivery:
    a.append(p.LpVariable(f'a{len(a)}', 0, None))

# 目标函数
output = sum(a * productivity for a in a)  # 员工数量 * 周生产率
prob += output

# 约束条件
prob += output == sum(inventory_delivery)  # 最终总产出需等于总交付量
#### 如何添加约束:每周产出不能超过当前可用库存?
#### (即:累计库存 - 累计产出 ≥ 0,每周均需满足)

status = prob.solve()
print(p.LpStatus[status])
print("Objective value:", p.value(prob.objective))
print ('\nThe values of the variables : \n')
for v in prob.variables():
    print(v.name, "=", v.varValue)

当前输出

Optimal
Objective value: 1600.0

The values of the variables : 

a0 = 1600.0
a1 = 0.0
a2 = 0.0
a3 = 0.0
a4 = 0.0

解决方案

需要添加两个关键约束:累计产出不超过累计库存和人员配置非递减,修改后的代码如下:

import numpy as np
import pulp as p

inventory_delivery = np.array([200, 500, 0, 900, 0]) # 5周的库存交付量
productivity = 1  # 为简化当前设为1,实际每周会变化
prob = p.LpProblem('Decision', p.LpMinimize)

# 定义人员配置变量,a[i]表示第i周的人员数量
a = [p.LpVariable(f'a{i}', lowBound=0) for i in range(len(inventory_delivery))]

# 目标函数:最小化总人员配置水平(总人员数)
prob += sum(a_i * productivity for a_i in a), "Total Staffing Cost"

# 约束1:总产出等于总交付量
prob += sum(a_i * productivity for a_i in a) == sum(inventory_delivery), "Total Output Match"

# 约束2:每周累计产出不超过累计库存
cumulative_inventory = np.cumsum(inventory_delivery)
for i in range(len(inventory_delivery)):
    cumulative_output = sum(a[j] * productivity for j in range(i+1))
    prob += cumulative_output <= cumulative_inventory[i], f"Week {i+1} Inventory Constraint"

# 约束3:人员配置逐周非递减(只能维持或增加)
for i in range(1, len(a)):
    prob += a[i] >= a[i-1], f"Week {i+1} Staffing Non-Decrease"

# 求解问题
status = prob.solve()
print(p.LpStatus[status])
print("Objective value:", p.value(prob.objective))
print ('\nThe values of the variables : \n')
for v in prob.variables():
    print(v.name, "=", v.varValue)

约束说明

  1. 累计库存约束:通过计算每周累计库存交付量,确保到第i周为止的总产出不超过累计可交付库存,避免提前生产超过当前可用库存的量。
  2. 人员配置非递减约束:强制每周人员数量不小于上一周,满足“只能维持或增加”的要求。

修改后输出示例

Optimal
Objective value: 2000.0

The values of the variables : 

a0 = 200.0
a1 = 500.0
a2 = 500.0
a3 = 900.0
a4 = 900.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:10:44