1 votos

¿Cómo puedo dividir un vector por la mitad de forma que la suma de los términos de cada mitad sea un mínimo?

Llevo varios días luchando con este problema, quizás porque lo estoy enfocando de forma equivocada. ¡Espero que alguien pueda ayudarme a ver la luz!

PROBLEMA

Considera que hay cuatro tazas de peniques. Cada taza tiene una cantidad aleatoria de peniques.

Necesito determinar cómo dividir las tazas en dos grupos, dos tazas en cada grupo, de manera que el total de peniques en un grupo menos el total de peniques en el segundo grupo sea un mínimo, e idealmente cero.

Es muy sencillo resolver este problema si supiera la cantidad de peniques que hay en cada vaso. Así que quiero utilizar el álgebra lineal para ayudarme a determinar esas cantidades. Una vez que tenga las cantidades, puedo hacer sumas de prueba en un ordenador rápido para encontrar una división óptima de las tazas.

Planteo el problema en el contexto de cuatro copas. Pero la aplicación práctica que estoy tratando de resolver podría tener 32 tazas, por lo que el número de combinaciones que habría que probar es $\binom{32}{16}$ que son más de 60 millones. Hacerlo manualmente nos llevaría una eternidad.

ENFOQUE MATEMÁTICO

Supongamos que $A$ es un vector que representa el número desconocido de peniques en cada taza, $B$ es una multitud de vectores que asignan cada taza a un grupo, y $C$ es la diferencia de peniques totales entre los grupos de vasos.

$$A=C\cdot B^{-1}$$

Aunque creo que tengo el problema configurado correctamente, el determinante de $B$ es siempre cero dados los requisitos de $B$ . Así que no puedo determinar el número de centavos en cada taza.

Condiciones;

$$n\in\{2\cdot\mathbb{Z}\}\mid n\geqslant2\ $$

$$A=[\left|a_1\right|... \left|a_n\right|]$$

$$C=\begin{bmatrix} c_{1}\\ \vdots \\ c_{n}\\ \end{bmatrix}$$

$$B=\begin{bmatrix} B_{x}\\ B_{y}\\ \end{bmatrix}$$

$$B_x=\begin{bmatrix} b_{1,1} \dots b_{n,1} \\ \vdots \\ b_{1,\frac{n}{2}} \dots b_{n,\frac{n}{2}} \\ \end{bmatrix}$$

$$B_{y}=-B_x$$

con la limitación adicional de que todos los términos en $B_x$ se les asigna arbitrariamente +1 o -1, y cada vector columna en $B_x$ es único.

Al asignar $B_y$ = - $B_x$ cada columna de $B$ tiene garantizado un conjunto de $\frac{n}{2}$ términos = 1 y otro conjunto de igual tamaño de $\frac{n}{2}$ términos = -1.

Dado que todos los términos de $A$ son positivos, los vectores columna equilibrados de $B$ separa efectivamente el $A$ vector en dos vectores de igual longitud; un grupo de vectores positivos y un grupo de vectores negativos. El objetivo final es encontrar un vector columna, no necesariamente en $B$ que crea una suma mínima de todos los términos en $A$ . Pero si el determinante de $B$ es siempre cero, no veo cómo resolver mi problema. ¿Estoy cometiendo un error o hay una forma mejor de enfocar el problema?

¿Alguna idea?

0voto

Rob Pratt Puntos 296

Esto suena como el problema de la suma de subconjuntos que es NP-completo. Se puede resolver a través de la programación lineal entera como sigue. Sea $n_i$ sea el número de peniques en el vaso $i$ . Sea la variable binaria $x_i$ indicar si los centavos en la taza $i$ se asignan al grupo A. El resto se asignará al grupo B. El problema es minimizar $z$ con sujeción a: \begin{align} z &\ge \sum_i n_i x_i \\ z &\ge \sum_i n_i (1-x_i) \\ \sum_i x_i &= 16 \end{align} Esta formulación es una forma lineal de minimizar el número máximo de monedas en los dos grupos. Como el número total de peniques es constante, minimizar el máximo es equivalente a minimizar la diferencia.

Si el $n_i$ no son distintos, con frecuencias $f_i$ se pueden sustituir las variables binarias por (menos) variables enteras no negativas $x_i$ que representan el número de veces que $n_i$ aparece en el grupo A. Las nuevas restricciones lineales son: \begin{align} z &\ge \sum_i n_i x_i \\ z &\ge \sum_i n_i (f_i-x_i) \\ \sum_i x_i &= 16 \\ 0 \le x_i &\le f_i \end{align} Esto reduce el tamaño del problema y ayuda a eliminar la simetría. Para los datos del problema proporcionados, hay 15 frecuencias distintas, y una solución óptima tiene este aspecto: $$ \begin{matrix} i &n_i &f_i &x_i\\ \hline 1 &968 &1 &1 \\ 2 &972 &1 &1 \\ 3 &984 &4 &0 \\ 4 &988 &3 &3 \\ 5 &992 &3 &3 \\ 6 &996 &2 &1 \\ 7 &1000 &1 &1 \\ 8 &1004 &5 &1 \\ 9 &1008 &1 &1 \\ 10 &1012 &4 &0 \\ 11 &1016 &2 &0 \\ 12 &1020 &1 &0 \\ 13 &1032 &2 &2 \\ 14 &1044 &1 &1 \\ 15 &1052 &1 &1 \\ \end{matrix} $$

0voto

SiongthyeGoh Puntos 61

Presentación de un enfoque de optimización binaria cuadrática:

Dejemos que $x_i=1$ si el objeto $i$ pertenece al grupo $1$ et $x_i=-1$ si pertenece al grupo $2$ .

Que el valor sea $v_i$ .

Por lo tanto, queremos minimizar $$\min_i \left(\sum_iv_ix_i\right)^2=\sum_i v_i^2 +\sum_{i<j}2v_iv_jx_ix_j$$

con sujeción a $$\sum_i x_i=0$$

$$x_i \in \{1,-1\}$$

Si tiene acceso a un solucionador de QUBO (optimización de programación cuadrática sin restricciones). Para convertirlo en un problema sin restricciones, queremos resolver

$$\min_i \sum_i v_i^2 + 2\sum_{i<j}2v_iv_jx_ix_j + A\sum_i x_i$$

donde $A$ es un parámetro que tenemos que afinar para asegurarnos de que la restricción se satisface y para convertir la variable en binaria, basta con utilizar la transformación $y_i = \frac{x_i+1}2$ .

Observación: Si bien podemos derivar teóricamente un valor grande para $A$ que es equivalente al problema original, un valor grande podría no ser adecuado cuando se trata de resolver la vida real. Puede que quiera establecer primero un valor grande y luego reducirlo lentamente.

Además, en este página , una heurística con $O(n^2)$ complejidad temporal y $O(n)$ Se propone una complejidad espacial para obtener una solución factible.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X