Index
BasisProto
(Nachricht)BasisStatusProto
(Aufzählung)DualRayProto
(Meldung)DualSolutionProto
(Meldung)EmphasisProto
(enum)FeasibilityStatusProto
(enum)IndicatorConstraintProto
(Meldung)LPAlgorithmProto
(enum)LimitProto
(enum)LinearConstraintsProto
(Meldung)LinearExpressionProto
(Meldung)ModelProto
(Meldung)ModelSolveParametersProto
(Meldung)ObjectiveBoundsProto
(Meldung)ObjectiveProto
(Meldung)PrimalRayProto
(Meldung)PrimalSolutionProto
(Meldung)ProblemStatusProto
(Meldung)QuadraticConstraintProto
(Meldung)SecondOrderConeConstraintProto
(Meldung)SolutionHintProto
(Meldung)SolutionProto
(Meldung)SolutionStatusProto
(Aufzählung)SolveParametersProto
(Meldung)SolveResultProto
(Meldung)SolveStatsProto
(Meldung)SolverTypeProto
(Aufzählung)SosConstraintProto
(Meldung)SparseBasisStatusVector
(Meldung)SparseDoubleMatrixProto
(Meldung)SparseDoubleVectorProto
(Meldung)SparseInt32VectorProto
(Meldung)SparseVectorFilterProto
(Meldung)TerminationProto
(Meldung)TerminationReasonProto
(Aufzählung)VariablesProto
(Nachricht)
BasisProto
Eine kombinatorische Charakterisierung für eine Lösung in einem linearen Programm.
Die Simplex-Methode zum Lösen linearer Programme gibt immer eine "grundlegende durchführbare Lösung" zurück, die durch eine Basis kombinatorisch beschrieben werden kann. Eine Basis weist jeder Variablen und linearen Einschränkung einen BasisStatusProto zu.
Nehmen wir als Beispiel eine LP in Standardform: min c * x s.t. A * x = b x >= 0 mit mehr Variablen als Einschränkungen und mit vollständigem Zeilenrang A.
Lass n die Anzahl der Variablen und m die Anzahl der linearen Einschränkungen sein. Eine gültige Basis für dieses Problem kann wie folgt 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 den Status BASIC zuweisen. * Weisen Sie den verbleibenden n - m Variablen den Status AT_LOWER zu.
Die grundlegende Lösung für diese Basis ist die einzigartige Lösung A * x = b, bei der alle Variablen mit dem Status AT_LOWER an ihren unteren Grenzen (alle null) fixiert sind. Die daraus resultierende Lösung wird als einfache durchsetzbare Lösung bezeichnet, wenn sie auch die Anforderung x >= 0 erfüllt.
Felder | |
---|---|
constraint_status |
Status der Einschränkungsgrundlage. Anforderungen: * constraint_status.ids ist gleich LinearConstraints.ids. |
variable_status |
Variablenbasisstatus. Anforderungen: * constraint_status.ids ist gleich VariablesProto.ids. |
basic_dual_feasibility |
Dies ist eine erweiterte Funktion, die von MathOpt verwendet wird, um die Durchführbarkeit von suboptimalen Lösungen für die Landingpage zu charakterisieren (optimale Lösungen haben immer den Status SOLUTION_STATUS_FEASIBLE). Bei einseitigen LPs sollte dieser dem Machbarkeitsstatus der zugehörigen doppelten Lösung entsprechen. Bei zweiseitigen LPs kann es in einigen Sonderfällen abweichen (z.B. bei unvollständigen Lösungen mit einem ursprünglichen Simplex). Wenn Sie eine Ausgangsbasis über ModelSolveParametersProto.initial_basis bereitstellen, wird dieser Wert ignoriert. Sie ist nur für die von SolutionProto.basis zurückgegebene Basis relevant. |
BasisStatusProto
Status einer Variablen/Beschränkung auf LP-Basis.
Enums | |
---|---|
BASIS_STATUS_UNSPECIFIED |
Guard-Wert, der keinen Status darstellt. |
BASIS_STATUS_FREE |
Die Variable/Beschränkung ist kostenlos (sie hat keine endlichen Grenzen). |
BASIS_STATUS_AT_LOWER_BOUND |
Die Variable/Beschränkung befindet sich an der Untergrenze (die endlich sein muss). |
BASIS_STATUS_AT_UPPER_BOUND |
Die Variable/Beschränkung befindet sich an der Obergrenze (die endlich sein muss). |
BASIS_STATUS_FIXED_VALUE |
Die Variable/Beschränkung hat identische endliche Unter- und Obergrenzen. |
BASIS_STATUS_BASIC |
Die Variable/Einschränkung ist einfach. |
DualRayProto
Eine Richtung der unbegrenzten Verbesserung des Dual einer Optimierung bzw. eines Problems; entsprechend ein Zertifikat der ursprünglichen Undurchführbarkeit.
Betrachten wir zum Beispiel das lineare Programmpaar des primären Dual-Paares: (Primal) (Dual) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Der Dual-Ray-Wert ist das Paar (y, r), das die folgenden Punkte erfüllt: b * y > 0 y * A + r = 0 y, r >= 0. Beobachten Sie, dass durch das Hinzufügen eines positiven Vielfachen von (y, r) zu einer zwei durchführbaren Lösung die doppelte Machbarkeit gewährleistet ist und das Ziel verbessert wird (was beweist, dass das Dual-Ray-Prinzip unbegrenzt ist). Der Dualstrahl beweist auch, dass das Grundproblem nicht umsetzbar ist.
In der nachstehenden Nachricht „DualRay“ steht y für „Dual_values“ und „r“ für „reduzierte_Kosten“.
Felder | |
---|---|
dual_values |
Anforderungen: * Dual_values.ids sind Elemente von „LinearConstraints.ids“. * Dual_values.values müssen alle endlich sein. |
reduced_costs |
Anforderungen: *„Reduced_costs.ids“ ist Elemente von „VariablesProto.ids“. * Reduce_costs.values müssen alle endlich sein. |
DualSolutionProto
Eine Lösung für das Zweifache eines Optimierungsproblems.
Betrachten wir zum Beispiel das lineare Programmpaar des primären Dual-Paares: (Primal) (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). Dies ist machbar, wenn sie die oben genannten Einschränkungen (Dual) erfüllt.
In der folgenden Nachricht ist y dual_values, r ist reduzierte_Kosten und b * y ein Zielwert.
Felder | |
---|---|
dual_values |
Anforderungen: * Dual_values.ids sind Elemente von „LinearConstraints.ids“. * Dual_values.values müssen alle endlich sein. |
reduced_costs |
Anforderungen: *„Reduced_costs.ids“ ist Elemente von „VariablesProto.ids“. * Reduce_costs.values müssen alle endlich sein. |
feasibility_status |
Machbarkeitsstatus der Lösung entsprechend dem zugrunde liegenden Rechner. |
objective_value |
|
EmphasisProto
Der Aufwand, der beim Lösen einer optionalen Aufgabe auf eine optionale Aufgabe angewendet wird (siehe SolveParametersProto)
Mit Betonung wird eine Solver-Funktion folgendermaßen konfiguriert: * Wenn ein Matherechner die Funktion nicht unterstützt, ist nur UNSPECIFIED immer gültig. Alle anderen Einstellungen führen in der Regel zu einem Fehler wegen ungültiger Argumente (einige Solver akzeptieren möglicherweise auch AUS). * Wenn der Matherechner die Funktion unterstützt: – Wenn auf UNSPECIFIED festgelegt ist, wird der zugrunde liegende Standardwert verwendet. - Wenn die Funktion nicht deaktiviert werden kann, wird bei Verwendung von AUS ein Fehler zurückgegeben. – Wenn die Funktion standardmäßig aktiviert ist, wird der Matherechner normalerweise MITTELWERT zugeordnet. - Wenn das Element unterstützt wird, wird mit LOW, MEDIUM, HIGH und SEY HIGH kein Fehler ausgegeben und es wird die beste Übereinstimmung angezeigt.
Enums | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
FeasibilityStatusProto
Status der Machbarkeit des Problems, wie vom Löser angegeben. 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 Löser behauptet, das Problem sei machbar. |
FEASIBILITY_STATUS_INFEASIBLE |
Der Löser behauptet, das Problem sei nicht umsetzbar. |
IndicatorConstraintProto
Daten zur Darstellung einer einzelnen Indikatoreinschränkung im folgenden Format: Variable(indicator_id) = (activate_on_zero ? 0 : 1) Δ Untergrenze <= Ausdruck <= Obergrenze.
Wenn eine Variable, die an dieser Einschränkung beteiligt ist (entweder der Indikator oder in expression
erscheint), 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 leer ist, wenn activate_on_zero
falsch ist, und dass sie einer linearen Einschränkung entspricht, wenn activate_on_zero
wahr ist.
Felder | |
---|---|
activate_on_zero |
Bei „true“ und wenn 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 enthaltende Modell sein: * Alle angegebenen Bedingungen für |
lower_bound |
Muss einen Wert in [-inf, inf] enthalten; darf nicht NaN sein. |
upper_bound |
Muss einen Wert in (-inf, inf] enthalten; darf nicht NaN sein. |
name |
Für übergeordnete Nachrichten gelten möglicherweise Anforderungen an die Eindeutigkeit dieses Feldes, z.B. „ |
indicator_id |
ID, die einer Binärvariablen entspricht oder nicht festgelegt ist. Wenn die Richtlinie nicht konfiguriert ist, wird die Einschränkung des Indikators ignoriert. Wenn festgelegt, ist Folgendes erforderlich: * VariablesProto.integers[indicator_id] = true, * VariablesProto.lower_bounds[indicator_id] >= 0, * VariablesProto.upper_bounds[indicator_id] <= 1. Diese Bedingungen werden von MathOpt nicht validiert, wenn sie jedoch nicht erfüllt werden, gibt der Solver nach der Lösung einen Fehler zurück. |
LPAlgorithmProto
Wählt einen Algorithmus zur Lösung linearer Programme aus.
Enums | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
Die (primäre) Simplex-Methode. In der Regel können Primär- und Dual-Lösungen, Prima-/Dualstrahlen für primäre/doppelte unbegrenzte Probleme und eine Basis bereitgestellt werden. |
LP_ALGORITHM_DUAL_SIMPLEX |
Die Dual-Simplex-Methode. In der Regel können Primär- und Dual-Lösungen, Prima-/Dualstrahlen für primäre/doppelte unbegrenzte Probleme und eine Basis bereitgestellt werden. |
LP_ALGORITHM_BARRIER |
Die Barrieremethode, auch als Interior Point Method (IPM) bezeichnet. Kann in der Regel sowohl Primär- als auch Dual-Lösungen liefern. Einige Implementierungen können auch Strahlen bei unbegrenzten/undurchführbaren Problemen erzeugen. Eine Basis wird nur angegeben, wenn der zugrunde liegende Solver ein Crossover durchführt und mit einem Uniformat beendet wird. |
LP_ALGORITHM_FIRST_ORDER |
Algorithmus, der auf einer Methode der ersten Ordnung basiert. Mit ihnen werden in der Regel sowohl grundlegende als auch doppelte Lösungen sowie möglicherweise auch Zertifikate der ursprünglichen und/oder doppelten Durchführbarkeit erzeugt. First-Order-Methoden bieten in der Regel Lösungen mit geringerer Genauigkeit. Daher sollten Nutzer darauf achten, Parameter für die Lösungsqualität (z. B. Toleranzen) festzulegen und die Lösungen zu validieren. |
LimitProto
Wenn ein Solve() vorzeitig mit TerminationReasonProto FEASIBLE oder NO_SOLUTION_FOUND endet, ist dies der spezifische Grenzwert, der erreicht wurde.
Enums | |
---|---|
LIMIT_UNSPECIFIED |
Wird als Nullwert verwendet, wenn das Limit nicht eingehalten wurde (z.B. TERMINATION_REASON_OPTIMAL). |
LIMIT_UNDETERMINED |
Der zugrunde liegende Solver erkennt nicht, welches Limit erreicht wurde. |
LIMIT_ITERATION |
Ein iterativer Algorithmus, der nach der Durchführung der maximalen Anzahl von Iterationen beendet wurde (z.B. Simplex- oder Barriere-Iterationen). |
LIMIT_TIME |
Der Algorithmus wurde nach einer vom Nutzer angegebenen Rechenzeit beendet. |
LIMIT_NODE |
Ein Branch-and-bound-Algorithmus wurde gestoppt, da er die maximale Anzahl von Knoten im Branch-and-bound-Baum untersucht hat. |
LIMIT_SOLUTION |
Der Algorithmus wurde angehalten, weil die erforderliche Anzahl von Lösungen gefunden wurde. Dies wird häufig in MIPs verwendet, damit der Solver die erste mögliche Lösung zurückgibt, die er findet. |
LIMIT_MEMORY |
Der Algorithmus wurde beendet, weil nicht genügend Arbeitsspeicher vorhanden ist. |
LIMIT_CUTOFF |
Der Matherechner wurde mit einem Grenzwert ausgeführt (z. B. „SolveParameters.cutoff_limit“ festgelegt) für das Ziel. Dies deutete darauf hin, 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 gibt, die mindestens so gut wie der Grenzwert sind. Normalerweise werden keine weiteren Lösungsinformationen angegeben. |
LIMIT_OBJECTIVE |
Der Algorithmus wurde gestoppt, da entweder eine Lösung oder eine Grenze gefunden wurde, die über dem vom Nutzer festgelegten Grenzwert liegt (siehe SolveParameters.objective_limit und SolveParameters.best_bound_limit). |
LIMIT_NORM |
Der Algorithmus stoppte, weil die Norm einer Iteration zu groß wurde. |
LIMIT_INTERRUPTED |
Der Algorithmus wurde aufgrund eines Unterbrechungssignals oder einer Anforderung einer Nutzerunterbrechung gestoppt. |
LIMIT_SLOW_PROGRESS |
Der Algorithmus wurde angehalten, weil er nicht weiter an der Lösung arbeiten konnte. |
LIMIT_OTHER |
Der Algorithmus wurde aufgrund eines Grenzwerts angehalten, der nicht durch eine der oben genannten Optionen abgedeckt ist. Beachten Sie, dass LIMIT_UNDETERMINED verwendet wird, wenn der Grund nicht ermittelt werden kann, und LIMIT_OTHER wird verwendet, wenn der Grund bekannt ist, aber zu keiner der oben genannten Alternativen passt. TerminationProto.detail enthält möglicherweise zusätzliche Informationen zur Beschränkung. |
LinearConstraintsProto
Wie unten verwendet, definieren wir "#linearconstraints" = size(LinearConstraintsProto.ids).
Felder | |
---|---|
ids[] |
Darf nicht negativ und nur ansteigend sein. Der Wert „max(int64)“ kann nicht verwendet werden. |
lower_bounds[] |
Sollte die Länge der #linearen Einschränkungen entsprechen, Werte in [-inf, inf). |
upper_bounds[] |
Sollte die Länge der #linearen Einschränkungen entsprechen, Werte in (-inf, inf]. |
names[] |
Wenn nichts festgelegt ist, werden alle leeren Strings angenommen. Andernfalls sollte die Länge der Länge von #linearen Einschränkungen entsprechen. Alle nicht leeren Namen müssen eindeutig sein. |
LinearExpressionProto
Eine dünnbesetzte Darstellung eines linearen Ausdrucks (eine gewichtete Summe von Variablen plus einem konstanten Offset).
Felder | |
---|---|
ids[] |
IDs von Variablen. Muss (in aufsteigender Reihenfolge) sortiert werden, wobei sich alle Elemente unterscheiden müssen. |
coefficients[] |
Muss dieselbe Länge wie IDs haben. Die Werte müssen endlich sein und dürfen nicht NaN sein. |
offset |
Muss endlich sein und darf nicht NaN sein. |
ModelProto
Ein Optimierungsproblem. MathOpt unterstützt: – Kontinuierliche und ganzzahlige Entscheidungsvariablen mit optionalen endlichen Grenzen. – Lineare und quadratische Ziele (ein oder mehrere), entweder minimiert oder maximiert. - Eine Reihe von Einschränkungstypen, darunter: * Lineare Einschränkungen * Quadratische Einschränkungen * Kegeleinschränkungen zweiter Ordnung * Logische Einschränkungen > SOS1- und SOS2-Einschränkungen > Indikatoreinschränkungen
Standardmäßig werden Einschränkungen in „ID-zu-Daten“-Zuordnungen dargestellt. Lineare Einschränkungen werden jedoch in einem effizienteren "Struct-of-Arrays"-Format dargestellt.
Felder | |
---|---|
name |
|
variables |
|
objective |
Das primäre Ziel des Modells. |
auxiliary_objectives |
Zusätzliche Ziele zur Verwendung in Modellen mit mehreren Zielen. Zuordnungsschlüssel-IDs müssen in [0, max(int64)] angegeben werden. Jede Priorität und jeder nicht leere Name müssen eindeutig und auch vom primären |
linear_constraints |
|
linear_constraint_matrix |
Die variablen Koeffizienten für die linearen Einschränkungen. Wenn eine Variable, die an dieser Einschränkung beteiligt ist, gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt. Anforderungen: * linear_constraint_matrix.row_ids sind Elemente von linear_constraints.ids. * linear_constraint_matrix.column_ids sind Elemente der Variablen.ids. * Nicht angegebene Matrixeinträge sind null. * linear_constraint_matrix.values müssen alle endlich sein. |
quadratic_constraints |
Quadratische Einschränkungen im Modell. |
second_order_cone_constraints |
Kegeleinschränkungen zweier Ordnung im Modell. |
sos1_constraints |
SOS1-Einschränkungen im Modell, die einschränken, dass höchstens eine |
sos2_constraints |
SOS2-Einschränkungen im Modell, die einschränken, dass höchstens zwei Einträge von |
indicator_constraints |
Einschränkungen für Indikatoren im Modell, die dies erzwingen, wenn eine binäre „Indikatorvariable“ auf eins festgelegt ist, muss eine „implizierte Einschränkung“ gelten. |
ModelSolveParametersProto
Felder | |
---|---|
variable_values_filter |
Filter, der auf alle zurückgegebenen, dünnbesetzten Container angewendet wird, die durch Variablen in PrimalSolutionProto und PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values) verschlüsselt sind. Anforderungen: * Filter_ids sind Elemente der Variablen „VariablesProto.ids“. |
dual_values_filter |
Filter, der auf alle zurückgegebenen dünnbesetzten Container mit linearen Einschränkungen in DualSolutionProto und DualRay angewendet wird (DualSolutionProto.dual_values, DualRay.dual_values). Anforderungen: * „Filtered_ids“ sind Elemente von „LinearConstraints.ids“. |
reduced_costs_filter |
Filter, der auf alle zurückgegebenen dünnbesetzten Container angewendet wird, die durch Variablen in DualSolutionProto und DualRay (DualSolutionProto.Reduced_costs, DualRay.Reduced_costs) verschlüsselt sind. Anforderungen: * Filter_ids sind Elemente der Variablen „VariablesProto.ids“. |
initial_basis |
Optionale Ausgangsbasis für einfache LP-Löser mit Warmstartfunktion. Wenn festgelegt, muss sie laut |
solution_hints[] |
Optionale Lösungshinweise. Wenn der zugrunde liegende Solver nur einen einzelnen Hinweis akzeptiert, wird der erste Hinweis verwendet. |
branching_priorities |
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: * branching_priorities.values muss endlich sein. * branching_priorities.ids müssen Elemente von VariablesProto.ids sein. |
ObjectiveBoundsProto
Beschränkt auf den optimalen Zielwert.
Felder | |
---|---|
primal_bound |
Der Löser gibt an, dass der optimale Wert gleich oder besser (kleinerer für die Minimierung und größer für die Maximierung) als „prima_bound“ bis zur primären Machbarkeitstoleranz des Lösers ist (siehe Warnung unten): * prial_bound ist trivial (+inf für Minimierung und -inf-Maximierung), wenn der Solver nicht behauptet, eine solche Grenze zu haben. * „prial_bound“ kann näher am optimalen Wert liegen als das Ziel der besten prinzipierbaren Lösung. Insbesondere ist „prial_bound“ möglicherweise nicht trivial, auch wenn keine urprägsamen Lösungen zurückgegeben werden. Warnung: Die genaue Behauptung ist, dass es eine Grundlösung gibt, bei der Folgendes zutrifft: * ist numerisch, d.h. bis zur Toleranz des Rechners durchführbar, und * einen objektiven Wert hat: primal_bound. Diese numerisch durchsetzbare Lösung ist möglicherweise geringfügig undurchführbar, in diesem Fall könnte primal_bound besser als der optimale Wert sein. Die Übertragung einer ursprünglichen Machbarkeitstoleranz auf eine Toleranz für primal_bound ist nicht trivial, insbesondere wenn die Machbarkeitstoleranz relativ groß ist (z.B. bei Lösung mit PDLP). |
dual_bound |
Der Rechner gibt an, dass der optimale Wert gleich oder schlechter (größer für Minimierung und kleiner für Maximierung) als „dual_bound“ bis zur doppelten Machbarkeitstoleranz des Rechners ist (siehe Warnung unten): * Dual_bound ist trivial (-inf für die Minimierung und +inf-Maximierung), wenn der Rechner nicht behauptet, eine solche Grenze zu haben. Ähnlich wie bei primal_bound kann dies bei einigen Lösern vorkommen, selbst wenn die Rückgabe optimal ist. MIP-Rechner melden in der Regel Grenzen, auch wenn diese ungenau sind. * Für kontinuierliche Probleme kann „Dual_bound“ näher am optimalen Wert liegen als das Ziel der besten doppelt durchführbaren Lösung. Bei MIP ist einer der ersten nicht trivialen Werte für Dual_bound häufig der optimale Wert für die LP-Lockerung des MIP. * Dual_bound sollte besser sein (kleiner für die Minimierung und größer für die Maximierung) als primal_bound bis zu den Toleranzen des Solver (siehe Warnung unten). Warnung: * Für kontinuierliche Probleme ist die exakte Behauptung, dass es eine zweifache Lösung gibt, die: * numerisch durchführbar (d.h. bis zur Toleranz des Rechners durch Rechner durchsetzbar) und * einen objektiven Wert „Dual_bound“ hat. Diese numerisch durchsetzbare Lösung ist möglicherweise etwas nicht machbar, wobei „dual_bound“ wesentlich schlechter als der optimale Wert und „prial_bound“ sein könnte. Ähnlich wie im ursprünglichen Fall ist es nicht einfach, eine doppelte Machbarkeitstoleranz auf eine Toleranz für „Dual_bound“ zu übertragen, insbesondere wenn die Machbarkeitstoleranz relativ groß ist. Einige Rechner bieten jedoch eine korrigierte Version von Dual_bound, die numerisch sicherer sein kann. Auf diese korrigierte Version kann über die spezifische Ausgabe des Solver zugegriffen werden (z.B. für PDLP, pdlp_output.convergence_information.Corrected_dual_objective). * Bei MIP-Lösungen wird „Dual_bound“ unter Umständen zu einer Dual-Lösung für eine kontinuierliche Lockerung (z. B. LP-Lockerung) in Verbindung gebracht. Es ist jedoch oft eine komplexe Folge der Ausführung des Solver und ist in der Regel ungenauer als die von LP-Resolvern gemeldeten Grenzen. |
ObjectiveProto
Felder | |
---|---|
maximize |
„false“ bedeutet „minimieren“, „wahr“ bedeutet „maximieren“ |
offset |
Muss endlich sein und nicht NaN sein. |
linear_coefficients |
ObjectiveProto-Begriffe, die in den Entscheidungsvariablen linear sind. Anforderungen: * linear_coefficiencys.ids sind Elemente von „VariablesProto.ids“. * Nicht angegebene VariablesProto entspricht null. * linear_coeffizients.values muss alle endlich sein. * linear_coeffizients.values kann null sein, aber das verschwendet einfach Platz. |
quadratic_coefficients |
Objektive Begriffe, die in den Entscheidungsvariablen quadratisch sind. Anforderungen, zusätzlich zu denen für SparseDoubleMatrixProto-Nachrichten: * Jedes Element von quadratic_coeffizients.row_ids und jedes Element von quadratic_coeffizients.column_ids muss ein Element von VariablesProto.ids sein. * Die Matrix muss ein oberes Dreieck sein: Für jedes i gilt „quadratic_coeffizients.row_ids[i] <= quadratic_coeffizients.column_ids[i]. Hinweis: * Nicht explizit gespeicherte Begriffe haben einen Koeffizienten von 0. * Die Elemente von „quadratic_coeffizients.coeffizients“ können null sein, doch dadurch wird Platz verschwendet. |
name |
Für übergeordnete Nachrichten gelten möglicherweise Anforderungen an die Eindeutigkeit dieses Feldes. Beispiele: „ModelProto.objectives“ und „AuxiliaryObjectivesUpdatesProto.new_objectives“. |
priority |
Bei Problemen mit mehreren Zielen die Priorität dieses Ziels im Vergleich zu den anderen (niedrigere ist wichtiger). Dieser Wert darf nicht negativ sein. Außerdem muss jede objektive Priorität im Modell zum Zeitpunkt der Lösung unterschiedlich sein. Diese Bedingung wird nicht auf Proto-Ebene validiert. Daher können Modelle vorübergehend Ziele mit derselben Priorität haben. |
PrimalRayProto
Eine Richtung der unbegrenzten Verbesserung eines Optimierungsproblems; entsprechend ein Zertifikat der Undurchführbarkeit für den Dual des Optimierungsproblems.
Stellen Sie sich z. B. ein einfaches lineares Programm vor: min c * x s.t. A * x >= b x >= 0 Ein Primastrahl ist ein x, das folgende Anforderungen erfüllt: c * x < 0 A * x >= 0 x >= 0. Beachten Sie, dass bei einer praktikablen Lösung ein positives Vielfaches der Grundlösung ist. Ein Primastrahl beweist auch, dass das doppelte Optimierungsproblem nicht umsetzbar ist.
In der folgenden Nachricht PrimalRay ist „variable_values“ der Wert x.
Felder | |
---|---|
variable_values |
Anforderungen: * variable_values.ids sind Elemente von „VariablesProto.ids“. * variable_values.values müssen alle endlich sein. |
PrimalSolutionProto
Eine Lösung für ein Optimierungsproblem.
Betrachten wir beispielsweise ein einfaches lineares Programm: min c * x s.t. A * x >= b x >= 0. Eine Grundlösung besteht darin, x Werte zuzuweisen. Dies ist möglich, wenn sie den oben genannten Werten A * x >= b und x >= 0 erfüllt. In der Mitteilung PrimalSolutionProto unten ist „variable_values“ der Wert „x“ und „object_value“ durch „c * x“.
Felder | |
---|---|
variable_values |
Anforderungen: * variable_values.ids sind Elemente von „VariablesProto.ids“. * variable_values.values müssen alle endlich sein. |
objective_value |
Zielwert, wie vom zugrunde liegenden Solver berechnet. Darf nicht unendlich oder NaN sein. |
auxiliary_objective_values |
Zusätzliche Zielwerte, die vom zugrunde liegenden Solver berechnet werden. Schlüssel müssen gültige IDs des Hilfsziels sein. Werte dürfen nicht unendlich oder NaN sein. |
feasibility_status |
Machbarkeitsstatus der Lösung entsprechend dem zugrunde liegenden Rechner. |
ProblemStatusProto
Machbarkeitsstatus des ursprünglichen Problems und seines Dual (oder Dual einer kontinuierlichen Entspannung) wie vom Löser angegeben. Der Solver muss kein Zertifikat für die Behauptung zurückgeben (z.B. kann er die grundlegende Machbarkeit behaupten, ohne eine grundlegende durchsetzbare Lösung zurückzugeben). Dieser kombinierte Status liefert eine umfassende Beschreibung der Behauptungen eines Rechners bezüglich der Machbarkeit und Begrenzung des gelösten Problems. Beispiel:
- Ein Machbarkeitsstatus für Primär- und Duale Probleme zeigt an, dass das Primärbild realisierbar und begrenzt ist und wahrscheinlich eine optimale Lösung hat (garantiert für Probleme ohne nicht lineare Einschränkungen).
- ein Primäreffekt und ein Status doppelt undurchführbar bedeutet, dass das Grundproblem unbegrenzt ist (d.h. es gibt beliebig gute Lösungen).
Beachten Sie, dass ein zweifach undurchführbarer Status an sich (d.h. ein unbestimmter Grundstatus) nicht impliziert, dass das Grundproblem unbegrenzt ist, da beide Probleme undurchführbar sein könnten. Auch wenn ein primärer und zweifach durchführbarer Status die Existenz einer optimalen Lösung andeuten kann, garantiert er nicht, dass der Solver diese optimale Lösung tatsächlich gefunden hat.
Felder | |
---|---|
primal_status |
Status für das Grundproblem. |
dual_status |
Status für das duale Problem (oder das doppelte Problem einer kontinuierlichen Lockerung). |
primal_or_dual_infeasible |
Wenn dieser Wert „wahr“ ist, behauptet der Rechner, dass das grundlegende oder doppelte Problem nicht durchführbar ist, weiß aber nicht, welches (oder ob beides nicht umsetzbar 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 es an Undurchführbarkeit, Unbegrenztheit oder beidem liegt). |
QuadraticConstraintProto
Eine einzelne quadratische Einschränkung der Form: lb <= sum{linear_terms} + sum{quadratic_terms} <= ub.
Wenn eine Variable, die an dieser Einschränkung beteiligt ist, gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt.
Felder | |
---|---|
linear_terms |
Begriffe, die in den Entscheidungsvariablen linear sind. Zusätzlich zu den Anforderungen für SparseDoubleVectorProto-Nachrichten gilt Folgendes: * linear_terms.ids sind Elemente von VariablesProto.ids. * linear_terms.values müssen alle endlich und nicht-NaN sein. Hinweis: * Ausgelassene Variablen-IDs haben einen Koeffizienten von null. * linear_terms.values kann null sein, aber das verschwendet einfach Platz. |
quadratic_terms |
Begriffe, die in den Entscheidungsvariablen quadratisch sind. Zusätzlich zu den Anforderungen für SparseDoubleMatrixProto-Nachrichten verlangen wir Folgendes: * Jedes Element von „quadratic_terms.row_ids“ und jedes Element von „quadratic_terms.column_ids“ muss ein Element von „VariablesProto.ids“ sein. * Die Matrix muss das obere Dreieck sein: Für jedes i gilt „quadratic_terms.row_ids[i] <= quadratic_terms.column_ids[i]. Hinweis: * Nicht explizit gespeicherte Begriffe haben einen Koeffizienten von 0. * Die Elemente von „quadratic_terms.coeffizients“ können null sein, doch dadurch wird Platz verschwendet. |
lower_bound |
Muss einen Wert in [-inf, inf) haben und kleiner oder gleich |
upper_bound |
Muss einen Wert in (-inf, inf] haben und größer oder gleich |
name |
Für übergeordnete Nachrichten gelten möglicherweise Anforderungen an die Eindeutigkeit dieses Feldes. Siehe z. B. „ModelProto.quadratic_constraints“ und „QuadraticConstraintUpdatesProto.new_constraints“. |
SecondOrderConeConstraintProto
Eine einzelne Kegeleinschränkung zweiter Ordnung im folgenden Format:
||arguments_to_norm
||_2 <= upper_bound
,
Dabei sind upper_bound
und jedes Element von arguments_to_norm
lineare Ausdrücke.
Wenn eine Variable, die an dieser Einschränkung beteiligt ist, gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt.
Felder | |
---|---|
upper_bound |
|
arguments_to_norm[] |
|
name |
Für übergeordnete Nachrichten gelten möglicherweise Anforderungen an die Eindeutigkeit dieses Feldes, z.B. „ |
SolutionHintProto
Eine empfohlene Ausgangslösung für den Matherechner.
MIP-Rechner benötigen in der Regel nur Urinformationen (variable_values
), während LIP-Rechner sowohl primäre als auch duale Informationen (dual_values
) benötigen.
Viele MIP-Lösungen können mit (1) Teillösungen, bei denen nicht alle Variablen angegeben werden, oder (2) nicht machbaren Lösungen verwendet werden. In solchen Fällen lösen die Solver ein Sub-MIP normalerweise aus, um den Hinweis zu vervollständigen oder zu korrigieren.
Wie der Hinweis vom Solver verwendet wird, hängt, wenn überhaupt, stark vom Matherechner, vom Problemtyp und vom verwendeten Algorithmus ab. Die zuverlässigste Methode, um sicherzustellen, dass ein Hinweis einen Effekt hat, besteht darin, die zugrunde liegenden Solver-Protokolle mit und ohne Hinweis zu lesen.
Simplex-basierte LP-Resolver bevorzugen in der Regel eine Ausgangsbasis gegenüber einem Lösungshinweis. Andernfalls muss ein Crossover ausgeführt werden, um den Hinweis in eine einfach machbare Lösung umzuwandeln.
Felder | |
---|---|
variable_values |
Eine möglicherweise teilweise Zuweisung von Werten zu den Primvariablen des Problems. Die Solver-unabhängigen Anforderungen für diese Untermitteilung lauten: * variable_values.ids sind Elemente von „VariablesProto.ids“. * variable_values.values müssen alle endlich sein. |
dual_values |
Eine (möglicherweise teilweise) Zuweisung von Werten zu den linearen Einschränkungen des Problems. Anforderungen: * Dual_values.ids sind Elemente der LinearConstraintsProto.ids. * Dual_values.values müssen alle endlich sein. |
SolutionProto
Was in einer Lösung enthalten ist, hängt von der Art des Problems und des Lösers ab. Die aktuellen gemeinsamen Muster sind 1. MIP-Rechner geben nur eine Grundlösung zurück. 2. Simplex-LP-Resolver geben oft eine Basis und die mit dieser Basis verbundenen ursprünglichen und Dual-Lösungen zurück. 3. Andere Continuous-Llöser geben oft eine Primär- und Dual-Lösung zurück, die in einer Solver-abhängigen Form verbunden sind.
Anforderungen: * Es muss mindestens ein Feld festgelegt werden. Eine Lösung darf nicht leer sein.
Felder | |
---|---|
primal_solution |
|
dual_solution |
|
basis |
SolutionStatusProto
Machbarkeit einer Grund- oder Doppellösung, wie vom Rechner angegeben.
Enums | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Guard-Wert, der keinen Status darstellt. |
SOLUTION_STATUS_UNDETERMINED |
Der Rechner beansprucht keinen Machbarkeitsstatus. |
SOLUTION_STATUS_FEASIBLE |
Der Löser behauptet, die Lösung sei machbar. |
SOLUTION_STATUS_INFEASIBLE |
Der Löser behauptet, die Lösung sei nicht umsetzbar. |
SolveParametersProto
Parameter zur Steuerung einer Lösung.
Enthält beide Parameter, die alle Rechner gemeinsam haben (z.B. „time_limit“), und Parameter für einen bestimmten Solver, z.B. gscip. Wenn ein Wert sowohl im allgemeinen als auch im Solver-spezifischen Feld festgelegt ist, wird die Solver-spezifische Einstellung verwendet.
Die gängigen 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-Parameter werden ignoriert.
Parameter, die vom Modell abhängen (z.B. für jede Variable wird eine Verzweigungspriorität festgelegt), werden in ModelSolveParametersProto übergeben.
Felder | |
---|---|
time_limit |
Maximale Zeit, die ein Matherechner für das Problem aufwenden sollte (oder unendlich, wenn er nicht festgelegt ist). Dieser Wert ist kein festes Limit. Die Lösungszeit kann diesen Wert leicht überschreiten. Dieser Parameter wird immer an den zugrunde liegenden Solver übergeben. Die Standardeinstellung des Solver wird nicht verwendet. |
enable_output |
Aktiviert das Drucken der Tracer-Implementierungs-Traces. Wo sich diese Traces befinden, hängt vom Solver ab. Bei SCIP und Gurobi sind dies die Standard-Ausgabestreams. Für Glop und CP-SAT wird PROTOKOLLIERT(INFO). Wenn der Solver den Nachrichten-Callback unterstützt und der Nutzer einen Callback dafür registriert, wird dieser Parameterwert ignoriert und es werden keine Traces gedruckt. |
lp_algorithm |
Der Algorithmus zur Lösung eines linearen Programms. Wenn LP_ALGORITHM_UNSPECIFIED lautet, wird der Standardalgorithmus des Solver verwendet. Dieser Wert kann bei Problemen verwendet werden, die keine linearen Programme sind, bei denen die lineare Programmierung aber eine Unterroutine ist. MIP-Resolver verwenden diese beispielsweise in der Regel nur für die Stamm-LP-Lösung. Andernfalls wird Dual Simplex verwendet. |
presolve |
Versuchen Sie, das Problem zu vereinfachen, bevor Sie den Hauptalgorithmus starten, oder versuchen Sie, die Standardaufwandsstufe des Lösers zu verwenden, wenn {9}_UNSPECIFIED verwendet wird. |
cuts |
Versuche, eine stärkere LP-Entspannung (nur MIP) zu erreichen, oder die Standardanstrengung des Lösers, falls heizt_UNSPECIFIED. HINWEIS: Das Deaktivieren von Schnitten kann verhindern, dass Callbacks Schnitte unter MIP_NODE hinzufügen. Dieses Verhalten ist spezifisch. |
heuristics |
Der Aufwand zur Suche nach durchführbaren Lösungen, die über die Lösungen hinausgehen, die bei der vollständigen Suche (nur MIP) aufgetreten sind, oder des Standardaufwandslevels des Solver, falls Θ_UNSPECIFIED angegeben ist. |
scaling |
Aufwand zur Neuskalierung des Problems, um die numerische Stabilität zu verbessern, oder die Standardaufwand des Solver, falls Θ_UNSPECIFIED. |
iteration_limit |
Begrenzung der Iterationen des zugrunde liegenden Algorithmus (z.B. unidirektionale Pivots). Das spezifische Verhalten hängt vom verwendeten Solver und Algorithmus ab, kann jedoch häufig ein deterministisches Lösungslimit vorgeben (weitere Konfigurationsschritte sind erforderlich, z.B. ein Thread). In der Regel von LP-, QP- und MIP-Resolvern unterstützt, aber für MIP-Resolver siehe auch node_limit. |
node_limit |
Begrenzung der Anzahl der bei der Aufzählungssuche gelösten Teilprobleme (z.B. Zweig und Bindung). Bei vielen Rechnern kann dies verwendet werden, um die Berechnung deterministisch einzuschränken (weitere Konfigurationsschritte sind möglicherweise erforderlich, z.B. ein Thread). In der Regel für MIP-Rechner, siehe auch iteration_limit. |
cutoff_limit |
Der Solver stoppt vorzeitig, wenn er beweisen kann, dass es keine Grundlösungen gibt, die mindestens so gut wie den Grenzwert sind. Bei einem vorzeitigen Beenden 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. Die Verwendung einer Toleranz wird empfohlen, wenn Lösungen zurückgegeben werden sollen, deren Ziel genau dem Grenzwert entspricht. Weitere Informationen und einen Vergleich mit „best_bound_limit“ finden Sie im Nutzerhandbuch. |
objective_limit |
Der Solver bricht ab, sobald er eine mindestens so gute Lösung gefunden hat. Der Beendigungsgrund ist FEASIBLE und begrenzt ZIEL. |
best_bound_limit |
Der Solver stoppt früh, sobald sich herausstellt, dass die beste Grenze mindestens so gut ist, mit dem Kündigungsgrund FEASIBLE oder NO_SOLUTION_FOUND und begrenzt auf TARGETIVE. Weitere Informationen und einen Vergleich mit dem Wert für „cutoff_limit“ finden Sie im Nutzerhandbuch. |
solution_limit |
Der Solver stoppt früh, nachdem so viele machbare Lösungen gefunden wurden, mit Kündigungsgrund FEASIBLE und begrenzter LÖSUNG. Muss größer als null sein, wenn festgelegt. Sie wird häufig verwendet, um den Solver dazu zu bringen, bei der ersten praktikablen Lösung anzuhalten. Der Zielwert kann für keine der zurückgegebenen Lösungen garantiert werden. Solver geben üblicherweise nicht mehr Lösungen als den Lösungsgrenzwert zurück, aber dies wird nicht von MathOpt erzwungen, siehe auch b/214041169. Derzeit unterstützt für Gurobi und SCIP sowie für CP-SAT nur mit dem Wert 1. |
threads |
Wenn festgelegt, muss der Wert ≥ 1 sein. |
random_seed |
Seed für den Pseudozufallszahlengenerator im zugrunde liegenden Solver. Beachten Sie, dass alle Rechner Pseudozufallszahlen verwenden, um Dinge wie Störungen im LP-Algorithmus, für Tie-Break-up-Regeln und für heuristische Korrekturen auszuwählen. Wenn du diesen Wert änderst, kann sich das spürbar auf das Verhalten des Solver auswirken. Obwohl alle Solver ein Basiskonzept haben, beachten Sie, dass gültige Werte vom tatsächlichen Rechner abhängig sind. - Gurobi: [0:GRB_MAXINT] (ab Gurobi 9.0 ist 2x10^9). – GSCIP: [0:2147483647] (MAX_INT, kint32max oder 2^31-1). - GLOP: [0:2147483647] (wie oben) Der Solver erhält in allen Fällen einen Wert gleich: MAX(0; MIN(MAX_VALID_VALUE_FOR_SOLVER; random_seed)). |
absolute_gap_tolerance |
Eine absolute Optialitätstoleranz (hauptsächlich) für MIP-Rechner. Der absolute GAP ist der absolute Wert der Differenz zwischen: * dem Zielwert der am besten geeigneten Lösung gefunden, * der durch die Suche erzeugten doppelten Grenze. Der Löser kann stoppen, sobald der absolute GAP-Wert höchstens absolute_gap_toleranz erreicht ist (falls festgelegt) und TERMINATION_REASON_OPTIMAL zurückgeben. Muss >= 0 sein, wenn festgelegt. Siehe auch relative_gap_Toleranz. |
relative_gap_tolerance |
Eine relative Optimitätstoleranz (hauptsächlich) für MIP-Rechner. Der relative GAP ist eine normalisierte Version des absoluten GAP (definiert auf absolute_gap_Toleranz), wobei die Normalisierung lösungsabhängig ist, z.B. der absolute GAP geteilt durch den objektiven Wert der am besten geeigneten Lösung. Der Solver kann stoppen, sobald der relative GAP höchstens relative_gap_Toleranz (wenn festgelegt) liegt, und TERMINATION_REASON_OPTIMAL zurückgeben. Muss >= 0 sein, wenn festgelegt. Siehe auch absolute_gap_Toleranz. |
solution_pool_size |
Du kannst während der Suche bis zu |
SolveResultProto
Der Vertrag, wann primäre/doppelte Lösungen/Strahlen komplex sind, finden Sie unter „termination_reasons.md“ für eine vollständige Beschreibung.
Bis ein genauer Vertrag abgeschlossen ist, solltest du am besten einfach prüfen, ob eine Lösung bzw. ein Dienst vorhanden ist, anstatt dich auf den Kündigungsgrund zu verlassen.
Felder | |
---|---|
termination |
Der Grund, warum der Solver gestoppt wurde. |
solutions[] |
Der allgemeine Vertrag für die Reihenfolge der Lösungen, die zukünftige Löser implementieren sollten, besagt: 1. Die Lösungen mit einer primären realisierbaren Lösung, sortiert nach dem besten ursprünglichen Ziel. 2. Die Lösungen mit einer doppelt durchführbaren Lösung, sortiert nach dem besten Dual Objective (unbekanntes Dual Objective ist am schlechtesten) 3. Alle verbleibenden Lösungen können in beliebiger Reihenfolge zurückgegeben werden. |
primal_rays[] |
Richtung unbegrenzter grundlegender Verbesserung bzw. gleichwertige Zertifikate für die doppelte Undurchführbarkeit. In der Regel für TerminationReasonProtos UNBOUNDED und DUAL_INFEASIBLE |
dual_rays[] |
Richtungen für unbegrenzte doppelte Verbesserung oder gleichwertige Zertifikate für die grundlegende Undurchführbarkeit. Wird in der Regel für TerminationReasonProto NICHT FEASIBLE bereitgestellt. |
solve_stats |
Statistiken zum Lösungsprozess, z.B. Laufzeit, Iterationen. |
SolveStatsProto
Felder | |
---|---|
solve_time |
Verstrichene Wanduhrzeit, gemessen von math_opt, ungefähr der Zeit in Solver::Solve(). Hinweis: Dies beinhaltet nicht die Arbeit, die beim Erstellen des Modells durchgeführt wurde. |
problem_status |
Machbarkeitsstatus für grundlegende und doppelte Probleme. |
simplex_iterations |
|
barrier_iterations |
|
first_order_iterations |
|
node_count |
|
SolverTypeProto
Die von MathOpt unterstützten Rechner.
Enums | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
Solving Constraint Integer Programs (SCIP)-Resolver (Drittanbieter). Unterstützt LP-, MIP- und nichtkonvexe quadratische Probleme mit Ganzzahlen. Es werden jedoch keine doppelten Daten für LPs zurückgegeben. GLOP für LPs bevorzugen |
SOLVER_TYPE_GUROBI |
Gurobi Solver (Drittanbieter). Unterstützt LP-, MIP- und nichtkonvexe quadratische Probleme mit Ganzzahlen. In der Regel die schnellste Option, hat jedoch eine spezielle Lizenzierung. |
SOLVER_TYPE_GLOP |
Der Glop-Rechner von Google. Unterstützt LP mit Primär- und Dual-Simplex-Methoden. |
SOLVER_TYPE_CP_SAT |
Der CP-SAT-Rechner von Google. Unterstützt Probleme, bei denen alle Variablen ganzzahlig und begrenzt sind (oder impliziert werden, dass sie nach der Vorlösung liegen). Experimentelle Unterstützung für die Reskalierung und Diskretisierung von Problemen mit kontinuierlichen Variablen. |
SOLVER_TYPE_PDLP |
Der PDLP-Resolver von Google. Unterstützt LP- und konvexe diagonale quadratische Ziele. Es werden First-Order-Methoden anstelle von Simplex-Methoden verwendet. 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 den lokalen Thread-Speicher für Arbeitsspeicherzuweisungen. Infolgedessen müssen Solver-Instanzen im selben Thread gelöscht werden, in dem sie erstellt werden, da sonst GLPK abstürzt. Es scheint in Ordnung zu sein, Solver::Solve() aus einem anderen Thread als dem aufzurufen, mit dem der Solver erstellt wurde. Dieser Thread ist jedoch nicht von der 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 Nr. 40 unter glpk-5.0.tar.gz. |
SOLVER_TYPE_OSQP |
Der OSQP-Rechner (Operator Splitting Quadratic Program, Drittanbieter) Unterstützt kontinuierliche Probleme mit linearen Einschränkungen und linearen oder konvexen quadratischen Zielen. Verwendet eine Methode der ersten Reihenfolge. |
SOLVER_TYPE_ECOS |
Der Integrierte Conic Solver (ECOS) (Drittanbieter). Unterstützt LP- und SOCP-Probleme. Verwendet Innenpunktmethoden (Barriere). |
SOLVER_TYPE_SCS |
The Splitting Conic Solver (SCS) (Drittanbieter). Unterstützt LP- und SOCP-Probleme. Verwendet eine Methode der ersten Reihenfolge. |
SOLVER_TYPE_HIGHS |
The HiGHS Solver (Drittanbieter). Unterstützt LP- und MIP-Probleme (konvexe QPs sind nicht implementiert). |
SOLVER_TYPE_SANTORINI |
Referenzimplementierung eines MIP-Rechners in MathOpt Langsam/für die Produktion nicht empfohlen. Kein LP-Resolver (keine doppelten Informationen zurückgegeben). |
SosConstraintProto
Daten zur Darstellung einer einzelnen SOS1- oder SOS2-Einschränkung.
Wenn eine Variable, die an dieser Einschränkung beteiligt ist, gelöscht wird, wird sie so behandelt, als wäre sie auf null gesetzt.
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: Maximal zwei Elemente nehmen Werte ungleich null an und müssen in der wiederholten Reihenfolge nebeneinander liegen. |
weights[] |
Entweder leer oder von gleicher Länge für Ausdrücke. Wenn leer, sind die Standardgewichtungen 1, 2, .... Falls vorhanden, müssen die Einträge eindeutig sein. |
name |
Für übergeordnete Nachrichten können Anforderungen an Eindeutigkeiten in diesem Feld gelten. Siehe z. B. „ModelProto.sos1_constraints“ und „SosConstraintUpdatesProto.new_constraints“. |
SparseBasisStatusVector
Eine dünnbesetzte Darstellung eines Vektors von Basisstatuswerten.
Felder | |
---|---|
ids[] |
Muss (in aufsteigender Reihenfolge) sortiert werden, wobei sich alle Elemente unterscheiden müssen. |
values[] |
Muss dieselbe Länge wie IDs haben. |
SparseDoubleMatrixProto
Eine dünnbesetzte Darstellung einer Matrix von Doubles.
Die Matrix wird als Dreifache von Zeilen-ID, Spalten-ID und Koeffizient gespeichert. Diese drei Vektoren müssen gleich lang sein. Für alle i sollte das Tupel (row_ids[i], column_ids[i]) unterschiedlich sein. Die Einträge müssen in der Hauptreihenfolge der Zeilen angegeben werden.
Felder | |
---|---|
row_ids[] |
|
column_ids[] |
|
coefficients[] |
Darf nicht NaN enthalten. |
SparseDoubleVectorProto
Eine dünnbesetzte Darstellung eines Vektors von Doubles.
Felder | |
---|---|
ids[] |
Muss (in aufsteigender Reihenfolge) sortiert werden, wobei sich alle Elemente unterscheiden müssen. |
values[] |
Muss dieselbe Länge wie IDs haben. Darf nicht NaN enthalten. |
SparseInt32VectorProto
Eine dünnbesetzte Darstellung eines Inten-Vektors.
Felder | |
---|---|
ids[] |
Sollte in aufsteigender Reihenfolge sortiert werden, wobei sich alle Elemente unterscheiden sollten. |
values[] |
Muss dieselbe Länge wie IDs haben. |
SparseVectorFilterProto
Mit dieser Meldung können bestimmte Teile eines SparseXxxxVector abfragen/festgelegt werden. Standardmäßig wird nichts herausgefiltert. Häufig werden nur Teile von Lösungen abgefragt, d. h. nur Werte ungleich null und/oder ein manuell ausgewählter Satz von Variablenwerten.
Felder | |
---|---|
skip_zero_values |
Für SparseBoolVectorProto ist „zero“ |
filter_by_ids |
Bei „true“ werden nur die Werte zurückgegeben, die den in „Filtered_ids“ aufgeführten IDs entsprechen. |
filtered_ids[] |
Die Liste der IDs, die verwendet werden sollen, wenn filter_by_ids wahr ist. Muss leer sein, wenn filter_by_ids „false“ ist. HINWEIS: Wenn dieses Feld leer ist und filter_by_ids wahr ist, sagen Sie, dass das Ergebnis keine Informationen enthalten soll. |
TerminationProto
Alle Informationen darüber, warum ein Aufruf von Solve() beendet wurde.
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 Solver können das Limit, das zur Kündigung geführt hat, immer ermitteln. Wenn sich die Ursache nicht ermitteln lässt, wird LIMIT_UNDETERMINED verwendet. |
detail |
Weitere, normalerweise löser spezifische Informationen zur Kündigung. |
problem_status |
Machbarkeitsstatus für grundlegende und doppelte Probleme. Seit dem 18. Juli 2023 fehlt diese Nachricht möglicherweise. Wenn nicht, finden Sie „problem_status“ in SolveResultProto.solve_stats. |
objective_bounds |
Beschränkt auf den optimalen Zielwert. Seit dem 18. Juli 2023 fehlt diese Nachricht möglicherweise. Wenn „Objective_bounds.primal_bound“ fehlt, finden Sie sie in „SolveResultProto.solve.stats.best_primal_bound“ und „Objective_bounds.dual_bound“ in „SolveResultProto.solve.stats.best_dual_bound“ |
TerminationReasonProto
Der Grund, aus dem ein Aufruf von Solve() beendet wird.
Enums | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
Es wurde eine nachweislich optimale Lösung (bis hin zu numerischen Toleranzen) gefunden. |
TERMINATION_REASON_INFEASIBLE |
Für das ursprüngliche Problem gibt es keine durchführbaren Lösungen. |
TERMINATION_REASON_UNBOUNDED |
Das Grundproblem ist machbar und willkürlich gute Lösungen finden sich entlang eines Nullstrahls. |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
Das Grundproblem ist entweder nicht umsetzbar oder unbegrenzt. Weitere Informationen zum Problemstatus finden Sie möglicherweise unter „solve_stats.problem_status“. Beachten Sie, dass der unbegrenzte Status von Gurobi hier möglicherweise abgebildet wird. |
TERMINATION_REASON_IMPRECISE |
Das Problem wurde anhand eines der oben genannten Kriterien (Optimal, Nicht möglich, Unbegrenzt oder InfeasibleOrUnbounded) gelöst, aber mindestens eine Toleranz wurde nicht erfüllt. Einige grundlegende bzw. doppelte Lösungen/Strahlen sind vorhanden, die jedoch entweder etwas undurchführbar sind oder (wenn das Problem fast optimal war) möglicherweise eine Lücke zwischen dem besten Lösungsziel und der besten Zielbindung. Benutzer können immer noch Prima-/Dual-Lösungen/Strahlen und Lösungsstatistiken abfragen, sind aber für den Umgang mit numerischer Ungenauigkeit verantwortlich. |
TERMINATION_REASON_FEASIBLE |
Der Optimierer hat einen bestimmten Grenzwert erreicht und eine prinzipiell machbare Lösung wird zurückgegeben. Eine ausführliche Beschreibung der erreichten Art von Limit finden Sie unter SolveResultProto.limit_detail. |
TERMINATION_REASON_NO_SOLUTION_FOUND |
Das Optimierer hat einen bestimmten Grenzwert erreicht und keine urpräventive Lösung gefunden. Eine ausführliche Beschreibung der erreichten Art von Limit finden Sie unter SolveResultProto.limit_detail. |
TERMINATION_REASON_NUMERICAL_ERROR |
Der Algorithmus wurde aufgrund eines nicht behebbaren numerischen Fehlers angehalten. 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. |
VariablesProto
Wie unten verwendet, definieren wir „#variables“ = size(VariablesProto.ids).
Felder | |
---|---|
ids[] |
Darf nicht negativ und nur ansteigend sein. Der Wert „max(int64)“ kann nicht verwendet werden. |
lower_bounds[] |
Die Länge sollte der Länge von #variables entsprechen, die Werte in [-inf, inf). |
upper_bounds[] |
Die Länge sollte #Variablen entsprechen, Werte in (-inf, inf]. |
integers[] |
Die Länge sollte dem Wert „#variables“ entsprechen. Der Wert ist „falsch“ für kontinuierliche Variablen und „wahr“ für ganzzahlige Variablen. |
names[] |
Wenn nichts festgelegt ist, werden alle leeren Strings angenommen. Andernfalls sollte die Länge gleich #variables sein. Alle nicht leeren Namen müssen eindeutig sein. |