Introducción Última actualización: 29/09/2024

  • Versión de la API: v1
  • Endpoint: linearoptimizer

Esta API está diseñada para procesar datos de configuración ("Configs") e instrucciones de corte ("Cuts").
Realiza la validación, optimización y procesamiento de los datos de entrada y devuelve los resultados en formato JSON o CSV.
La API maneja solicitudes únicamente a través del método POST, asegurando que solo se acepten datos JSON válidos.
A continuación, se detalla el funcionamiento de la API, incluyendo formatos de entrada, tipos de datos esperados, reglas de validación y manejo de errores.

RapidAPI

Para usar la API, primero debes registrarte en RapidAPI y seleccionar un plan de precios. Se te proporcionará una clave API, la cual deberás incluir en los headers de tus solicitudes.

Ir a RapidAPI

Nota

  • Endpoint: https://optimiza-cortes-api.p.rapidapi.com/linearoptimizer/
  • Método: POST
  • Contenido: JSON que incluye CONFIGS y CUTS (ver ejemplos a continuación)
  • Headers:
    • "x-rapidapi-key": "TU CLAVE API"
    • "x-rapidapi-host": "optimiza-cortes-api.p.rapidapi.com"
    • "Content-Type": "application/json"
  • Respuesta: JSON o CSV basado en tus CONFIGS

Guía Rápida

Python – Requests

import requests

url = "https://optimiza-cortes-api.p.rapidapi.com/linearoptimizer/"

payload = {
	"Configs": {
		"bar_length": 6000,
		"saw_width": 2,
		"end_cut": 0,
		"variability": 0,
		"losses": 0,
		"iterations": 5000,
		"include_zero_cuts": False,
		"data_type": "json"
	},
	"Cuts": [["Corte A", 10, 100], ["Corte B", 15, 2000], ["Corte C", 5, 350]]
}
headers = {
	"x-rapidapi-key": "COMPLETA TU CLAVE API",
	"x-rapidapi-host": "optimiza-cortes-api.p.rapidapi.com",
	"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
								
PHP – Curl

< ?php //ATENCIÓN AL ESPACIO ENTRE < y ?

$curl = curl_init();

curl_setopt_array($curl, [
	CURLOPT_URL => "https://optimiza-cortes-api.p.rapidapi.com/linearoptimizer/",
	CURLOPT_RETURNTRANSFER => true,
	CURLOPT_ENCODING => "",
	CURLOPT_MAXREDIRS => 10,
	CURLOPT_TIMEOUT => 30,
	CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
	CURLOPT_CUSTOMREQUEST => "POST",
	CURLOPT_POSTFIELDS => json_encode([
		'Configs' => [
				'bar_length' => 6000,
				'saw_width' => 2,
				'end_cut' => 0,
				'variability' => 0,
				'c' => 0,
				'iterations' => 5000,
				'include_zero_cuts' => null,
				'data_type' => 'json'
		],
		'Cuts' => [
				[
								'Corte A',
								10,
								100
				],
				[
								'Corte B',
								15,
								2000
				],
				[
								'Corte C',
								5,
								350
				]
		]
	]),
	CURLOPT_HTTPHEADER => [
		"Content-Type: application/json",
		"x-rapidapi-host: optimiza-cortes-api.p.rapidapi.com",
		"x-rapidapi-key: COMPLETA TU CLAVE API "
	],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
	echo "Error cURL #:" . $err;
} else {
	echo $response;
}
?>
								
JavaScript - jQuery

const settings = {
	async: true,
	crossDomain: true,
	url: 'https://optimiza-cortes-api.p.rapidapi.com/linearoptimizer/',
	method: 'POST',
	headers: {
		'x-rapidapi-key': ' COMPLETA TU CLAVE API ',
		'x-rapidapi-host': 'optimiza-cortes-api.p.rapidapi.com',
		'Content-Type': 'application/json'
	},
	processData: false,
	data: '{"Configs":{"bar_length":6000,"saw_width":2,"end_cut":0,"variability":0,"losses":0,"iterations":5000,"include_zero_cuts":false,"data_type":"json"},"Cuts":[["Corte A",10,100],["Corte B",15,2000],["Corte C",5,350]]}'
};

$.ajax(settings).done(function (response) {
	console.log(response);
});
								

Autenticación

Validación de Clave API

Para asegurar la seguridad de las solicitudes, la API verifica la presencia de una clave secreta válida en los headers. Básicamente, necesitas agregar los headers incluyendo 'x-rapidapi-key'.

"x-rapidapi-key": "COMPLETA TU CLAVE API"

CLAVE API

La clave API te será proporcionada una vez que te registres en RapidAPI: Enlace a RapidAPI

Formato de Datos

Objeto Configs

El objeto “Configs” contiene varios parámetros de configuración que afectan el proceso de corte. Todos estos campos son opcionales pero se recomienda completarlos; si no se completan, se utilizará el valor por defecto.

  • "bar_length": : Representa la longitud de las barras en mm.
    • Tipo: Entero
    • Rango: 1 a 20000
    • Por defecto: 6000
  • "saw_width": : Representa el ancho de la sierra en mm, que se pierde durante el proceso de corte.
    • Tipo: Entero
    • Rango: 0 a 50
    • Por defecto: 2
  • "end_cut": : Se aplica en caso de tener algún tipo de imperfección en los extremos de las barras de material. Permite especificar una cantidad de mm a ser descartada. El valor introducido será cortado en cada extremo de la barra; si se necesita sólo en un extremo, el valor debe dividirse por 2 antes de ingresarlo.
    • Tipo: Entero
    • Rango: 0 a 500
    • Por defecto: 0
  • "variability": : Este parámetro es útil en caso de que se deba restar un valor fijo a las barras de material para compensar problemas de variabilidad en la longitud. Generalmente, la diferencia entre la barra más larga y la más corta es la opción más conservadora.
    • Tipo: Entero
    • Rango: 0 a 500
    • Por defecto: 0
  • "losses": : Este campo se usa en caso de tener mermas varias en cada corte por factores no especificados por ej. impericia del cortador, errores de cuadratura, variabilidad del proceso, etc. Se aplica a cada corte.
    • Tipo: Entero
    • Rango: 0 to 20
    • Por defecto: 0
  • "iterations": : Representa cuántas iteraciones debe ejecutar la simulación; el tiempo de procesamiento aumenta exponencialmente con el número de iteraciones. Para la mayoría de los problemas, 5000 iteraciones deberían ser suficientes.
    • Tipo: Entero
    • Rango: 0 a 50000
    • Por defecto: 5000
  • "include_zero_cuts": : Especifica si en la respuesta deben estar representadas las longitudes con cero cortes o no.
    • Tipo: Booleano
    • Por defecto: Falso
    1. Ejemplo de respuesta con "include_zero_cuts":true
      
      bars": [{
      	"Bar Number": 1,
      	"Total Length Used": 6000,
      	"Bar Left Over": 1000,
      	"Cuts": [{
      		"Nominal Length": 2000,
      		"Name": "Cut B",
      		"Quantity": 0 //<-----ACA ESTÁ EL EFFECTO!
      	}, {
      		"Nominal Length": 5000,
      		"Name": "Cut A",
      		"Quantity": 1
      }]
      							
    2. Ejemplo de respuesta con "include_zero_cuts":false
      
      "bars": [{
              "Bar Number": 1,
              "Total Length Used": 5000,
              "Bar Left Over": 1000,
              "Cuts": [{
                  "Nominal Length": 5000,
                  "Name": "Cut A",
                  "Quantity": 1
      }]
      							
  • "data_type": : Especifica si la respuesta debe estar en formato `json` o `csv`.
    • Valores Permitidos: "json", "csv"
    • Por defecto: json

Array "Cuts"

Matriz de Cortes

La matriz de "Cortes" contiene múltiples instrucciones de corte. Cada elemento de la matriz "Cuts" corte es un array que contiene tres elementos.

Estructura:

"Cuts":[
[Descripción, Cantidad, Longitud]
[Descripción, Cantidad, Longitud],

[Descripción, Cantidad, Longitud]
]

  1. Descripción: Texto(string) opcional que nombra el corte. Hasta 20 caracteres. Es opcional pero recomendado.
  2. Cantidad: Entero obligatorio que especifica el número de cortes requeridos.
  3. Longitud: Entero obligatorio que especifica la longitud nominal de cada corte. (Las pérdidas y otras ineficiencias se suman a la longitud nominal según lo especificado en los "Configs".)
Ejemplos de Funcionamiento:
  • Ejemplo 1 (preferido):
    
    "Cuts": [
        ["Corte A", 100, 100],
        ["Corte B", 200, 200],
        ["Corte C", 90, 300]
    ]
    							
  • Ejemplo 2:
    
    "Cuts": [
        [100, 100],
        [150, 200],
        [90, 300]
    ]
    							
  • Ejemplo 3:
    
    "Cuts": [
        ["Corte A", 100, 100],
        [150, 200],
        [90, 300]
    ]
    							

Si no se proporciona una descripción, la API genera una basada en la longitud, añadiendo la etiqueta AUT. Por ejemplo, si se agrega un corte [90,250], el sistema generará el corte equivalente ["Corte 250mm AUT", 90, 250].

En caso de agregar dos cortes con la misma longitud nominal, el sistema totaliza en un solo corte todas las entradas, añadiendo la etiqueta TOTALIZED. Por ejemplo, para ["Corte A", 100, 100], ["Corte B", 200, 100], ["Corte C", 90, 300], el sistema procesará algo equivalente a ["Corte A TOTALIZED", 300, 100], ["Corte C", 90, 300].

Más información en la sección de Concatenazioón y Ordenamiento.

Validación

Validación de Configs

Cada campo del objeto `Configs` es validado de acuerdo con las reglas especificadas en la "Formato de Datos". Si algún campo no pasa la validación, la API devuelve un mensaje de error adecuado con el código de respuesta HTTP 400.

Ejemplo de Error de Validación:

Solicitud: {"bar_length": "inválido"}
Respuesta: {"error": "Tipo inválido para bar_length: se esperaba un entero"}

Validación de Cortes

Cada entrada en la matriz de "Cortes" debe contener al menos dos elementos (cantidad y longitud) y como máximo tres elementos (descripción opcional, cantidad y longitud).

Cortes Válidos:
  • Dos elementos con cantidad y longitud, se generará automáticamente la descripción.
  • Tres elementos con descripción, cantidad y longitud serán aceptados tal cual.
Cortes Inválidos:
  • Si el arreglo tiene menos de dos o más de tres elementos, será rechazado.
Ejemplo de Error de Validación:

Solicitud: [["Corte A", 100], ["Corte B"]]
Respuesta: {"error": "Cada corte debe incluir una longitud y cantidad obligatoria"}

Procesamiento

Concatenación y Ordenamiento

Después de la validación, las instrucciones de corte se procesan de la siguiente manera:

  • Concatenación: Los cortes con la misma longitud se combinan. Si dos cortes tienen la misma longitud pero diferentes descripciones, las descripciones se fusionan y se añade una etiqueta "TOTALIZADO".
  • Ordenamiento: Los cortes se ordenan por su longitud nominal de menor a mayor para su procesamiento y respuesta.

Algoritmos de Optimización

Se ejecutan varios algoritmos de optimización para determinar la mejor manera de cortar las barras según las configuraciones de entrada y las instrucciones de corte. Este algoritmo utiliza simulaciones de Montecarlo y un postprocesamiento selectivo propietario. La calidad de la respuesta no es 100% perfecta, como ocurre con cualquier método estadístico, pero es relativamente muy precisa. Un aspecto muy importante de estos algoritmos es que dos ejecuciones pueden tener resultados ligeramente diferentes, un efecto que puede reducirse (hasta cierto punto) al aumentar ligeramente las iteraciones. Ten en cuenta que aumentar las iteraciones puede reducir drásticamente el rendimiento de los algoritmos.

Formato de Salida

El formato de salida está influenciado principalmente por dos parámetros: include_zero_cuts y data_type. En esta sección exploraremos los efectos del parámetro data_type en la salida.

Respuesta en JSON

La API devuelve los resultados en formato JSON por defecto. Contiene detalles de los cortes optimizados, el uso de barras y el material sobrante.

  1. Status: 200 – Indicando que la respuesta es exitosa.
  2. Configs: : Los parámetros de configuración utilizados por los algoritmos.
  3. Results: Resultados macro, incluyendo el rendimiento global del proceso de optimización.
  4. Bars: Resultados detallados de cada barra y cómo debe cortarse.
Ejemplos
  1. Ejemplo de salida con Respuesta en JSON ("include_zero_cuts": false):
    
    {
        "status": "success",
        "configs": {
            "Bar Length": 6000,
            "Calculated Bar Length": 6000,
            "Iterations": 5000,
            "Cut Losses": 0,
            "Bar Variability": 0,
            "Saw Blade Width": 0,
            "End Cuts for Each Side": 0,
            "include_zero_cuts": false,
            "Data Type": "json"
        },
        "results": {
            "Qty of Requested Cuts": 3,
            "Qty of Optimized Cuts": 3,
            "Qty of Bars Needed": 2,
            "Total (Nominal) Length to be Cut": 9000,
            "Total (Real) Length to be Cut": 9000,
            "Total Cutting Losses": 0,
            "Total Leftover": 3000
        },
        "bars": [{
            "Bar Number": 1,
            "Total Length Used": 5000,
            "Bar Left Over": 1000,
            "Cuts": [{
                "Nominal Length": 5000,
                "Name": "Corte A",
                "Quantity": 1
            }]
        }, {
            "Bar Number": 2,
            "Total Length Used": 4000,
            "Bar Left Over": 2000,
            "Cuts": [{
                "Nominal Length": 2000,
                "Name": "Corte B",
                "Quantity": 2
            }]
        }]
    }
    							
  2. Ejemplo de salida con Respuesta en JSON ("include_zero_cuts": true):
    
    {
        "status": "success",
        "configs": {
            "Bar Length": 6000,
            "Calculated Bar Length": 6000,
            "Iterations": 5000,
            "Cut Losses": 0,
            "Bar Variability": 0,
            "Saw Blade Width": 0,
            "End Cuts for Each Side": 0,
            "Include Zero Cuts": true,
            "Data Type": "json"
        },
        "results": {
            "Qty of Requested Cuts": 3,
            "Qty of Optimized Cuts": 3,
            "Qty of Bars Needed": 2,
            "Total (Nominal) Length to be Cut": 9000,
            "Total (Real) Length to be Cut": 9000,
            "Total Cutting Losses": 0,
            "Total Leftover": 3000
        },
        "bars": [{
            "Bar Number": 1,
            "Total Length Used": 5000,
            "Bar Left Over": 1000,
            "Cuts": [{
                "Nominal Length": 2000,
                "Name": "Corte B",
                "Quantity": 0
            }, {
                "Nominal Length": 5000,
                "Name": "Corte A",
                "Quantity": 1
            }]
        }, {
            "Bar Number": 2,
            "Total Length Used": 4000,
            "Bar Left Over": 2000,
            "Cuts": [{
                "Nominal Length": 2000,
                "Name": "Corte B",
                "Quantity": 2
            }, {
                "Nominal Length": 5000,
                "Name": "Corte A",
                "Quantity": 0
            }]
        }]
    }
    
    							

Respuesta en CSV

Si el parámetro "data_type" se establece en "csv", la respuesta será una cadena CSV que puede guardarse como un archivo .csv. El archivo contendrá la información de salida en forma tabular dividida en 3 macro secciones: configuraciones, resultados y barras.
Cada sección tiene información específica y relevante sobre el proceso de optimización.

  1. #CONFIGURATIONS<
    Tabla que muestra las configuraciones seleccionadas para el proceso de optimización.
    #CONFIGURATIONS
    Configuration Parameter Value
    Bar Length 6000
    Calculated Bar Length 6000
    Iterations 5000
    Cut Losses 0
    Bar Variability 0
    Saw Blade Width 0
    End Cuts for Each Side 0
    Include Zero Cuts 0
    Data Type csv
  2. #RESULTS
    Resultados del proceso de optimización que muestran los resultados globales. Es importante verificar siempre que la cantidad de cortes solicitados sea igual a la cantidad de cortes optimizados.
    #RESULTS
    Result Parameter Value
    Qty of Requested Cuts 90
    Qty of Optimized Cuts 90
    Qty of Bars Needed 3
    Total (Nominal) Length to be Cut 18000
    Total (Real) Length to be Cut 18000
    Total Cutting Losses 0
    Total Leftover 0
  3. #BARS
    Esta sección muestra cada barra y la cantidad de cortes que se pueden obtener de cada una.
    Por ejemplo: en la Barra 1 se obtienen 10 Cortes A de 100 mm, 16 Cortes B de 200 mm y 6 Cortes C de 300 mm.
    El número de fila es una identificación progresiva que puede utilizarse como clave primaria. La longitud total y el material sobrante de la barra se repetirán en cada fila asociada a esa barra.
    #BARS
    Row Number Bar Number Total Length Used Bar Left Over Nominal Length Name Quantity
    0 1 6000 0 100 Cut A 10
    1 1 6000 0 200 Cut B 16
    2 1 6000 0 300 Cut C 6
    3 2 6000 0 100 Cut A 13
    4 2 6000 0 200 Cut B 10
    5 2 6000 0 300 Cut C 9
    6 3 6000 0 100 Cut A 7
    7 3 6000 0 200 Cut B 4
    8 3 6000 0 300 Cut C 15

Manejo de Errores

Códigos de Errores Comunes HTTP

  • 403 Forbidden: Credenciales inválidas o faltantes.
  • 405 Method Not Allowed: Solo se aceptan solicitudes POST.
  • 400 Bad Request: Formato de entrada inválido, campos faltantes o fallos de validación.

Errores de Validación

  • Formato JSON Inválido:

    Respuesta: {"error": "Invalid JSON format"}

  • Campo de Configuración Inválido:

    Respuesta:{"error": "Invalid value for bar_length: expected integer"}

  • Campo de Cortes Inválido:

    Respuesta: {"error": "Each cut must include a mandatory length and quantity"}

Registro de Estadísticas

La API registra varias estadísticas sobre la solicitud, configuraciones, y cortes, así como el rendimiento de los servidores de cálculo. También puede registrar direcciones IP y otra información de perfilado de usuarios. Esta información se almacena y puede utilizarse para análisis de rendimiento y mejora del sistema.

Ejemplos

A continuación se presentan varios ejemplos de diferentes solicitudes y respuestas.

Ejemplo 1: 3 Cortes - JSON - sin ceros

Optimizar 10 Cortes de 1000 mm, 10 Cortes de 2000 mm y 10 Cortes de 3000 mm usando barras de 6000 mm.

Solicitud:

{
    "Configs": {
        "bar_length": 6000,
        "saw_width": 0,
        "end_cut": 0,
        "variability": 0,
        "losses": 0,
        "iterations": 5000,
        "include_zero_cuts": false,
        "data_type": "json"
    },
    "Cuts": [
      	["Corte A", 10, 1000],
    	["Corte B", 10, 2000],
    	["Corte C", 10, 3000]
    ]
}
							
Respuesta:

Estadísticas:

Tamaño: 1.87kb - Latencia: 354ms


{
    "status": "success",
    "configs": {
        "Bar Length": 6000,
        "Calculated Bar Length": 6000,
        "Iterations": 5000,
        "Cut Losses": 0,
        "Bar Variability": 0,
        "Saw Blade Width": 0,
        "End Cuts for Each Side": 0,
        "Include Zero Cuts": false,
        "Data Type": "json"
    },
    "results": {
        "Qty of Requested Cuts": 30,
        "Qty of Optimized Cuts": 30,
        "Qty of Bars Needed": 10,
        "Total (Nominal) Length to be Cut": 60000,
        "Total (Real) Length to be Cut": 60000,
        "Total Cutting Losses": 0,
        "Total Leftover": 0
    },
    "bars": [{
        "Bar Number": 1,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 1000,
            "Name": "Corte A",
            "Quantity": 3
        }, {
            "Nominal Length": 3000,
            "Name": "Corte C",
            "Quantity": 1
        }]
    }, {
        "Bar Number": 2,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 1000,
            "Name": "Corte A",
            "Quantity": 3
        }, {
            "Nominal Length": 3000,
            "Name": "Corte C",
            "Quantity": 1
        }]
    }, {
        "Bar Number": 3,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 1000,
            "Name": "Corte A",
            "Quantity": 3
        }, {
            "Nominal Length": 3000,
            "Name": "Corte C",
            "Quantity": 1
        }]
    }, {
        "Bar Number": 4,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 3000,
            "Name": "Corte C",
            "Quantity": 2
        }]
    }, {
        "Bar Number": 5,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 3000,
            "Name": "Corte C",
            "Quantity": 2
        }]
    }, {
        "Bar Number": 6,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 3000,
            "Name": "Corte C",
            "Quantity": 2
        }]
    }, {
        "Bar Number": 7,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 1000,
            "Name": "Corte A",
            "Quantity": 1
        }, {
            "Nominal Length": 2000,
            "Name": "Corte B",
            "Quantity": 1
        }, {
            "Nominal Length": 3000,
            "Name": "Corte C",
            "Quantity": 1
        }]
    }, {
        "Bar Number": 8,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 2000,
            "Name": "Corte B",
            "Quantity": 3
        }]
    }, {
        "Bar Number": 9,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 2000,
            "Name": "Corte B",
            "Quantity": 3
        }]
    }, {
        "Bar Number": 10,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 2000,
            "Name": "Corte B",
            "Quantity": 3
        }]
    }]
}

							

Ejemplo 2: 5 Cortes - JSON - con ceros

Optimizar 2 Cortes de 1000 mm, 3 Cortes de 2000 mm, 4 Cortes de 100 mm, 6 Cortes de 50 mm y 4 Cortes de 350 mm usando barras de 6000 mm.

Solicitud:

{
    "Configs": {
        "bar_length": 6000,
        "saw_width": 0,
        "end_cut": 0,
        "variability": 0,
        "losses": 0,
        "iterations": 5000,
        "include_zero_cuts": true,
        "data_type": "json"
    },
    "Cuts": [
      	["Estructura 1", 2, 1000],
    	["Viga 2", 3, 2000],
    	["Viga Transversal", 4, 100],
      	["Columna", 6, 50],
      	["Soporte", 4, 350]
    ]
}
							
Respuesta:

Estadísticas:

Tamaño: 1.10kb - Latencia: 377ms


{
    "status": "success",
    "configs": {
        "Bar Length": 6000,
        "Calculated Bar Length": 6000,
        "Iterations": 5000,
        "Cut Losses": 0,
        "Bar Variability": 0,
        "Saw Blade Width": 0,
        "End Cuts for Each Side": 0,
        "Include Zero Cuts": true,
        "Data Type": "json"
    },
    "results": {
        "Qty of Requested Cuts": 19,
        "Qty of Optimized Cuts": 19,
        "Qty of Bars Needed": 2,
        "Total (Nominal) Length to be Cut": 10100,
        "Total (Real) Length to be Cut": 10100,
        "Total Cutting Losses": 0,
        "Total Leftover": 1900
    },
    "bars": [{
        "Bar Number": 1,
        "Total Length Used": 6000,
        "Bar Left Over": 0,
        "Cuts": [{
            "Nominal Length": 50,
            "Name": "Columna",
            "Quantity": 4
        }, {
            "Nominal Length": 100,
            "Name": "Viga Transversal",
            "Quantity": 1
        }, {
            "Nominal Length": 350,
            "Name": "Soporte",
            "Quantity": 2
        }, {
            "Nominal Length": 1000,
            "Name": "Estructura 1",
            "Quantity": 1
        }, {
            "Nominal Length": 2000,
            "Name": "Viga 2",
            "Quantity": 2
        }]
    }, {
        "Bar Number": 2,
        "Total Length Used": 4100,
        "Bar Left Over": 1900,
        "Cuts": [{
            "Nominal Length": 50,
            "Name": "Columna",
            "Quantity": 2
        }, {
            "Nominal Length": 100,
            "Name": "Viga Transversal",
            "Quantity": 3
        }, {
            "Nominal Length": 350,
            "Name": "Soporte",
            "Quantity": 2
        }, {
            "Nominal Length": 1000,
            "Name": "Estructura 1",
            "Quantity": 1
        }, {
            "Nominal Length": 2000,
            "Name": "Viga 2",
            "Quantity": 1
        }]
    }]
}
							

Ejemplo 3: 2 Cortes - CSV - sin ceros

Optimizar 65 Cortes de 100 mm y 20 Cortes de 35 mm usando barras de 4000 mm.

Solicitud:

{
    "Configs": {
        "bar_length": 4000,
        "saw_width": 0,
        "end_cut": 0,
        "variability": 0,
        "losses": 0,
        "iterations": 5000,
        "include_zero_cuts": false,
        "data_type": "csv"
    },
    "Cuts": [
      	["Parte 1", 65, 100],
    	["Parte 2", 20, 35]
    ]
}

							
Respuesta:

Estadísticas:

Tamaño: 0.64kb - Latencia: 600ms


"# CONFIGURATIONS"
"Configuration Parameter",Value
"Bar Length",4000
"Calculated Bar Length",4000
Iterations,5000
"Cut Losses",0
"Bar Variability",0
"Saw Blade Width",0
"End Cuts for Each Side",0
"Include Zero Cuts",
"Data Type",csv

"# RESULTS"
"Result Parameter",Value
"Qty of Requested Cuts",85
"Qty of Optimized Cuts",85
"Qty of Bars Needed",2
"Total (Nominal) Length to be Cut",7200
"Total (Real) Length to be Cut",7200
"Total Cutting Losses",0
"Total Leftover",800

"# BARS"
"Row Number","Bar Number","Total Length Used","Bar Left Over","Nominal Length",Name,Quantity
0,1,4000,0,35,"Parte 2",20
1,1,4000,0,100,"Parte 1",33
2,2,3200,800,100,"Parte 1",32

							

Ejemplo 4: 2 Cortes - CSV - con ceros

Optimizar 65 Cortes de 100 mm y 20 Cortes de 35 mm usando barras de 4000 mm.

Solicitud:

{
    "Configs": {
        "bar_length": 4000,
        "saw_width": 0,
        "end_cut": 0,
        "variability": 0,
        "losses": 0,
        "iterations": 5000,
        "include_zero_cuts": true,
        "data_type": "csv"
    },
    "Cuts": [
      	["Parte 1", 65, 100],
    	["Parte 2", 20, 35]
    ]
}

							
Respuesta:

Estadísticas:

Tamaño: 0.67kb - Latencia: 484ms


"# CONFIGURATIONS"
"Configuration Parameter",Value
"Bar Length",4000
"Calculated Bar Length",4000
Iterations,5000
"Cut Losses",0
"Bar Variability",0
"Saw Blade Width",0
"End Cuts for Each Side",0
"Include Zero Cuts",1
"Data Type",csv

"# RESULTS"
"Result Parameter",Value
"Qty of Requested Cuts",85
"Qty of Optimized Cuts",85
"Qty of Bars Needed",2
"Total (Nominal) Length to be Cut",7200
"Total (Real) Length to be Cut",7200
"Total Cutting Losses",0
"Total Leftover",800

"# BARS"
"Row Number","Bar Number","Total Length Used","Bar Left Over","Nominal Length",Name,Quantity
0,1,4000,0,35,"Parte 2",20
1,1,4000,0,100,"Parte 1",33
2,2,3200,800,35,"Parte 2",0
3,2,3200,800,100,"Parte 1",32