1

У меня есть следующая задача и не найдено ни одного рабочего решения.Оптимизация назначения/Установить покрытие

Мне нужно найти оптимальное решение для размещения сетевых узлов. Цель состоит в том, чтобы минимизировать затраты на копание для подключения кабелей. Некоторые затраты на рытье зависят друг от друга. Например. представьте, что у вас есть 2 узла подряд и выкопайте один кабель до первого, тогда вам не нужно включать эти затраты на копание в кулачный узел для копания ко второму узлу. Но если вы просто выберите второй узел, вы должны добавить затраты на копание до узла 1 и от узла 1 до узла 2.

Для каждого узла есть определенное количество пользователей, которые могут быть предоставлены им. Чтобы охватить пользователя, по меньшей мере, например, Ограничением является 90% пользователей.

Я пытался использовать квадратичное программирование, но CVX не нравится:

cvx_begin 
variable x(n,1) binary; 
minimize(x'*Q*x) 
subject to 
    x'*A*x >= 0.9; 
cvx_end 

Есть ли кто-нибудь, имеющее лучшее представление о ..., используя двоичные например линейный или квадратичное программирование?

Спасибо и BR

+0

'' 'Package X не понравилось' '' не является описанием ошибки. Здесь нет никакой помощи. И да, похоже, вам нужно включить двоичные/целочисленные переменные. Ключевое слово: * индикатор-переменные *. Но сейчас вопрос слишком расплывчатый, чтобы сделать больше ('' '2 узла в строке''': в чем? Евклидово-пространство? Сетка? ...). – sascha

+0

2 узла в строке с точки зрения топологии сети, таких как маршрутизаторы или точки агрегации в сети передачи данных. CVX сообщение об ошибке: Дисциплинированная ошибка в выпуклом программировании: Недопустимое ограничение: {convex}> = {real constant} – user7125961

+0

Это означает, что ваше ограничение '' 'x '* A * x> = 0.9''' не соответствует к правилам DCP. Для этого вам нужно переформулировать свою проблему. Но мы не знаем, как выглядит Q. (Просто замечание: '' 'x '* A * x <= 0.9''' будет действительным ограничением, но не тем, что вы хотите). – sascha

ответ

1

x'Ax является суммирование a(i,j)*x(i)*x(j). Продукты z(i,j)=x(i)*x(j) линеаризуется:

z(i,j) <= x(i) 
z(i,j) <= x(j) 
z(i,j) >= x(i)+x(j)-1 
z(i,j) in {0,1} 

С этим у вас есть проблемы линейной MIP.

Есть несколько оптимизаций мы можем использовать в этой формулировке:

  • Мы можем сделать матрицы треугольные А и Q, эксплуатируя симметрию
  • диагоналей могут быть обработаны специально, как x(i)^2=x(i)
  • z(i,j) ' s может быть сведена к строго треугольной структуре