Autor Tema: Vértices de región definida por desigualdades lineales

0 Usuarios y 1 Visitante están viendo este tema.

03 Junio, 2025, 02:08 pm
Leído 2489 veces

Quema

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 2,107
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Sea \( 1<x_1\leq{}x_2\leq{}x_3\leq{}x_4<5 \) y \( f(p_1,p_2,p_3,p_4)=p_1p_2p_3p_4+(1-p_1)p_2p_3p_4+(1-p_2)p_1p_3p_4+(1-p_3)p_2p_1p_4+(1-p_4)p_2p_3p_1 \) siendo \( p_i=1-1/x_i \) con las siguientes desigualdades \( x_1+x_2\geq{}5 \). Quiero hallar el mínimo de \( f. \) Razono: como las derivadas segundas parciales de los \( p_i \) son cero, los puntos críticos se dan en los vértices, cuáles sería n estos?

04 Junio, 2025, 10:39 am
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,871
  • País: es
  • Karma: +0/-0
Hola

Sea \( 1<x_1\leq{}x_2\leq{}x_3\leq{}x_4<5 \) y \( f(p_1,p_2,p_3,p_4)=p_1p_2p_3p_4+(1-p_1)p_2p_3p_4+(1-p_2)p_1p_3p_4+(1-p_3)p_2p_1p_4+(1-p_4)p_2p_3p_1 \) siendo \( p_i=1-1/x_i \) con las siguientes desigualdades \( x_1+x_2\geq{}5 \). Quiero hallar el mínimo de \( f. \) Razono: como las derivadas segundas parciales de los \( p_i \) son cero, los puntos críticos se dan en los vértices, cuáles sería n estos?

Pues tienes que plantear las ecuaciones asociadas a las desigualdades (en tu caso siete):

\( x_1=1 \)
\( x_1-x_2=0 \)
\( x_2-x_3=0 \)
\( x_3-x_4=0 \)
\( x_4-x_5=0 \)
\( x_5=5 \)
\( x_1+x_2=5 \)

Resolver todos lo posibles subsistemas compatibles determinados: en este caso \( \displaystyle\binom{7}{5}=21 \) y entre las soluciones descartar las que no cumplen las restricciones.

En Pyhton (entre la IA y yo :D) :

Código: [Seleccionar]
import numpy as np
from itertools import combinations
from scipy.optimize import linprog

def hallar_vertices(A, b):
    """
    Halla los vértices de la región factible definida por A @ x <= b
    A: matriz de coeficientes (m x 5)
    b: vector de constantes (m,)
    """

    m, n = A.shape
    vertices = []
    cont = 0

    # Generar todas las combinaciones de 5 restricciones (porque hay 5 variables)
    for filas in combinations(range(m), n):
        cont+=1
        try:
            # Tomar 5 ecuaciones como igualdades
            A_eq = A[list(filas), :]
            b_eq = b[list(filas)]
           
            # Resolver A_eq x = b_eq
            x = np.linalg.solve(A_eq, b_eq)

            # Verificar si satisface TODAS las restricciones A @ x <= b
            if np.all(A @ x - b <= 1e-5):
                vertices.append(x)
        except np.linalg.LinAlgError:
            # Sistema no tiene solución o es singular
            continue

    # Eliminar duplicados
    vertices = np.unique(np.array(vertices), axis=0)
    return vertices

# Ejemplo de uso:
A = np.array([
    [-1, 0, 0, 0, 0],
    [1, -1, 0, 0, 0],
    [0, 1, -1, 0, 0],
    [0, 0, 1, -1, 0],
    [0, 0, 0, 1, -1],
    [0, 0, 0, 0, 1],
    [-1,-1,0,0,0]
])

b = np.array([-1, 0, 0, 0, 0, 5,-5])  # Ejemplo de restricciones

vertices = hallar_vertices(A, b)
print("Vértices de la región factible:")
for v in vertices:
    print(v)

 La matriz de las restricciones hay que escribirla de manera que siembre estén expresadas como \( \text{ecuación}\leq \text{constante} \).

 Por ejemplo para poner \( 1\leq x_1 \), escribimos, \( -x_1\leq -1 \) y así la primera fila de la matriz es \( [-1,0,0,0,0] \) y el primer valor del término independiente \( n=[-1,\ldots] \).

 Resultan:

\( [1, 4, 4, 4, 4] \)
\( [1, 4, 4, 4, 5] \)
\( [1, 4, 4, 5, 5] \)
\( [1, 4, 5, 5, 5] \)
\( [1, 5, 5, 5, 5] \)
\( [2.5, 2.5, 2.5, 2.5, 2.5] \)
\( [2.5, 2.5, 2.5, 2.5, 5] \)
\( [2.5,2.5,2.5,5,5] \)
\( [2.5,2.5,5,5,5] \)
\( [5,5,5,5,5] \)

Saludos.