Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

155
Visualizações
cómo generar una función aleatoria convexa lineal por partes

Quiero generar un ejemplo de juguete para ilustrar una función lineal convexa por partes en python , pero no pude encontrar la mejor manera de hacerlo. Lo que quiero hacer es indicar el número de líneas y generar la función aleatoriamente.

Una función lineal por partes convexa se define como:

1

Por ejemplo, si quiero tener cuatro líneas lineales, quiero generar algo como se muestra a continuación.

ingrese la descripción de la imagen aquí

Ya que hay cuatro líneas. Necesito generar cuatro enteros aleatorios crecientes para determinar los intervalos en el eje x.

 import random import numpy as np random.seed(1) x_points = np.array(random.sample(range(1, 20), 4)) x_points.sort() x_points = np.append(0, x_points) x_points [0 3 4 5 9]

Ahora puedo usar los primeros dos puntos y crear una función lineal aleatoria, pero no sé cómo debo continuar desde allí para preservar la convexidad. Tenga en cuenta que una función se llama convexa si el segmento de línea entre dos puntos en el gráfico de la función no se encuentra debajo del gráfico entre los dos puntos.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

La pendiente aumenta monótonamente en un valor aleatorio del rango [0,1), a partir de 0. El primer valor de y también es cero, ver los comentarios.

 import numpy as np np.random.seed(0) x_points = np.random.randint(low=1, high=20, size=4) x_points.sort() x_points = np.append(0, x_points) # the first 0 point is 0 slopes = np.add.accumulate(np.random.random(size=3)) slopes = np.append(0,slopes) # the first slope is 0 y_incr = np.ediff1d(x_points)*slopes y_points = np.add.accumulate(y_incr) y_points = np.append(0,y_points) # the first y values is 0

Una posible salida se ve así:

 print(x_points) print(y_points) # [ 0 1 4 13 16] # [ 0. 0. 2.57383685 17.92061306 24.90689622]

ingrese la descripción de la imagen aquí

Para imprimir esta figura:

 import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot(x_points,y_points, '-o', label="convex piecewise-linear function") ax.legend() fig.patch.set_facecolor('white') plt.show()
over 4 years ago · Santiago Trujillo Relatório

0

asegúrese de que el gradiente (=dx/dy) esté aumentando. Pseudocódigo:

 s = 1; x = 0; y = 0; n = 4; while(--n>0) { //increase x randomly dx = rand(3); dy = dx * s; x += dx; y += dy; //increase gradient randomly s += rand(3); print x + "/" +y; }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda