Python решить задачу оптимизации, выбрав элементы из двух словарей / списков - PullRequest
0 голосов
/ 11 июля 2020

Я относительно новичок в задачах математической оптимизации, но наиболее близкий 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 библиотеки, которые могут решить эту проблему.

Большое спасибо!

...