У меня проблема:оптимизация портфеля сортировка эффективных решений C#
Пусть H - набор портфолио. Для каждого портфеля i
в H
давайте (ri,vi)
значениями (return,risk)
для этого решения.
Для каждого i
в H
, если существует j
в H
(j
отличается от i
) таким образом, что rj>=ri
и vj<=vi
затем удалить i
из H
. потому что в i
преобладает j
(у него лучше вернуться за меньший риск).
В конце H
будет использоваться набор неэффективных эффективных решений.
Я пытался решить вышеуказанную проблему с помощью LINQ:
H.RemoveAll(x => H.Any(y => x.CalculateReturn() <= y.CalculateReturn() && x.CalculateRisk() >= y.CalculateRisk() && x != y));
Но мне интересно, если существует более эффективный способ, потому что, если H.Count()
порядка десяти тысяч, то это займет много времени для удаления доминированных портфелей.
Заранее благодарим за любую помощь!
Christos
Я потерялся где-то между j и vi. Можете ли вы опубликовать некоторый код без сокращений, который показывает вашу проблему? –
H - список классов Портфеля. Каждый портфель состоит из активов с каждым активом, имеющим вес, w, который является числом в [0,1]. Все веса суммируются до 1. Используя два метода портфельного класса, мы можем оценить его риск и его возврат. Таким образом, у каждого портфеля есть пара (возврат, риск). Проблема, которую я хочу решить, состоит в том, чтобы найти все портфели списка портфелей, которые не доминируют. Чтобы понять концепцию доминирующего портфеля, нам необходимо ввести приведенные сокращения. – Christos
Если вам нужно какое-то дополнительное объяснение вышеизложенному, дайте мне знать. Еще раз спасибо Милен. – Christos