[Python-es] Obtención de Sumandos para un Target a partir de una colección de valores

Manuel A. Estevez Fernandez stvzito en gmail.com
Vie Ene 12 15:35:47 EST 2018


Hola a todos, tengo la siguiente necesidad:

Encontrar una combinación de valores pertenecientes a una colección cuyo
resultado sea un numero determinado.

Algo así:
id target valores
1 100 20
1 100 30
1 100 50
1 100 15
1 100 45
1 100 60
2 150 75
2 150 75
2 150 100
3 1500 900
3 1500 500
3 1500 600
3 1500 1000
3 1500 750
3 1500 200
3 1500 300
3 1500 10
3 1500 30
3 1500 50

Toda esta información la tengo en un archivo csv. El cual leo y genero un
diccionario:

 {
   id : {  target : target , values : [ valores ] }
  ,  id : { target : target , values : [ valores ] }
}

con el siguiente codigo realizo un matriz de verdad de la longitud de la
cantidad de los valores por ID, y realizo la suma si es lo del target +1-1
con ese vale.

import numpy as np
import itertools

for id in in diccionario :
for tup in itertools.product([0,1] , repeat=len(diccionario[id]['values'])):
resultado = np.sum( np.dot(  np.array(list(tup)) , np.array(
diccionario[id]['valores'] ) ) )
if ( diccionario[id]['target'] - 1) <= resultado and resultado <=  (
diccionario[id]['target'] + 1) :
print 'ID : ', id, ' Combinacion : ' , tup , 'Valores ',
diccionario[id]['valores']
break



La problematica que tengo es que obviamente entre mas grande sea la cantida
de valores la combinaciones serán muchas más.

Tengo la idea de utilizar un poco de paralelizar, pero no tengo idea de
como empezar.

No sé como hacerlo o si sea posible lo siguiente:
Lanzar un proceso por ID.
-Generar una segmentación de la matriz de verdad y asignarla un subproceso
-Cuando algún subproceso encuentre un resultado válido, lo devuelva y se
detengan los subprocesos
-Avanzar al siguiente ID.

Saludos y gracias de antemano.



Manuel Alejandro Estévez Fernández
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20180112/9fb54f75/attachment.html>


Más información sobre la lista de distribución Python-es