Löst das Eingabemodell und gibt das Ergebnis auf einmal zurück. Verwenden Sie diese Option, wenn Sie keine Callbacks und keine Steigerung der Conversions benötigen und den Fortschritt einer Lösung nicht verfolgen müssen.
HTTP-Anfrage
POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel
Die URL verwendet die Syntax der gRPC-Transcodierung.
Anfragetext
Der Anfragetext enthält Daten mit folgender Struktur:
JSON-Darstellung |
---|
{ "solverType": enum ( |
Felder | |
---|---|
solverType |
Optional. Solver-Typ, um das Problem numerisch zu lösen. Wenn ein Matherechner eine bestimmte Funktion im Modell nicht unterstützt, ist der Optimierungsvorgang nicht erfolgreich. |
model |
Erforderlich. Eine mathematische Darstellung des zu lösenden Optimierungsproblems. |
parameters |
Optional. Parameter zum Steuern einer einzelnen Lösung. Der Parameter „enableOutput“ wird speziell verarbeitet. Wenn der Solver, der Nachrichtenrückrufe unterstützt, auf „true“ setzt, registriert der Server einen Nachrichtenrückruf. Die resultierenden Nachrichten werden in SolveMathOptModelResponse.messages zurückgegeben. Bei anderen Solvern führt die Einstellung von „enableOutput“ auf „true“ zu einem Fehler. |
modelParameters |
Optional. Parameter zum Steuern einer einzelnen Lösung, die für das Eingabemodell spezifisch sind. Modellunabhängige Parameter finden Sie unter „SolveParametersProto“. |
Antworttext
Antwort auf eine unäre Remotelösung in MathOpt.
Bei Erfolg enthält der Antworttext Daten mit der folgenden Struktur:
JSON-Darstellung |
---|
{
"result": {
object ( |
Felder | |
---|---|
result |
Beschreibung der Ausgabe der Lösung des Modells in der Anfrage. |
messages[] |
Wenn „SolveParametersProto.enable_output“ verwendet wurde, enthält es Logeinträge für Solver, die Nachrichtenrückrufe unterstützen. |
SolverTypeProto
Die von MathOpt unterstützten Solver.
Enums | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
Solving Constraint Integer Programs (SCIP) Solving (Drittanbieter) lösen. Unterstützt LP-, MIP- und nicht konvexe ganzzahlige quadratische Probleme. Für LPs werden jedoch keine doppelten Daten zurückgegeben. Ich bevorzuge GLOP für LPs. |
SOLVER_TYPE_GUROBI |
Gurobi-Löser (Drittanbieter). Unterstützt LP-, MIP- und nicht konvexe ganzzahlige quadratische Probleme. In der Regel die schnellste Option, allerdings mit Sonderlizenzierung. |
SOLVER_TYPE_GLOP |
Glop-Löser von Google Unterstützt LP mit Primär- und Dual-Simplex-Methoden. |
SOLVER_TYPE_CP_SAT |
CP-SAT-Löser von Google Unterstützt Probleme, bei denen alle Variablen Ganzzahlen und begrenzt sind (oder nach der Vorauflösung angedeutet werden sollen). Experimentelle Unterstützung für die Neuskalierung und Diskretisierung von Problemen mit kontinuierlichen Variablen. |
SOLVER_TYPE_PDLP |
den PDLP-Löser von Google. Unterstützt LP- und konvexe diagonale quadratische Ziele. Verwendet Methoden der ersten Ordnung anstelle von Simplex. Kann sehr große Probleme lösen. |
SOLVER_TYPE_GLPK |
GNU Linear Programming Kit (GLPK) (Drittanbieter). Unterstützt MIP und LP. Thread-Sicherheit: GLPK verwendet für die Speicherzuweisung einen Thread-lokalen Speicher. Infolgedessen müssen Solver-Instanzen im selben Thread gelöscht werden, in dem sie erstellt werden, da GLPK sonst nicht abstürzt. Es scheint in Ordnung zu sein, Solver::Solve() von einem anderen Thread als dem, mit dem der Solver erstellt wurde, aufzurufen, aber dies wird nicht durch GLPK dokumentiert und sollte vermieden werden. Beim Lösen einer LP mit dem Presolver werden nur dann eine Lösung (und die ungebundenen Strahlen) zurückgegeben, wenn eine optimale Lösung gefunden wurde. Andernfalls wird nichts zurückgegeben. Weitere Informationen finden Sie unter glpk-5.0/doc/glpk.pdf Seite 40, verfügbar von glpk-5.0.tar.gz. |
SOLVER_TYPE_OSQP |
Der Operator „Operation Splitting Quadratic Program“ (OSQP) (Drittanbieter). Unterstützt kontinuierliche Probleme mit linearen Einschränkungen und linearen oder konvexen quadratischen Zielen. Es wird eine Methode erster Ordnung verwendet. |
SOLVER_TYPE_ECOS |
The Embedded Conic Solver (ECOS) (Drittanbieter). Unterstützt LP- und SOCP-Probleme. Verwendet innere Punktmethoden (Barriere). |
SOLVER_TYPE_SCS |
The Splitting Conic Solver (SCS) (Drittanbieter). Unterstützt LP- und SOCP-Probleme. Es wird eine Methode erster Ordnung verwendet. |
SOLVER_TYPE_HIGHS |
The HiGHS Solver (Drittanbieter). Unterstützt LP- und MIP-Probleme (konvexe QPs sind nicht implementiert). |
SOLVER_TYPE_SANTORINI |
Referenzimplementierung eines MIP-Lösers von MathOpt Langsam/für die Produktion nicht empfohlen. Kein LP-Löser (keine doppelten Informationen zurückgegeben). |
ModelProto
Ein Optimierungsproblem. MathOpt unterstützt: – Kontinuierliche und Ganzzahl-Entscheidungsvariablen mit optionalen endlichen Grenzen. - Lineare und quadratische Ziele (ein oder mehrere Ziele), minimiert oder maximiert. - Eine Reihe von Einschränkungstypen, darunter: * Lineare Begrenzungen * Quadratische Begrenzungen * Kegelbeschränkungen zweiter Ordnung * Logische Beschränkungen > SOS1- und SOS2-Einschränkungen > Indikatoreinschränkungen
Standardmäßig werden Einschränkungen in „ID zu Daten“ dargestellt. Karten. Wir stellen jedoch lineare Einschränkungen in einer effizienteren "Struktur aus Arrays" dar. Format.
JSON-Darstellung |
---|
{ "name": string, "variables": { object ( |
Felder | |
---|---|
name |
|
variables |
|
objective |
Das primäre Ziel im Modell. |
auxiliaryObjectives |
Zusätzliche Ziele zur Verwendung in Modellen mit mehreren Zielen. Die Zuordnungsschlüssel-IDs müssen in [0, max(int64)) vorliegen. Jede Priorität und alle nicht leeren Namen müssen eindeutig sein und sich vom primären Ein Objekt, das eine Liste von |
linearConstraints |
|
linearConstraintMatrix |
Die variablen Koeffizienten für die linearen Einschränkungen. Wenn eine an dieser Einschränkung beteiligte Variable gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt. Anforderungen: * „linearConstraintMatrix.row_ids“ sind Elemente von „linearConstraints.ids“. * linearConstraintMatrix.column_ids sind Elemente von „variables.ids“. * Nicht angegebene Matrixeinträge sind null. * linearConstraintMatrix.values müssen alle endlich sein. |
quadraticConstraints |
Quadratische Einschränkungen im Modell. Ein Objekt, das eine Liste von |
secondOrderConeConstraints |
Kegeleinschränkungen zweiter Ordnung im Modell. Ein Objekt, das eine Liste von |
sos1Constraints |
SOS1-Einschränkungen im Modell, die einschränken, dass höchstens ein Ein Objekt, das eine Liste von |
sos2Constraints |
SOS2-Einschränkungen im Modell, die einschränken, dass höchstens zwei Einträge von Ein Objekt, das eine Liste von |
indicatorConstraints |
Indikatoreinschränkungen im Modell, die durchsetzen, dass, wenn eine binäre „Indikatorvariable“ auf „1“ festgelegt ist, wird eine „implizite Einschränkung“ enthalten sein muss. Ein Objekt, das eine Liste von |
VariablesProto
Wie unten verwendet, definieren wir „#variables“. = size(VariablesProto.ids) festgelegt wird.
JSON-Darstellung |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "integers": [ boolean ], "names": [ string ] } |
Felder | |
---|---|
ids[] |
Darf nicht negativ sein und muss strikt steigend sein. Der max(int64)-Wert kann nicht verwendet werden. |
lowerBounds[] |
Muss die Länge von „#variables“ entsprechen, die Werte in [-inf, inf). |
upperBounds[] |
Muss die Länge #variables entsprechen, Werte in (-inf, inf]. |
integers[] |
Die Länge muss dem Wert #variables entsprechen. Der Wert ist "false" für kontinuierliche Variablen und "true" für Ganzzahlvariablen. |
names[] |
Wenn nicht festgelegt, wird davon ausgegangen, dass es sich um leere Strings handelt. Andernfalls sollte die Länge gleich #variables sein. Alle Namen müssen eindeutig sein. |
ObjectiveProto
JSON-Darstellung |
---|
{ "maximize": boolean, "offset": number, "linearCoefficients": { object ( |
Felder | |
---|---|
maximize |
"false" bedeutet "minimieren", "true" bedeutet "maximieren" |
offset |
Muss endlich sein und nicht NaN. |
linearCoefficients |
ObjectiveProto-Begriffe, die in den Entscheidungsvariablen linear sind. Anforderungen: * „linearCoefficients.ids“ ist Elemente von „VariablesProto.ids“. * Nicht angegebene VariablesProto entsprechen null. * linearCoefficiencys.values müssen alle endlich sein. * linearCoefficients.values kann null sein, verschwendet aber Platz. |
quadraticCoefficients |
Zielbegriffe, die in den Entscheidungsvariablen quadratisch sind. Zusätzlich zu den Anforderungen in SparseDoubleMatrixProto-Nachrichten: * Jedes Element von „quadraticCoefficients.row_ids“ und jedes Element von „quadraticCoefficients.column_ids“ muss ein Element von „VariablesProto.ids“ sein. * Die Matrix muss oben in Dreiecksform dargestellt werden: für jedes i „quadraticCoefficients.row_ids[i] <= quadraticCoefficients.column_ids[i]“. Hinweis: * Begriffe, die nicht explizit gespeichert sind, haben den Koeffizienten null. * Elemente von „quadraticCoeffizienten.coeffizienten“ können null sein, aber das verschwendet einfach Platz. |
name |
Für übergeordnete Nachrichten gelten möglicherweise Eindeutigkeitsanforderungen für dieses Feld. Siehe z.B. ModelProto.objectives und AuxiliaryObjectivesUpdatesProto.new_objectives. |
priority |
Bei Problemen mit mehreren Zielen die Priorität dieses Ziels im Vergleich zu den anderen (niedrigere Priorität ist wichtiger). Dieser Wert darf nicht negativ sein. Darüber hinaus muss jede objektive Priorität im Modell zum Zeitpunkt der Lösung eindeutig sein. Diese Bedingung wird nicht auf Proto-Ebene validiert, sodass Modelle vorübergehend Ziele mit derselben Priorität haben können. |
SparseDoubleVectorProto
Eine dünnbesetzte Darstellung eines Vektors von Double-Werten.
JSON-Darstellung |
---|
{ "ids": [ string ], "values": [ number ] } |
Felder | |
---|---|
ids[] |
Muss mit unterschiedlichen Elementen sortiert werden (in aufsteigender Reihenfolge). |
values[] |
Muss dieselbe Länge wie IDs haben. Darf keine NaN enthalten. |
SparseDoubleMatrixProto
Eine dünnbesetzte Darstellung einer Matrix von Double-Werten.
Die Matrix wird als Dreifach von Zeilen-ID, Spalten-ID und Koeffizient gespeichert. Diese drei Vektoren müssen die gleiche Länge haben. Für alle i muss das Tupel (rowIds[i], columnIds[i]) eindeutig sein. Einträge müssen in der Hauptreihenfolge der Zeile angegeben werden.
JSON-Darstellung |
---|
{ "rowIds": [ string ], "columnIds": [ string ], "coefficients": [ number ] } |
Felder | |
---|---|
rowIds[] |
|
columnIds[] |
|
coefficients[] |
Darf keine NaN enthalten. |
LinearConstraintsProto
Wie unten verwendet, definieren wir = size(LinearConstraintsProto.ids).
JSON-Darstellung |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "names": [ string ] } |
Felder | |
---|---|
ids[] |
Darf nicht negativ sein und muss strikt steigend sein. Der max(int64)-Wert kann nicht verwendet werden. |
lowerBounds[] |
Sollte die Länge der #linearen Einschränkungen entsprechen, die Werte in [-inf, inf). |
upperBounds[] |
Muss die Länge von #linearen Einschränkungen entsprechen, die Werte in (-inf, inf]. |
names[] |
Wenn nicht festgelegt, wird davon ausgegangen, dass es sich um leere Strings handelt. Andernfalls sollte die Länge gleich der #linearen Einschränkung entsprechen. Alle Namen müssen eindeutig sein. |
QuadraticConstraintProto
Eine einzelne quadratische Einschränkung in der Form: lb <= sum{linearTerms} + sum{quadraticTerms} <= ub.
Wenn eine an dieser Einschränkung beteiligte Variable gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt.
JSON-Darstellung |
---|
{ "linearTerms": { object ( |
Felder | |
---|---|
linearTerms |
Begriffe, die in den Entscheidungsvariablen linear sind. Zusätzlich zu den Anforderungen für SparseDoubleVectorProto-Nachrichten ist Folgendes erforderlich: * linearTerms.ids sind Elemente von VariablesProto.ids. * linearTerms.values müssen alle endlich sein und dürfen nicht NaN sein. Hinweise: * Ausgelassene Variablen-IDs haben einen entsprechenden Koeffizienten von null. * linearTerms.values können null sein, aber das verschwendet Platz. |
quadraticTerms |
Begriffe, die in den Entscheidungsvariablen quadratisch sind. Zusätzlich zu den Anforderungen für SparseDoubleMatrixProto-Nachrichten ist Folgendes erforderlich: * Jedes Element von „quadraticTerms.row_ids“ und jedes Element von „quadraticTerms.column_ids“ muss ein Element von „VariablesProto.ids“ sein. * Die Matrix muss oben in Dreiecksform dargestellt werden: für jedes i: quadraticTerms.row_ids[i] <= quadraticTerms.column_ids[i]. Hinweis: * Begriffe, die nicht explizit gespeichert sind, haben den Koeffizienten null. * Elemente von „quadraticTerms.coefficients“ können null sein, aber das verschwendet einfach Platz. |
lowerBound |
Muss einen Wert in [-inf, inf) haben und kleiner oder gleich |
upperBound |
Muss einen Wert in (-inf, inf] haben und größer oder gleich |
name |
Für übergeordnete Nachrichten gelten möglicherweise Eindeutigkeitsanforderungen für dieses Feld. Siehe z.B. ModelProto.quadratic_constraints und QuadraticConstraintUpdatesProto.new_constraints. |
SecondOrderConeConstraintProto
Eine einzelne Kegeleinschränkung zweiter Ordnung in der Form:
||argumentsToNorm
||_2 <= upperBound
,
Dabei sind upperBound
und jedes Element von argumentsToNorm
lineare Ausdrücke.
Wenn eine an dieser Einschränkung beteiligte Variable gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt.
JSON-Darstellung |
---|
{ "upperBound": { object ( |
Felder | |
---|---|
upperBound |
|
argumentsToNorm[] |
|
name |
Für übergeordnete Nachrichten gelten möglicherweise Eindeutigkeitsanforderungen für dieses Feld. Siehe z.B. |
LinearExpressionProto
Eine dünnbesetzte Darstellung eines linearen Ausdrucks (gewichtete Summe von Variablen plus einem konstanten Offset).
JSON-Darstellung |
---|
{ "ids": [ string ], "coefficients": [ number ], "offset": number } |
Felder | |
---|---|
ids[] |
IDs von Variablen. Muss mit unterschiedlichen Elementen sortiert werden (in aufsteigender Reihenfolge). |
coefficients[] |
Muss dieselbe Länge wie IDs haben. Werte müssen endlich sein und dürfen nicht NaN sein. |
offset |
Muss endlich sein und darf nicht NaN sein. |
SosConstraintProto
Daten zur Darstellung einer einzelnen SOS1- oder SOS2-Einschränkung.
Wenn eine an dieser Einschränkung beteiligte Variable gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt.
JSON-Darstellung |
---|
{
"expressions": [
{
object ( |
Felder | |
---|---|
expressions[] |
Die Ausdrücke, auf die die SOS-Einschränkung angewendet werden soll: * SOS1: Höchstens ein Element verwendet einen Wert ungleich null. * SOS2: Höchstens zwei Elemente nehmen Werte ungleich null an und sie müssen in der wiederholten Reihenfolge benachbart sein. |
weights[] |
Entweder leer oder gleich lang wie die Ausdrücke. Wenn leer, sind die Standardgewichtungen 1, 2, ... Falls vorhanden, müssen die Einträge eindeutig sein. |
name |
Für übergeordnete Nachrichten gelten möglicherweise Eindeutigkeitsanforderungen für dieses Feld. Siehe z.B. ModelProto.sos1_constraints und SosConstraintUpdatesProto.new_constraints. |
IndicatorConstraintProto
Daten zur Darstellung einer einzelnen Indikatoreinschränkung im folgenden Format: Variable(indicatorId) = (activateOnZero ? 0 : 1) DESC Untergrenze <= Ausdruck <= Obergrenze.
Wenn eine an dieser Einschränkung beteiligte Variable (entweder der Indikator oder die in expression
enthaltene) gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt. Insbesondere bedeutet das Löschen der Indikatorvariable, dass die Indikatoreinschränkung ungültig ist, wenn activateOnZero
falsch ist, und dass sie einer linearen Einschränkung entspricht, wenn activateOnZero
wahr ist.
JSON-Darstellung |
---|
{
"activateOnZero": boolean,
"expression": {
object ( |
Felder | |
---|---|
activateOnZero |
Wenn der Wert „true“ ist und die Indikatorvariable den Wert 0 annimmt, muss die implizite Einschränkung gelten. Wenn die Indikatorvariable den Wert 1 annimmt, muss die implizite Einschränkung gelten. |
expression |
Muss ein gültiger linearer Ausdruck in Bezug auf das enthaltene Modell sein: * Alle angegebenen Bedingungen in |
lowerBound |
Muss einen Wert in [-inf, inf); darf nicht NaN sein. |
upperBound |
Muss einen Wert in (-inf, inf] haben, darf nicht NaN sein. |
name |
Für übergeordnete Nachrichten gelten möglicherweise Eindeutigkeitsanforderungen für dieses Feld. Siehe z.B. |
indicatorId |
Eine ID, die einer Binärvariablen entspricht oder nicht festgelegt ist. Wenn kein Wert festgelegt ist, wird die Indikatoreinschränkung ignoriert. Wenn festgelegt, wird Folgendes vorausgesetzt: * VariablesProto.integers[indicatorId] = true, * VariablesProto.lower_bounds[indicatorId] >= 0, * VariablesProto.upper_bounds[indicatorId] <= 1. Diese Bedingungen werden von MathOpt nicht validiert. Wenn sie jedoch nicht erfüllt sind, gibt der Solver bei der Lösung einen Fehler zurück. |
SolveParametersProto
Parameter zum Steuern einer einzelnen Lösung.
Enthält beide Parameter, die allen Rechnern gemeinsam sind, z.B. timeLimit und Parameter für einen bestimmten Solver, z.B. gscip. Wenn ein Wert sowohl in einem allgemeinen als auch in einem Solver-spezifischen Feld festgelegt ist, wird die Solver-spezifische Einstellung verwendet.
Die allgemeinen Parameter, die optional und nicht festgelegt sind, oder eine Aufzählung mit nicht angegebenem Wert weisen darauf hin, dass der Solver-Standardwert verwendet wird.
Solver-spezifische Parameter für andere als den verwendeten Solver werden ignoriert.
Parameter, die vom Modell abhängen (z.B. Verzweigungspriorität für jede Variable festgelegt), werden in ModelSolveParametersProto übergeben.
JSON-Darstellung |
---|
{ "timeLimit": string, "enableOutput": boolean, "lpAlgorithm": enum ( |
Felder | |
---|---|
timeLimit |
Die maximale Zeit, die ein Matherechner mit dem Problem verbringen sollte (oder unendlich, falls die Funktion nicht festgelegt ist). Dieser Wert ist keine feste Begrenzung. Die Zeit bis zur Lösung kann diesen Wert geringfügig überschreiten. Dieser Parameter wird immer an den zugrunde liegenden Rechner übergeben. Der Standardrechner wird nicht verwendet. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
enableOutput |
Aktiviert das Drucken der Tracer-Implementierungs-Traces für den Solver. Wo sich diese Spuren befinden, hängt vom Matherechner ab. Bei SCIP und Gurobi ist dies die Standardausgabestreams. Bei Glop und CP-SAT lautet dies LOG(INFO). Wenn der Solverr den Nachrichten-Callback unterstützt und der Nutzer einen Callback dafür registriert, wird dieser Parameterwert ignoriert und es werden keine Einträge ausgegeben. |
lpAlgorithm |
Der Algorithmus zum Lösen eines linearen Programms. Wenn LP_ALGORITHM_UNSPECIFIED festgelegt ist, verwende den Standardalgorithmus des Solver. Für Probleme, die keine linearen Programme sind, bei denen die lineare Programmierung jedoch eine Subroutine ist, kann dieser Wert von Matherechnern verwendet werden. Beispiel: MIP-Slöser verwenden diese Option in der Regel nur für die Root-LP-Lösung (und ansonsten Dual-Simplex). |
presolve |
Versuche, das Problem zu vereinfachen, bevor du den Hauptalgorithmus startest, bzw. den Standard-Anstrengungsgrad des Solver, falls dieser Wert EMPHASIS_UNSPECIFIED ist. |
cuts |
Bemühungen um eine stärkere Entspannung der LP (nur MIP) oder das Standard-Anstrengungsniveau des Solver, wenn EMPHASIS_UNSPECIFIED. HINWEIS: Wenn du Schnitte deaktivierst, können bei Callbacks möglicherweise keine Schnitte bei MIP_NODE hinzugefügt werden. Dieses Verhalten ist löserspezifisch. |
heuristics |
Aufwand bei der Suche nach praktikablen Lösungen, die über die bei der vollständigen Suche gefundenen Lösungen (nur MIP) hinausgehen, oder der Standard-Makler-Anstrengungsgrad, falls EMPHASIS_UNSPECIFIED. |
scaling |
Aufwand bei der Neuskalierung des Problems, um die numerische Stabilität zu verbessern, oder das Standard-Anstrengungsniveau des Solver, falls EMPHASIS_UNSPECIFIED. |
iterationLimit |
Grenzen der Iterationen des zugrunde liegenden Algorithmus (z. B. Simplex-Pivots) Das spezifische Verhalten hängt vom verwendeten Solver und Algorithmus ab, kann aber oft zu einem deterministischen Lösungslimit führen. Möglicherweise ist eine weitere Konfiguration erforderlich, z. B. ein Thread. Wird normalerweise von LP-, QP- und MIP-Slösern unterstützt, für MIP-Löser siehe auch nodeLimit. |
nodeLimit |
Begrenzung der Anzahl von Teilproblemen, die bei der enumerativen Suche gelöst werden (z.B. Verzweigung und gebunden). Bei vielen Solvern kann dies verwendet werden, um die Berechnung deterministisch einzuschränken. Eventuell ist eine weitere Konfiguration erforderlich, z. B. ein Thread. Normalerweise für MIP-Löser siehe auch iterationLimit. |
cutoffLimit |
Der Matherechner stoppt früher, wenn er beweisen kann, dass es keine ursprünglichen Lösungen gibt, die mindestens so gut sind wie die Abweichung. Bei einem vorzeitigen Stopp gibt der Solver den Beendigungsgrund NO_SOLUTION_FOUND und mit dem Limit CUTOFF zurück und muss keine zusätzlichen Lösungsinformationen angeben. Hat keine Auswirkungen auf den Rückgabewert, wenn es keinen vorzeitigen Stopp gibt. Sie sollten einen Toleranzwert verwenden, wenn Lösungen zurückgegeben werden sollen, deren Ziel genau dem Grenzwert entspricht. Weitere Einzelheiten und einen Vergleich mit bestBoundLimit finden Sie im Nutzerhandbuch. |
objectiveLimit |
Der Matherechner stoppt früher, sobald eine mindestens so gute Lösung gefunden wurde. Der Grund für die Beendigung ist MÖGLICH und das ZIEL EIN begrenzt. |
bestBoundLimit |
Der Matherechner stoppt früher, sobald er die beste Grenze mindestens so gut hat. Der Grund für die Beendigung ist FEASIBLE oder NO_SOLUTION_FOUND und der Grenzwert OBJECTIVE. Weitere Einzelheiten und einen Vergleich mit „cutoffLimit“ finden Sie im Nutzerhandbuch. |
solutionLimit |
Der Matherechner stoppt früher, nachdem er so viele durchführbare Lösungen gefunden hat, mit dem Beendigungsgrund MÖGLICH und schränkt LÖSUNG ein. Muss größer als null sein, wenn festgelegt. Sie wird oft verwendet, um den Matherechner bei der ersten praktikablen Lösung abzubrechen. Beachten Sie, dass es keine Garantie für den Zielwert der zurückgegebenen Lösungen gibt. Solver geben normalerweise nicht mehr Lösungen als das Lösungslimit zurück, aber dies wird von MathOpt nicht durchgesetzt, siehe auch b/214041169. Wird derzeit für Gurobi und SCIP und für CP-SAT nur mit dem Wert 1 unterstützt. |
threads |
Wenn festgelegt, muss der Wert größer oder gleich 1 sein. |
randomSeed |
Seed für den Pseudozufallszahlengenerator im zugrunde liegenden Rechner Beachte, dass alle Matherechner Pseudozufallszahlen verwenden, um Dinge wie Störungen im LP-Algorithmus, für Tie-Break-Up-Regeln und für heuristische Korrekturen auszuwählen. Die Abweichung kann einen spürbaren Einfluss auf das Verhalten des Matherechners haben. Alle Solver haben ein sogenanntes „Seeds“-Konzept. Beachte jedoch, dass gültige Werte vom tatsächlichen Solver abhängig sind. - Gurobi: [0:GRB_MAXINT] (ab Gurobi 9.0 ist 2x10^9). - GSCIP: [0:2147483647] (entspricht MAX_INT oder kint32max oder 2^31-1). - GLOP: [0:2147483647] (wie oben) In allen Fällen erhält der Solver einen Wert gleich: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, randomSeed)). |
absoluteGapTolerance |
Eine absolute Optimitätstoleranz (hauptsächlich) für MIP-Löser. Der absolute GAP ist der absolute Wert der Differenz zwischen: * dem Zielwert der gefundenen am besten geeigneten Lösung und * der durch die Suche erzeugten Doppelgrenze. Der Solver kann angehalten werden, wenn der absolute GAP höchstens die absoluteGapTolerance hat (falls festgelegt) und TERMINATION_REASON_OPTIMAL zurückgeben. Muss >= 0 sein, falls festgelegt. Siehe auch relativeGapTolerance. |
relativeGapTolerance |
Eine relative Optimitätstoleranz (hauptsächlich) für MIP-Löser. Der relative GAP ist eine normalisierte Version des absoluten GAP (definiert auf absoluteGapTolerance), wobei die Normalisierung löserabhängig ist, z.B. den absoluten GAP geteilt durch den Zielwert der am besten geeigneten Lösung. Der Solver kann angehalten werden, wenn die relative GAP höchstens eine relative GapTolerance ist (falls festgelegt) und TERMINATION_REASON_OPTIMAL zurückgeben. Muss >= 0 sein, falls festgelegt. Siehe auch absoluteGapTolerance. |
solutionPoolSize |
Bis zu |
LPAlgorithmProto
Wählt einen Algorithmus zum Lösen linearer Programme aus.
Enums | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
Die (ursprüngliche) Simplex-Methode. In der Regel kann eine Grund- und Doppellösung, die Urzeitstrahlen bei einer ungebundenen Urzeit und zwei unbegrenzte Probleme und eine Basis bereitgestellt werden. |
LP_ALGORITHM_DUAL_SIMPLEX |
Die Dual-Simplex-Methode. In der Regel kann eine Grund- und Doppellösung, die Urzeitstrahlen bei einer ungebundenen Urzeit und zwei unbegrenzte Probleme und eine Basis bereitgestellt werden. |
LP_ALGORITHM_BARRIER |
Die Barrieremethode, auch IPM (Inner Point Method) genannt. Kann in der Regel sowohl eine Grundlösung als auch eine doppelte Lösung liefern. Einige Implementierungen können auch Strahlen für unbegrenzte/nicht durchführbare Probleme erzeugen. Eine Basis wird nur angegeben, wenn der zugrunde liegende Solver einen Crossover durchführt. und endet mit „simplex“. |
LP_ALGORITHM_FIRST_ORDER |
Algorithmus, der auf einer Methode erster Ordnung basiert. Diese führen typischerweise sowohl zu ursprünglichen als auch zu doppelten Lösungen und möglicherweise auch zu Bescheinigungen der ursprünglichen und/oder doppelten Undurchführbarkeit. Erstrangige Methoden bieten in der Regel Lösungen mit einer geringeren Genauigkeit. Daher sollten Nutzende darauf achten, Parameter für die Lösungsqualität (z. B. Toleranzen) festzulegen und Lösungen zu validieren. |
EmphasisProto
Anstrengungsgrad, der auf eine optionale Aufgabe beim Lösen angewendet wird (siehe Verwendung von SolveParametersProto).
„Hervorhebung“ wird verwendet, um eine Solver-Funktion wie folgt zu konfigurieren: * Wenn ein Matherechner diese Funktion nicht unterstützt, ist nur UNSPECIFIED immer gültig. Jede andere Einstellung führt in der Regel zu einem Fehler aufgrund eines ungültigen Arguments. Einige Solverner akzeptieren möglicherweise auch „AUS“. * Wenn der Matherechner diese Funktion unterstützt: – Wenn die Richtlinie auf UNSPECIFIED gesetzt ist, wird der zugrunde liegende Standardwert verwendet. - Wenn die Funktion nicht deaktiviert werden kann, gibt die Option AUS einen Fehler zurück. – Wenn die Funktion standardmäßig aktiviert ist, wird der Rechner als Standardeinstellung in der Regel MEDIUM zugewiesen. - Wenn die Funktion unterstützt wird, geben LOW, MEDIUM, HIGH und VERY HIGH keinen Fehler zurück und die Zuordnung erfolgt entsprechend der besten Übereinstimmung.
Enums | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
ModelSolveParametersProto
JSON-Darstellung |
---|
{ "variableValuesFilter": { object ( |
Felder | |
---|---|
variableValuesFilter |
Filter, der auf alle zurückgegebenen dünnbesetzten Container angewendet wird, die nach Variablen in PrimalSolutionProto und PrimalRayProto codiert sind (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values). Anforderungen: * filterIds sind Elemente von VariablesProto.ids. |
dualValuesFilter |
Filter, der auf alle zurückgegebenen dünnbesetzten Container angewendet wird, die durch lineare Einschränkungen in DualSolutionProto und DualRay (DualSolutionProto.dual_values, DualRay.dual_values) codiert sind. Anforderungen: * filterIds sind Elemente von LinearConstraints.ids. |
reducedCostsFilter |
Filter, der auf alle zurückgegebenen dünnbesetzten Container angewendet wird, die durch Variablen in DualSolutionProto und DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs) codiert sind. Anforderungen: * filterIds sind Elemente von VariablesProto.ids. |
initialBasis |
Optionale Ausgangsbasis für einfache LP-Löser mit Warmstartfunktion. Wenn es festgelegt ist, wird es gemäß |
solutionHints[] |
Optionale Lösungshinweise. Wenn der zugrunde liegende Solver nur einen einzigen Hinweis akzeptiert, wird der erste verwendet. |
branchingPriorities |
Optionale Verzweigungsprioritäten. Variablen mit höheren Werten werden zuerst verzweigt. Variablen, für die keine Prioritäten festgelegt sind, erhalten die Standardpriorität des Solver (normalerweise null). Anforderungen: * BranchingPriorities.values müssen endlich sein. * BranchingPriorities.ids muss Elemente von VariablesProto.ids sein. |
SparseVectorFilterProto
Mit dieser Nachricht können bestimmte Teile von SparseXxxxVector abgefragt/festgelegt werden. Standardmäßig wird nichts herausgefiltert. Häufig werden nur Teile von Lösungen abgefragt (nur Werte ungleich null und/oder nur ein handverlesener Satz von Variablenwerten).
JSON-Darstellung |
---|
{ "skipZeroValues": boolean, "filterByIds": boolean, "filteredIds": [ string ] } |
Felder | |
---|---|
skipZeroValues |
Für SparseBoolVectorProto „zero“ ist |
filterByIds |
Bei "true" werden nur die Werte zurückgegeben, die den IDs entsprechen, die unter "filterIds" aufgelistet sind. |
filteredIds[] |
Die Liste der IDs, die verwendet werden sollen, wenn filterByIds wahr ist. Muss leer sein, wenn filterByIds auf "false" gesetzt ist. HINWEIS: Wenn das Feld leer ist und filterByIds auf "true" gesetzt ist, geben Sie an, dass keine Informationen im Ergebnis enthalten sein sollen. |
BasisProto
Eine kombinatorische Charakterisierung für eine Lösung für ein lineares Programm.
Die Simplex-Methode zum Lösen linearer Programme gibt immer eine „grundlegende praktikable Lösung“ zurück. die durch eine Basis kombinatorisch beschrieben werden können. Eine Basis weist jeder Variablen und linearen Einschränkung ein BasisStatusProto zu.
Beispiel: eine Standardform von LP: min c * x s.t. A * x = b x >= 0, die mehr Variablen als Einschränkungen und mit dem vollständigen Zeilenrang A hat.
Lass n die Anzahl der Variablen und m die Anzahl der linearen Einschränkungen sein. Eine gültige Grundlage für dieses Problem kann folgendermaßen erstellt werden: * Alle Einschränkungen haben den Basisstatus FIXED. * Wählen Sie m Variablen so aus, dass die Spalten von A linear unabhängig sind, und weisen Sie ihnen den Status BASIC zu. * Weisen Sie den verbleibenden n bis m Variablen den Status AT_LOWER zu.
Die grundlegende Lösung für diese Basis ist die eindeutige Lösung von A * x = b, bei der alle Variablen mit dem Status AT_LOWER auf ihre Untergrenze festgelegt sind (alle Nullen). Die resultierende Lösung wird als einfache durchführbare Lösung bezeichnet, wenn sie auch x >= 0 erfüllt.
JSON-Darstellung |
---|
{ "constraintStatus": { object ( |
Felder | |
---|---|
constraintStatus |
Einschränkungsbasisstatus. Anforderungen: * constrainStatus.ids ist gleich LinearConstraints.ids. |
variableStatus |
Variablenbasisstatus. Anforderungen: * ConstraintStatus.ids entspricht VariablesProto.ids. |
basicDualFeasibility |
Dies ist eine erweiterte Funktion, die von MathOpt verwendet wird, um die Machbarkeit suboptimaler LP-Lösungen zu bestimmen. Optimale Lösungen haben immer den Status SOLUTION_STATUS_FEASIBLE. Bei einseitigen LPs sollte der Wert dem Machbarkeitsstatus der zugehörigen doppelten Lösung entsprechen. Bei zweiseitigen LPs kann dies in einigen Grenzfällen abweichen (z.B. bei unvollständigen Lösungen mit dem Ur-Simplex). Wenn Sie über ModelSolveParametersProto.initial_basis eine Ausgangsbasis angeben, wird dieser Wert ignoriert. Sie ist nur für die von SolutionProto.basis zurückgegebene Basis relevant. |
SparseBasisStatusVector
Eine dünnbesetzte Darstellung eines Vektors von Basisstatus.
JSON-Darstellung |
---|
{
"ids": [
string
],
"values": [
enum ( |
Felder | |
---|---|
ids[] |
Muss mit unterschiedlichen Elementen sortiert werden (in aufsteigender Reihenfolge). |
values[] |
Muss dieselbe Länge wie IDs haben. |
BasisStatusProto
Status einer Variable/Einschränkung auf LP-Basis.
Enums | |
---|---|
BASIS_STATUS_UNSPECIFIED |
Guard-Wert, der keinen Status darstellt. |
BASIS_STATUS_FREE |
Die Variable/Einschränkung ist kostenlos (sie hat keine endlichen Grenzen). |
BASIS_STATUS_AT_LOWER_BOUND |
Die Variable/Einschränkung befindet sich an ihrer Untergrenze (diese muss endlich sein). |
BASIS_STATUS_AT_UPPER_BOUND |
Die Variable/Einschränkung befindet sich an ihrer Obergrenze (die endlich sein muss). |
BASIS_STATUS_FIXED_VALUE |
Die Variable bzw. die Einschränkung hat identische endliche Unter- und Obergrenzen. |
BASIS_STATUS_BASIC |
Die Variable/Einschränkung ist einfach. |
SolutionStatusProto
Durchführbarkeit einer ursprünglichen oder doppelten Lösung, wie vom Rechner vorgegeben.
Enums | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Guard-Wert, der keinen Status darstellt. |
SOLUTION_STATUS_UNDETERMINED |
Der Solver fordert keinen Machbarkeitsstatus an. |
SOLUTION_STATUS_FEASIBLE |
Der Soldaten behauptet, die Lösung sei durchführbar. |
SOLUTION_STATUS_INFEASIBLE |
Der Soldaten behauptet, die Lösung sei nicht durchführbar. |
SolutionHintProto
Ein Vorschlag für eine Startlösung für den Matherechner.
MIP-Löser wollen in der Regel nur grundlegende Informationen (variableValues
), während LP-Löser sowohl Ausgangs- als auch Doppelinformationen wünschen (dualValues
).
Viele MIP-Löser können mit (1) Teillösungen arbeiten, die nicht alle Variablen angeben, oder (2) mit nicht durchführbaren Lösungen. In diesen Fällen lösen Solver in der Regel eine untergeordnete MIP, um den Hinweis zu vervollständigen/korrigieren.
Wie der Hinweis vom Matherechner oder überhaupt verwendet wird, hängt stark vom jeweiligen Solver, vom Problemtyp und vom verwendeten Algorithmus ab. Die zuverlässigste Methode, um sicherzustellen, dass dein Hinweis eine Wirkung hat, besteht darin, die zugrunde liegenden Solver-Logs mit und ohne Hinweis zu lesen.
Simplex-basierte LP-Löser bevorzugen in der Regel eine Anfangsgrundlage für einen Lösungshinweis. Andernfalls müssen sie wechseln, um den Hinweis in eine durchführbare Basislösung umzuwandeln.
JSON-Darstellung |
---|
{ "variableValues": { object ( |
Felder | |
---|---|
variableValues |
Eine möglicherweise teilweise Zuweisung von Werten zu den ursprünglichen Variablen des Problems. Die Solver-unabhängigen Anforderungen für diese Untermeldung sind: * „variableValues.ids“ sind Elemente von „VariablesProto.ids“. * VariableValues.values müssen alle endlich sein. |
dualValues |
Eine (möglicherweise teilweise) Zuweisung von Werten zu den linearen Einschränkungen des Problems. Anforderungen: * duValues.ids sind Elemente von „LinearConstraintsProto.ids“. * DualValues.values müssen alle endlich sein. |
SparseInt32VectorProto
Eine dünnbesetzte Darstellung eines Ganzzahlenvektors.
JSON-Darstellung |
---|
{ "ids": [ string ], "values": [ integer ] } |
Felder | |
---|---|
ids[] |
Sollte mit unterschiedlichen Elementen sortiert werden (in aufsteigender Reihenfolge). |
values[] |
Muss dieselbe Länge wie IDs haben. |
SolveResultProto
Der Vertrag darüber, wann die Urzeitlösungen bzw. die Strahlen komplex sind; eine vollständige Beschreibung findest du in „termination_reasons.md“.
Bis ein genauer Vertrag abgeschlossen ist, ist es am sichersten, einfach nur zu prüfen, ob eine Lösung/ein verfügbares Projekt vorhanden ist, anstatt sich auf den Kündigungsgrund zu verlassen.
JSON-Darstellung |
---|
{ "termination": { object ( |
Felder | |
---|---|
termination |
Der Grund für die Beendigung des Solver. |
solutions[] |
Der allgemeine Vertrag für die Reihenfolge der Lösungen, die zukünftige Rechner implementieren sollten, sieht folgendermaßen vor: 1. Die Lösungen mit einer ursprünglichen durchführbaren Lösung, sortiert nach dem besten ursprünglichen Ziel zuerst. 2. Die Lösungen mit einer doppelt durchführbaren Lösung, geordnet nach dem besten Dual Ziel (unbekanntes doppeltes Ziel ist am schlechtesten) 3. Alle verbleibenden Lösungen können in beliebiger Reihenfolge zurückgegeben werden. |
primalRays[] |
Anweisungen für eine unbegrenzte ursprüngliche Verbesserung oder äquivalente Zertifikate für die doppelte Undurchführbarkeit. In der Regel bereitgestellt für TerminationReasonProtos UNBOUNDED und DUAL_INFEASIBLE |
dualRays[] |
Anweisungen für unbegrenzte doppelte Verbesserung oder gleichwertige Zertifikate für die Undurchführbarkeit. Wird in der Regel bereitgestellt, weil der Grund für die Kündigung nicht durchsetzbar ist. |
solveStats |
Statistiken zum Lösungsprozess, z.B. Laufzeit, Iterationen. |
TerminationProto
Alle Informationen darüber, warum ein Aufruf von Solve() beendet wurde.
JSON-Darstellung |
---|
{ "reason": enum ( |
Felder | |
---|---|
reason |
Zusätzliche Informationen in |
limit |
Ist LIMIT_UNSPECIFIED, es sei denn, der Grund ist TERMINATION_REASON_FEASIBLE oder TERMINATION_REASON_NO_SOLUTION_FOUND. Nicht alle Matherechner können immer das Limit bestimmen, das zur Beendigung geführt hat. LIMIT_UNDETERMINED wird verwendet, wenn die Ursache nicht ermittelt werden kann. |
detail |
Zusätzliche, in der Regel Solver-spezifische Informationen zur Kündigung. |
problemStatus |
Durchführbarkeitsstatus für ursprüngliche und doppelte Probleme. Seit dem 18. Juli 2023 fehlt diese Meldung möglicherweise. Wenn „problemStatus“ fehlt, finden Sie den Status in „SolveResultProto.solve_stats“. |
objectiveBounds |
Grenzen für den optimalen Zielwert. Seit dem 18. Juli 2023 fehlt diese Meldung möglicherweise. Wenn es fehlt, finden Sie „targetBounds.primal_bound“ in „SolveResultProto.solve.stats.best_primal_bound“ und das Feld „objectBounds.dual_bound“ in „SolveResultProto.solve.stats.best_dual_bound“. |
TerminationReasonProto
Der Grund, aus dem ein Aufruf von Solve() endet.
Enums | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
Es wurde eine nachweislich optimale Lösung (bis zu numerischen Toleranzen) gefunden. |
TERMINATION_REASON_INFEASIBLE |
Für das ursprüngliche Problem gibt es keine durchführbaren Lösungen. |
TERMINATION_REASON_UNBOUNDED |
Das Urproblem ist durchführbar und willkürlich gute Lösungen finden sich neben einer Urstrahlen. |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
Das ursprüngliche Problem ist entweder unmöglich oder unbegrenzt. Weitere Details zum Problemstatus findest du möglicherweise unter „solveStats.problem_status“. Beachten Sie, dass Gurobis Status "unbegrenzt" hier dargestellt werden kann. |
TERMINATION_REASON_IMPRECISE |
Das Problem wurde anhand eines der oben genannten Kriterien gelöst (Optimal, Infeasible, Unlimited oder InfeasibleOrUnbounded), aber mindestens eine Toleranz wurde nicht erfüllt. Einige Ur-/Dual-Lösungen/Strahlen sind vorhanden, aber entweder sind sie etwas unmöglich, oder (wenn das Problem fast optimal war), besteht möglicherweise eine Lücke zwischen dem besten Lösungsziel und der besten Zielgrenze. Benutzer können weiterhin Ur-/Duallösungen/Strahlen und Lösungsstatistiken abfragen, sind jedoch für den Umgang mit der numerischen Ungenauigkeit verantwortlich. |
TERMINATION_REASON_FEASIBLE |
Die Optimierung hat einen bestimmten Grenzwert erreicht und eine durchführbare Grundlösung wird zurückgegeben. Eine detaillierte Beschreibung der Art des erreichten Limits finden Sie unter SolveResultProto.limit_detail. |
TERMINATION_REASON_NO_SOLUTION_FOUND |
Das Optimierungstool hat eine gewisse Grenze erreicht und keine praktikable Lösung gefunden. Eine detaillierte Beschreibung der Art des erreichten Limits finden Sie unter SolveResultProto.limit_detail. |
TERMINATION_REASON_NUMERICAL_ERROR |
Der Algorithmus wurde angehalten, weil ein nicht behebbarer numerischer Fehler aufgetreten ist. Es sind keine Lösungsinformationen verfügbar. |
TERMINATION_REASON_OTHER_ERROR |
Der Algorithmus wurde aufgrund eines Fehlers angehalten, der nicht durch einen der oben definierten Status abgedeckt ist. Es sind keine Lösungsinformationen verfügbar. |
LimitProto
Wenn eine Solve()-Anweisung vorzeitig mit TerminationReasonProto FEASIBLE oder NO_SOLUTION_FOUND gestoppt wird, entspricht dies dem spezifischen Limit, das erreicht wurde.
Enums | |
---|---|
LIMIT_UNSPECIFIED |
Wird als Nullwert verwendet, wenn das Konto nicht unter einem Limit gekündigt wurde (z.B. TERMINATION_REASON_OPTIMAL). |
LIMIT_UNDETERMINED |
Der zugrunde liegende Rechner zeigt nicht an, welches Limit erreicht wurde. |
LIMIT_ITERATION |
Ein iterativer Algorithmus wird nach der maximalen Anzahl von Iterationen gestoppt (z.B. Simplex- oder Barrier-Iterationen). |
LIMIT_TIME |
Der Algorithmus wurde nach einer vom Nutzer angegebenen Rechenzeit angehalten. |
LIMIT_NODE |
Ein Branch-and-bound-Algorithmus wurde gestoppt, weil er eine maximale Anzahl von Knoten in dem Baum mit Verzweigungen und gebundenen Knoten untersucht hat. |
LIMIT_SOLUTION |
Der Algorithmus wurde angehalten, weil die erforderliche Anzahl von Lösungen gefunden wurde. Dies wird oft bei MIPs verwendet, damit der Matherechner die erste mögliche Lösung liefert, auf die er stößt. |
LIMIT_MEMORY |
Der Algorithmus wurde angehalten, weil nicht genügend Arbeitsspeicher vorhanden war. |
LIMIT_CUTOFF |
Der Solver wurde mit einem Grenzwert für das Ziel ausgeführt (z.B. wurde „SolveParameters.cutoff_limit“ festgelegt), was darauf hindeutete, dass der Nutzer keine Lösung wünschte, die schlechter als der Grenzwert war, und er kam zu dem Schluss, dass es keine Lösungen gab, die mindestens so gut waren wie der Grenzwert. Normalerweise werden keine weiteren Lösungsinformationen bereitgestellt. |
LIMIT_OBJECTIVE |
Der Algorithmus wurde angehalten, weil er entweder eine Lösung gefunden oder eine Grenze gefunden hat, die besser als ein vom Nutzer festgelegtes Limit ist (siehe SolveParameters.objective_limit und SolveParameters.best_bound_limit). |
LIMIT_NORM |
Der Algorithmus wurde gestoppt, weil die Norm einer Iteration zu groß wurde. |
LIMIT_INTERRUPTED |
Der Algorithmus wurde aufgrund eines Unterbrechungssignals oder einer Nutzerunterbrechungsanfrage angehalten. |
LIMIT_SLOW_PROGRESS |
Der Algorithmus wurde angehalten, weil er keine weiteren Schritte zur Lösung machen konnte. |
LIMIT_OTHER |
Der Algorithmus wurde aufgrund eines Limits gestoppt, das von keinem der oben genannten Punkte abgedeckt wird. LIMIT_UNDETERMINED wird verwendet, wenn der Grund nicht ermittelt werden kann, und LIMIT_OTHER wird verwendet, wenn der Grund bekannt ist, aber keiner der oben genannten Alternativen entspricht. Unter TerminationProto.detail finden Sie möglicherweise weitere Informationen zum Limit. |
ProblemStatusProto
Machbarkeitsstatus des ursprünglichen Problems und seines Dual-Codes (oder des Dual-Codes einer kontinuierlichen Entspannung), wie vom Löser gefordert. Der Solver muss kein Zertifikat für den Anspruch zurückgeben. So kann er z. B. angeben, dass er zuerst durchführbar ist, ohne dass er eine „ursprüngliche Lösung“ zurückgibt. Dieser kombinierte Status bietet eine umfassende Beschreibung der Aussagen eines Rechners über die Machbarkeit und die Unbegrenztheit des gelösten Problems. Beispiel:
- Ein realisierbarer Status für ursprüngliche und doppelte Probleme zeigt an, dass die ursprüngliche machbar und begrenzt ist und wahrscheinlich eine optimale Lösung hat (garantiert für Probleme ohne nicht lineare Einschränkungen).
- ein ursprünglicher und ein zweifach nicht durchführbarer Status weist darauf hin, dass das ursprüngliche Problem unbegrenzt ist (d.h. es hat beliebig gute Lösungen).
Beachten Sie, dass ein doppelter nicht durchführbarer Status allein (d.h. zusammen mit einem unbestimmten ursprünglichen Status) nicht bedeutet, dass das ursprüngliche Problem unbegrenzt ist, da beide Probleme unmöglich sein könnten. Auch wenn ein ursprünglicher und doppelt durchführbarer Status das Vorhandensein einer optimalen Lösung andeuten kann, ist dies keine Garantie dafür, dass der Matherechner tatsächlich diese optimale Lösung gefunden hat.
JSON-Darstellung |
---|
{ "primalStatus": enum ( |
Felder | |
---|---|
primalStatus |
Status für das ursprüngliche Problem. |
dualStatus |
Status für das doppelte Problem (oder für das Dual einer kontinuierlichen Lockerung). |
primalOrDualInfeasible |
Falls wahr, behauptet der Rechner, dass das ursprüngliche oder doppelte Problem nicht durchführbar ist. Er weiß aber nicht, welche oder ob beides nicht möglich ist. Kann nur wahr sein, wenn primal_problem_status = Dual_problem_status = kUnbestimmt. Diese zusätzlichen Informationen werden häufig benötigt, wenn die Vorverarbeitung feststellt, dass es keine optimale Lösung für das Problem gibt (aber nicht feststellen kann, ob dies auf die Undurchführbarkeit, die Unbegrenztheit oder beides zurückzuführen ist). |
FeasibilityStatusProto
Status der Machbarkeit des Problems, wie vom Löser gefordert (der Löser muss kein Zertifikat für den Anspruch zurückgeben).
Enums | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
Guard-Wert, der keinen Status darstellt. |
FEASIBILITY_STATUS_UNDETERMINED |
Solver beansprucht keinen Status. |
FEASIBILITY_STATUS_FEASIBLE |
Der Soldaten behauptet, das Problem sei machbar. |
FEASIBILITY_STATUS_INFEASIBLE |
Der Soldaten behauptet, das Problem sei unmöglich. |
ObjectiveBoundsProto
Grenzen für den optimalen Zielwert.
JSON-Darstellung |
---|
{ "primalBound": number, "dualBound": number } |
Felder | |
---|---|
primalBound |
Solver behauptet, dass der optimale Wert gleich oder besser ist (kleiner für die Minimierung und größer für die Maximierung) als „initialBound“ bis zur ursprünglichen Machbarkeitstoleranz des Matherechners (siehe Warnung unten): * „PrimealBound“ ist trivial (+inf für Minimierung und -inf-Maximierung), wenn der Solver nicht behauptet, eine solche Grenze zu haben. * „PrimealBound“ kann dem optimalen Wert näher sein als das Ziel der besten praktikablen Lösung. Im Besonderen kann primalBound selbst dann nicht trivial sein, wenn keine ursprünglichen durchführbaren Lösungen zurückgegeben werden. Warnung: Die genaue Behauptung besagt, dass es eine Grundlösung gibt, die: * numerisch realisierbar ist (d.h. bis zur Solver-Toleranz umsetzbar ist) und * einen objektiven Wert hat, primalBound. Diese numerisch durchführbare Lösung könnte leicht in Umsetzbarkeit sein, in diesem Fall könnte der Wert „primaryBound“ strikt besser als der optimale Wert sein. Die Übersetzung einer ursprünglichen Machbarkeitstoleranz in eine Toleranz für „PrimarBound“ ist nicht trivial, insbesondere wenn die Machbarkeitstoleranz relativ groß ist (z.B. bei der Lösung mit PDLP). |
dualBound |
Solver behauptet, dass der optimale Wert gleich oder schlechter ist (größer für die Minimierung und kleiner für die Maximierung) als „DualBound“ für die doppelte Machbarkeitstoleranz des Matherechners (siehe Warnung unten): * DualBound ist trivial (-inf für Minimierung und +inf-Maximierung), wenn der Solver nicht behauptet, eine solche Grenze zu haben. Ähnlich wie bei primalBound kann dies bei einigen Rechnern passieren, auch wenn das Optimum zurückgegeben wird. MIP-Löser melden in der Regel eine Grenze, auch wenn diese ungenau ist. * Bei fortlaufenden Problemen kann „dualeBound“ dem optimalen Wert näher kommen als das Ziel der jeweils besten machbaren Lösung. Für MIP ist einer der ersten nicht-trivialen Werte für DualBound oft der optimale Wert für die LP-Lockerung des MIP. * DualBound sollte bis zu den Solver-Toleranzen besser sein (kleiner für die Minimierung und größer für die Maximierung) als primalBound (siehe Warnung unten). Warnung: * Bei anhaltenden Problemen lautet die genaue Behauptung, dass es eine doppelte Lösung gibt, die: * numerisch realisierbar ist (d.h. bis zur Solvertoleranz umsetzbar ist) und * einen Zielwert „DualBound“ hat. Diese numerisch durchführbare Lösung könnte leicht in Umsetzbarkeit sein. In diesem Fall könnte „dualeBound“ schlechter als der optimale Wert und „PrimealBound“ sein. Ähnlich wie beim Primärfall ist die Übersetzung einer doppelten Machbarkeitstoleranz in eine Toleranz für dualBound nicht trivial, insbesondere wenn die Machbarkeitstoleranz relativ groß ist. Einige Matherechner bieten jedoch eine korrigierte Version von dualBound, die numerisch sicherer sein kann. Diese korrigierte Version kann über die spezifische Ausgabe des Matherechners aufgerufen werden (z.B. für PDLP, pdlp_output.convergence_information.Corrected_dual_objective). * Für MIP-Löser kann „DualBound“ mit einer Doppellösung für eine kontinuierliche Entspannung verbunden sein (z.B. LP-Lockerung), aber dies ist oft eine komplexe Folge der Ausführung des Solver und ist in der Regel ungenauer als die von LP-Lösern gemeldeten Grenzen. |
SolutionProto
Was in einer Lösung enthalten ist, hängt von der Art des Problems und dem Löser ab. Die derzeit gängigen Muster sind 1. MIP-Lösen geben nur eine Grundlösung zurück. 2. Simplex-LP-Löser geben häufig eine Basis und die mit ihr verknüpften ursprünglichen und doppelten Lösungen zurück. 3. Andere Continuous-Löser geben oft eine Primär- und Doppellösung zurück, die in einer löserabhängigen Form miteinander verbunden sind.
Anforderungen: * Mindestens ein Feld muss festgelegt werden. Lösung darf nicht leer sein.
JSON-Darstellung |
---|
{ "primalSolution": { object ( |
Felder | |
---|---|
primalSolution |
|
dualSolution |
|
basis |
|
PrimalSolutionProto
Eine Lösung für ein Optimierungsproblem.
Beispiel: Stellen Sie sich ein einfaches lineares Programm vor: min c * x s.t. A * x >= b x >= 0. Eine Hauptlösung ist die Zuweisung von Werten zu x. Es ist realisierbar, wenn die oben genannten A * x >= b und x >= 0 erfüllt sind. In der Nachricht „PrmalSolutionProto“ unten ist „variableValues“ „x“ und „objectValue“ „c * x“.
JSON-Darstellung |
---|
{ "variableValues": { object ( |
Felder | |
---|---|
variableValues |
Anforderungen: * „variableValues.ids“ sind Elemente von „VariablesProto.ids“. * VariableValues.values müssen alle endlich sein. |
objectiveValue |
Der vom zugrunde liegende Solver. berechnete Zielwert. Darf nicht unendlich oder NaN sein. |
auxiliaryObjectiveValues |
Zusätzliche Zielwerte, die vom zugrunde liegenden Rechner berechnet werden. Schlüssel müssen gültige Hilfsziel-IDs sein. Werte dürfen nicht unendlich oder NaN sein. Ein Objekt, das eine Liste von |
feasibilityStatus |
Durchführbarkeitsstatus der Lösung gemäß dem zugrunde liegenden Solver. |
DualSolutionProto
Eine Lösung für ein Optimierungsproblem.
Beispiel: betrachten Sie das primäre Dual-Paar-Linear-Programmpaar: (Primär) (Dual) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Die doppelte Lösung ist das Paar (y, r). Es ist machbar, wenn die oben genannten Einschränkungen von (Dual) erfüllt sind.
In der folgenden Nachricht steht y für DualValues, r für reduzierte Kosten und b * y für den Zielwert.
JSON-Darstellung |
---|
{ "dualValues": { object ( |
Felder | |
---|---|
dualValues |
Anforderungen: * duValues.ids sind Elemente von „LinearConstraints.ids“. * DualValues.values müssen alle endlich sein. |
reducedCosts |
Anforderungen: * ReduceCosts.ids sind Elemente von VariablesProto.ids. * ReduceCosts.values müssen alle endlich sein. |
feasibilityStatus |
Durchführbarkeitsstatus der Lösung gemäß dem zugrunde liegenden Solver. |
objectiveValue |
|
PrimalRayProto
Richtung einer unbegrenzten Verbesserung eines Optimierungsproblems entsprechend ein Zertifikat über die Nichtdurchführbarkeit für das Dual des Optimierungsproblems.
Beispiel: Stellen Sie sich ein einfaches lineares Programm vor: min c * x s.t. A * x >= b x >= 0 Ein Urstrahl ist ein x, das Folgendes erfüllt: c * x < 0 A * x >= 0 x >= 0 Beachte, dass bei einer praktikablen Lösung jedes positive Vielfache des Primärstrahls plus dieser Lösung noch realisierbar ist und einen besseren Zielwert liefert. Eine Urstrahlen beweist außerdem, dass das Problem der doppelten Optimierung nicht umsetzbar ist.
In der Nachricht „PrmalRay“ unten hat „variableValues“ den Wert „x“.
JSON-Darstellung |
---|
{
"variableValues": {
object ( |
Felder | |
---|---|
variableValues |
Anforderungen: * „variableValues.ids“ sind Elemente von „VariablesProto.ids“. * VariableValues.values müssen alle endlich sein. |
DualRayProto
eine Richtung der unbegrenzten Verbesserung des Doppelfachs aus Optimierung, Problem; eine Bescheinigung über die ursprüngliche Undurchführbarkeit.
Beispiel: betrachten Sie das primäre Dual-Paar-Linear-Programmpaar: (Primär) (Dual) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Der doppelte Strahl ist das Paar (y, r), das folgende Kriterien erfüllt: b * y > 0 y * A + r = 0 y, r >= 0 Beachten Sie, dass durch das Hinzufügen eines positiven Vielfachen von (y, r) zur Dual-Durchführbarkeitslösung die doppelte Durchführbarkeit erhalten bleibt und das Ziel verbessert wird (beweist, dass das Dual-Prinzip unbegrenzt ist). Die Dualstrahlung beweist außerdem, dass das ursprüngliche Problem unmöglich ist.
In der unten stehenden Nachricht „DualRay“ steht y für „DualValues“ und „r“ für reduzierte Kosten.
JSON-Darstellung |
---|
{ "dualValues": { object ( |
Felder | |
---|---|
dualValues |
Anforderungen: * duValues.ids sind Elemente von „LinearConstraints.ids“. * DualValues.values müssen alle endlich sein. |
reducedCosts |
Anforderungen: * ReduceCosts.ids sind Elemente von VariablesProto.ids. * ReduceCosts.values müssen alle endlich sein. |
SolveStatsProto
JSON-Darstellung |
---|
{
"solveTime": string,
"problemStatus": {
object ( |
Felder | |
---|---|
solveTime |
Verstrichene Wanduhrzeit, gemessen von math_opt, ungefähr die Zeit in Solver::Solve(). Hinweis: Dies beinhaltet keine Arbeit am Modellerstellung. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
problemStatus |
Durchführbarkeitsstatus für ursprüngliche und doppelte Probleme. |
simplexIterations |
|
barrierIterations |
|
firstOrderIterations |
|
nodeCount |
|