Я относительно новичок в задачах математической оптимизации, но наиболее близкий c к моей текущей проблеме можно назвать дискретной оптимизацией (поправьте меня, если я ошибаюсь).
В основном , У меня есть 2 отдельных словаря элементов, каждый из которых имеет список атрибутов, мы можем называть их числами от 1 до 6. Мне нужно выбрать элементы из обоих словарей, чтобы решить проблему максимизации для одного атрибута c (давайте скажем номер 1) и с несколькими ограничениями для каждого атрибута. Количество элементов, которые я могу выбрать из каждого словаря, также является ограничением само по себе.
Вот пример словарей, о которых я говорю:
# Dictionaries, as an example (in my case each dict can have 100s and even 1000s of items)
dict_a = {"12312321":[321,5422.555,True,5893,3891,-122],
"492391":[5531,1531.1,False,21003,-5293,23],
"892781145":[89234,73110147.892121,True,152,5321,315124]}
dict_b = {"3789213451":[51231,5422.52,False,214383,32823,545622],
"48123":[5531,123131.13212,False,26243,5223,52233],
"4981093727":[894,7198347.5321,False,12312,-21,4],
"23":[801123,12234283.05114,False,32113,34131245,212312]}
Ограничения может быть:
- Атрибут 3 должен быть False (в элементах из обоих dicts)
- Атрибут 2 должен находиться в диапазоне от 1000 до 100000 (в элементах из обоих dicts)
- Сумма атрибутов 4 из элементов в Dict A, деленная на сумму атрибутов 4 из элементов в Dict B, должна быть> = 1,15
- Вы можете выбрать максимум 2 элемента и минимум 2 элемента из Dict A
- Вы можете выбрать максимум 4 элемента и минимум 1 элемент из Dict B
- Сумма атрибутов 5 из элементов в Dict B должна быть больше, чем сумма тех же атрибутов в Dict A
Допустим, цель состоит в том, чтобы выбрать определенные элементы из каждого дикта для максимизации:
- Сумма атрибутов 1 из элементов в Dict A, минус сумма атрибутов 1 из пунктов в Dict B.
Я не прошу решить за меня проблему или создать готовую формулу go. Я хотел бы знать, как лучше всего подойти к следующей проблеме, учитывая, что я относительно новичок в проблемах оптимизации и не знаю 10 различных формул для этого. Я планирую использовать библиотеку SciPy, поскольку, по моему мнению, она работает лучше всего, однако не стесняйтесь рекомендовать другие Python библиотеки, которые могут решить эту проблему.
Большое спасибо!