Indeks
BasisProto
(komunikat)BasisStatusProto
(wyliczenie)DualRayProto
(komunikat)DualSolutionProto
(komunikat)EmphasisProto
(wyliczenie)FeasibilityStatusProto
(wyliczenie)IndicatorConstraintProto
(komunikat)LPAlgorithmProto
(wyliczenie)LimitProto
(wyliczenie)LinearConstraintsProto
(komunikat)LinearExpressionProto
(komunikat)ModelProto
(komunikat)ModelSolveParametersProto
(komunikat)ObjectiveBoundsProto
(komunikat)ObjectiveProto
(komunikat)PrimalRayProto
(komunikat)PrimalSolutionProto
(komunikat)ProblemStatusProto
(komunikat)QuadraticConstraintProto
(komunikat)SecondOrderConeConstraintProto
(komunikat)SolutionHintProto
(komunikat)SolutionProto
(komunikat)SolutionStatusProto
(wyliczenie)SolveParametersProto
(komunikat)SolveResultProto
(komunikat)SolveStatsProto
(komunikat)SolverTypeProto
(wyliczenie)SosConstraintProto
(komunikat)SparseBasisStatusVector
(komunikat)SparseDoubleMatrixProto
(komunikat)SparseDoubleVectorProto
(komunikat)SparseInt32VectorProto
(komunikat)SparseVectorFilterProto
(komunikat)TerminationProto
(komunikat)TerminationReasonProto
(wyliczenie)VariablesProto
(komunikat)
BasisProto
Charakterystyka kombinatoryczna rozwiązania programu liniowego.
Metoda jednokierunkowa do rozwiązywania programów liniowych zawsze zwraca „podstawowe wykonalne rozwiązanie”, które można opisać kombinacyjnie za pomocą podstawy. Podstawa przypisuje wartość BasisStatusProto do każdej zmiennej i ograniczenia liniowego.
Np. przyjmijmy, że mamy format standardowy LP: min c * x s.t. A * x = b x >= 0, który ma więcej zmiennych niż ograniczenia i ma pełny wiersz A.
Niech n będzie liczbą zmiennych, a m – liczbą ograniczeń liniowych. Prawidłową podstawę problemu można sformułować w następujący sposób: * Wszystkie ograniczenia mają stan podstawowy ZROBIONE. * Wybierz m zmiennych, aby kolumny A były liniowo niezależne od siebie i przypisano do nich stan PODSTAWOWY. * Dla pozostałych zmiennych n–m przypisz stan AT_LOWER.
Podstawowym rozwiązaniem na tej podstawie jest wyjątkowe rozwiązanie A * x = b, w którym wszystkie zmienne o stanie AT_LOWER są ustalone na stałe na dolnych granicach (całe 0). Otrzymane rozwiązanie jest nazywane podstawowym wykonalnym rozwiązaniem, jeśli spełnia również x >= 0.
Pola | |
---|---|
constraint_status |
Stan podstawy ograniczenia. Wymagania: * constraint_status.ids ma wartość LinearConstraints.ids. |
variable_status |
Zmienny stan podstawy. Wymagania: * constraint_status.ids ma wartość ZmiennasProto.ids. |
basic_dual_feasibility |
Jest to zaawansowana funkcja używana przez MathOpt do określania wykonalności nieoptymalnych rozwiązań LP (optymalne rozwiązania zawsze mają stan SOLUTION_STATUS_FEASIBLE). W przypadku jednostronnych stron docelowych powinien on być równy stanowi wykonalności powiązanego rozwiązania podwójnego. W przypadku dwustronnych stron docelowych może się różnić w niektórych przypadkach skrajnych (np. niepełne rozwiązania z pierwotnym jednoksiążką). Jeśli podasz wartość początkową za pomocą parametru ModelSolveParametersProto.initial_basis, ta wartość jest ignorowana. Ma zastosowanie tylko w przypadku podstawy zwracanej przez SolutionProto.basis. |
BasisStatusProto
Stan zmiennej/ograniczenia na podstawie strony docelowej.
Wartości w polu enum | |
---|---|
BASIS_STATUS_UNSPECIFIED |
Wartość zabezpieczenia reprezentująca brak stanu. |
BASIS_STATUS_FREE |
Zmienna/ograniczenie jest dowolne (nie ma nieograniczonych granic). |
BASIS_STATUS_AT_LOWER_BOUND |
Zmienna/ograniczenie znajduje się na dolnej granicy (która musi być skończona). |
BASIS_STATUS_AT_UPPER_BOUND |
Zmienna/ograniczenie znajduje się na górnej granicy (która musi być skończona). |
BASIS_STATUS_FIXED_VALUE |
Zmienna/ograniczenie ma identyczną, dolną i górną granicę. |
BASIS_STATUS_BASIC |
Zmienna/ograniczenie jest podstawowe. |
DualRayProto
Kierunek nieograniczonej poprawy dwójki problemu optymalizacji, czyli równoważnego certyfikatu pierwszorzędnej niewykonalności.
Np. przyjmijmy, że pierwotna para programu liniowego z podwójnymi parami: (Primal) (Dual) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Podwójne promienie spełniają para (y, r): b * y > 0 y * A + r = 0 y, r >= 0 Obserwuj, że dodanie dodatniej wielokrotności (y, r) do podwójnego wykonalnego rozwiązania pozwala uzyskać podwójną wykonalność i poprawia cel (udowadniając, że podwójny jest nieograniczony). Podwójne promienie dowodzą również, że pierwotny problem jest niemożliwy.
W poniższym komunikacie DualRay y oznacza wartość podwójną, a r – ograniczenie_kosztów.
Pola | |
---|---|
dual_values |
Wymagania: * dual_values.ids to elementy elementu LinearConstraints.id. * Wszystkie wartości podwójne.wartości muszą być skończone. |
reduced_costs |
Wymagania: * red_costs.ids to elementy ZmiennasProto.ids. * *red_costs.values muszą być ograniczone. |
DualSolutionProto
Rozwiązanie dwuskładnikowego problemu optymalizacyjnego.
Np. przyjmijmy, że pierwotna para programu liniowego z podwójnymi parami: (Primal) (Dual) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Rozwiązanie podwójne to para (y, r). Jest możliwe, jeśli spełnia ograniczenia określone powyżej (Dual).
W poniższym komunikacie y to wartości podwójne, r – ograniczony_koszt, a b * y to wartość docelowa.
Pola | |
---|---|
dual_values |
Wymagania: * dual_values.ids to elementy elementu LinearConstraints.id. * Wszystkie wartości podwójne.wartości muszą być skończone. |
reduced_costs |
Wymagania: * red_costs.ids to elementy ZmiennasProto.ids. * *red_costs.values muszą być ograniczone. |
feasibility_status |
Stan wykonalności rozwiązania zgodnie z jego rozwiązaniem. |
objective_value |
|
EmphasisProto
Poziom wysiłku zastosowany do zadania opcjonalnego podczas rozwiązywania problemu (patrz: SolveParametersProto, aby go użyć).
Aktywujemy je, by skonfigurować funkcję rozwiązania w ten sposób: * Jeśli rozwiązanie nie obsługuje tej funkcji, zawsze poprawna jest tylko wartość UNSPECIFIED. W przypadku każdego innego ustawienia będzie zwykle zwracany błąd nieprawidłowego argumentu (niektóre rozwiązania mogą też akceptować opcję WYŁĄCZONE). * Jeśli rozwiązanie obsługuje tę funkcję: – Gdy ma wartość UNSPECIFIED, używana jest bazowa wartość domyślna. – Jeśli tej funkcji nie można wyłączyć, opcja OFF spowoduje wyświetlenie błędu. – Jeśli ta funkcja jest domyślnie włączona, rozwiązanie domyślne jest zwykle mapowane na ŚREDNIE. - Jeśli funkcja jest obsługiwana, wartości NISKIE, ŚREDNIE, WYSOKIE i BARDZO WYSOKIE nie zwracają nigdy błędu i są dopasowywane najlepiej.
Wartości w polu enum | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
FeasibilityStatusProto
Stan wykonalności problemu określony przez osobę wnoszącą rozwiązanie (nie musi zwracać certyfikatu dla roszczenia).
Wartości w polu enum | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
Wartość zabezpieczenia reprezentująca brak stanu. |
FEASIBILITY_STATUS_UNDETERMINED |
Solver nie rości sobie statusu. |
FEASIBILITY_STATUS_FEASIBLE |
Solver twierdzi, że problem jest możliwy do wykonania. |
FEASIBILITY_STATUS_INFEASIBLE |
Solver twierdzi, że problem jest niemożliwy do wykonania. |
IndicatorConstraintProto
Dane reprezentujące ograniczenie pojedynczego wskaźnika w postaci: Zmienna(indicator_id) = (activate_on_zero ? 0 : 1) ⇒ dolna granica <= wyrażenie <= górna_granica.
Jeśli zmienna powiązana z tym ograniczeniem (wskaźnik lub występująca w polu expression
) zostanie usunięta, jest traktowana tak, jakby miała wartość 0. W szczególności usunięcie zmiennej wskaźnika oznacza, że ograniczenie wskaźnika jest nieważne, jeśli funkcja activate_on_zero
ma wartość fałsz, i że jest odpowiednikiem ograniczenia liniowego, jeśli zasada activate_on_zero
ma wartość prawda.
Pola | |
---|---|
activate_on_zero |
Jeśli ma wartość prawda, jeśli zmienna wskaźnika przyjmuje wartość 0, to domniemane ograniczenie musi obowiązywać. W przeciwnym razie, jeśli zmienna wskaźnika przyjmuje wartość 1, wtedy wymagane ograniczenie musi obowiązywać. |
expression |
Musi być prawidłowym wyrażeniem liniowym w odniesieniu do modelu, który zawiera: * Wszystkie warunki określone w |
lower_bound |
Musi mieć wartość w [-inf, inf). Nie może to być NaN. |
upper_bound |
Musi mieć wartość w (-inf, inf]; nie może być NaN. |
name |
Wiadomości nadrzędne mogą mieć w tym polu wymagania dotyczące unikalności, np.: |
indicator_id |
Identyfikator odpowiadający zmiennej binarnej lub nieskonfigurowany. Jeśli zasada jest nieskonfigurowana, ograniczenie wskaźnika jest ignorowane. Jeśli zasada jest skonfigurowana, wymagane są: * ZmiennasProto.integers[indicator_id] = true, * ZmiennasProto.lower_bounds[indicator_id] >= 0, * ZmiennasProto.upper_bounds[indicator_id] <= 1. MathOpt nie weryfikuje tych warunków, ale jeśli nie zostaną spełnione, rozwiązanie zwróci błąd po rozwiązaniu problemu. |
LPAlgorithmProto
Wybiera algorytm do rozwiązywania programów liniowych.
Wartości w polu enum | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
Metoda jednoskładnikowa (pierwotna). Zwykle można uzyskać roztwory pierwsze i podwójne, promienie pierwotne/podwójne dotyczące problemów podstawowych lub podwójnych, oraz podstawę. |
LP_ALGORITHM_DUAL_SIMPLEX |
Metoda podwójnej jednostajnej. Zwykle można uzyskać roztwory pierwsze i podwójne, promienie pierwotne/podwójne dotyczące problemów podstawowych lub podwójnych, oraz podstawę. |
LP_ALGORITHM_BARRIER |
Metoda barierowa, zwana też metodą punktu wewnętrznego (IPM). Zwykle można uzyskać zarówno rozwiązania pierwsze, jak i podwójne. Niektóre implementacje mogą również generować promienie na nieograniczone lub niewykonalne problemy. Podstawa nie jest podana, chyba że rozwiązanie wykonujące operację „crossover” i kończy się jednokrotnym. |
LP_ALGORITHM_FIRST_ORDER |
Algorytm oparty na metodzie pierwszego rzędu. Zwykle tworzą one zarówno rozwiązania podstawowe, jak i podwójne, a potem również zaświadczenia o pierwotnej lub podwójnej niewykonalności. Metody pierwszego zamówienia zapewniają zwykle rozwiązania z mniejszą dokładnością, więc użytkownicy powinni zadbać o ustawianie parametrów jakości (np. tolerancji) i weryfikowanie rozwiązań. |
LimitProto
Gdy funkcja Solve() zatrzymuje się wcześniej z zasadą FinishReasonProto FEASIBLE lub NO_SOLUTION_FOUND, określony limit został osiągnięty.
Wartości w polu enum | |
---|---|
LIMIT_UNSPECIFIED |
Używana jako wartość null w przypadku zakończenia działania spoza limitu (np. TERMINATION_REASON_OPTIMAL). |
LIMIT_UNDETERMINED |
Rozwiązanie nie pokazuje, który limit został osiągnięty. |
LIMIT_ITERATION |
Algorytm iteracyjny został zatrzymany po przeprowadzeniu maksymalnej liczby iteracji (np. jednorazowych lub iteracji bariery). |
LIMIT_TIME |
Algorytm zatrzymał się po czasie obliczeniowym określonym przez użytkownika. |
LIMIT_NODE |
Algorytm powiązany z gałęzią i powiązanymi z gałęzią został zatrzymany, ponieważ zbadał maksymalną liczbę węzłów w drzewie z gałęzią i powiązaną. |
LIMIT_SOLUTION |
Algorytm został zatrzymany, ponieważ znalazł wymaganą liczbę rozwiązań. Jest on często używany w mechanizmach IP, aby umożliwić rozwiązanie zadania, które zwróciło pierwsze możliwe do znalezienia rozwiązanie. |
LIMIT_MEMORY |
Algorytm został zatrzymany, ponieważ zabrakło pamięci. |
LIMIT_CUTOFF |
Rozwiązanie zostało uruchomione z końcem wartości (np.SolveParameters. cutoff_limit) dla celu, co oznaczało, że użytkownik nie chce żadnego rozwiązania gorszego niż wartość graniczna.Rozwiązanie stwierdziło, że nie ma rozwiązań co najmniej tak dobrych jak wartość graniczna. Zwykle nie podano dodatkowych informacji o rozwiązaniu. |
LIMIT_OBJECTIVE |
Algorytm został zatrzymany, ponieważ znalazł rozwiązanie lub granicę wyższą niż limit ustawiony przez użytkownika (patrz SolveParameters.objective_limit i SolveParameters.best_bound_limit. |
LIMIT_NORM |
Algorytm został zatrzymany, ponieważ norma powtórzenia stała się za duża. |
LIMIT_INTERRUPTED |
Algorytm został zatrzymany z powodu sygnału przerwy w działaniu lub żądania przerwania przez użytkownika. |
LIMIT_SLOW_PROGRESS |
Algorytm się zatrzymał, ponieważ nie mógł kontynuować pracy nad rozwiązaniem. |
LIMIT_OTHER |
Algorytm został zatrzymany z powodu limitu nieobjętego żadnym z powyższych. Pamiętaj, że wartość LIMIT_UNDETERMINED jest używana, gdy nie można określić przyczyny. Wartość LIMIT_OTHER jest używana, gdy przyczyna jest znana, ale nie pasuje do żadnej z powyższych alternatyw. ZakończenieProto.detail może zawierać dodatkowe informacje o limicie. |
LinearConstraintsProto
Tak jak poniżej zdefiniujemy „#ograniczenia liniowe” = rozmiar(LinearConstraintsProto.ids).
Pola | |
---|---|
ids[] |
Musi być nieujemna i ściśle rosnąca. Nie można użyć wartości max(int64). |
lower_bounds[] |
Długość powinna być równa #ograniczeniom liniowym, wartościom w [-inf, inf). |
upper_bounds[] |
Długość musi być równa #ograniczeniom liniowym, wartościom w (-inf, inf]. |
names[] |
Jeśli nie jest skonfigurowana, przyjmuje się, że są to wszystkie puste ciągi. W przeciwnym razie długość powinna być równa #linear limits. Wszystkie nazwy niepuste muszą być różne. |
LinearExpressionProto
Rzadka reprezentacja wyrażenia liniowego (ważona suma zmiennych oraz stałe przesunięcie).
Pola | |
---|---|
ids[] |
Identyfikatory zmiennych. Musi być sortowana (w kolejności rosnącej), w której wszystkie elementy są różne. |
coefficients[] |
Musi mieć taką samą długość jak identyfikatory. Wartości muszą być skończone, a nie mogą być wartością NaN. |
offset |
Musi być skończona i nie może być NaN. |
ModelProto
Problem z optymalizacją. MathOpt obsługuje: – zmienne decyzji ciągłej i liczby całkowitej z opcjonalnymi granicami skończonymi. – cele liniowe i kwadratowe (pojedynczy lub wiele celów), zminimalizowane lub zmaksymalizowane; – Kilka typów ograniczeń, w tym: * Ograniczenia liniowe * Ograniczenia kwadratowe * Ograniczenia stożkowe drugiego rzędu * Ograniczenia logiczne > Ograniczenia SOS1 i SOS2 > Ograniczenia wskaźnika
Domyślnie ograniczenia są reprezentowane w mapach „id-to-data”. Ograniczenia liniowe prezentujemy w efektywniejszym formacie „struktury tablic”.
Pola | |
---|---|
name |
|
variables |
|
objective |
Główny cel modelu. |
auxiliary_objectives |
Cele pomocnicze do wykorzystania w modelach wielozadaniowych. Identyfikatory kluczy mapy muszą mieć wartość [0, max(int64)). Każdy priorytet i każda nazwa niepusta muszą być unikalne i różnić się od głównego atrybutu |
linear_constraints |
|
linear_constraint_matrix |
Współczynniki zmienne ograniczeń liniowych. Jeśli zmienna powiązana z tym ograniczeniem zostanie usunięta, jest traktowana tak, jakby była ustawiona na wartość 0. Wymagania: * linear_constraint_matrix.row_ids to elementy atrybutu linear_constraints.ids. * linear_constraint_matrix.column_ids to elementy zmiennych.id. * Wpisy macierzy nie mają wartości zero. * Wszystkie wartości parametru linear_constraint_matrix.values muszą być skończone. |
quadratic_constraints |
Ograniczenia kwadratowe w modelu. |
second_order_cone_constraints |
Ograniczenia stożka drugiego rzędu w modelu. |
sos1_constraints |
Ograniczenia SOS1 w modelu, zgodnie z którymi maksymalnie 1 |
sos2_constraints |
Ograniczenia SOS2 w modelu, zgodnie z którymi maksymalnie 2 wpisy zmiennej |
indicator_constraints |
Ograniczenia wskaźnika w modelu, które egzekwują, że jeśli binarna „zmienna wskaźnika” ma wartość 1, musi obowiązywać „domniemane ograniczenie”. |
ModelSolveParametersProto
Pola | |
---|---|
variable_values_filter |
Filtr stosowany do wszystkich zwróconych rozproszonych kontenerów objętych kluczem przez zmienne w PrimalSolutionProto i PrimalRayProto (PrimalSolutionProto.variable_values oraz PrimalRayProto.variable_values). Wymagania: * filter_ids to elementy elementu ZmiennasProto.ids. |
dual_values_filter |
Filtr stosowany do wszystkich zwróconych rozproszonych kontenerów objętych ograniczeniami liniowymi w usługach DualSolutionProto i DualRay (DualSolutionProto.dual_values, DualRay.dual_values). Wymagania: * filter_ids to elementy elementu LinearConstraints.ids. |
reduced_costs_filter |
Filtr, który jest stosowany do wszystkich zwróconych rozproszonych kontenerów objętych kluczem przez zmienne w DualSolutionProto i DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs). Wymagania: * filter_ids to elementy elementu ZmiennasProto.ids. |
initial_basis |
Opcjonalna podstawa początkowa układów jednokrotnych uruchamianych częściowo z pamięci. Jeśli jest ustawiony, powinien być prawidłowy zgodnie z |
solution_hints[] |
Opcjonalne wskazówki dotyczące rozwiązań. Jeśli rozwiązanie podstawowe akceptuje tylko 1 podpowiedź, używana jest pierwsza. |
branching_priorities |
Opcjonalne priorytety rozgałęzienia. Zmienne z wyższymi wartościami zostaną najpierw rozgałęzione. Zmienne, dla których priorytety nie są ustawione, otrzymują domyślny priorytet rozwiązania (zwykle jest to zero). Wymagania: * Braning_priorities.values musi być skończony. * Branch_priorities.ids muszą być elementami ZmiennasProto.ids. |
ObjectiveBoundsProto
Ogranicza się do optymalnej wartości celu.
Pola | |
---|---|
primal_bound |
Funkcja Solver twierdzi, że wartość optymalna jest równa lub wyższa (mniejsza przy minimalizacji i wyższa przy maksymalizacji) niż primal_bound a pierwotna tolerancja wykonalności rozwiązania (patrz ostrzeżenie poniżej): * element primal_bound to prosty (+inf dla minimalizacji i -inf dla maksymalizacji), gdy rozwiązanie nie twierdzi, że ma taką granicę. * Argument granica_pierwotna może być bliższy wartości optymalnej niż cel najlepszego pierwszego możliwego rozwiązania. W szczególności argument granica_pierwotna może być nie trywialny, nawet jeśli nie zostały zwrócone żadne podstawowe rozwiązania wykonalne. Uwaga: precyzyjne twierdzenie mówi, że istnieje rozwiązanie podstawowe, które: * jest wykonalne liczbowo (tj. do osiągnięcia tolerancji rozwiązania), a * ma wartość obiektywną granica_pierwotna. To numeryczne rozwiązanie może być nieco niewykonalne. W takim przypadku wartość pierwotna_granica może być znacznie lepsza od wartości optymalnej. Przeniesienie pierwotnej tolerancji wykonalności na tolerancję dla granic_pierwotnej nie jest trywialne, zwłaszcza gdy tolerancja wykonalności jest stosunkowo duża (np. w przypadku rozwiązywania problemów z PDLP). |
dual_bound |
Funkcja Solver twierdzi, że wartość optymalna jest równa lub mniejsza (większa przy minimalizacji i mniejsza dla maksymalizacji) niż dual_bound do wartości podwójnej wykonalności rozwiązań (patrz ostrzeżenie poniżej): * dual_bound to minimalna wartość (-inf dla minimalizacji i +inf dla maksymalizacji), gdy rozwiązanie nie twierdzi, że ma taką granicę. Podobnie jak w przypadku argumentu granica_pierwotna, może się to zdarzyć w przypadku niektórych rozwiązań, nawet po zwróceniu wartości optymalnej. Rozwiązania MIP zwykle zgłaszają granicę, nawet jeśli jest ona nieprecyzyjna. * w przypadku problemów ciągłych argument podwójna_granica może być bliższy wartości optymalnej niż cel najlepszego podwójnego wykonalnego rozwiązania. W przypadku MIP jedna z pierwszych nieprostych wartości podwójnej wartości jest często optymalną wartością złagodzenia LP podczas MIP. * Wartość dual_bound powinna być lepsza (mniejsza w przypadku minimalizacji, a większa w przypadku maksymalizacji) niż wartość primal_bound względem tolerancji rozwiązań (zobacz ostrzeżenie poniżej). Ostrzeżenie: * w przypadku ciągłych problemów precyzyjne twierdzenie mówi, że istnieje podwójne rozwiązanie, które: * jest wykonalne liczbowo (czyli wykonalne do maksymalnej tolerancji rozwiązań), a * ma wartość obiektywną dual_bound. To numeryczne rozwiązanie może być nieco niewykonalne. W takim przypadku podwójna_granica może być znacznie gorsza niż wartość optymalna i granica_pierwotna. Podobnie jak w przypadku pierwszego przypadku przekształcenie podwójnej tolerancji wykonalności na tolerancję dla zakresu podwójnej nie jest trywialne, zwłaszcza gdy tolerancja wykonalności jest stosunkowo duża. Niektóre rozwiązania zapewniają jednak poprawioną wersję parametru podwójna_granica, która może być bezpieczniejsza liczbowo. Dostęp do tej poprawionej wersji można uzyskać przez określone dane wyjściowe rozwiązania (np. w przypadku PDLP, pdlp_output.Convergence_information.improveed_dual_objective). * W przypadku rozwiązań MIP parametr podwójny może być powiązany z rozwiązaniem podwójnym w celu pewnej ciągłej relaksacji (np.relaksacja LP). Często jest to złożona konsekwencja wykonania rozwiązania i zwykle jest bardziej nieprecyzyjna niż wartości progowe zgłaszane przez rozwiązania LP. |
ObjectiveProto
Pola | |
---|---|
maximize |
Wartość fałsz oznacza minimalizację, prawda oznacza maksymalizację |
offset |
Musi być skończone, a nie NaN. |
linear_coefficients |
Terminy ObjectiveProto, które są liniowe w zmiennych decyzji. Wymagania: * linear_coeffectives.ids są elementami ZmiennasProto.ids. * Nieokreślona wartość ZmiennasProto odpowiada zero. * Wszystkie wartości współczynników_liniowych muszą być skończone. * Wartości współczynników_liniowych.mogą wynosić zero, ale powoduje to marnowanie przestrzeni. |
quadratic_coefficients |
Terminy obiektywne, które w zmiennych decyzji są kwadratowe. Wymagania oprócz wymagań dotyczących komunikatów SparseDoubleMatrixProto: * Każdy element elementu quadratic_coeffectives.row_ids i każdy element quadratic_coeffectives.column_ids musi być elementem zmiennysProto.ids. * Macierz musi być górnym trójkątem: dla każdego i – współczynniki_kwadratowe.identyfikatory.wierszy[i] <= współczynniki_kwadratowe.identyfikatory_kolumn[i]. Uwaga: * Hasła, które nie są wyraźnie zapisane, mają współczynnik zerowy. * Elementy we właściwości „współczynniki_kwadratowe.współczynniki” mogą wynosić 0, ale to tylko marnuje przestrzeń. |
name |
Wiadomości nadrzędne mogą mieć w tym polu wymagania dotyczące unikalności, np. ModelProto.objectives i AuxiliaryObjectivesUpdatesProto.new_objectives. |
priority |
W przypadku problemów o wielu celach: priorytet tego celu w porównaniu z innymi celami (niższy jest ważniejszy). Ta wartość nie może być liczbą ujemną. Dodatkowo każdy priorytet celu w modelu musi być inny w momencie rozwiązania. Ten warunek nie jest weryfikowany na poziomie protokołu, więc modele mogą tymczasowo mieć cele o tym samym priorytecie. |
PrimalRayProto
Kierunek nieograniczonej poprawy problemu optymalizacji; równoważnie certyfikat niewykonalności dla podwójnych problemów optymalizacyjnych.
Np. spójrz na prosty program liniowy: min c * x s.t. A * x >= b x >= 0 Promień początkowy to x, który spełnia: c * x < 0 A * x >= 0 x >= 0. Obserwuj, że w przypadku każdego dodatniego rozwiązania Promień początkowy jest także dowodem na niewykonalny problem z podwójną optymalizacją.
W poniższym komunikacie PrimalRay wartości_zmienne mają wartość x.
Pola | |
---|---|
variable_values |
Wymagania: * zmienna_values.ids to elementy zmiennej variablesProto.ids. * Wszystkie wartości_zmienne.wartości muszą być skończone. |
PrimalSolutionProto
Rozwiązanie problemu z optymalizacją.
Na przykład spróbuj zastosować prosty program liniowy: min c * x s.t. A * x >= b x >= 0. Rozwiązanie pierwsze to przypisanie wartości do x. Jest możliwe, jeśli spełnia warunki A * x >= b oraz x >= 0 z powyższych pól. W poniższym komunikacie PrimalSolutionProto wartości zmiennych to x, a cel_value to c * x.
Pola | |
---|---|
variable_values |
Wymagania: * zmienna_values.ids to elementy zmiennej variablesProto.ids. * Wszystkie wartości_zmienne.wartości muszą być skończone. |
objective_value |
Wartość celu obliczona przez używane rozwiązanie. Nie może być nieskończona ani naN. |
auxiliary_objective_values |
Wartości celu pomocniczego obliczone przez używane rozwiązanie. Klucze muszą być prawidłowymi identyfikatorami celów pomocniczych. Wartości nie mogą być nieskończone ani NaN. |
feasibility_status |
Stan wykonalności rozwiązania zgodnie z jego rozwiązaniem. |
ProblemStatusProto
Stan wykonalności zadania początkowego i jego podwójny (lub dwójka ciągłej relaksacji) zgodnie z deklaracją rozwiązania. Rozwiązanie nie musi zwracać certyfikatu w związku z roszczeniem (np. może deklarować podstawową wykonalność bez zwrócenia podstawowego wykonalnego rozwiązania). Ten połączony stan zapewnia wyczerpujący opis twierdzeń rozwiązania na temat wykonalności i nieograniczonego zakresu rozwiązania. Przykład:
- Stan wykonalny w przypadku problemów podstawowych i podwójnych wskazuje, że wersja podstawowa jest wykonalna i ograniczona oraz prawdopodobnie ma rozwiązanie optymalne (gwarantowane w przypadku problemów bez ograniczeń nieliniowych).
- Stan początkowy jest możliwy do wykonania, a podwójny niemożliwy do wykonania.
Zauważ, że podwójny stan niemożliwy do wykonania (tj. któremu towarzyszy nieokreślony stan początkowy) nie oznacza, że podstawowy problem jest nieuzasadniony, ponieważ oba problemy mogą być niewykonalne. Co więcej, choć początkowy i podwójny stan wykonalności może sugerować istnienie optymalnego rozwiązania, nie gwarantuje to, że udało się znaleźć takie optymalne rozwiązanie.
Pola | |
---|---|
primal_status |
Stan problemu pierwotnego. |
dual_status |
Stan podwójnych problemów (lub dla ciągłej relaksacji). |
primal_or_dual_infeasible |
Jeśli ma wartość prawda, rozwiązanie twierdzi, że problem podstawowy lub podwójny jest niemożliwy, ale nie wie, który z nich (lub czy oba są niewykonalne). Może mieć wartość tylko wtedy, gdy stan podstawowy_problemu = podwójny_problem_status = kNieokreślony. Te dodatkowe informacje są często potrzebne, gdy wstępne przetwarzanie wskazuje, że nie ma optymalnego rozwiązania problemu (ale nie da się określić, czy jest ono spowodowane niewykonaniem, nieograniczeniem czy jedno i drugim). |
QuadraticConstraintProto
Pojedyncze ograniczenie kwadratowe o postaci: lb <= suma{linear_terms} + suma{quadratic_terms} <= ub.
Jeśli zmienna powiązana z tym ograniczeniem zostanie usunięta, jest traktowana tak, jakby była ustawiona na wartość 0.
Pola | |
---|---|
linear_terms |
Warunki liniowe w zmiennych decyzji. Oprócz wymagań dotyczących wiadomości SparseDoubleVectorProto wymagamy, aby: * linear_terms.ids były elementami variablesProto.ids. * Wszystkie wartości linear_terms.value muszą być skończone i nie-NaN. Uwaga: * pominięte identyfikatory zmiennych mają współczynnik równy 0. * Wartości parametrów linear_terms.mogą mieć wartość zero, ale powoduje to marnowanie miejsca. |
quadratic_terms |
hasła, które w zmiennych decyzji są kwadratowe. Oprócz wymagań dotyczących wiadomości SparseDoubleMatrixProto wymagamy, aby: * Każdy element obiektu quadratic_terms.row_ids i każdy element quadratic_terms.column_ids musi być elementem zmiennysProto.ids. * Macierz musi być górnym trójkątem: dla każdego i – quadratic_terms.row_ids[i] <= quadratic_terms.column_ids[i]. Uwaga: * Hasła, które nie są wyraźnie zapisane, mają współczynnik zerowy. * Elementy quadratic_terms.coeffectives mogą wynosić 0, ale to tylko marnuje miejsce. |
lower_bound |
Musi mieć wartość w formacie [-inf, inf) i nie może być większa niż |
upper_bound |
Wartość musi mieć wartość w (-inf, inf] i być większa lub równa |
name |
Wiadomości nadrzędne mogą mieć w tym polu wymagania dotyczące unikatowości, np. zobacz ModelProto.quadratic_constraints i QuadraticConstraintUpdatesProto.new_constraints. |
SecondOrderConeConstraintProto
Pojedyncze ograniczenie stożka drugiego rzędu w postaci:
||arguments_to_norm
||_2 <= upper_bound
,
gdzie upper_bound
i każdy element arguments_to_norm
są wyrażeniami liniowymi.
Jeśli zmienna powiązana z tym ograniczeniem zostanie usunięta, jest traktowana tak, jakby była ustawiona na wartość 0.
Pola | |
---|---|
upper_bound |
|
arguments_to_norm[] |
|
name |
Wiadomości nadrzędne mogą mieć w tym polu wymagania dotyczące unikalności, np.: |
SolutionHintProto
Sugerowane rozwiązanie początkowe.
Rozwiązania do zarządzania urządzeniami mobilnymi wymagają zwykle tylko informacji podstawowych (variable_values
), podczas gdy rozwiązania tego typu wymagają zarówno informacji podstawowych, jak i podwójnych (dual_values
).
Wiele rozwiązań do zarządzania MIP działa z: (1) rozwiązaniami częściowymi, które nie określają wszystkich zmiennych, lub (2) rozwiązaniami niemożliwymi do wykonania. W takich przypadkach rozwiązania zwykle realizują lub poprawiają wskazówkę w ramach podrzędnej witryny MIP.
Sposób, w jaki wskazówka jest używana przez rozwiązanie, w dużej mierze zależy od jego rozwiązania, typu zadania i używanego algorytmu. Najbardziej niezawodnym sposobem na zapewnienie właściwego zastosowania podpowiedzi jest czytanie powiązanych z nią dzienników rozwiązań z uwzględnieniem podpowiedzi i bez niej.
Rozwiązania liniowe oparte na zwykłym działaniu (LP) zwykle preferują początkową podstawę do uzyskania podpowiedzi (w przeciwnym razie muszą przejść na drugą stronę, aby przekonwertować wskazówkę na podstawowe wykonalne rozwiązanie).
Pola | |
---|---|
variable_values |
Prawdopodobnie częściowe przypisanie wartości do podstawowych zmiennych zadania. W przypadku tego komunikatu podrzędnego niezależne od rozwiązania są te wymagania: * zmienne_wartości.id są elementami elementu ZmiennasProto.ids. * Wszystkie wartości_zmienne.wartości muszą być skończone. |
dual_values |
(potencjalnie częściowe) przypisanie wartości do ograniczeń liniowych problemu. Wymagania: * dual_values.ids to elementy elementu LinearConstraintsProto.ids. * Wszystkie wartości podwójne.wartości muszą być skończone. |
SolutionProto
Zawartość rozwiązania zależy od rodzaju problemu i jego rozwiązania. Obecnie często używane wzorce to 1. Rozwiązania MIP zwracają tylko rozwiązanie pierwsze. 2. Rozwiązania funkcji Simplex LP często zwracają podstawę oraz rozwiązania podstawowe i podwójne powiązane z tą podstawą. 3. Inne rozwiązania ciągłe zwracają rozwiązanie pierwsze i podwójne, które są połączone w postaci zależnej od rozwiązania.
Wymagania: * należy ustawić co najmniej jedno pole; rozwiązanie nie może być puste.
Pola | |
---|---|
primal_solution |
|
dual_solution |
|
basis |
SolutionStatusProto
Wykonalność rozwiązania pierwotnego lub podwójnego zgodnie z opisem rozwiązania.
Wartości w polu enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Wartość zabezpieczenia reprezentująca brak stanu. |
SOLUTION_STATUS_UNDETERMINED |
Solver nie zgłasza roszczenia do stanu wykonalności. |
SOLUTION_STATUS_FEASIBLE |
Solver twierdzi, że rozwiązanie jest możliwe. |
SOLUTION_STATUS_INFEASIBLE |
Solver twierdzi, że rozwiązanie jest niemożliwe. |
SolveParametersProto
Parametry do sterowania pojedynczym rozwiązaniem.
Zawiera oba parametry wspólne dla wszystkich rozwiązań, np. time_limit, i parametry konkretnego rozwiązania, np. gscip. Jeśli wartość jest ustawiona zarówno w polu wspólnym, jak i pola konkretnego rozwiązania, używane jest ustawienie właściwe dla rozwiązania.
Typowe parametry, które są opcjonalne i nieskonfigurowane, lub wyliczenie z nieokreśloną wartością wskazują, że używane jest domyślne rozwiązanie rozwiązania.
W przypadku rozwiązań innych niż używane są ignorowane ich parametry.
Parametry zależne od modelu (np. priorytet rozgałęziania jest ustawiany dla każdej zmiennej) są przekazywane w funkcji ModelSolveParametersProto.
Pola | |
---|---|
time_limit |
Maksymalny czas, jaki rozwiązanie powinno poświęcić na rozwiązanie problemu (lub nieskończony, jeśli nie jest ustawiony). To nie jest sztywny limit, więc czas rozwiązania może ją nieznacznie przekroczyć. Ten parametr jest zawsze przekazywany do rozwiązania bazowego. Rozwiązanie domyślne nie jest używane. |
enable_output |
Włącza drukowanie logów czasu implementacji rozwiązania. Lokalizacja tych logów czasu zależy od rozwiązania. W przypadku SCIP i Gurobi będą to standardowe strumienie danych wyjściowych. W przypadku Glop i CP-SAT spowoduje to LOG(INFO). Pamiętaj, że jeśli rozwiązanie obsługuje wywołanie zwrotne wiadomości, a użytkownik zarejestruje wywołanie zwrotne, ta wartość parametru jest ignorowana i żadne ślady nie są drukowane. |
lp_algorithm |
Algorytm do rozwiązania programu liniowego. Jeśli ma wartość LP_ALGORITHM_UNSPECIFIED, użyj domyślnego algorytmu rozwiązania. W przypadku zadań, które nie są programami liniowymi, ale są programami liniowymi, rozwiązania mogą używać tej wartości. Na przykład rozwiązania MIP będą zwykle używać tej funkcji tylko do rozwiązania głównego strony głównej (i w przeciwnym razie do korzystania z funkcji podwójnych jednorazowych). |
presolve |
Staraj się uprościć zadanie przed uruchomieniem głównego algorytmu lub domyślnego poziomu nakładu pracy rozwiązania, jeśli EMPHASIS_UNSPECIFIED. |
cuts |
Staraj się uzyskać silniejszą zrelaksowanie strony docelowej (tylko MIP) lub domyślny poziom nakładu pracy rozwiązania, jeśli EMPHASIS_UNSPECIFIED. UWAGA: wyłączenie cięć może uniemożliwić wywołanie cięć w MIP_NODE. To zachowanie jest związane z rozwiązaniem. |
heuristics |
Wysiłek w poszukiwaniu możliwych rozwiązań wykraczających poza te występujące w pełnej procedurze wyszukiwania (tylko MIP) lub domyślny poziom nakładu pracy rozwiązania, jeśli ma wartość SOURCE_UNSPECIFIED. |
scaling |
Spróbuj przeskalować problem, aby poprawić stabilność liczbową, lub domyślny poziom nakładu pracy rozwiązania, jeśli SOURCE_UNSPECIFIED. |
iteration_limit |
Ograniczenie liczby iteracji bazowego algorytmu (np. przestawienia w formacie jednokrotnym). Konkretne zachowanie zależy od użytego rozwiązania i algorytmu, ale często może mieć deterministyczny limit rozwiązania (może być wymagana dalsza konfiguracja, np. 1 wątek). Zwykle obsługiwane przez rozwiązania LP, QP i MIP, ale w przypadku MIP obowiązują też rozwiązania node_limit. |
node_limit |
Ogranicz liczbę podproblemów rozwiązanych w wyszukiwaniu wyliczeniowym (np. rozgałęzienie i granica). W przypadku wielu rozwiązań można to wykorzystać do deterministycznego ograniczenia obliczeń (może być potrzebna dalsza konfiguracja, np. 1 wątek). Zwykle w przypadku rozwiązań MIP sprawdź też limit iteration_limit. |
cutoff_limit |
Rozwiązanie zatrzymuje się wcześniej, jeśli okazuje się, że nie ma rozwiązań podstawowych, które są przynajmniej tak dobre jak wynik odcięcia. W przypadku wcześniejszego zatrzymania rozwiązanie zwraca powód zakończenia: NO_SOLUTION_FOUND z limitem CUTOFF. Nie musi podawać żadnych dodatkowych informacji. Nie ma wpływu na wartość zwracaną, jeśli nie ma wcześniejszego zatrzymania. Stosowanie tolerancji jest zalecane, jeśli chcesz zwracać rozwiązania, w przypadku których cel jest dokładnie taki sam jak wartość odcięcia. Więcej informacji i porównanie z atrybutem best_bound_limit znajdziesz w przewodniku użytkownika. |
objective_limit |
Rozwiązanie zatrzymuje się wcześniej, gdy znajduje rozwiązanie co najmniej tak dobre, z powodem zakończenia działania FEASIBLE i ograniczeniem OBJECTIVE. |
best_bound_limit |
Rozwiązanie zatrzymuje się wcześniej, gdy tylko okazuje się, że najlepsza granica jest przynajmniej taka dobra, z powodu zakończenia działania FEASIBLE lub NO_SOLUTION_FOUND i limitem OBJECTIVE. Więcej informacji i porównanie z atrybutem cutoff_limit znajdziesz w przewodniku użytkownika. |
solution_limit |
Rozwiązanie zatrzymuje się wcześniej po znalezieniu tylu możliwych rozwiązań, przy czym powód zamknięcia jest FEASIBLE i ogranicza ROZWIĄZANIE. Wartość musi być większa niż 0, jeśli jest ustawiona. Często używa się go, aby zatrzymywał rozwiązanie na pierwszym znalezionym możliwym rozwiązaniu. Pamiętaj, że nie ma gwarancji co do wartości docelowej żadnego ze zwróconych rozwiązań. Rozwiązania te zwykle nie zwracają więcej rozwiązań niż wynosi limit, ale nie jest to wymuszane przez MathOpt (patrz również b/214041169). Obecnie obsługiwany w przypadku Gurobi i SCIP oraz tylko CP-SAT z wartością 1. |
threads |
Jeśli jest ustawiony, musi być >= 1. |
random_seed |
Pole wyjściowe generatora liczb pseudolosowych w bazowym rozwiązaniu. Pamiętaj, że wszystkie rozwiązania korzystają z liczb pseudolosowych, aby wybierać takie rzeczy jak perturbacja w algorytmie LP, reguły rozłączania i korekty heurystyczne. Ich zmiana może mieć zauważalny wpływ na zachowanie rozwiązania. Chociaż wszystkie rozwiązania mają pojęcie ziarna, pamiętaj, że prawidłowe wartości zależą od rzeczywistego rozwiązania. - Gurobi: [0:GRB_MAXINT] (na dzień Gurobi 9.0 to 2x10^9). – GSCIP: [0:2147483647] (czyli MAX_INT, kint32max albo 2^31-1). - GLOP: [0:2147483647] (tak samo jak wyżej) We wszystkich przypadkach funkcja solowa otrzyma wartość równą: MAX(0; MIN(MAX_VALID_VALUE_FOR_SOLVER; random_seed)). |
absolute_gap_tolerance |
Bezwzględna tolerancja optymalizacji (głównie) w przypadku rozwiązań MIP. Bezwzględna wartość GAP to wartość bezwzględna różnicy między: * wartością obiektywną najlepszego znalezionego rozwiązania, * podwójną granicą wypracowaną przez wyszukiwanie. Rozwiązanie może się zatrzymać, gdy bezwzględny GAP osiągnie maksimum absolute_gap_tolerance (po ustawieniu) i zwrócić TERMINATION_REASON_OPTIMAL. Jeśli jest ustawione, musi mieć wartość >= 0. Zobacz też względne_gap_tolerance. |
relative_gap_tolerance |
Względna tolerancja optymalizacji (głównie) rozwiązań MIP. Względny GAP to znormalizowana wersja bezwzględnego GAP (zdefiniowana za pomocą argumentu absolute_gap_tolerance), gdzie normalizacja zależy od rozwiązania, np. bezwzględny GAP podzielony przez docelową wartość najlepszego możliwego rozwiązania. Rozwiązanie może się zatrzymać, gdy względny GAP osiągnie najwyższy poziom wartości względem odstępu (w przypadku ustawienia tolerancji) i zwróci wartość TERMINATION_REASON_OPTIMAL. Jeśli jest ustawione, musi mieć wartość >= 0. Zobacz też atrybut absolute_gap_tolerance. |
solution_pool_size |
Podczas wyszukiwania możesz przechowywać do |
SolveResultProto
Umowa dotycząca roztworów podstawowych/podwójnych/promieni jest złożona: Pełny opis znajdziesz na stronie prompt_reasons.md.
Do czasu zawarcia dokładnej umowy najbezpieczniej jest po prostu sprawdzić, czy jest dostępne rozwiązanie lub promień, zamiast polegać na przyczynie rozwiązania umowy.
Pola | |
---|---|
termination |
Przyczyna zatrzymania rozwiązania. |
solutions[] |
Ogólna umowa dotycząca kolejności rozwiązań, które powinny być wdrożone w przyszłości, to: 1. Rozwiązania z podstawowym rozwiązaniem wykonalnym, uporządkowane w kolejności od najlepszego pierwotnego celu. 2. Rozwiązania z podwójnym wykonalnym rozwiązaniem uporządkowane według najlepszego podwójnego celu (nieznany podwójny cel jest najgorszy) 3. Pozostałe rozwiązania można zwrócić w dowolnej kolejności. |
primal_rays[] |
Kierunki niepowiązanej pierwotnej poprawy lub równoważnie certyfikaty podwójnej niewykonalności. Zwykle podawane w polach FinishReasonProtos UNBOUNDED i DUAL_INFEASIBLE |
dual_rays[] |
Kierunki nieograniczonego podwójnej poprawy lub równoważne certyfikaty niewykonalności. Zwykle jest podawany w polu FinishReasonProto INFEASIBLE. |
solve_stats |
Statystyki procesu rozwiązywania, np. czas trwania, iteracje. |
SolveStatsProto
Pola | |
---|---|
solve_time |
Upływ czasu zegara mierzonego za pomocą parametru math_opt, czyli przybliżonego czasu działania funkcji Solver::Solve(). Uwaga: nie obejmuje to pracy związanej z zbudowaniem modelu. |
problem_status |
Stany wykonalności w przypadku problemów podstawowych i podwójnych. |
simplex_iterations |
|
barrier_iterations |
|
first_order_iterations |
|
node_count |
|
SolverTypeProto
Rozwiązania obsługiwane przez MathOpt.
Wartości w polu enum | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
Solving Constraint Integer Programs (SCIP) – rozwiązanie innej firmy. Obsługuje zadania kwadratowe z wykorzystaniem LP, MIP i niewypukłych liczb całkowitych. W przypadku stron docelowych nie są jednak zwracane podwójne dane. Preferuj GLOP dla stron docelowych. |
SOLVER_TYPE_GUROBI |
Rozwiązanie Gurobi (inna firma). Obsługuje zadania kwadratowe z wykorzystaniem LP, MIP i niewypukłych liczb całkowitych. Jest to zwykle najszybsza opcja, ale wymaga specjalnych licencji. |
SOLVER_TYPE_GLOP |
Rozwiązanie Google Glop. Obsługuje LP z użyciem metod podstawowych i podwójnych jednorazowych. |
SOLVER_TYPE_CP_SAT |
Rozwiązanie Google do obsługi CP-SAT. Obsługuje problemy, w których wszystkie zmienne są liczbami całkowitymi i ograniczeniami (lub są domniemane po rozwiązaniu). Eksperymentalne wsparcie mające na celu przeskalowanie i dyskretowanie problemów z wykorzystaniem zmiennych ciągłych. |
SOLVER_TYPE_PDLP |
Rozwiązanie Google PDLP. Obsługuje cele kwadratowe w przypadku LP i wypukłych po przekątnych. Używa metod pierwszej kolejności, a nie jednostajnych. Rozwiązuje bardzo duże problemy. |
SOLVER_TYPE_GLPK |
Pakiet GNU Linear Programming Kit (GLPK) (firmy zewnętrznej). Obsługuje MIP i LP. Bezpieczeństwo wątków: GLPK używa lokalnej pamięci wątków do przydzielania pamięci. W efekcie instancje rozwiązania do rozwiązywania problemów muszą zostać zniszczone w tym samym wątku, w którym są tworzone. W przeciwnym razie GLPK ulegnie awarii. Można użyć wywołania funkcji Solver::Solve() w innym wątku niż ten użyty do jego utworzenia, ale nie jest on dokumentowany w GLPK i nie należy tego robić. W przypadku rozwiązania LPG za pomocą presolveratora rozwiązanie (i niepowiązane promienie) jest zwracane tylko wtedy, gdy zostanie znalezione rozwiązanie optymalne. W przeciwnym razie nic nie zostanie zwrócone. Szczegółowe informacje można znaleźć na stronie glpk-5.0/doc/glpk.pdf nr 40 dostępnej w katalogu glpk-5.0.tar.gz. |
SOLVER_TYPE_OSQP |
Rozwiązanie, które należy do firmy zewnętrznej w ramach rozwiązania Operator Splitting Quadratic Program (OSQP). Obsługuje ciągłe problemy z ograniczeniami liniowymi i liniowymi lub wypukłymi celami kwadratowymi. Używa metody pierwszego rzędu. |
SOLVER_TYPE_ECOS |
The Embedded Conic Solver (ECOS) (inna firma). Obsługuje problemy LP i SOCP. Używa metod punktów wewnętrznych (bariery). |
SOLVER_TYPE_SCS |
The Splitting Conic Solver (SCS) (firma zewnętrzna). Obsługuje problemy LP i SOCP. Używa metody pierwszego rzędu. |
SOLVER_TYPE_HIGHS |
HiGHS Solver (zewnętrzna). Obsługuje problemy z LP i MIP (wypukłe QP nie są zaimplementowane). |
SOLVER_TYPE_SANTORINI |
Referencyjna implementacja rozwiązania MIP przez MathOpt. Wolne/niezalecane do produkcji. To nie jest Rozwiązanie LP (brak podwójnych informacji). |
SosConstraintProto
Dane do reprezentowania jednego ograniczenia SOS1 lub SOS2.
Jeśli zmienna powiązana z tym ograniczeniem zostanie usunięta, jest traktowana tak, jakby była ustawiona na wartość 0.
Pola | |
---|---|
expressions[] |
Wyrażenia, do których należy zastosować ograniczenie SOS: * SOS1: maksymalnie 1 element ma wartość inną niż zero. * SOS2: maksymalnie 2 elementy przyjmują wartości różne od zera i muszą przylegać do siebie w powtarzającej się kolejności. |
weights[] |
Pole może być puste lub mieć taką samą długość jak wyrażenia. Jeśli wartość jest pusta, domyślne wagi to 1, 2, ... jeśli występują, wpisy muszą być unikalne. |
name |
Wiadomości nadrzędne mogą mieć w tym polu wymagania dotyczące unikatowości, np. zobacz ModelProto.sos1_constraints i SosConstraintUpdatesProto.new_constraints. |
SparseBasisStatusVector
Rzadka reprezentacja wektorów stanów podstaw.
Pola | |
---|---|
ids[] |
Musi być sortowana (w kolejności rosnącej), w której wszystkie elementy są różne. |
values[] |
Musi mieć taką samą długość jak identyfikatory. |
SparseDoubleMatrixProto
Rzadka reprezentacja macierzy podwójnych.
Macierz jest przechowywana jako potrójna wartość identyfikatora wiersza, identyfikatora kolumny i współczynnika. Te 3 wektory muszą mieć taką samą długość. We wszystkich elementach i, krotka (wiersze_identyfikatory[i] oraz identyfikatory_kolumn[i]) powinny być różne. Wpisy muszą być ułożone w kolejności głównej.
Pola | |
---|---|
row_ids[] |
|
column_ids[] |
|
coefficients[] |
Może nie zawierać NaN. |
SparseDoubleVectorProto
Rzadka reprezentacja wektora podwójnej precyzji.
Pola | |
---|---|
ids[] |
Musi być sortowana (w kolejności rosnącej), w której wszystkie elementy są różne. |
values[] |
Musi mieć taką samą długość jak identyfikatory. Może nie zawierać NaN. |
SparseInt32VectorProto
Rzadka reprezentacja wektora liczby całkowitej.
Pola | |
---|---|
ids[] |
Powinno być sortowane (w kolejności rosnącej), by wszystkie elementy były różne. |
values[] |
Musi mieć taką samą długość jak identyfikatory. |
SparseVectorFilterProto
Ten komunikat umożliwia wysyłanie zapytań o określone części SparseXxxxVector lub ich ustawianie. Domyślne działanie to niczego nie odfiltrowywać. Typowym zastosowaniem jest tworzenie zapytań dotyczących tylko części rozwiązań (tylko wartości niezerowe lub wybranych ręcznie zbiorów wartości zmiennych).
Pola | |
---|---|
skip_zero_values |
W przypadku SparseBoolVectorProto wartość „zero” wynosi |
filter_by_ids |
Jeśli ma wartość true (prawda), zwracane są tylko wartości odpowiadające identyfikatorom podanym w atrybucie filtrowane_identyfikatory. |
filtered_ids[] |
Lista identyfikatorów do użycia, gdy filtr filter_by_ids ma wartość prawda. To pole musi być puste, jeśli filtr filter_by_ids ma wartość false (fałsz). UWAGA: jeśli to pole jest puste, a wartość filtra filter_by_ids ma wartość prawda, twierdzisz, że wynik nie powinien zawierać żadnych informacji. |
TerminationProto
Wszystkie informacje o tym, dlaczego wywołanie funkcji Solve() zostało zakończone.
Pola | |
---|---|
reason |
Dodatkowe informacje w polu |
limit |
Ma wartość LIMIT_UNSPECIFIED, chyba że przyczyna to TERMINATION_REASON_FEASIBLE lub TERMINATION_REASON_NO_SOLUTION_FOUND. Nie wszystkie rozwiązania są w stanie określić limit, który spowodował zakończenie działania. Gdy nie można ustalić przyczyny, używana jest wartość LIMIT_UNDETERMINED. |
detail |
Dodatkowe informacje dotyczące zwykle rozwiązania problemu. |
problem_status |
Stany wykonalności w przypadku problemów podstawowych i podwójnych. Od 18 lipca 2023 r. ta wiadomość może być niedostępna. Jeśli nie można go znaleźć, argument problem_status można znaleźć w pliku SolveResultProto.solve_stats. |
objective_bounds |
Ogranicza się do optymalnej wartości celu. Od 18 lipca 2023 r. ta wiadomość może być niedostępna. Jeśli go nie ma, można go znaleźć w SolveResultProto.solve.stats.best_primal_bound i Goal_bounds.dual_bound, które można znaleźć w SolveResultProto.solve.stats.best_dual_bound. |
TerminationReasonProto
Przyczyna zakończenia wywołania funkcji Solve().
Wartości w polu enum | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
Znaleziono prawdopodobnie optymalne rozwiązanie (do tolerancji liczbowych). |
TERMINATION_REASON_INFEASIBLE |
Problem początkowy nie ma możliwych rozwiązań. |
TERMINATION_REASON_UNBOUNDED |
Problem początkowy jest możliwy i arbitrowo dobre rozwiązania można znaleźć wzdłuż promienia początkowego. |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
Problem podstawowy jest niemożliwy do wykonania lub niepowiązany. Więcej informacji o stanie problemu znajdziesz w rozwiązaniu problemu_stats.problem_status. Zwróć uwagę, że w tym miejscu można zmapować stan Gurobi bez ograniczeń. |
TERMINATION_REASON_IMPRECISE |
Problem został rozwiązany zgodnie z jednym z powyższych kryteriów (Optymalny, Niemożliwy, Bez ograniczeń, Nieograniczony lub Nieograniczony), ale nie spełniono co najmniej 1 tolerancji. Niektóre roztwory lub promienie pierwsze/podwójne są obecne, ale będą one raczej niewykonalne lub (jeśli problem był niemal optymalny) może to być luka między najlepszym celem rozwiązania a najlepszą granicą celu. Użytkownicy nadal mogą wyszukiwać informacje o rozwiązaniach podstawowych/podwójnych i statystykach roztworów, ale odpowiadają za radzenie sobie z niedokładnością liczbową. |
TERMINATION_REASON_FEASIBLE |
Optymalizator osiągnął jakiś limit i zwracane jest pierwsze wykonalne rozwiązanie. Szczegółowy opis rodzaju limitu, który został osiągnięty, znajdziesz w sekcji SolveResultProto.limit_detail. |
TERMINATION_REASON_NO_SOLUTION_FOUND |
Optymalizator osiągnął jakiś limit i nie znalazł żadnego wykonalnego rozwiązania. Szczegółowy opis rodzaju limitu, który został osiągnięty, znajdziesz w sekcji SolveResultProto.limit_detail. |
TERMINATION_REASON_NUMERICAL_ERROR |
Algorytm został zatrzymany, ponieważ wystąpił nieodwracalny błąd numeryczny. Brak dostępnych informacji o rozwiązaniu. |
TERMINATION_REASON_OTHER_ERROR |
Algorytm został zatrzymany z powodu błędu, który nie jest uwzględniony w jednym ze stanów zdefiniowanych powyżej. Brak dostępnych informacji o rozwiązaniu. |
VariablesProto
W przykładzie poniżej definicja „#variables” = size(zmiennasProto.ids).
Pola | |
---|---|
ids[] |
Musi być nieujemna i ściśle rosnąca. Nie można użyć wartości max(int64). |
lower_bounds[] |
Długość musi być równa #zmienne, wartości w [-inf, inf). |
upper_bounds[] |
Długość musi być równa #zmienne, wartości w (-inf, inf]. |
integers[] |
Długość musi być równa #zmienna. W przypadku zmiennych ciągłych wartość to false, a w przypadku zmiennych całkowitych to prawda. |
names[] |
Jeśli nie jest skonfigurowana, przyjmuje się, że są to wszystkie puste ciągi. W przeciwnym razie długość powinna być równa #variables. Wszystkie nazwy niepuste muszą być różne. |