расстояние + распределение нагрузки matlab ИЛИ cplex - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь решить проблему оптимизации на MATLAB или CPLEX.У нас есть два набора A (n элементов) и B (m элементов).Мы должны назначить ровно один элемент в A одному элементу в B.

Одному элементу в B можно назначить столько элементов в A, сколько необходимо (максимум n).Существует стоимость присвоения элемента i в A элементу j в B = cij .

Кроме того, существует еще одна стоимость, связанная с КОЛИЧЕСТВОМ элементов в A, назначенных элементу.в б (нагрузка).Эта стоимость: lj = (сумма (количество элементов, назначенных j) ^ 2)

Таким образом, общая стоимость составляет: сумма (cij + lj)

Мы бы хотели найти оптимальное назначение, такое, чтобы: сумма (cij + lj) была минимальной.Задача может быть сформулирована как двоичное целочисленное программирование, если не было нагрузки.Меня беспокоит то, как я могу написать такую ​​функцию в MATLAB или CPLEX.

1 Ответ

0 голосов
/ 12 марта 2012

Вы хотите минимизировать стоимость этого назначения от одного вектора к другому, в зависимости от количества переменных, которые должны быть назначены, от 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, не используется, поэтому я не уверен, что вы пытаетесь минимизировать.Пожалуйста, дайте мне знать, если я могу помочь дальше.

...