2012-03-12 7 views
0

Я пытаюсь решить проблему оптимизации на MATLAB или CPLEX. Мы имеем два множества A (n элементов) и B (m элементов). Мы должны назначить ровно один элемент из A в один элемент из B.расстояние + загрузка назначение matlab ИЛИ cplex

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

Кроме того, существует еще одна стоимость, связанная с NUMBER элементов в A, назначенных элементу в B (нагрузка). Это стоимость: LJ = (сумма (количество элементов, назначенных J)^2)

Общая стоимость составляет: сумма (ЦМИ + LJ)

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

ответ

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 

Где НЦЖ = 1 для демонстрационных целей и Ij = N^2, N = число элементов, присвоенных у. Это кажется упрощенным для ваших нужд, так как оно всегда будет возвращаться x = 1. Однако переменная, подлежащая минимизации x, не используется, поэтому я не уверен, что вы пытаетесь свести к минимуму. Пожалуйста, дайте мне знать, если я могу помочь дальше.

Смежные вопросы