У меня есть следующая задача и не найдено ни одного рабочего решения.Оптимизация назначения/Установить покрытие
Мне нужно найти оптимальное решение для размещения сетевых узлов. Цель состоит в том, чтобы минимизировать затраты на копание для подключения кабелей. Некоторые затраты на рытье зависят друг от друга. Например. представьте, что у вас есть 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
'' 'Package X не понравилось' '' не является описанием ошибки. Здесь нет никакой помощи. И да, похоже, вам нужно включить двоичные/целочисленные переменные. Ключевое слово: * индикатор-переменные *. Но сейчас вопрос слишком расплывчатый, чтобы сделать больше ('' '2 узла в строке''': в чем? Евклидово-пространство? Сетка? ...). – sascha
2 узла в строке с точки зрения топологии сети, таких как маршрутизаторы или точки агрегации в сети передачи данных. CVX сообщение об ошибке: Дисциплинированная ошибка в выпуклом программировании: Недопустимое ограничение: {convex}> = {real constant} – user7125961
Это означает, что ваше ограничение '' 'x '* A * x> = 0.9''' не соответствует к правилам DCP. Для этого вам нужно переформулировать свою проблему. Но мы не знаем, как выглядит Q. (Просто замечание: '' 'x '* A * x <= 0.9''' будет действительным ограничением, но не тем, что вы хотите). – sascha