Как включить динамические ограничения c в линейную оптимизацию с помощью PuLP в python? - PullRequest
0 голосов
/ 30 мая 2020

Я работал над задачей линейной оптимизации с использованием библиотеки PuLP. Как я могу включить это ограничение Dynami c в свой код?

снимок примера Excel с условиями

Мне нужно минимизировать VaR 1D портфеля (-19391,8 ), образованный взвешенной суммой A и B - Целевая функция

При этом VaR10D портфеля должен быть уменьшен на заданную цель (-39100 до -29100). Как видите, загвоздка в том, что Var10d и Var1d портфеля являются вторыми по величине значениями в столбце «Всего». Теперь мне нужно добавить в код ограничение, согласно которому Var10d должен быть уменьшен на 10000 (т.е. до -29100), но в то же время он также должен быть вторым наименьшим значением в итоговом столбце, рассчитанном по взвешенной сумме «А» и «Б» каждый день.

Таким образом, мне нужны оптимальные веса, которые могут: 1. минимизировать Var1d (в то время как он является вторым наименьшим в столбце «Всего» Var10d), 2. уменьшить Var10d на 10000 (т.е. до -29100) (пока это второй наименьший в столбце «Итого» переменной Var1d).

1 Ответ

0 голосов
/ 30 мая 2020

Мин. -8000 * x1 - 15000 * x2 + target

Я не понимаю ваших ограничений, потому что числа кажутся просто другими значениями для коэффициентов в целевой функции.

Итак, я не вижу причины, по которой ваша «программа» не просто устанавливает x1, x2 = 0, нечего вычислять, потому что нет ограничений ..

Если вы хотите получить ваше целевое значение в заданном диапазоне c вы можете добавить: coeff * x1 + coeff * x2 <= (> =) value И затем, если вы хотите изменить значение правой стороны, вы можете снова запустить программу после первого цикла и так далее ..

...