es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El problema de optimización lineal se convirtió en no lineal.

He estado resolviendo el siguiente problema con programación lineal: tenemos varios conjuntos de datos, que son una composición de alrededor de 4 conjuntos de datos base. Conocemos la proporción de cada conjunto de datos base y tratamos de averiguar cuáles son los conjuntos de datos base que conducen al menor error.

Como ejemplo con 2 conjuntos de datos base:

data1: 1 2 3 4 5; 1.0/0.0
data2: 3 3 3 3 3; 0.5/0.5
data3: 5 4 3 2 1; 0.0/1.0

Con esta entrada, podemos deducir que el conjunto de datos base 1 es “1 2 3 4 5” y el conjunto de datos base 2 es “5 4 3 2 1”, ya que esta asignación conducirá a un error de 0.

En particular, tenemos 5 variables para el conjunto de datos 1 que intentamos estimar y 5 variables para el conjunto de datos 2. Los datos2 conducirán a las restricciones:

posError1 >= 3 – arr_1_0 * 0.5 + arr_2_0 * 0.5
posError1 >= arr_1_0 * 0.5 + arr_2_0 * 0.5 – 3
posError2 >= 3 – arr_1_1 * 0.5 + arr_2_1 * 0.5
posError2 >= arr_1_1 * 0.5 + arr_2_1 * 0.5 – 3
posError3 >= 3 – arr_1_2 * 0.5 + arr_2_2 * 0.5
posError3 >= arr_1_2 * 0.5 + arr_2_2 * 0.5 – 3
posError4 >= 3 – arr_1_3 * 0.5 + arr_2_3 * 0.5
posError4 >= arr_1_3 * 0.5 + arr_2_3 * 0.5 – 3
posError5 >= 3 – arr_1_4 * 0.5 + arr_2_4 * 0.5
posError5 >= arr_1_4 * 0.5 + arr_2_4 * 0.5 – 3

Al final, minimizamos el “error” que es la suma de todos los “posErrorX”.

Por lo general, cada conjunto de datos tiene alrededor de 100k entradas y tenemos alrededor de 10 conjuntos de datos y 4 conjuntos de datos base.

Esto se puede resolver con una máquina lo suficientemente fuerte con “pulp”. Sin embargo, ahora nos encontramos en una situación en la que solo sabemos qué porcentaje de nuestros conjuntos de datos base se incluyen, por lo que hay una variable más por conjunto de datos que tenemos que averiguar. Así que tendríamos x/0.5-x/0.2/0.3 en lugar de conocer todos los 4 valores. Esto no es un cambio importante, excepto que ahora tenemos un problema no lineal. ¿Cuál es la mejor manera de abordar este problema?

No pude linealizar este problema, ¿hay un método que pueda manejar este problema en un tiempo razonable?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Debido a que el problema se ha vuelto no lineal, no podemos usar métodos de programación lineal como pulp para resolverlo. Sin embargo, existen otras técnicas de optimización que pueden aplicarse, como la programación no lineal. Uno de los enfoques que se pueden tomar es utilizar un algoritmo basado en gradientes, como el método quasi-Newton, para minimizar la función de error.

    Como alternativa, podemos utilizar métodos de optimización global como algoritmos genéticos o recocido simulado, que pueden manejar problemas no lineales con múltiples mínimos locales. Estos métodos exploran el espacio de soluciones de manera aleatoria e inteligente para encontrar el mínimo global.

    Otra opción es aproximar las funciones no lineales con funciones lineales utilizando técnicas como la expansión de series de Taylor o la aproximación lineal por tramos. Esto puede convertir el problema en un problema de programación lineal que se puede resolver utilizando pulp u otras herramientas de programación lineal.

    En general, la elección del método de optimización depende de las especificidades del problema y de las restricciones de solución designadas. La solución elegida debe ser eficiente, efectiva y optimizada para el escenario particular de este problema no lineal.

Comments are closed.