Resuelve el modelo de entrada y muestra el resultado de una sola vez. Úsalo cuando no necesites devoluciones de llamada ni incrementalidad, ni hacer un seguimiento del progreso de una solución.
Solicitud HTTP
POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel
La URL usa la sintaxis de la transcodificación gRPC.
Cuerpo de la solicitud
El cuerpo de la solicitud contiene datos con la siguiente estructura:
Representación JSON |
---|
{ "solverType": enum ( |
Campos | |
---|---|
solverType |
Opcional. Tipo de solucionador para resolver numéricamente el problema. Ten en cuenta que si un solucionador no admite una función específica en el modelo, el procedimiento de optimización no será exitoso. |
model |
Obligatorio. Representación matemática del problema de optimización que se debe resolver. |
parameters |
Opcional. Parámetros para controlar una sola resolución. El parámetro enableOutput se controla de manera específica. En el caso de los solucionadores que admiten devoluciones de llamada de mensajes, establecerlo en verdadero hará que el servidor registre una devolución de llamada de mensaje. Los mensajes resultantes se mostrarán enResolveMathOptModelResponse.messages. Para otros solucionadores, configurar enableOutput como verdadero para generar un error. |
modelParameters |
Opcional. Son parámetros para controlar una sola resolución que son específicos del modelo de entrada (consulta Resolver parámetrosProto para conocer los parámetros independientes del modelo). |
Cuerpo de la respuesta
Respuesta para una resolución remota unario en MathOpt.
Si se ejecuta correctamente, el cuerpo de la respuesta contendrá datos con la siguiente estructura:
Representación JSON |
---|
{
"result": {
object ( |
Campos | |
---|---|
result |
Descripción del resultado de la resolución del modelo en la solicitud. |
messages[] |
Si se usó ResolverParametersProto.enable_output, contendrá mensajes de registro para los solucionadores que admiten devoluciones de llamadas de mensajes. |
SolverTypeProto
Los solucionadores de problemas compatibles con MathOpt.
Enumeraciones | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
Solución de solucionador de programas de números enteros de restricciones (SCIP) (tercero). Admite problemas cuadráticos de números enteros no convexos, LP y MIP. Sin embargo, no se muestran datos dobles para los LP. Prefiero GLOP para LP. |
SOLVER_TYPE_GUROBI |
Resolutor de Gurobi (terceros) Admite problemas cuadráticos de números enteros no convexos, LP y MIP. Suele ser la opción más rápida, pero tiene licencias especiales. |
SOLVER_TYPE_GLOP |
Resolutor de Glop de Google Admite LP con métodos simplex primarios y duales. |
SOLVER_TYPE_CP_SAT |
Solución de problemas de CP-SAT de Google. Compatible con problemas en los que todas las variables son números enteros y delimitados (o se implica que son posteriores a presolve). Compatibilidad experimental para reescalar y discretizar problemas con variables continuas. |
SOLVER_TYPE_PDLP |
Solucionador de problemas PDLP de Google. Admite LP y objetivos cuadráticos diagonales convexos. Usa métodos de primer orden en lugar de simplex. Puede resolver problemas muy grandes. |
SOLVER_TYPE_GLPK |
GNU Linear Programming Kit (GLPK) (tercero). Admite MIP y LP. Seguridad de subprocesos: GLPK usa almacenamiento local de subprocesos para las asignaciones de memoria. En consecuencia, las instancias de la herramienta de resolución se deben destruir en el mismo subproceso en el que se crean. De lo contrario, GLPK fallará. Parece correcto llamar a la función Resolverr::Solve() desde otro subproceso que no sea el que se usó para crearla, pero GLPK no la documenta y se debe evitar. Cuando se resuelve un LP con el presolver, solo se devuelve una solución (y los rayos no delimitados) si se encuentra una solución óptima. De lo contrario, no se muestra nada. Consulta la página 40 de glpk-5.0/doc/glpk.pdf disponible en glpk-5.0.tar.gz para obtener más detalles. |
SOLVER_TYPE_OSQP |
El solucionador de problemas del programa cuadrática de división de operadores (OSQP) (tercero). Admite problemas continuos con restricciones lineales y objetivos cuadráticos lineales o convexos. Usa un método de primer orden. |
SOLVER_TYPE_ECOS |
El solucionador de problemas cónicos incorporado (ECOS) (terceros). Es compatible con problemas de LP y SOCP. Usa métodos de puntos internos (barrera). |
SOLVER_TYPE_SCS |
El solucionador cónico de división (SCS) (tercero). Es compatible con problemas de LP y SOCP. Usa un método de primer orden. |
SOLVER_TYPE_HIGHS |
Servicio de resolución de HiGHS (terceros). Soluciona problemas de LP y MIP (las QP convexas no están implementadas). |
SOLVER_TYPE_SANTORINI |
Es la implementación de referencia de MathOpt de un solucionador de MIP. Es lenta o no se recomienda para la producción. No es un solucionador de problemas de LP (no se muestra información doble). |
ModelProto
Un problema de optimización. MathOpt admite lo siguiente: variables de decisión continuas y de números enteros con límites finitos opcionales. - Objetivos lineales y cuadráticos (objetivos únicos o múltiples), minimizados o maximizados. - Una serie de tipos de restricciones, incluidas las siguientes: * Limitaciones lineales * Restricciones cuadráticas * Restricciones de conos de segundo orden * Restricciones lógicas > Restricciones de SOS1 y SOS2 > Limitaciones del indicador
De forma predeterminada, las restricciones se representan en “id-to-data”. Maps. Sin embargo, representamos restricciones lineales en una "struct-of-arrays" más eficiente. de un conjunto de datos tengan un formato común.
Representación JSON |
---|
{ "name": string, "variables": { object ( |
Campos | |
---|---|
name |
|
variables |
|
objective |
El objetivo principal del modelo. |
auxiliaryObjectives |
Objetivos auxiliares para usar en modelos de varios objetivos. Los IDs de clave de mapa deben estar en [0, max(int64)). Cada prioridad, y cada nombre que no esté vacío, debe ser único y también distinto del Es un objeto que contiene una lista de pares |
linearConstraints |
|
linearConstraintMatrix |
Los coeficientes variables para las restricciones lineales. Si se borra una variable involucrada en esta restricción, se trata como si se hubiera establecido en cero. Requisitos: * linearConstraintMatrix.row_ids son elementos de linearConstraints.ids. * linearConstraintMatrix.column_ids son elementos de variables.ids. * Las entradas de la matriz que no se especifican son cero. * Todos los valores de linearConstraintMatrix.values deben ser finitos. |
quadraticConstraints |
Restricciones cuadráticas en el modelo Es un objeto que contiene una lista de pares |
secondOrderConeConstraints |
Restricciones de cono de segundo orden en el modelo Es un objeto que contiene una lista de pares |
sos1Constraints |
Restricciones de SOS1 en el modelo, que limitan como máximo un Es un objeto que contiene una lista de pares |
sos2Constraints |
Restricciones de SOS2 en el modelo, que limitan como máximo dos entradas de Es un objeto que contiene una lista de pares |
indicatorConstraints |
Restricciones del indicador en el modelo, que aplican eso, si se trata de una “variable indicadora” binaria se establece en uno, luego una "restricción implícita" debe contener. Es un objeto que contiene una lista de pares |
VariablesProto
Como se usa a continuación, definimos "#variables" = size(VariablesProto.ids).
Representación JSON |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "integers": [ boolean ], "names": [ string ] } |
Campos | |
---|---|
ids[] |
Debe ser no negativa y estar estrictamente creciente. No se puede usar el valor max(int64). |
lowerBounds[] |
Debe tener una longitud igual a #variables, valores en [-inf, inf). |
upperBounds[] |
Debe tener una longitud igual a #variables, valores en (-inf, inf]. |
integers[] |
Debe tener una longitud igual a #variables. El valor es falso para variables continuas y verdadero para variables de número entero. |
names[] |
Si no se establece, se supone que son todas cadenas vacías. De lo contrario, la longitud debería ser igual a #variables. Todos los nombres que no estén vacíos deben ser distintos. |
ObjectiveProto
Representación JSON |
---|
{ "maximize": boolean, "offset": number, "linearCoefficients": { object ( |
Campos | |
---|---|
maximize |
falso es minimizar, verdadero es maximizar |
offset |
Debe ser finita y no un valor NaN. |
linearCoefficients |
Términos de ObjectiveProto que son lineales en las variables de decisión. Requisitos: * Los linearCoefficients.ids son elementos de VariablesProto.ids. * VariablesProto no especificadas corresponden a cero. * Todos los valores linearCoefficients.values deben ser finitos. * linearCoefficients.values puede ser cero, pero esto solo desperdicia espacio. |
quadraticCoefficients |
Términos objetivos que son cuadráticos en las variables de decisión. Requisitos además de los de los mensajes SparseDoubleMatrixProto: * Cada elemento de quadraticCoefficients.row_ids y cada elemento de quadraticCoefficients.column_ids debe ser un elemento de VariablesProto.ids. * La matriz debe ser triangular superior: para cada i, quadraticCoefficients.row_ids[i] <= quadraticCoefficients.column_ids[i]. Notas: * Los términos que no se almacenan explícitamente tienen un coeficiente cero. * Los elementos de cuadráticosCoeficientes.coeficientes pueden ser cero, pero esto solo desperdicia espacio. |
name |
Es posible que los mensajes principales tengan requisitos de exclusividad para este campo. p.ej., consulta ModelProto.objectives y AuxiliaryObjectivesUpdatesProto.new_objectives. |
priority |
Para problemas de varios objetivos, la prioridad de este objetivo en relación con los demás (los valores más bajos son más importantes). Este valor no debe ser negativo. Además, cada prioridad objetiva en el modelo debe ser distinta en el momento de la resolución. Esta condición no se valida en el nivel del prototipo, por lo que es posible que los modelos tengan objetivos con la misma prioridad de forma temporal. |
SparseDoubleVectorProto
Representación dispersa de un vector de dobles.
Representación JSON |
---|
{ "ids": [ string ], "values": [ number ] } |
Campos | |
---|---|
ids[] |
Debe ordenarse (en orden ascendente) con todos los elementos distintos. |
values[] |
Debe tener la misma longitud que los ID. Es posible que no contenga NaN. |
SparseDoubleMatrixProto
Representación dispersa de una matriz de dobles.
La matriz se almacena como triples de ID de fila, ID de columna y coeficiente. Estos tres vectores deben tener la misma longitud. Para todos los i, la tupla (rowIds[i], columnIds[i]) debe ser diferente. Las entradas deben estar en orden mayor de fila.
Representación JSON |
---|
{ "rowIds": [ string ], "columnIds": [ string ], "coefficients": [ number ] } |
Campos | |
---|---|
rowIds[] |
|
columnIds[] |
|
coefficients[] |
Es posible que no contenga NaN. |
LinearConstraintsProto
Como se usa a continuación, definimos “#linear constraints” = size(LinearConstraintsProto.ids).
Representación JSON |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "names": [ string ] } |
Campos | |
---|---|
ids[] |
Debe ser no negativa y estar estrictamente creciente. No se puede usar el valor max(int64). |
lowerBounds[] |
Debe tener una longitud igual a #limitaciones lineales, valores en [-inf, inf). |
upperBounds[] |
Debe tener una longitud igual a #limitaciones lineales, valores en (-inf, inf]. |
names[] |
Si no se establece, se supone que son todas cadenas vacías. De lo contrario, debe tener una longitud igual a las #restricciones lineales. Todos los nombres que no estén vacíos deben ser distintos. |
QuadraticConstraintProto
Una restricción cuadrática única con el siguiente formato: lb <= sum{linearTerms} + sum{quadraticTerms} <= ub
Si se borra una variable involucrada en esta restricción, se trata como si se hubiera establecido en cero.
Representación JSON |
---|
{ "linearTerms": { object ( |
Campos | |
---|---|
linearTerms |
Términos que son lineales en las variables de decisión. Además de los requisitos de los mensajes SparseDoubleVectorProto, exigimos lo siguiente: * Los linearTerms.ids son elementos de VariablesProto.ids. * Todos los linearTerms.values deben ser finitos y no ser NaN. Notas: * Los IDs de variables omitidos tienen un coeficiente de cero correspondiente. * linearTerms.values puede ser cero, pero esto solo desperdicia espacio. |
quadraticTerms |
Términos que son cuadráticos en las variables de decisión. Además de los requisitos de los mensajes SparseDoubleMatrixProto, exigimos lo siguiente: * Cada elemento de quadraticTerms.row_ids y de quadraticTerms.column_ids debe ser un elemento de VariablesProto.ids. * La matriz debe ser triangular superior: para cada i, quadraticTerms.row_ids[i] <= quadraticTerms.column_ids[i]. Notas: * Los términos que no se almacenan explícitamente tienen un coeficiente cero. * Los elementos de quadraticTerms.coefficients pueden ser cero, pero esto simplemente desperdicia espacio. |
lowerBound |
Debe tener un valor en [-inf, inf) y ser menor o igual que |
upperBound |
Debe tener un valor en (-inf, inf] y ser mayor o igual que |
name |
Es posible que los mensajes principales tengan requisitos de exclusividad para este campo. p.ej., consulta ModelProto.quadratic_constraints y QuadraticConstraintsProto.new_constraints. |
SecondOrderConeConstraintProto
Una única restricción de cono de segundo orden de la forma:
||argumentsToNorm
||_2 <= upperBound
,
donde upperBound
y cada elemento de argumentsToNorm
son expresiones lineales.
Si se borra una variable involucrada en esta restricción, se trata como si se hubiera establecido en cero.
Representación JSON |
---|
{ "upperBound": { object ( |
Campos | |
---|---|
upperBound |
|
argumentsToNorm[] |
|
name |
Es posible que los mensajes principales tengan requisitos de exclusividad para este campo. p.ej., consulta |
LinearExpressionProto
Una representación dispersa de una expresión lineal (una suma ponderada de variables, más un desplazamiento constante).
Representación JSON |
---|
{ "ids": [ string ], "coefficients": [ number ], "offset": number } |
Campos | |
---|---|
ids[] |
ID de variables. Debe ordenarse (en orden ascendente) con todos los elementos distintos. |
coefficients[] |
Debe tener la misma longitud que los ID. Los valores deben ser finitos y no pueden ser NaN. |
offset |
Debe ser finito y puede no ser NaN. |
SosConstraintProto
Datos para representar una sola restricción de SOS1 o SOS2.
Si se borra una variable involucrada en esta restricción, se trata como si se hubiera establecido en cero.
Representación JSON |
---|
{
"expressions": [
{
object ( |
Campos | |
---|---|
expressions[] |
Las expresiones sobre las que se debe aplicar la restricción SOS: * SOS1: como máximo un elemento toma un valor distinto de cero. * SOS2: como máximo dos elementos tienen valores distintos de cero y deben ser adyacentes en el orden repetido. |
weights[] |
Vacío o de igual longitud que las expresiones. Si están vacíos, los pesos predeterminados son 1, 2, ... Si están presentes, las entradas deben ser únicas. |
name |
Es posible que los mensajes principales tengan requisitos de exclusividad para este campo. p.ej., consulta ModelProto.sos1_constraints y SosConstraintUpdatesProto.new_constraints. |
IndicatorConstraintProto
Datos para representar una restricción de indicador única con el formato: Variable(indicatorId) = (activateOnZero ? 0 : 1) WARNING valor de límite inferior <= expresión <= Límite superior.
Si se borra una variable involucrada en esta restricción (ya sea el indicador o que aparece en expression
), se trata como si se hubiera establecido en cero. En particular, borrar la variable del indicador significa que la restricción del indicador está vacía si activateOnZero
es falsa y que es equivalente a una restricción lineal si activateOnZero
es verdadero.
Representación JSON |
---|
{
"activateOnZero": boolean,
"expression": {
object ( |
Campos | |
---|---|
activateOnZero |
Si es verdadero, si la variable indicadora toma el valor 0, se debe mantener la restricción implícita. De lo contrario, si la variable del indicador toma el valor 1, se debe mantener la restricción implícita. |
expression |
Debe ser una expresión lineal válida con respecto al modelo que lo contiene: * Todas las condiciones indicadas en |
lowerBound |
Debe tener un valor en [-inf, inf); no puede ser NaN. |
upperBound |
Debe tener un valor en (-inf, inf]; no puede ser NaN. |
name |
Es posible que los mensajes principales tengan requisitos de exclusividad para este campo. p.ej., consulta |
indicatorId |
Un ID que corresponde a una variable binaria o no está establecido. Si no se establece, se ignora la restricción del indicador. Si se configura, exigimos lo siguiente: * VariablesProto.integers[indicatorId] = true, * VariablesProto.lower_bounds[indicatorId] >= 0, * VariablesProto.upper_bounds[indicatorId] <= 1. MathOpt no valida estas condiciones, pero, si no se cumplen, el agente de resolución mostrará un error luego de resolverla. |
SolveParametersProto
Parámetros para controlar una sola resolución.
Contiene ambos parámetros comunes a todos los solucionadores, p.ej., timeLimit y los parámetros para un solucionador específico, p.ej., gscip. Si se establece un valor en el campo común y específico de la resolución, se usa la configuración específica de la herramienta.
Los parámetros comunes que son opcionales y no establecidos, o una enumeración con valor no especificado indican que se usa el valor predeterminado de la resolución.
Se ignoran los parámetros específicos de resolución que no sean el que está en uso.
Los parámetros que dependen del modelo (p.ej., se establece la prioridad de ramificación para cada variable) se pasan a ModelSolveParametersProto.
Representación JSON |
---|
{ "timeLimit": string, "enableOutput": boolean, "lpAlgorithm": enum ( |
Campos | |
---|---|
timeLimit |
Tiempo máximo que un solucionador de problemas debería dedicar al problema (o infinito si no se establece). Este valor no es un límite estricto, el tiempo de resolución puede superarlo ligeramente. Este parámetro siempre se pasa al agente de resolución subyacente; no se usa el valor predeterminado de la herramienta. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
enableOutput |
Habilita la impresión de registros de implementación del solucionador de problemas. La ubicación de esos seguimientos depende del solucionador. Para SCIP y Gurobi, estos serán los flujos de salida estándar. Para Glop y CP-SAT, se mostrará el estado LOG(INFO). Ten en cuenta que si la herramienta de resolución admite la devolución de llamada de mensajes y el usuario registra una devolución de llamada para ella, se ignora este valor del parámetro y no se imprimen registros. |
lpAlgorithm |
Es el algoritmo para resolver un programa lineal. Si es LP_ALGORITHM_UNSPECIFIED, usa el algoritmo predeterminado del solucionador. Para problemas que no son programas lineales, pero en los que la programación lineal es una subrutina, los solucionadores pueden usar este valor. P.ej., Por lo general, los solucionadores de MIP usarán esto solo para la resolución del LP raíz (de lo contrario, usarán doble simplex). |
presolve |
Esfuerzo para simplificar el problema antes de iniciar el algoritmo principal, o el nivel de esfuerzo predeterminado del solucionador si está en Estás con un valor Hangouts_UNSPECIFIED. |
cuts |
Esfuerzo para lograr un mayor nivel de relajación del LP (solo MIP) o el nivel de esfuerzo predeterminado del solucionador si se encuentra en Estás con un nivel de esfuerzo menor (****)_UNSPECIFIED. NOTA: Si inhabilitas los cortes, es posible que las devoluciones de llamada no puedan agregar cortes en MIP_NODE. Este comportamiento es específico del solucionador. |
heuristics |
Esfuerzo para encontrar soluciones posibles más allá de las que se encuentran en el procedimiento de búsqueda completo (solo MIP) o el nivel de esfuerzo predeterminado del solucionador, si es EMPHASIS_UNSPECIFIED. |
scaling |
Esfuerzo para reescalar el problema para mejorar la estabilidad numérica o el nivel de esfuerzo predeterminado del solucionador si es EMPHASIS_UNSPECIFIED. |
iterationLimit |
Límite de las iteraciones del algoritmo subyacente (p.ej., pivotes simplex). El comportamiento específico depende del solucionador y del algoritmo utilizado, pero a menudo puede proporcionar un límite de resolución determinista (puede que se necesite más configuración, p.ej., un subproceso). Por lo general, es compatible con los solucionadores de LP, QP y MIP, pero, para los solucionadores de MIP, consulta también nodeLimit. |
nodeLimit |
Límite en la cantidad de subproblemas resueltos en la búsqueda enumerativa (p.ej., rama y límite). Para muchos solucionadores, esto se puede usar para limitar el procesamiento de manera determinista (puede que se necesite más configuración, p.ej., un subproceso). Por lo general, para los solucionadores de MIP, consulta también iterationLimit. |
cutoffLimit |
El solucionador se detiene antes si puede demostrar que no hay soluciones básicas que sean tan buenas como el corte. En una interrupción anticipada, el solucionador muestra el motivo de finalización NO_SOLUTION_FOUND y con el límite CUTOFF, y no es necesario proporcionar información adicional sobre la solución. No tiene ningún efecto en el valor que se muestra si no hay una parada anticipada. Se recomienda que uses una tolerancia si deseas que se devuelvan soluciones cuyo objetivo sea exactamente igual al límite. Consulta la guía del usuario para obtener más detalles y una comparación con bestBoundLimit. |
objectiveLimit |
El solucionador se detiene antes en cuanto encuentra una solución por lo menos así, con un motivo de finalización FEASIBLE y un OBJETIVO de límite. |
bestBoundLimit |
La resolución se detiene antes en cuanto demuestra que el mejor límite es al menos así, con motivo de rescisión FEASIBLE o NO_SOLUTION_FOUND y límite OBJETIVO. Consulta la guía del usuario para obtener más detalles y una comparación con cutoffLimit. |
solutionLimit |
La resolución se detiene temprano después de encontrar esta gran cantidad de soluciones posibles, con un motivo de rescisión FEASIBLE y limitar la SOLUCIÓN. Debe ser mayor que cero si se configura. A menudo, se usa para que el solucionador se detenga en la primera solución factible encontrada. Ten en cuenta que no hay garantía sobre el valor objetivo para ninguna de las soluciones mostradas. Por lo general, los solucionadores no mostrarán más soluciones que el límite de soluciones, pero MathOpt no aplica esto (consulta también b/214041169). Actualmente, se admite para Gurobi y SCIP, y solo para CP-SAT con valor 1. |
threads |
Si se configura, debe ser >= 1. |
randomSeed |
Valor inicial del generador de números pseudoaleatorio en el solucionador subyacente. Ten en cuenta que todos los solucionadores usan números pseudoaleatorios para seleccionar elementos como perturbación en el algoritmo LP, reglas de ruptura de empates y correcciones heurísticas. La variación en esto puede tener un impacto notable en el comportamiento de la resolución. Aunque todos los solucionadores tienen un concepto de valor inicial, ten en cuenta que los valores válidos dependen del resultado real. - Gurobi: [0:GRB_MAXINT] (que a partir de Gurobi 9.0 es 2x10^9). - GSCIP: [0:2147483647] (que es MAX_INT, kint32max o 2^31-1). - GLOP: [0:2147483647] (igual que más arriba). En todos los casos, la resolución recibirá un valor igual a: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, randomSeed)). |
absoluteGapTolerance |
Una tolerancia de optimización absoluta (principalmente) para los solucionadores de MIP. El GAP absoluto es el valor absoluto de la diferencia entre: * el valor objetivo de la mejor solución posible encontrada y * el límite doble producido por la búsqueda. El solucionador puede detenerse una vez que el GAP absoluto tenga, como máximo, la tolerancia GapTolerance absoluta (si se establece) y mostrar TERMINATION_REASON_OPTIMAL. Debe ser mayor o igual que 0 si se configura. Consulta también RelativeGapTolerance. |
relativeGapTolerance |
Una tolerancia de optimización relativa (principalmente) para los solucionadores de MIP. El GAP relativo es una versión normalizada del GAP absoluto (definido en la tolerancia absoluta de la GAP), en la que la normalización depende del solucionador, p.ej., GAP absoluto dividido por el valor objetivo de la mejor solución posible encontrada. La herramienta de resolución puede detenerse una vez que el GAP relativo tenga, como máximo, una tolerancia GapTolerance relativa (si se establece) y mostrar TERMINATION_REASON_OPTIMAL. Debe ser mayor o igual que 0 si se configura. Consulta también la absorción absoluta de GapTolerance. |
solutionPoolSize |
Conservar hasta |
LPAlgorithmProto
Selecciona un algoritmo para resolver programas lineales.
Enumeraciones | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
Método simplex (primal) Por lo general, puede proporcionar soluciones primarias y duales, rayos primarios/dobles para problemas primarios/duales no delimitados y una base. |
LP_ALGORITHM_DUAL_SIMPLEX |
El método doble simplex. Por lo general, puede proporcionar soluciones primarias y duales, rayos primarios/dobles para problemas primarios/duales no delimitados y una base. |
LP_ALGORITHM_BARRIER |
El método de barrera, también comúnmente llamado método de punto interior (IPM). Por lo general, puede ofrecer soluciones primarias y duales. Algunas implementaciones también pueden producir rayos en problemas no delimitados o inviables. No se proporciona una base, a menos que el solucionador subyacente realice un “combinación” y termina con simplex. |
LP_ALGORITHM_FIRST_ORDER |
Algoritmo basado en un método de primer orden. Por lo general, estas producirán soluciones primarias y duales, y potencialmente también certificados de inviabilidad primaria o doble. Los métodos de primer orden generalmente proporcionarán soluciones con menor precisión, por lo que los usuarios deben tener cuidado de establecer parámetros de calidad de la solución (p.ej., tolerancias) y validar las soluciones. |
EmphasisProto
Nivel de esfuerzo aplicado a una tarea opcional durante la resolución (consulta ChooseParametersProto para obtener información sobre su uso).
El énfasis se usa para configurar una función de solucionador de problemas de la siguiente manera: * Si un solucionador de problemas no admite la función, solo UNSPECIFIED siempre será válido. Cualquier otro parámetro de configuración suele generar un error de argumento no válido (algunos solucionadores también pueden aceptar el estado OFF). * Si el solucionador admite la función: cuando se establece en UNSPECIFIED, se usa el valor predeterminado subyacente. - Si no se puede desactivar la función, si la desactivas, se mostrará un error. - Si la función está habilitada de forma predeterminada, la configuración predeterminada del solucionador se suele asignar a MEDIUM. - Si la función es compatible, las opciones LOW, MEDIUM, HIGH y MUY HIGH nunca mostrarán un error y asignarán su mejor coincidencia.
Enumeraciones | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
ModelSolveParametersProto
Representación JSON |
---|
{ "variableValuesFilter": { object ( |
Campos | |
---|---|
variableValuesFilter |
El filtro que se aplica a todos los contenedores dispersos que se muestran como claves por variables en PrimalSolutionProto y PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values). Requisitos: * Los IDs son elementos de VariablesProto.ids. |
dualValuesFilter |
Es el filtro que se aplica a todos los contenedores dispersos que se muestran como claves por restricciones lineales en DualSolutionProto y DualRay (DualSolutionProto.dual_values, DualRay.dual_values). Requisitos: * Los IDs son elementos de LinearConstraints.ids. |
reducedCostsFilter |
Es el filtro que se aplica a todos los contenedores dispersos que se muestran como claves por variables en DualSolutionProto y DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs). Requisitos: * Los IDs son elementos de VariablesProto.ids. |
initialBasis |
Base inicial opcional para solucionadores de problemas de LP simplex de inicio semicaliente. Si se configura, se espera que sea válido de acuerdo con |
solutionHints[] |
Sugerencias de soluciones opcionales. Si el solucionador subyacente solo acepta una sugerencia, se usa la primera. |
branchingPriorities |
Prioridades de ramificación opcionales. Las variables con valores más altos se ramificarán primero. Las variables para las que no se establecen prioridades obtienen la prioridad predeterminada del solucionador (generalmente cero). Requisitos: * BranchingPriorities.values debe ser finito. * branchingPriorities.ids deben ser elementos de VariablesProto.ids. |
SparseVectorFilterProto
Este mensaje permite consultar o configurar partes específicas de un SparseXxxxVector. El comportamiento predeterminado es no filtrar nada. Un uso común es consultar solo las partes de las soluciones (solo valores distintos de cero o solo un conjunto de valores de variables seleccionados).
Representación JSON |
---|
{ "skipZeroValues": boolean, "filterByIds": boolean, "filteredIds": [ string ] } |
Campos | |
---|---|
skipZeroValues |
Para SparseBoolVectorProto “zero” es |
filterByIds |
Cuando es verdadero, muestra solo los valores correspondientes a los IDs enumerados en filterIds. |
filteredIds[] |
La lista de IDs que se deben usar cuando filterByIds es verdadero. Debe estar vacío cuando filterByIds es falso. NOTA: Si este campo está vacío y filterByIds es verdadero, estás diciendo que no quieres que se muestre información en el resultado. |
BasisProto
Es una caracterización combinatoria de una solución para un programa lineal.
El método simplex para resolver programas lineales siempre devuelve una "solución factible básica" que se puede describir de forma combinatoria con una base. Una base asigna un BasisStatusProto para cada variable y restricción lineal.
P.ej., considera un formato estándar de página de destino: min c * x s.t. A * x = b x >= 0 que tiene más variables que restricciones y que tiene el rango de filas completo A.
Supongamos que n es el número de variables y m el número de restricciones lineales. Una base válida para este problema puede construirse de la siguiente manera: * Todas las restricciones tendrán el estado de base FIXED. * Elige m variables de modo que las columnas de A sean linealmente independientes y asígnales el estado BASIC. * Asigna el estado AT_LOWER a las variables n - m restantes.
La solución básica para esta base es la solución única de A * x = b que tiene todas las variables con el estado AT_LOWER fijado en sus límites inferiores (todo en cero). La solución resultante se denomina solución factible básica si también satisface x >= 0.
Representación JSON |
---|
{ "constraintStatus": { object ( |
Campos | |
---|---|
constraintStatus |
Estado de la base de restricción. Requisitos: * constraintStatus.ids es igual a LinearConstraints.ids. |
variableStatus |
Estado de base variable. Requisitos: * constraintStatus.ids es igual a VariablesProto.ids. |
basicDualFeasibility |
Esta es una función avanzada que utiliza MathOpt para caracterizar la viabilidad de soluciones de LP que no son óptimas (las soluciones óptimas siempre tendrán el estado SOLUTION_STATUS_FEASIBLE). En el caso de los LP unilaterales, debe ser igual al estado de viabilidad de la solución dual asociada. Para los LP bilaterales, puede ser diferente en algunos casos extremos (p.ej., soluciones incompletas con simplex primario). Si proporcionas una base inicial a través de ModelSolveParametersProto.initial_basis, este valor se ignora. Solo es relevante para la base que muestra SolutionProto.basis. |
SparseBasisStatusVector
Representación dispersa de un vector de estados de base.
Representación JSON |
---|
{
"ids": [
string
],
"values": [
enum ( |
Campos | |
---|---|
ids[] |
Debe ordenarse (en orden ascendente) con todos los elementos distintos. |
values[] |
Debe tener la misma longitud que los ID. |
BasisStatusProto
Estado de una variable o restricción en función del LP.
Enumeraciones | |
---|---|
BASIS_STATUS_UNSPECIFIED |
Valor de Guard que indica que no hay estado. |
BASIS_STATUS_FREE |
La variable o restricción es libre (no tiene límites finitos). |
BASIS_STATUS_AT_LOWER_BOUND |
La variable o restricción se encuentra en su límite inferior (que debe ser finito). |
BASIS_STATUS_AT_UPPER_BOUND |
La variable o restricción se encuentra en su límite superior (que debe ser finito). |
BASIS_STATUS_FIXED_VALUE |
La variable o restricción tiene límites inferiores y superiores finitos. |
BASIS_STATUS_BASIC |
La variable o restricción es básica. |
SolutionStatusProto
Viabilidad de una solución primaria o doble, según lo afirma el solucionador
Enumeraciones | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Valor de Guard que indica que no hay estado. |
SOLUTION_STATUS_UNDETERMINED |
La herramienta de resolución no reclama un estado de viabilidad. |
SOLUTION_STATUS_FEASIBLE |
El solucionador indica que la solución es factible. |
SOLUTION_STATUS_INFEASIBLE |
El solucionador indica que la solución es inviable. |
SolutionHintProto
Una solución inicial sugerida para la resolución.
Por lo general, los solucionadores de MIP solo quieren información primaria (variableValues
), mientras que los solucionadores de LP requieren información primaria y dual (dualValues
).
Muchos solucionadores de MIP pueden trabajar con (1) soluciones parciales que no especifican todas las variables o (2) soluciones inviables. En estos casos, los solucionadores suelen resolver una MIP secundaria para completar o corregir la sugerencia.
La manera en que el solucionador usa la sugerencia, si es que lo hace, depende en gran medida del solucionador, del tipo de problema y del algoritmo que se usa. La forma más confiable de asegurarte de que tu sugerencia tenga efecto es leer los registros subyacentes de solucionadores con y sin la sugerencia.
Los solucionadores de LP basados en Simplex suelen preferir una base inicial a una sugerencia de solución (de lo contrario, necesitan combinar la sugerencia para convertirla en una solución básica factible).
Representación JSON |
---|
{ "variableValues": { object ( |
Campos | |
---|---|
variableValues |
Es una asignación posiblemente parcial de valores a las variables primarias del problema. Los requisitos independientes del solucionador para este submensaje son los siguientes: * variablesValues.ids son elementos de VariablesProto.ids. * Todas las variables variablesValues.values deben ser finitas. |
dualValues |
Es una asignación (potencialmente parcial) de valores a las restricciones lineales del problema. Requisitos: * dualValues.ids son elementos de LinearConstraintsProto.ids. * dobleValues.values debe ser finito. |
SparseInt32VectorProto
Representación dispersa de un vector de números enteros.
Representación JSON |
---|
{ "ids": [ string ], "values": [ integer ] } |
Campos | |
---|---|
ids[] |
Debe ordenarse (en orden ascendente) con todos los elementos distintos. |
values[] |
Debe tener la misma longitud que los ID. |
SolveResultProto
El contrato de cuando las soluciones o los rayos primarios/duales son complejos, consulta endpoints_reasons.md para obtener una descripción completa.
Hasta que se concrete un contrato exacto, es más seguro comprobar si hay una solución o un rayo presente en lugar de depender del motivo de la rescisión.
Representación JSON |
---|
{ "termination": { object ( |
Campos | |
---|---|
termination |
Es el motivo por el que se detuvo la resolución. |
solutions[] |
El contrato general para el orden de las soluciones que los solucionadores futuros deben implementar es ordenar según lo siguiente: 1. Son las soluciones con una solución principal factible, ordenadas primero según el mejor objetivo principal. 2. Las soluciones con una solución doble factible, ordenadas por mejor objetivo doble (el objetivo doble desconocido es el peor) 3. Todas las soluciones restantes se pueden devolver en cualquier orden. |
primalRays[] |
Instrucciones de mejora primaria no delimitada o, de manera equivalente, certificados de inviabilidad doble. Por lo general, se proporcionan para FinishedReasonProtos UNBOUNDED y DUAL_INFEASIBLE. |
dualRays[] |
Instrucciones de mejora dual no delimitada o, de manera equivalente, certificados de inviabilidad primarias. Por lo general, se proporciona como FinishedReasonProto INFEASIBLE. |
solveStats |
Estadísticas sobre el proceso de resolución, p.ej., tiempo de ejecución, iteraciones. |
TerminationProto
Toda la información relacionada con el motivo por el que finalizó una llamada a Resolver().
Representación JSON |
---|
{ "reason": enum ( |
Campos | |
---|---|
reason |
Información adicional en |
limit |
Es LIMIT_UNSPECIFIED, a menos que el motivo sea TERMINATION_REASON_FEASIBLE o TERMINATION_REASON_NO_SOLUTION_FOUND. No todos los solucionadores siempre pueden determinar el límite que causó la finalización. Se usa LIMIT_UNDETERMINED cuando no se puede determinar la causa. |
detail |
Información adicional específica del solucionador de problemas relacionados con el cierre. |
problemStatus |
Estados de viabilidad para problemas principales y dobles. A partir del 18 de julio de 2023, es posible que falte este mensaje. Si falta, se puede encontrar problemStatus en SolveResultProto.solve_stats. |
objectiveBounds |
Límites en el valor objetivo óptimo. A partir del 18 de julio de 2023, es posible que falte este mensaje. Si falta, se puede encontrar objectBounds.primal_bound en SolveResultProto.solve.stats.best_primal_bound y en SolveResultProto.solve.stats.best_dual_bound. |
TerminationReasonProto
Motivo por el que finaliza una llamada a Resolver().
Enumeraciones | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
Se encontró una solución demostrablemente óptima (hasta tolerancias numéricas). |
TERMINATION_REASON_INFEASIBLE |
El problema principal no tiene soluciones viables. |
TERMINATION_REASON_UNBOUNDED |
El problema principal es factible y, de manera arbitraria, se pueden encontrar buenas soluciones junto a un rayo primario. |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
El problema principal es inviable o ilimitado. Puedes encontrar más detalles sobre el estado del problema en solveStats.problem_status. Ten en cuenta que el estado no delimitado de Gurobi se puede mapear aquí. |
TERMINATION_REASON_IMPRECISE |
El problema se resolvió con uno de los criterios anteriores (Optimal, Infeasible, Unbounded o InfeasibleOrUnbounded), pero no se cumplieron una o más tolerancias. Algunas soluciones o rayos primarios/dobles están presentes, pero serán un poco inviables o, si el problema era casi óptimo, podrían existir una brecha entre el objetivo de la mejor solución y el mejor objetivo de la misma forma. Los usuarios aún pueden consultar soluciones o rayos primarios o dobles, y estadísticas de soluciones, pero son responsables de lidiar con la imprecisión numérica. |
TERMINATION_REASON_FEASIBLE |
El optimizador alcanzó algún tipo de límite y se devuelve una solución factible principal. Consulta ResolverResultProto.limit_detail para obtener una descripción detallada del tipo de límite que se alcanzó. |
TERMINATION_REASON_NO_SOLUTION_FOUND |
El optimizador alcanzó algún tipo de límite y no encontró una solución viable. Consulta ResolverResultProto.limit_detail para obtener una descripción detallada del tipo de límite que se alcanzó. |
TERMINATION_REASON_NUMERICAL_ERROR |
El algoritmo se detuvo porque se produjo un error numérico irrecuperable. No hay información disponible sobre la solución. |
TERMINATION_REASON_OTHER_ERROR |
El algoritmo se detuvo debido a un error que no está cubierto por uno de los estados definidos anteriormente. No hay información disponible sobre la solución. |
LimitProto
Cuando Resolver() se detiene antes de tiempo con FinishedReasonProto FEASIBLE o NO_SOLUTION_FOUND, el límite específico que se alcanzó.
Enumeraciones | |
---|---|
LIMIT_UNSPECIFIED |
Se usa como valor nulo cuando la rescisión se realiza sin un límite (p.ej., TERMINATION_REASON_OPTIMAL). |
LIMIT_UNDETERMINED |
La herramienta de resolución subyacente no expone qué límite se alcanzó. |
LIMIT_ITERATION |
Se detuvo un algoritmo iterativo después de realizar la cantidad máxima de iteraciones (p.ej., iteraciones simplex o de barrera). |
LIMIT_TIME |
El algoritmo se detuvo después de un tiempo de procesamiento especificado por el usuario. |
LIMIT_NODE |
Se detuvo un algoritmo de rama y de enlace porque exploró una cantidad máxima de nodos en el árbol de rama y límite. |
LIMIT_SOLUTION |
El algoritmo se detuvo porque encontró la cantidad necesaria de soluciones. A menudo, se usa en MIP para que el solucionador de problemas devuelva la primera solución posible que encuentre. |
LIMIT_MEMORY |
El algoritmo se detuvo porque se quedó sin memoria. |
LIMIT_CUTOFF |
Se ejecutó la herramienta de resolución con un límite (p.ej., se estableció Resolver Parámetros.cutoff_limit) en el objetivo, lo que indica que el usuario no quería ninguna solución peor que el límite, y el solucionador concluyó que no había soluciones al menos tan buenas como el límite. Por lo general, no se proporciona más información sobre la solución. |
LIMIT_OBJECTIVE |
El algoritmo se detuvo porque encontró una solución o un límite mejor que un límite establecido por el usuario (consulta ResolverParameters.objective_limit y resolveParameters.best_bound_limit). |
LIMIT_NORM |
El algoritmo se detuvo porque la norma de una iteración se volvió demasiado grande. |
LIMIT_INTERRUPTED |
El algoritmo se detuvo debido a una señal de interrupción o una solicitud de interrupción del usuario. |
LIMIT_SLOW_PROGRESS |
El algoritmo se detuvo porque no pudo continuar progresando hacia la solución. |
LIMIT_OTHER |
El algoritmo se detuvo debido a un límite que no está cubierto por uno de los puntos anteriores. Ten en cuenta que LIMIT_UNDETERMINED se usa cuando no se puede determinar el motivo y LIMIT_OTHER se usa cuando el motivo es conocido, pero no encaja en ninguna de las alternativas anteriores. RescisiónProto.detail puede contener información adicional sobre el límite. |
ProblemStatusProto
Estado de factibilidad del problema principal y su doble (o el doble de una relajación continua) como afirma el solucionador. No es necesario que la persona que realiza la resolución devuelva un certificado para la reclamación (p.ej., la persona que resuelve el problema puede afirmar su viabilidad primaria sin devolver una solución principal viable). Este estado combinado proporciona una descripción completa de las afirmaciones de un solucionador sobre la viabilidad y la no delimitación del problema resuelto. Por ejemplo:
- un estado factible para problemas primarios y dobles indica que el principal es factible y limitado, y es probable que tenga una solución óptima (garantizada para problemas sin restricciones no lineales).
- un estado primordial posible y un estado doble inviable indica que el problema principal no está delimitado (es decir, tiene soluciones arbitrariamente buenas).
Ten en cuenta que un estado doble inviable por sí mismo (es decir, acompañado de un estado primario indeterminado) no implica que el problema primordial sea ilimitado, ya que podríamos hacer que ambos problemas sean inviables. Además, si bien un estado factible principal y dual puede implicar la existencia de una solución óptima, no garantiza que el solucionador haya encontrado realmente dicha solución óptima.
Representación JSON |
---|
{ "primalStatus": enum ( |
Campos | |
---|---|
primalStatus |
Estado del problema principal. |
dualStatus |
Estado para el problema doble (o para el doble de una relajación continua). |
primalOrDualInfeasible |
Si es verdadera, el solucionador afirma que el problema principal o dual es inviable, pero no sabe cuál (o si ambos son inviable). Puede ser verdadero solo cuando primal_problem_status = dual_problem_status = kIndeterminado. A menudo, esta información adicional es necesaria cuando el procesamiento previo determina que no hay una solución óptima para el problema (pero no puede determinar si se debe a una inviabilidad, a la falta de límites o a ambos). |
FeasibilityStatusProto
Estado de viabilidad del problema según lo indicado por el solucionador (no es necesario que devuelva un certificado para el reclamo).
Enumeraciones | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
Valor de Guard que indica que no hay estado. |
FEASIBILITY_STATUS_UNDETERMINED |
La herramienta de resolución no reclama un estado. |
FEASIBILITY_STATUS_FEASIBLE |
El solucionador afirma que el problema es factible. |
FEASIBILITY_STATUS_INFEASIBLE |
El solucionador afirma que el problema es inviable. |
ObjectiveBoundsProto
Límites en el valor objetivo óptimo.
Representación JSON |
---|
{ "primalBound": number, "dualBound": number } |
Campos | |
---|---|
primalBound |
El solucionador indica que el valor óptimo es igual o mejor (más pequeño para la minimización y mayor para la maximización) que primalBound hasta la tolerancia de viabilidad primaria de los solucionadores (consulta la advertencia a continuación): * primalBound es trivial (+inf para la minimización y -inf para la maximización) cuando el solucionador no afirma tener ese límite. * primalBound puede estar más cerca del valor óptimo que el objetivo de la mejor solución primaria posible. En particular, primalBound puede ser no trivial incluso cuando no se muestran soluciones posibles. Advertencia: La afirmación precisa es que existe una solución principal que: * es factible numéricamente (es decir, factible según la tolerancia de los solucionadores) y * tiene un valor objetivo primalBound. Esta solución numéricamente factible podría ser un poco inviable, en cuyo caso primalBound podría ser estrictamente mejor que el valor óptimo. Traducir una tolerancia de viabilidad primaria a una tolerancia en primalBound no es trivial, especialmente cuando la tolerancia de viabilidad es relativamente grande (p.ej., cuando se resuelve con el PDLP). |
dualBound |
El solucionador indica que el valor óptimo es igual o peor (más grande para la minimización y menor para la maximización) que DualBound hasta la tolerancia dual de viabilidad de los solucionadores (consulta la advertencia a continuación): * DualBound es trivial (inf para la minimización y +inf maximización) cuando el solucionador no afirma tener ese límite. De manera similar a primalBound, esto puede ocurrir con algunos solucionadores incluso cuando se muestra una opción óptima. Por lo general, los solucionadores del MIP informarán un límite, incluso si es impreciso. * Para problemas continuos, dualBound puede estar más cerca del valor óptimo que el objetivo de la mejor solución dual posible. Para MIP, uno de los primeros valores no triviales de DualBound es a menudo el valor óptimo de la relajación del LP del MIP. * DualBound debe ser mejor (más pequeño para la minimización y mayor para la maximización) que primalBound hasta las tolerancias de los solucionadores (consulta la advertencia a continuación). Advertencia: * Para problemas continuos, la declaración precisa es que existe una solución doble que: * es factible numéricamente (es decir, factible hasta la tolerancia de los solucionadores) y * tiene un valor objetivo dualBound. Esta solución numéricamente factible podría ser un poco inviable, en cuyo caso, DualBound podría ser estrictamente peor que el valor óptimo y primalBound. Al igual que en el caso principal, traducir una tolerancia de viabilidad doble a una tolerancia en DualBound no es trivial, en especial, cuando la tolerancia de viabilidad es relativamente grande. Sin embargo, algunos solucionadores proporcionan una versión corregida de DualBound que puede ser numéricamente más segura. Se puede acceder a esta versión corregida a través del resultado específico del solucionador de problemas (p.ej., para PDLP, pdlp_output.convergence_information.corrected_dual_objective). * Para los solucionadores de MIP, DualBound puede asociarse a una solución dual para una flexibilización continua (p.ej., relajación del LP), pero suele ser una consecuencia compleja de la ejecución de los solucionadores y, por lo general, es más impreciso que los límites informados por los solucionadores de LP. |
SolutionProto
Lo que se incluye en una solución depende del tipo de problema y solucionador. Los patrones comunes actuales son 1. Los solucionadores de MIP solo muestran una solución primaria. 2. Los solucionadores de problemas de LP simplex suelen mostrar una base y las soluciones primarias y duales asociadas a ella. 3. Otros solucionadores continuos suelen mostrar soluciones primarias y duales que están conectadas en un formato que depende del solucionador.
Requisitos: * Se debe configurar al menos un campo. una solución no puede estar vacía.
Representación JSON |
---|
{ "primalSolution": { object ( |
Campos | |
---|---|
primalSolution |
|
dualSolution |
|
basis |
|
PrimalSolutionProto
Es una solución a un problema de optimización.
P.ej., considera un programa lineal simple: min c * x s.t. A * x >= b x >= 0. Una solución primaria es asignar valores a x. Es factible si satisface A * x >= b y x >= 0 de arriba. En el mensaje PrimalSolutionProto a continuación, variableValues es x y goalValue es c * x.
Representación JSON |
---|
{ "variableValues": { object ( |
Campos | |
---|---|
variableValues |
Requisitos: * variablesValues.ids son elementos de VariablesProto.ids. * Todas las variables variablesValues.values deben ser finitas. |
objectiveValue |
Valor objetivo calculado por el solucionador subyacente. No puede ser infinito o NaN. |
auxiliaryObjectiveValues |
Valores de objetivos auxiliares calculados por el solucionador subyacente. Las claves deben ser IDs de objetivos auxiliares válidos. Los valores no pueden ser infinitos o NaN. Es un objeto que contiene una lista de pares |
feasibilityStatus |
Estado de viabilidad de la solución según el solucionador subyacente. |
DualSolutionProto
Una solución a los problemas de optimización.
P.ej., considera el par de programas lineales de par doble primario: (Primal) (Dual) mín. c * x máx. b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. La solución doble es el par (y, r). Es factible si cumple con las restricciones de (Dual) anteriores.
En el siguiente mensaje, y es dualValues, r es reduceCosts y b * y es un valor objetivo.
Representación JSON |
---|
{ "dualValues": { object ( |
Campos | |
---|---|
dualValues |
Requisitos: * dualValues.ids son elementos de LinearConstraints.ids. * dobleValues.values debe ser finito. |
reducedCosts |
Requisitos: * reducidosCostos.ids son elementos de VariablesProto.ids. * Todos los reducidoscostos.valores deben ser finitos. |
feasibilityStatus |
Estado de viabilidad de la solución según el solucionador subyacente. |
objectiveValue |
|
PrimalRayProto
una dirección de mejora ilimitada a un problema de optimización; lo que equivale a un certificado de inviabilidad para el doble del problema de optimización.
P.ej., considera un programa lineal simple: min c * x s.t. A * x >= b x >= 0 Un rayo primario es una x que satisface: c * x < 0 A * x >= 0 x >= 0 Observa que, dada una solución factible, cualquier múltiplo positivo del rayo primario más esa solución, sigue siendo factible y proporciona un mejor valor objetivo. Un rayo primario también demuestra que el problema de la optimización dual es inviable.
En el mensaje PrimalRay a continuación, variableValues es x.
Representación JSON |
---|
{
"variableValues": {
object ( |
Campos | |
---|---|
variableValues |
Requisitos: * variablesValues.ids son elementos de VariablesProto.ids. * Todas las variables variablesValues.values deben ser finitas. |
DualRayProto
Una dirección de mejora ilimitada a la doble de un problema de optimización; lo que equivale a un certificado de inviabilidad primaria.
P.ej., considera el par de programas lineales de par doble primario: (Primal) (Dual) mín. c * x máx. b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. El rayo dual es el par (y, r) que satisface: b * y > 0 y * A + r = 0 y, r >= 0 Observa que sumar un múltiplo positivo de (y, r) a la solución doble factible mantiene la viabilidad doble y mejora el objetivo (lo que demuestra que el doble no está delimitado). El rayo dual también demuestra que el problema principal es inviable.
En el mensaje DualRay a continuación, y es dualValues y r es reduceCosts.
Representación JSON |
---|
{ "dualValues": { object ( |
Campos | |
---|---|
dualValues |
Requisitos: * dualValues.ids son elementos de LinearConstraints.ids. * dobleValues.values debe ser finito. |
reducedCosts |
Requisitos: * reducidosCostos.ids son elementos de VariablesProto.ids. * Todos los reducidoscostos.valores deben ser finitos. |
SolveStatsProto
Representación JSON |
---|
{
"solveTime": string,
"problemStatus": {
object ( |
Campos | |
---|---|
solveTime |
Tiempo transcurrido de un reloj de pared, medido por math_opt, aproximadamente el tiempo dentro de Resolverr::Solve(). Nota: Esto no incluye el trabajo realizado en la compilación del modelo. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
problemStatus |
Estados de viabilidad para problemas principales y dobles. |
simplexIterations |
|
barrierIterations |
|
firstOrderIterations |
|
nodeCount |
|