0

我正在尝试解决 MATLAB 或 CPLEX 上的优化问题。我们有两个集合 A(n 个元素)和 B(m 个元素)。我们必须将 A 中的一个元素准确地分配给 B 中的一个元素。

B 中的单个元素可以根据需要在 A 中分配任意数量的元素(最大 n)。将 A 中的元素 i 分配给 B = cij中的 j 元素是有代价的。

此外,与分配给 B 中的元素的 A 中元素的数量(负载)相关联的另一个成本。该成本是: lj = ( sum (分配给 j 的元素数) ^2 )

因此,总成本为:sum (cij+lj)

我们希望找到最优分配,使得 sum (cij+lj) 最小化。如果没有负载,该问题可以表述为二进制整数编程。我关心的是如何在 MATLAB 或 CPLEX 中编写这样的函数。

4

1 回答 1

0

您希望根据要分配的变量数量(从 1 到n包含),最小化从一个向量到另一个向量的赋值成本?如果是这样:

[x,fval] = fminsearch(@(x) sum(arrayfun( @(y) y*cij+y^2,1:n)),1)

或者

function out = minFunc(x,n)
  out = 0
  for ii=1:n
    out = out + cij*ii + n^2;
  end
end

其中 cij=1 用于演示目的,Ij = N^2,N = 分配给 j 的元素数。这似乎简化了您的需求,因为它总是会返回x = 1。但是,要最小化的变量x未使用,因此我不确定您要最小化什么。如果我可以进一步提供帮助,请告诉我。

于 2012-03-12T16:15:18.993 回答