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

带求和与整数约束的多元优化:求解最小化目标函数的变量值

整数约束下的MSE目标函数优化解决方案

问题明确

  • 变量:X(含50个整数元素的列表)、Y(含50个整数元素的列表)
  • 目标函数(已简化核心逻辑):
import pandas as pd
from sklearn.metrics import mean_squared_error

alpha1 = 3
alpha2 = 4
beta = 5

def objective(X, Y):
    y_ = alpha1 * pd.Series(X) + alpha2 * pd.Series(Y) + beta
    return mean_squared_error(y_, df.demand)
  • 约束条件:
    • X、Y的每个元素均为整数
    • sum(X) = 100,sum(Y) = 100

解决方案思路

这是一个带整数约束的二次优化问题(MSE本质是平方和形式的二次目标),可以用支持整数约束的二次规划求解器直接求解。这里推荐使用cvxpy,它能简洁定义问题并调用开源整数求解器完成计算。

代码实现

import cvxpy as cp
import pandas as pd
from sklearn.metrics import mean_squared_error

# 替换为你的真实df.demand数据,此处为模拟示例
df = pd.DataFrame({'demand': [15 + 0.2*i for i in range(50)]})
d = df.demand - beta  # 简化目标函数的中间变量

# 定义整数变量
X = cp.Variable(50, integer=True)
Y = cp.Variable(50, integer=True)

# 定义目标:最小化平方和(与MSE最小等价,省去归一化系数不影响最优解)
objective = cp.Minimize(cp.sum_squares(alpha1 * X + alpha2 * Y - d))

# 添加约束
constraints = [
    cp.sum(X) == 100,
    cp.sum(Y) == 100,
    # 若业务需要非负解,可添加以下约束
    # X >= 0,
    # Y >= 0
]

# 调用CBC开源求解器求解
prob = cp.Problem(objective, constraints)
prob.solve(solver=cp.CBC)

# 获取最优整数解
X_opt = X.value.astype(int)
Y_opt = Y.value.astype(int)

# 验证约束与结果
print(f"Sum(X_opt): {sum(X_opt)}, Sum(Y_opt): {sum(Y_opt)}")
min_mse = mean_squared_error(alpha1*pd.Series(X_opt)+alpha2*pd.Series(Y_opt)+beta, df.demand)
print(f"最小MSE值: {min_mse}")

关键说明

  1. 若df.demand对应业务场景有变量范围限制(如非负),直接在constraints列表中添加X >=0、Y >=0即可。
  2. 求解器选择:CBC是默认开源整数求解器,处理50变量的规模完全够用;若追求更快速度,可替换为Gurobi、CPLEX等商业求解器(需额外授权)。
  3. 由于整数约束属于NP难问题,变量规模过大时求解时间会增加,但本问题的50变量规模无压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:57:38