В решателе внутренних точек мы можем установить ограничение на единицу как x1 + x2 + x3 + x4 = 1. Можно ли установить ограничение как 0,10 <= x1 + x3> = 0,80 и 0,20 <= x2 + x4> = 0,50 - PullRequest
0 голосов
/ 30 апреля 2019

В решателе внутренних точек мы можем установить ограничение на единицу, например, x1 + x2 + x3 + x4 = 1, можем ли мы установить ограничение, например, 0,10 <= x1 + x3> = 0,80 и 0,20 <= x2 + x4> = 0,50, используя коэффициент установки.

Пожалуйста, предоставьте образец для установки ограничения весовых границ для сектора и уровня безопасности.

https://csharp.hotexamples.com/examples/-/InteriorPointSolver/AddRow/php-interiorpointsolver-addrow-method-examples.html

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

1 Ответ

1 голос
/ 30 апреля 2019

Это странно выглядящее ограничение.

0.10 <= x1+x3 >= 0.80

можно переформулировать как

x1+x3 >= 0.10 
x1+x3 >= 0.80 

или просто

x1+x3 >= 0.80 

Пота нет!


Если плакат действительно означает:

0.10 <= x1+x3 <= 0.80

(это всегда помогает перечитать ваш вопрос!), Тогда мы можем написать это как:

x1+x3 >= 0.10
x1+x3 <= 0.80

Это тривиально для реализации.

Если длина суммирования велика:

0.10 <= x1+x2+x3+... <= 0.8

есть лучший подход:

y in [0.1,0.8]     (extra variable with lower and upper bounds)
y = x1+x2+x3+...   (single equality constraint)

Это предотвращает двойное суммирование в модели. По сути, мы создаем дополнительную переменную, но сохраняем ограничение и соответствующие ненулевые коэффициенты.


Конечно, Microsoft Solver Foundation не следует использовать в реальных проектах: он был прекращен в 2012 году.

...