Politopos en Python

Python nos proporciona un módulo de terceros para operar sobre politopos. Para quien no sepa qué son los politopos, los politopos son una forma geométrica en una geometría n-dimensional correspondiente a un polígono o poliedro. Al igual que otras figuras geométricas como un cuadrado o un cubo, un politopo no se limita a una sola dimensión. Puede ser 2-D, 3-D o nD.

polytopes

Un politopo n-dimensional generalmente se representa como n-politopo . Por ejemplo, un politopo 2-D se representará como 2-politopo, un politopo 3-D como 3-politopo y así sucesivamente. Un politopo se almacena dentro de Python utilizando la representación de medio espacio o representación H. Esto significa que un politopo se representa como la multiplicación vector-array de dos arrays y un vector:

Ax <= B

Aquí, A es una array de m*n, x es un conjunto de coordenadas multiplicado por A y B es una array de columna de m*1. El módulo de politopos nos permitirá realizar algunas operaciones geométricas sobre estos politopos. Comencemos con la instalación:

Un politopo es un módulo de terceros, por lo que tendríamos que instalarlo en nuestra máquina antes de poder usarlo. Para instalar el módulo, simplemente escriba esto en la terminal:

pip install polytope

Después de la instalación, importaremos el módulo a nuestro IDE como:

import polytope as pc

Ahora crearemos un politopo usando el módulo politopo:

# Python program to demonstrate
# polytopes
  
  
# Using numpy to create matrices
import numpy as np 
import polytope as pc
  
  
# Declaring numpy arrays
A = np.array([[1.0, 2.0],
              [3.0, -1.0],
              [-1.0, 4.0],
              [0.0, -2.0]])
  
b = np.array([2.0, 0.0, 3.0, 1.0])
  
p = pc.Polytope(A, b)
  
print(p)

Producción:

polytopes

Aquí, creamos las arrays A y b usando arrays numpy. Luego usamos la .Polytope()función para crear un politopo usando esas arrays. Aquí, no especificamos ningún valor de «x».

Métodos y operaciones sobre politopos:

Ahora que hemos creado un politopo simple, podemos realizar algunas operaciones básicas sobre ellos. Por ejemplo, el módulo de politopos nos permite comparar dos politopos.
Considere dos politopos, p1 y p2 , entonces:

  • p1 == p2: Esto significa que cada elemento de p1 está en p2 y cada elemento de p2 está en p1 . Por lo tanto, p1 y p2 son exactamente idénticos.
  • p1 <= p2: Esto significa que p1 es un subconjunto de p2 . Por lo tanto, cada elemento de p1 está en p2 pero lo mismo puede no ser cierto para p2 .
  • p2 <= p1: Esto significa que p2 es un subconjunto de p1 . Por lo tanto, cada elemento de p2 está en p1 pero lo mismo puede no ser cierto para p1 .

También podemos verificar si un elemento está en un politopo usando:

[4.0, 5.0] in p1

Algunas operaciones matemáticas básicas disponibles para politopos incluyen:

  • p1.diferencia(p2)
  • p1.union(p2)
  • p1.intersecar(p2)

Por ejemplo:

# Python program to demonstrate
# polytopes
  
  
# Using numpy to create matrices
import numpy as np 
import polytope as pc 
  
# Declaring numpy arrays
A = np.array([[1.0,  2.0],
              [3.0, -1.0],
              [-1.0, 4.0],
              [0.0, -2.0]])
  
b = np.array([2.0, 0.0, 3.0, 1.0])
  
C = np.array([[1.0,  0.0],
              [2.0,  4.0],
              [3.0, -1.0],
              [1.0,  9.0]]) 
  
d = np.array([2.0, 0.0, -1.0, 3.0])
  
p1 = pc.Polytope(A, b)
p2 = pc.Polytope(C, d)
  
# Using diff method
p1.diff(p2)

Producción:

polytope

Podemos iterar sobre una región de politopos. Una región puede entenderse como un contenedor que contiene dos politopos, donde uno es el comienzo y el otro el final. Considere el siguiente código.

# Python program to demonstrate
# polytopes
  
  
import numpy as np 
import polytope as pc 
  
  
# Declaring numpy arrays
A = np.array([[1.0,  2.0],
              [3.0, -1.0],
              [-1.0, 4.0],
              [0.0, -2.0]])
  
b = np.array([2.0, 0.0, 3.0, 1.0])
  
C = np.array([[1.0,  0.0],
              [2.0,  4.0],
              [3.0, -1.0],
              [1.0,  9.0]]) 
  
d = np.array([2.0, 0.0, -1.0, 3.0])
  
p1 = pc.Polytope(A, b)
p2 = pc.Polytope(C, d)
r = pc.Region([p1, p2])

El código anterior creará una región de dos politopos. Esto se puede usar como un iterador como:

for polytope in r:
    print(polytope)

producción:

polytopes

Publicación traducida automáticamente

Artículo escrito por agarwalkeshav8399 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *