Encontre uma combinação de valores com a soma mais próxima do número

5

Eu tenho uma coluna de números e gostaria de encontrar a melhor combinação de três desses números. No nosso caso, a melhor combinação é uma soma o mais próxima possível do número da nossa meta.

Por exemplo, temos uma meta de 100 e essa coluna de números:

15
70
36
60
30
53
37
17
0
75
100
9

Se eu somar 30+70+0=100 esse grupo de 3 números (30,70,0) é a melhor combinação, pois atinge o número da meta, 100. Também podemos obter outras combinações como 60+30+9=99 e assim por diante. números restantes.

Existe um caminho através do Excel (ou qualquer outra coisa que você tenha em mente) que possa me listar a melhor combinação de três números (algo como a distribuição sumária recursiva)?

    
por Excellll 27.11.2011 / 09:28

1 resposta

13

Um método é usando o Solver

  • Coloque seus dados em A1: A12
  • Em B13, coloque uma fórmula = SUMPRODUCT (A1: A12, B1: B12)
  • Configure o solucionador para que B1: 12 seja binário (ou seja, 1 ou 0)
  • Em B14, coloque uma pontuação "alvo", 100 no seu exemplo
  • em B15 put = ABS (B13-B14)
  • Defina o solucionador para procurar o valor mínimo em B15 (para fornecer uma solução exata sem diferença ou a solução mais próxima com a menor diferença possível)

Nesse caso, a solução mais simples é definir 100 como "on" (ou seja, 1), todos os outros valores es "off" (0)

Screenshot para xl2003 para resolução de 367 abaixo (como isso é mais complexo do que 100)

    
por 27.11.2011 / 10:36
yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warning – yii\base\ErrorException

PHP Startup: Unable to load dynamic library 'memcached.so' (tried: /usr/lib/php/20190902/memcached.so (/usr/lib/php/20190902/memcached.so: undefined symbol: igbinary_serialize), /usr/lib/php/20190902/memcached.so.so (/usr/lib/php/20190902/memcached.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '308230',
    'url' => 'find-combination-of-values-with-sum-closest-to-number',
];

$_COOKIE = [
    '_csrf-frontend' => '7843ef0e50cd7faed93358242f7da0fd9bccf5482a4ed190a5f787391e62e63da:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"kP7REeYGxuezdwbLOgWHKwl0zawXxIKO";}',
    'advanced-frontend' => 'lm77ibnn7l0n3kvn12j6dh70dg',
];

$_SESSION = [
    '__flash' => [],
];