2017-09-18 5 views
-1

J'ai un problème où la somme de chaque ligne et colonne pour un tableau à deux dimensions est donnée et nous devons distribuer la quantité dans chaque cellule du tableau. Il y aura des cellules qui seront verrouillées et vous ne pourrez pas les utiliser pour la distribution. De même, les quantités totales de ligne/colonne peuvent être des valeurs décimales.Optimiser la distribution de la quantité dans le tableau 2d

Ainsi, par exemple, Nous avons un 4 * 3 tableau 2-d

A B C 
D E F 
G H I 
J K L 

où somme de chaque ligne est 10,20,30,35 et somme de chaque colonne est 35,30,30 .

E, I et K sont verrouillés de sorte que les équations deviennent

E = I = K = 0 

A + B + C = 10 
D + F = 20 
G + H = 30 
J + L = 35 

A + D + G + H = 30 
B + H = 30 and 
C + F + L = 30 

j'ai essayé f linéaire (x) = Min (x) et solveurs quadratique f (x) = Min (x^2) en utilisant Python scipy et IBM CPLEX (C#).

Le solveur linéaire n'optimise pas la distribution.

Le solveur quadratique aide avec cette approche, mais il ne fonctionne pas pour les réseaux de taille supérieure à 10 * 10. Le solveur a échoué avec un statut irréalisable. Quelle approche/bibliothèque devrais-je utiliser pour résoudre ce problème étant donné que les totaux peuvent avoir des valeurs décimales et que la taille de la matrice peut aller jusqu'à 100 * 10000?

+1

Quelles approches avez-vous essayé? Qu'est-ce qui ne fonctionne pas? Vraisemblablement, vous auriez un tableau 2d de nombres décimaux et obtiendriez les sommes en boucle. Quelle distribution avez-vous besoin de faire? –

+1

Qu'est-ce que python ou C# a à faire avec ça? –

+0

J'ai mis à jour ma question. @RufusL J'ai essayé de le résoudre en utilisant le solveur quadratique CPLEX mais il échoue après 10 * 10 matrice. –

Répondre

0

Si vous organisez les équations comme

A + B + C      = 10 
A   + D  + G + H  = 30 
    B     + H  = 30 
     C  + F   + L = 30 
      D + F    = 20 
        G + H  = 30 
          J + L = 35 

vous pouvez voir c'est un system of linear equations Ax = b avec

1,1,1,0,0,0,0,0,0   10 
    1,0,0,1,1,1,0,0,0   30 
    0,1,0,0,0,1,0,0,0   30 
A = 0,0,1,0,0,0,1,1,0 and b = 30 
    0,0,0,1,0,0,1,0,0   20 
    0,0,0,0,1,1,0,0,0   30 
    0,0,0,0,0,0,0,1,1   35 

La résolution de tels systèmes a été discuté sur Stack Overflow précédemment:

+0

Notez qu'il existe des équations R + C pour R * C inconnues – MBo

+0

Oui, dans ce cas, il y aura un nombre infini de solutions '{A = (-r2) -r1 + 10, B = r2, C = r1, D = r2 + r1-10, F = (-r2) -r1 + 30, G = r2, H = 30-r2, J = 35-r2, L = r2} 'pour les paramètres' r1, r2'. – jq170727

+0

Merci @ jq170727, l'équation linéaire n'optimise pas la distribution. –