Donc, j'ai 12 listes et chacune d'elles contient 28 éléments avec une valeur. J'essaye de maximiser la valeur de la première liste en commutant des articles avec les 11 autres listes.Algorithme pour trouver la meilleure combinaison
Je peux aussi échanger différentes quantités d'articles. Par exemple, je peux échanger 6 articles des articles 1 et 3 de la liste 2. Ou, je peux échanger 19 articles des articles 1 et 22 de la liste 2. Il y a d'autres articles dans une grande piscine qui ne font pas partie d'une liste Ainsi, si une liste reçoit plus de 28 éléments, les valeurs les plus basses peuvent facilement être supprimées, et si une liste contient moins de 28 éléments, de nouveaux éléments peuvent facilement être ajoutés.
Cependant, une restriction est que je ne peux échanger avec une liste à la fois. Par exemple, je ne peux pas échanger 3 articles de la liste 1 vers la liste 2, échanger 3 articles de la liste 2 vers la liste 3 et échanger 3 articles de la liste 3 vers la liste 1. Lorsque je négocie de la liste 1, je peux seulement commerce avec une seule autre liste à la fois.
Je peux évidemment forcer la force, mais j'ai l'impression que cela prendrait une éternité. Je ne suis pas très bon avec les combinaisons, donc je ne suis pas sûr du nombre de combinaisons possibles si je voulais une force brute. Donc, mes questions sont: est-ce que la force brute est une solution réalisable ici, et si non, quel est l'exemple d'un algorithme qui pourrait m'aider?
Merci, Krzys.
EDIT:
Exemple:
List 1
[Apple - 12]
[Banana - 5]
[Orange - 8]
List 2
[Steak - 15]
[Chicken - 2]
[Fish - 7]
List 3
[Zebra - 20]
[Horse - 6]
[Elephant - 10]
Je vais commencer par la liste 1. Voici ce que le programme ferait:
if (List1.Apple - List2.Steak < BestTradeAvailable) Then BestTradeAvailable = List1.Apple - List2.Steak
if (list1.Apple - List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Apple - List2.Chicken
if (list1.Apple - list2.Fish < BestTradeAvailable) Then BestTradeAvailable = list1.Apple - list2.Fish
if (list1.Banana - List2.Steak < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Steak
if (list1.Banana - List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Chicken
if (list1.Banana - List2.Fish < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Fish
etc Je veux aussi faire plusieurs éléments à la fois ainsi:
if (list1.Apple + list1.Banana - List2.Steak + List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Apple + list1.Banana - List2.Steak + List2.Chicken
Mais comme je l'ai dit, vous pouvez échanger un élément de la liste 1 et 2 articles de la liste 2:
if (list1.Apple - List2.Steak + List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = List1.Apple - List2.Steak + List2.Chicken
Donc, fondamentalement, je veux juste essayer trouver le meilleur compromis disponible.
Dans cet exemple, le meilleur trade serait le trading de Apple + Orange à List3 pour Zebra et Elephant, car ce trade augmente la valeur totale de List1 du montant le plus élevé.
Cette question est impossible à comprendre. Travailler un petit exemple pour nous avec, par exemple, quatre listes contenant chacun quatre éléments, démontrant quelle quantité vous tentez de maximiser. –
@EricLippert Je vais travailler sur un exemple. –
Donc, dans votre exemple, quel est le meilleur commerce?Quel résultat attendriez-vous du programme dans ce cas, et pourquoi? –