algorithm - 如何将 N 个数字分配到最小化某些目标函数的 M 包中?

标签 algorithm mathematical-optimization np-complete integer-programming

我有 N(例如 30)个整数 V[i],和 M(例如 8)个包,每个包 有一个期望值 P[j]

我想将每个整数分配给一个包,下面的表达式计算差值 pack jV[k] 的总和与 pack j 的期望值之间。

diff[j] = abs(P[j] - sum(V[k] that in pack j))

目标是找到最小化 sum(diff[j]) 的最佳解决方案。

我不知道这种问题的类型是什么。这可以用线性规划来解决吗,还是一个 NP 完全问题?

最佳答案

无论这是否是 NP-hard,您都可以使用易于访问的整数编程软件有效地解决您需要的问题实例。对于您的问题,您可以定义 x_{ij} 来定义 X[i] 是否分配给组 j。然后您还可以定义变量 d_j,它们是您公式中的 diff[j]。那么你的模型是:

min_{x, d} \sum_{j=1}^M d_j
s.t.       d_j >= P[j] - \sum_{i=1}^N X[i]x_{ij} \forall j
           d_j >= \sum_{i=1}^N X[i]x_{ij} - P[j] \forall j
           \sum_{j=1}^M x_ij = 1 \forall i
           x_{ij}\in \{0, 1\}

这是一个混合整数优化模型,可以求解,例如使用R中的lpsolvelpSolveAPI包或intlinprog 在 MATLAB 中的函数。

关于algorithm - 如何将 N 个数字分配到最小化某些目标函数的 M 包中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462162/

相关文章:

c - 如何制作通用链表

给定模型的曲线拟合算法

python - 在 Python 中使用最大似然导出回归系数

computer-science - 如果已知问题 X(决策问题)是 NP-Complete,并证明可以简化为问题 Y,那么您能说问题 Y 是 NP-Complete 吗?

c# - 如何找到一组中的哪些数字加起来与另一个给定数字相加?

algorithm - 将子集和减少到多项式包装

java - 双向链表的插入排序

algorithm - Racket 中的算法可以在列表之间生成引用的哈希值?

r - 将固定和可变参数传递给 Optimx

C++:从 cin 流中读取字符串并存储以空格分隔的值