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

如何为PuLP库定义自定义成本函数并调用其中的优化变量?

PuLP自定义成本函数使用指南

核心前提说明

PuLP是专门的线性规划求解库,仅支持线性的目标函数和约束条件,你传入的自定义函数返回值必须是PuLP可识别的线性表达式,不能是普通Python数值。

你当前代码的第一个问题

连续类型变量的类别参数拼写错误,应为Continuous而非Continues,会直接导致变量定义失败。

自定义函数中使用PuLP变量的方案

情况1:自定义计算逻辑为线性运算

PuLP的变量本身支持标准线性运算(加减、与常数相乘),你直接在自定义函数中按正常运算逻辑写即可,返回的结果就是PuLP可直接识别的线性目标表达式,不需要额外转换。
示例代码如下:

import pulp

def opt_funct(bins, reg):
    # 示例线性计算逻辑,可替换为你自己的线性计算规则
    return 25 * bins + 80 * reg + 12

model = pulp.LpProblem(name="small-problem", sense=pulp.LpMinimize)
bins = pulp.LpVariable(name="bins", lowBound=1, upBound=100, cat='Integer')
reg = pulp.LpVariable(name="reg", lowBound=0.0001, upBound=1.0, cat='Continuous')

# 直接将自定义函数返回的表达式作为目标加入模型
model += opt_funct(bins, reg)
# 求解,关闭日志输出可以加msg=False参数
status = model.solve(pulp.PULP_CBC_CMD(msg=False))

情况2:自定义计算逻辑为非线性运算

PuLP原生不支持非线性目标,有两种解决路径:

  • 对非线性逻辑做线性化转换:比如分段函数、两变量乘积(其中一个是0-1变量)等常见非线性形式,都可以通过混合整数线性规划的线性化技巧转换为线性表达式,再返回给模型。
  • 更换支持非线性规划的求解库:如果非线性逻辑无法线性化,可以改用gekko、scipy.optimize等支持非线性规划的工具,混合整数非线性规划可以搭配bonmin、couenne等求解器使用。

优化后变量值提取方式

求解完成后,调用变量的value()方法即可拿到优化后的数值:

# 提取优化后的变量值
optimal_bins = bins.value()
optimal_reg = reg.value()
# 提取最优目标值
optimal_cost = pulp.value(model.objective)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:57:02